[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