def set_mask(form,json_file,reserved_word,fieldname): """ :param form: Contains item which user wanted to hind :param json_file: Original json file :param reserved_word: reserved word in json_file mark middle layer :param fieldname: reserved word in form :return: """ length = len(fieldname) json_list,json_class = get_list_and_class(json_file, reserved_word) masked_list = [] for field in form: if field.type == "BooleanField" and field.data == True: templist = json_class[int(str(field.id)[length:])].get_pos_list() for item in json_list: if is_prefix(templist,item): item[-1] = 'mask' if not item in masked_list: masked_list.append(item) j = jd.list2json(json_list,reserved_word) print reserved_word for line in masked_list: print line masked_part = jd.list2json(masked_list,reserved_word) print masked_part final_file = package(json_file,masked_part) print json.dumps(masked_part,indent=4)
def cover_protected_data(data_list, resource, patient_id, status='full'): ''' data_list : sometimes we don't wanna display all part of this resource, this list will tell us which to display,a list resource : json data that wanna to display, the format is dict patient_id : extract identifier of policy_list ''' privacy_policy = db.select_policy(patient_id) if (privacy_policy == -2): #No record in the database return resource policy_data = jd.json2list(privacy_policy,RESERVED_WORD) if type(data_list) is dict: jd.json_reduce_structure(data_list) data_list = jd.json2list(data_list, RESERVED_WORD) if isinstance(resource['resourceType'], unicode): s=resource['resourceType'] else: s=unicode(resource['resourceType'],"utf-8") jd.json_reduce_structure(resource) resource_data = jd.json2list(resource,RESERVED_WORD) for i in range(len(resource_data)): resource_data[i].insert(0,s) data = data_list for i in range(len(data)): data[i].insert(0,s) #If the query is only part of data,then do the intersection for i in range(len(data)): if data[i][1] == 'text' or data[i][1] == 'resourceType': continue tmp = retrieve(data[i],resource_data) if tmp[0] == 'Not_Found': data[i][-1] = 'Not in the online record' else: data[i][-1] = tmp[1] for i in range(len(data)): if data[i][1]=='text' or data[i][1]=='resourceType': continue tmp = retrieve(data[i],policy_data) # Not found or unmasked means we should not change the value if tmp[0] == 'Mask': # Here we need to filter the policy data[i][-1] = 'Protected data due to privacy policy' for i in range(len(data)): del data[i][0] result = jd.list2json(data,RESERVED_WORD) return result
def cover_protected_data(data_list, resource, patient_id, status='full'): ''' data_list : sometimes we don't wanna display all part of this resource, this list will tell us which to display,a list resource : json data that wanna to display, the format is dict patient_id : extract identifier of policy_list ''' privacy_policy = db.select_policy(patient_id) if (privacy_policy == -2): #No record in the database return resource policy_data = jd.json2list(privacy_policy, RESERVED_WORD) if type(data_list) is dict: jd.json_reduce_structure(data_list) data_list = jd.json2list(data_list, RESERVED_WORD) if isinstance(resource['resourceType'], unicode): s = resource['resourceType'] else: s = unicode(resource['resourceType'], "utf-8") jd.json_reduce_structure(resource) resource_data = jd.json2list(resource, RESERVED_WORD) for i in range(len(resource_data)): resource_data[i].insert(0, s) data = data_list for i in range(len(data)): data[i].insert(0, s) #If the query is only part of data,then do the intersection for i in range(len(data)): if data[i][1] == 'text' or data[i][1] == 'resourceType': continue tmp = retrieve(data[i], resource_data) if tmp[0] == 'Not_Found': data[i][-1] = 'Not in the online record' else: data[i][-1] = tmp[1] for i in range(len(data)): if data[i][1] == 'text' or data[i][1] == 'resourceType': continue tmp = retrieve(data[i], policy_data) # Not found or unmasked means we should not change the value if tmp[0] == 'Mask': # Here we need to filter the policy data[i][-1] = 'Protected data due to privacy policy' for i in range(len(data)): del data[i][0] result = jd.list2json(data, RESERVED_WORD) return result
def list_extension (json_data): #Extend resource type into json_list module data = jd.json2list(json_data,RESERVED_WORD) if isinstance(json_data['resourceType'], unicode): s=json_data['resourceType'] else: s=unicode(json_data['resourceType'],"utf-8") for i in range(len(data)): data[i].insert(0,s) return json.dumps(jd.list2json(json_data,RESERVED_WORD),separators=(',',':'))
def list_extension(json_data): #Extend resource type into json_list module data = jd.json2list(json_data, RESERVED_WORD) if isinstance(json_data['resourceType'], unicode): s = json_data['resourceType'] else: s = unicode(json_data['resourceType'], "utf-8") for i in range(len(data)): data[i].insert(0, s) return json.dumps(jd.list2json(json_data, RESERVED_WORD), separators=(',', ':'))