From 05cfbdb47a70dd0d322122ef4303218fc98dc8fd Mon Sep 17 00:00:00 2001
From: fandrem <none@none>
Date: Thu, 12 May 2022 15:24:09 +0200
Subject: [PATCH] Feature #28491 - sid_user.py script

---
 bin/sid_user.py | 39 ++++++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/bin/sid_user.py b/bin/sid_user.py
index 91d1877..656baaf 100755
--- a/bin/sid_user.py
+++ b/bin/sid_user.py
@@ -379,20 +379,22 @@ def sid_update_user_exlude_approver_scheduler_change_management(diego, dfqdn, re
     else:
         print("removed " + user + " from " + typeExclude)
 
-def sid_create_update_user_approver_scheduler_change_management(diego, dfqdn, res_rw_user, user, uid, typeAdd, need_to_update, context_uid=778000000, verify=True):
+def sid_create_update_user_approver_scheduler_change_management(diego, dfqdn, res_rw_user, user, uid, typeAdd, need_to_update, context_uid=666000002, verify=True):
     create = True
     results = diego.diegoGetObject(uid)
     ty = []
     ty2 = []
-    if 'objects' in results :
-        for typ in results['objects'] : 
-            ty.append(typ['type'])
-            #if is one of that create -> TODO : just support one by context!
-            if typ['type'] in ['approver', 'scheduler'] :
-                create = False 
-    ty2 = ty
-    ty2.append(typeAdd)
-
+    #print(results) 666060597
+    if 'has as act' in results['properties'] :
+        if (isinstance(results['properties']['has as act'], list)): 
+           for act in results['properties']['has as act'] :
+               ty.append(act['name'])   
+        else : 
+            ty.append(results['properties']['has as act']['name'])      
+    
+    if typeAdd not in  ty :
+        ty.append(typeAdd)              
+    #new relation to workaround Polymorphism 
     if create :
         block_to_update = {
             'uid': uid,
@@ -402,6 +404,16 @@ def sid_create_update_user_approver_scheduler_change_management(diego, dfqdn, re
             'is a specialization of' : typeAdd,
             'type': typeAdd,
         }
+        
+        #new version "has as act" 
+        block_to_update = {
+            'uid': uid,
+            'name': user,
+            'context': 666000002,
+            'type': 'user',
+            'properties': {'has as act': ty}
+        }
+
         to_print = pformat(block_to_update)
         for i in list(range(0, int(round(len(to_print) / 250)) + 1)):
             logger.info('scrat %s update cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)]))
@@ -409,8 +421,9 @@ def sid_create_update_user_approver_scheduler_change_management(diego, dfqdn, re
         ''' delete: need to check the line exist if not 409'''
         scrat_inst = Scrat(res_rw_user, '', fqdn=dfqdn, version=2, verify=verify)
         #(scrat_json, scratres) = scrat_inst.scratUpdate(block_to_update,  overwrite_mode=True, line_only=True, Full=True)
-        (scrat_json, scratres) = scrat_inst.scratQuery(block_to_update, Full=True)
+        #(scrat_json, scratres) = scrat_inst.scratQuery(block_to_update, Full=True)
         #(scrat_json, scratres) = scrat_inst.scratQuery(scratter, Full=True)
+        (scrat_json, scratres) = scrat_inst.scratUpdate(block_to_update, overwrite_mode='exclusive', line_only=False, Full=True)
         if str(scratres) != '200':
             '''Scrat add new user relation in diferent context'''
             to_print = pformat(block_to_update)
@@ -904,7 +917,7 @@ def main():
             sid_create_update_user_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'scheduler', need_to_update)
             #pass
         else:
-            logger.error('dry run, user not add/update from the scheduler role.')
+            logger.error('dry run, user not add/update from the scheduler role in "has as act"')
         continue
     
     
@@ -939,7 +952,7 @@ def main():
             sid_create_update_user_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'approver', need_to_update)
             #pass
         else:
-            logger.error('dry run, user not add/update from the approver role.')
+            logger.error('dry run, user not add/update from the approver role in "has as act".')
         continue
     '''
     * scrat department
-- 
GitLab