16
16
from django .utils .functional import lazy
17
17
18
18
from tag .models import Tag
19
- from bbx .settings import REPOSITORY_DIR
19
+ from bbx .settings import REPOSITORY_DIR , DEFAULT_MUCUA
20
20
from bbx .utils import logger
21
+ from repository .tasks import git_annex_get
21
22
22
23
try :
23
24
from django .utils .encoding import force_unicode # NOQA
@@ -51,6 +52,7 @@ def get_file_path(instance):
51
52
return os .path .join (REPOSITORY_DIR , get_media_path (instance ))
52
53
53
54
def get_media_path (instance ):
55
+ # FIX: se mudar a data quebra o path
54
56
if instance .date == '' :
55
57
t = datetime .now
56
58
date = t .strftime ("%y/%m/%d/" )
@@ -142,6 +144,7 @@ class Media(models.Model):
142
144
_ ('is requested' ),
143
145
help_text = _ ('True if media content is awaiting a local copy' ),
144
146
default = False )
147
+ # FIX: request_code desnessesario.. usando o uuid mesmo
145
148
request_code = models .CharField (max_length = 100 , editable = False , blank = True )
146
149
num_copies = models .IntegerField (
147
150
_ ('number of copies' ), default = 1 , blank = True ,
@@ -180,7 +183,7 @@ def get_format(self):
180
183
return self .format
181
184
182
185
# FIX (Nao pega na primeira save)
183
- def _set_is_local (self ):
186
+ def set_is_local (self ):
184
187
self .is_local = os .path .isfile (os .path .join (get_file_path (self ),
185
188
self .get_file_name ()))
186
189
@@ -198,8 +201,53 @@ def where_is(self):
198
201
def get_tags (self ):
199
202
return self .tags
200
203
204
+ def request_copy (self ):
205
+ u"""
206
+ Gera um pedido de copia local do media
207
+
208
+ Os pedidos tem um codigo uuid e são gravados em
209
+ /repository/mucua/requests/uuid
210
+
211
+ O arquivo atualmente contem somente o caminho para o media no
212
+ repositorio.
213
+
214
+ """
215
+ self .set_is_local ()
216
+ if not self .is_local :
217
+ self .is_requested = True
218
+ self .save ()
219
+ try :
220
+ requests_path = os .path .join (REPOSITORY_DIR , self .get_repository (),
221
+ DEFAULT_MUCUA ,
222
+ 'requests' )
223
+ if not os .path .exists (requests_path ):
224
+ os .makedirs (requests_path )
225
+
226
+ request_filename = os .path .join (requests_path , self .uuid )
227
+ logger .info ("REQUESTING: " + request_filename )
228
+ request_file = open (request_filename , 'a' )
229
+ request_file .write (self .media_file .path )
230
+ request_file .close
231
+ # TODO: Need to git add
232
+ logger .debug ("ADDING REQUEST: " + os .path .basename (request_filename ))
233
+ logger .debug ("ADDED ON: " + os .path .dirname (request_filename ))
234
+ from repository .models import git_add
235
+ git_add (os .path .basename (request_filename ), os .path .dirname (request_filename ))
236
+
237
+ except IOError :
238
+ logger .info (u'Alo! I can\' t write request file!' )
239
+
240
+ logger .debug ("get_file_path: " + get_file_path (self ))
241
+ logger .debug ("media_file.name: " + os .path .basename (self .media_file .name ))
242
+
243
+ async_result = git_annex_get .delay (get_file_path (self ), os .path .basename (self .media_file .name ))
244
+ #logger.debug(async_result.get)
245
+ #logger.debug(async_result.info)
246
+
247
+
248
+
201
249
def save (self , * args , ** kwargs ):
202
- self ._set_is_local ()
250
+ self .set_is_local ()
203
251
if self .pk is not None :
204
252
self ._set_num_copies ()
205
253
self .url = self .get_url ()
@@ -213,6 +261,10 @@ class TagPolicyDoesNotExist(exceptions.Exception):
213
261
def __init__ (self , args = None ):
214
262
self .args = args
215
263
264
+ class MediaDoesNotExist (exceptions .Exception ):
265
+ def __init__ (self , args = None ):
266
+ self .args = args
267
+
216
268
217
269
@receiver (post_save , sender = Media )
218
270
def start_post_save_policies (instance , ** kwargs ):
0 commit comments