X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Fregistry_manager.py;h=dfc5a745c701d9089c72a85801dcbc4ed8924f06;hb=23666284b256845f8c04b287b9560f87f8629bc9;hp=e921d6ef55bfa8e9302bfdc0fbc8fc40e766d806;hpb=6b2452ee7afc1b8b5723497aa04d3b985cbb726f;p=sfa.git diff --git a/sfa/managers/registry_manager.py b/sfa/managers/registry_manager.py index e921d6ef..dfc5a745 100644 --- a/sfa/managers/registry_manager.py +++ b/sfa/managers/registry_manager.py @@ -155,7 +155,7 @@ class RegistryManager: local_records = dbsession.query(RegRecord).filter(RegRecord.hrn.in_(local_hrns)) if type: local_records = local_records.filter_by(type=type) - local_records=local_records.all() + local_records=local_records.all() for local_record in local_records: augment_with_sfa_builtins (local_record) @@ -177,7 +177,6 @@ class RegistryManager: record.url=neighbour_dict[hrn].get_url() return for record in local_records: solve_neighbour_url (record) - # convert local record objects to dicts for xmlrpc # xxx somehow here calling dict(record) issues a weird error # however record.todict() seems to work fine @@ -215,6 +214,7 @@ class RegistryManager: record_dicts = record_list # if we still have not found the record yet, try the local registry +# logger.debug("before trying local records, %d foreign records"% len(record_dicts)) if not record_dicts: recursive = False if ('recursive' in options and options['recursive']): @@ -226,9 +226,11 @@ class RegistryManager: if not api.auth.hierarchy.auth_exists(hrn): raise MissingAuthority(hrn) if recursive: - records = dbsession.query(RegRecord).filter(RegRecord.hrn.startswith(hrn)) + records = dbsession.query(RegRecord).filter(RegRecord.hrn.startswith(hrn)).all() +# logger.debug("recursive mode, found %d local records"%(len(records))) else: - records = dbsession.query(RegRecord).filter_by(authority=hrn) + records = dbsession.query(RegRecord).filter_by(authority=hrn).all() +# logger.debug("non recursive mode, found %d local records"%(len(records))) # so that sfi list can show more than plain names... for record in records: augment_with_sfa_builtins (record) record_dicts=[ record.todict(exclude_types=[InstrumentedList]) for record in records ] @@ -364,7 +366,7 @@ class RegistryManager: # is there a change in keys ? new_key=None if type=='user': - if getattr(new_key,'keys',None): + if getattr(new_record,'keys',None): new_key=new_record.keys if isinstance (new_key,types.ListType): new_key=new_key[0] @@ -377,8 +379,6 @@ class RegistryManager: urn = hrn_to_urn(hrn,type) gid_object = api.auth.hierarchy.create_gid(urn, uuid, pkey) gid = gid_object.save_to_string(save_parents=True) - record.gid = gid - dsession.commit() # xxx should do side effects from new_record to record # not too sure how to do that @@ -388,12 +388,10 @@ class RegistryManager: if isinstance (record, RegSlice): researcher_hrns = getattr(new_record,'researcher',None) if researcher_hrns is not None: record.update_researchers (researcher_hrns) - dbsession.commit() elif isinstance (record, RegAuthority): pi_hrns = getattr(new_record,'pi',None) if pi_hrns is not None: record.update_pis (pi_hrns) - dbsession.commit() # update the PLC information that was specified with the record # xxx oddly enough, without this useless statement, @@ -401,9 +399,12 @@ class RegistryManager: # anyway the driver should receive an object # (and then extract __dict__ itself if needed) print "DO NOT REMOVE ME before driver.update, record=%s"%record - if not self.driver.update (record.__dict__, new_record.__dict__, hrn, new_key): - logger.warning("driver.update failed") - + (pointer, new_key_pointer) = self.driver.update (record.__dict__, new_record.__dict__, hrn, new_key) + if new_key and new_key_pointer: + record.reg_keys=[ RegKey (new_key, new_key_pointer)] + record.gid = gid + + dbsession.commit(); # update membership for researchers, pis, owners, operators self.update_driver_relations (record, new_record)