deal with 'pi' vs 'reg-pis'
[sfa.git] / sfa / managers / registry_manager.py
index b90bdd9..7306380 100644 (file)
@@ -38,23 +38,26 @@ from sqlalchemy.orm.collections import InstrumentedList
 # upon entering the write methods (so again register and update) for legacy, as some driver code
 # might depend on the presence of, say, 'researcher'
 
-# registry calls this 'reg-researchers'
-# some drivers call this 'researcher'
-def normalize_input_researcher (record):
+# normalize an input record to a write method - register or update
+# e.g. registry calls this 'reg-researchers'
+# while some drivers call this 'researcher'
+# we need to make sure that both keys appear and are the same
+def _normalize_input (record, reg_key, driver_key):
     # this looks right, use this for both keys
-    if 'reg-researchers' in record:
+    if reg_key in record:
         # and issue a warning if they were both set and different
         # as we're overwriting some user data here
-        if 'researcher' in record:
+        if driver_key in record:
             logger.warning ("normalize_input_researcher: incoming record has both values, using reg-researchers")
-        record['researcher']=record['reg-researchers']
+        record[driver_key]=record[reg_key]
     # we only have one key set, duplicate for the other one
-    elif 'researcher' in record:
-        logger.warning ("normalize_input_researcher: you should use 'reg-researchers' instead ot 'researcher'")
-        record['reg-researchers']=record['researcher']
+    elif driver_key in record:
+        logger.warning ("normalize_input_researcher: you should use '%s' instead ot '%s'"%(reg_key,driver_key))
+        record[reg_key]=record[driver_key]
 
 def normalize_input_record (record):
-    normalize_input_researcher (record)
+    _normalize_input (record, 'reg-researchers','researcher')
+    _normalize_input (record, 'reg-pis','pi')
     return record
 
 class RegistryManager:
@@ -376,7 +379,7 @@ class RegistryManager:
             record.gid=gid.save_to_string(save_parents=True)
 
             # locate objects for relationships
-            pi_hrns = getattr(record,'pi',None)
+            pi_hrns = getattr(record,'reg-pis',None)
             if pi_hrns is not None: record.update_pis (pi_hrns, dbsession)
 
         elif isinstance (record, RegSlice):
@@ -449,7 +452,7 @@ class RegistryManager:
             if researcher_hrns is not None: record.update_researchers (researcher_hrns, dbsession)
 
         elif isinstance (record, RegAuthority):
-            pi_hrns = getattr(new_record,'pi',None)
+            pi_hrns = getattr(new_record,'reg-pis',None)
             if pi_hrns is not None: record.update_pis (pi_hrns, dbsession)
         
         # update the PLC information that was specified with the record