[Checkins] SVN: hurry.file/trunk/ Add a "size" attribute to hurry.file objects.

Martijn Faassen faassen at infrae.com
Wed Mar 11 18:31:30 EDT 2009


Log message for revision 97930:
  Add a "size" attribute to hurry.file objects.
  

Changed:
  U   hurry.file/trunk/CHANGES.txt
  U   hurry.file/trunk/src/hurry/file/README.txt
  U   hurry.file/trunk/src/hurry/file/file.py
  U   hurry.file/trunk/src/hurry/file/interfaces.py

-=-
Modified: hurry.file/trunk/CHANGES.txt
===================================================================
--- hurry.file/trunk/CHANGES.txt	2009-03-11 22:16:35 UTC (rev 97929)
+++ hurry.file/trunk/CHANGES.txt	2009-03-11 22:31:29 UTC (rev 97930)
@@ -4,7 +4,8 @@
 1.2 (unreleased)
 ----------------
 
-* ...
+* Add a 'size' attribute that knows the size of the file in bytes (no
+  matter whether it's stored using tramline or in the ZODB).
 
 1.1 (2008-08-07)
 ----------------

Modified: hurry.file/trunk/src/hurry/file/README.txt
===================================================================
--- hurry.file/trunk/src/hurry/file/README.txt	2009-03-11 22:16:35 UTC (rev 97929)
+++ hurry.file/trunk/src/hurry/file/README.txt	2009-03-11 22:31:29 UTC (rev 97930)
@@ -9,6 +9,8 @@
   'foo.txt'
   >>> file.data
   'mydata'
+  >>> file.size
+  6
   >>> f = file.file
   >>> f.read()
   'mydata'
@@ -22,6 +24,8 @@
   >>> file = fileretrieval.createFile('bar.txt', StringIO('test data'))
   >>> file.filename
   'bar.txt'
+  >>> file.size
+  9
   >>> file.data
   'test data'
   >>> f = file.file
@@ -34,7 +38,9 @@
   >>> file = createHurryFile('test2.txt', StringIO('another test file'))
   >>> file.filename
   'test2.txt'
- 
+  >>> file.size
+  17
+
 The HurryFile object normally stores the file data using ZODB
 persistence. Files can however also be stored by tramline.  If
 tramline is installed in Apache, the Tramline takes care of generating
@@ -69,11 +75,12 @@
   >>> f.write('test data')
   >>> f.close()
 
-The file with the data '1' will now be created::
+The file with underlying name '1' (the data stored in the ZODB will be
+just '1') will now be created::
 
   >>> file = HurryFile('foo.txt', '1')
 
-The data is now '1'::
+The data is now '1', referring to the real file::
 
   >>> file.data
   '1'
@@ -84,6 +91,11 @@
   >>> f.read()
   'test data'
 
+We can also retrieve its size::
+
+  >>> file.size
+  9L
+
 It should be possible to create Hurry File objects that are stored in
 the directory structure directly::
 
@@ -101,6 +113,8 @@
   >>> f = file.file
   >>> f.read()
   'my test data'
+  >>> file.size
+  12L
 
 Now let's disable tramline in our utility::
 
@@ -117,6 +131,8 @@
   >>> f = file.file
   >>> f.read()
   'data'
+  >>> file.size
+  4
 
 Clean up::
 

Modified: hurry.file/trunk/src/hurry/file/file.py
===================================================================
--- hurry.file/trunk/src/hurry/file/file.py	2009-03-11 22:16:35 UTC (rev 97929)
+++ hurry.file/trunk/src/hurry/file/file.py	2009-03-11 22:31:29 UTC (rev 97930)
@@ -33,7 +33,16 @@
         return storage.getFile(self.data)
 
     file = property(_get_file)
-    
+
+    @property
+    def size(self):
+        file = self.file
+        if isinstance(file, StringIO):
+            return len(file.getvalue())
+        else:
+            info = os.fstat(file.fileno())
+            return info.st_size
+
     def __eq__(self, other):
         try:
             return (self.filename == other.filename and

Modified: hurry.file/trunk/src/hurry/file/interfaces.py
===================================================================
--- hurry.file/trunk/src/hurry/file/interfaces.py	2009-03-11 22:16:35 UTC (rev 97929)
+++ hurry.file/trunk/src/hurry/file/interfaces.py	2009-03-11 22:31:29 UTC (rev 97930)
@@ -24,6 +24,7 @@
     data = Bytes(title=u'Data in file')
     file = Attribute('File-like object with data')
     headers = Attribute('Headers associated with file')
+    size = Attribute('The size of the file in bytes.')
 
 class IFileRetrieval(Interface):
     def getFile(data):



More information about the Checkins mailing list