@@ -212,18 +212,19 @@ def _populate_obj_by_data(self):
212212 """
213213 def populate (key ):
214214 return {
215- 'project' : lambda : Project .objects .get_or_create (
216- name = self .data ['project' ]),
217- 'executable' : lambda : Executable .objects .get_or_create (
218- name = self .data ['executable' ], project = self .obj .project
219- ),
220- 'benchmark' : lambda : Benchmark .objects .get_or_create (
221- name = self .data ['benchmark' ]),
222- 'environment' : lambda : (Environment .objects .get (
223- name = self .data ['environment' ]), False ),
224- 'branch' : lambda : Branch .objects .get_or_create (
225- name = self .data ['branch' ], project = self .obj .project ),
226- }.get (key , (None , None ))()
215+ 'project' : lambda : ProjectResource ().get_via_uri (
216+ self .data ['project' ]),
217+ 'executable' : lambda : ExecutableResource ().get_via_uri (
218+ self .data ['executable' ]),
219+ 'benchmark' : lambda : BenchmarkResource ().get_via_uri (
220+ self .data ['benchmark' ]),
221+ 'environment' : lambda : EnvironmentResource ().get_via_uri (
222+ self .data ['environment' ]),
223+ 'branch' : lambda : BranchResource ().get_via_uri (
224+ self .data ['branch' ]),
225+ 'revision' : lambda : RevisionResource ().get_via_uri (
226+ self .data ['commitid' ]),
227+ }.get (key , None )()
227228
228229 try :
229230 self .obj .value = float (self .data ['result_value' ])
@@ -235,10 +236,10 @@ def populate(key):
235236 raise ImmediateHttpResponse (
236237 response = HttpBadRequest (u"Value needs to be a number" ))
237238 for key in [k for k in self .mandatory_keys \
238- if k not in ('result_value' , 'revision' )]:
239+ if k not in ('result_value' ,)]:
239240 try :
240241 #populate
241- ( item , created ) = populate (key )
242+ item = populate (key )
242243 setattr (self .obj , key , item )
243244 except Exception , error :
244245 logging .error ("Data for field %s: %s not found. %s" % (
@@ -247,13 +248,6 @@ def populate(key):
247248 response = HttpBadRequest (u"Error finding: {0}={1}" .format (
248249 key , self .data [key ]
249250 )))
250-
251- # find the revision
252- self .obj .revision , created = Revision .objects .get_or_create (
253- commitid = self .data ['commitid' ],
254- project = self .obj .project ,
255- branch = self .obj .branch ,
256- )
257251 # populate optional data
258252 for key in [k for k in self .optional_keys \
259253 if k not in ('date' )]:
@@ -293,8 +287,8 @@ def _check_data(self):
293287
294288 # Check that the Environment exists
295289 try :
296- self .obj .environment = Environment . objects . get (
297- name = self .data ['environment' ])
290+ self .obj .environment = EnvironmentResource (). get_via_uri (
291+ self .data ['environment' ])
298292 except Environment .DoesNotExist :
299293 error_text = 'Environment: {0} not found in database.' .format (
300294 self .data ['environment' ])
@@ -336,7 +330,7 @@ def _check_data(self):
336330 raise ImmediateHttpResponse (
337331 response = HttpBadRequest (error_text ))
338332
339- def save (self ):
333+ def hydrate_and_save (self ):
340334 """Save self.obj which is an instance of Result()
341335
342336 First populate the Result() instance with self.data
@@ -393,7 +387,6 @@ def get_resource_uri(self, bundle_or_obj):
393387 if self ._meta .api_name is not None :
394388 kwargs ['api_name' ] = self ._meta .api_name
395389
396- #FIXME (a8): reverse url should point to ResultResource()
397390 return self ._build_reverse_url ("api_dispatch_detail" , kwargs = kwargs )
398391
399392 def get_object_list (self , request ):
@@ -416,8 +409,10 @@ def obj_get(self, request=None, **kwargs):
416409
417410 def obj_create (self , bundle , request = None , ** kwargs ):
418411 # not calling hydrate here since bundle.save() has that functionality
412+ # self.full_hydrate(bundle) will try to hydrate result which is not
413+ # there yet
419414 #bundle = self.full_hydrate(bundle)
420- bundle .save ()
415+ bundle .hydrate_and_save ()
421416 return bundle
422417
423418 def obj_update (self , bundle , request = None , ** kwargs ):
0 commit comments