def get_descriptor_field_map(self, project_id, entity_type): descriptor_map = {} descriptors = projects_service.get_metadata_descriptors(project_id) for descriptor in descriptors: if descriptor["entity_type"] == entity_type: descriptor_map[descriptor["name"]] = descriptor["field_name"] return descriptor_map
def test_add_asset_metadata_descriptor(self): descriptor = projects_service.add_metadata_descriptor( self.project.id, "Asset", "Is Outdoor", [], False) self.assertIsNotNone(MetadataDescriptor.get(descriptor["id"])) descriptor = projects_service.add_metadata_descriptor( self.project.id, "Asset", "Contractor", ["contractor 1", "contractor 2"], False) descriptors = projects_service.get_metadata_descriptors( self.project.id) self.assertEqual(len(descriptors), 2) self.assertEqual(descriptors[0]["id"], descriptor["id"]) self.assertEqual(descriptors[0]["field_name"], "contractor") self.assertEqual(descriptors[1]["field_name"], "is_outdoor") descriptors = projects_service.get_metadata_descriptors( self.project.id, for_client=True) self.assertEqual(len(descriptors), 0)
def get_metadata_infos(self, project_id): descriptors = [ descriptor for descriptor in projects_service.get_metadata_descriptors(project_id) if descriptor["entity_type"] == "Shot" ] columns = [(descriptor["name"], descriptor["field_name"]) for descriptor in descriptors] return columns
def test_add_delete_metadata_descriptor(self): asset = self.generate_fixture_asset_type() asset = self.generate_fixture_asset() descriptor = projects_service.add_metadata_descriptor( self.project.id, "Asset", "Contractor", [], False) asset.update({"data": {"contractor": "contractor 1"}}) self.assertTrue("contractor" in asset.data) projects_service.remove_metadata_descriptor(descriptor["id"]) descriptors = projects_service.get_metadata_descriptors( self.project.id) self.assertEqual(len(descriptors), 0) asset = Entity.get(asset.id) self.assertFalse("contractor" in asset.data)
def test_update_metadata_descriptor(self): asset = self.generate_fixture_asset_type() asset = self.generate_fixture_asset() descriptor = projects_service.add_metadata_descriptor( self.project.id, "Asset", "Contractor", []) asset.update({"data": {"contractor": "contractor 1"}}) self.assertTrue("contractor" in asset.data) projects_service.update_metadata_descriptor(descriptor["id"], {"name": "Team"}) descriptors = projects_service.get_metadata_descriptors( self.project.id) self.assertEqual(len(descriptors), 1) asset = Entity.get(asset.id) self.assertEqual(asset.data.get("team"), "contractor 1")
def get(self, project_id): """ Get all metadata descriptors --- description: It serves to describe extra fields listed in the data attribute of entities. tags: - Projects parameters: - in: path name: project_id required: true schema: type: UUID example: 5dc235ec-125e-4ba5-b1db-604d4babc315 responses: 200: description: All metadata descriptors """ user_service.check_manager_project_access(project_id) for_client = permissions.has_client_permissions() return projects_service.get_metadata_descriptors( project_id, for_client)
def check_metadata_department_access(entity, new_data={}): """ Return true if current user is a manager and has a task assigned for this project or is a supervisor and is allowed to modify data accorded to his departments """ is_allowed = False if permissions.has_admin_permissions() or ( permissions.has_manager_permissions() and check_belong_to_project(entity["project_id"]) ): is_allowed = True elif permissions.has_supervisor_permissions() and check_belong_to_project( entity["project_id"] ): # checks that the supervisor only modifies columns # for which he is authorized allowed_columns = set(["data"]) if len(set(new_data.keys()) - allowed_columns) == 0: user_departments = persons_service.get_current_user( relations=True )["departments"] if user_departments == []: is_allowed = True else: entity_type = None if shots_service.is_shot(entity): entity_type = "Shot" elif assets_service.is_asset( entities_service.get_entity_raw(entity["id"]) ): entity_type = "Asset" elif edits_service.is_edit(entity): entity_type = "Edit" if entity_type: descriptors = [ descriptor for descriptor in projects_service.get_metadata_descriptors( entity["project_id"] ) if descriptor["entity_type"] == entity_type ] found_and_in_departments = False for descriptor_name in new_data["data"].keys(): found_and_in_departments = False for descriptor in descriptors: if descriptor["field_name"] == descriptor_name: found_and_in_departments = ( len( set(descriptor["departments"]) & set(user_departments) ) > 0 ) break if not found_and_in_departments: break if found_and_in_departments: is_allowed = True if not is_allowed: raise permissions.PermissionDenied return is_allowed
def get(self, project_id): user_service.check_manager_project_access(project_id) return projects_service.get_metadata_descriptors(project_id)
def get(self, project_id): user_service.check_manager_project_access(project_id) for_client = permissions.has_client_permissions() return projects_service.get_metadata_descriptors(project_id, for_client)