11import sys
2+ from StringIO import StringIO
23
34from django .conf import settings
45from django .core .files .base import File
1516STORAGE_SECRETKEY = getattr (settings , 'STORAGE_SECRETKEY' , SECRET_KEY )
1617STORAGE_GZIP = getattr (settings , 'STORAGE_GZIP' , False )
1718
18- class SaeStorage (Storage ):
19+ class Storage (Storage ):
1920 def __init__ (self , bucket_name = STORAGE_BUCKET_NAME ,
2021 accesskey = STORAGE_ACCESSKEY , secretkey = STORAGE_SECRETKEY ,
2122 account = STORAGE_ACCOUNT ):
2223 conn = Connection (accesskey , secretkey , account )
2324 self .bucket = conn .get_bucket (bucket_name )
2425
2526 def _open (self , name , mode = 'rb' ):
26- return SaeStorageFile (name , mode , self )
27+ name = self ._normalize_name (name )
28+ return StorageFile (name , mode , self )
2729
2830 def _save (self , name , content ):
31+ name = self ._normalize_name (name )
2932 try :
3033 self .bucket .put_object (name , content )
3134 except Error , e :
3235 raise IOError ('Storage Error: %s' % e .args )
3336 return name
3437
3538 def delete (self , name ):
39+ name = self ._normalize_name (name )
3640 try :
37- self .delete_object (name )
41+ self .bucket . delete_object (name )
3842 except Error , e :
3943 raise IOError ('Storage Error: %s' % e .args )
4044
4145 def exists (self , name ):
46+ name = self ._normalize_name (name )
4247 try :
4348 self .bucket .stat_object (name )
4449 except Error , e :
@@ -47,28 +52,32 @@ def exists(self, name):
4752 raise
4853 return True
4954
50- def listdir (self , path ):
51- try :
52- result = self .bucket .list (path = path )
53- return [i .name for i in result ]
54- except Error , e :
55- raise IOError ('Storage Error: %s' % e .args )
55+ #def listdir(self, path):
56+ # path = self._normalize_name(path)
57+ # try:
58+ # result = self.bucket.list(path=path)
59+ # return [i.name for i in result]
60+ # except Error, e:
61+ # raise IOError('Storage Error: %s' % e.args)
5662
5763 def size (self , name ):
64+ name = self ._normalize_name (name )
5865 try :
5966 attrs = self .bucket .stat_object (name )
6067 return attrs .bytes
6168 except Error , e :
6269 raise IOError ('Storage Error: %s' % e .args )
6370
6471 def url (self , name ):
65- self .bucket .generate_url (name )
72+ name = self ._normalize_name (name )
73+ return self .bucket .generate_url (name )
6674
6775 def _open_read (self , name ):
76+ name = self ._normalize_name (name )
6877 class _ :
6978 def __init__ (self , chunks ):
7079 self .buf = ''
71- def read (num_bytes = None ):
80+ def read (self , num_bytes = None ):
7281 if num_bytes is None :
7382 num_bytes = sys .maxint
7483 try :
@@ -81,10 +90,13 @@ def read(num_bytes=None):
8190 retval = self .buf [:num_bytes ]
8291 self .buf = self .buf [num_bytes :]
8392 return retval
84- chunks = self .bucket .get_object_contents (self . name , chunk_size = 8192 )
93+ chunks = self .bucket .get_object_contents (name , chunk_size = 8192 )
8594 return _ (chunks )
8695
87- class SaeStorageFile (File ):
96+ def _normalize_name (self , name ):
97+ return name .lstrip ('/' )
98+
99+ class StorageFile (File ):
88100 def __init__ (self , name , mode , storage ):
89101 self .name = name
90102 self .mode = mode
@@ -99,8 +111,8 @@ def size(self):
99111 return self ._size
100112
101113 def read (self , num_bytes = None ):
102- if not hasattr (self , _obj ):
103- self ._obj = self ._storage ._open_read (self , self .name )
114+ if not hasattr (self , ' _obj' ):
115+ self ._obj = self ._storage ._open_read (self .name )
104116 return self ._obj .read (num_bytes )
105117
106118 def write (self , content ):
0 commit comments