Example #1
0
 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
Example #2
0
    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)
Example #3
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
Example #4
0
    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)
Example #5
0
 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")
Example #6
0
 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)
Example #7
0
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
Example #8
0
 def get(self, project_id):
     user_service.check_manager_project_access(project_id)
     return projects_service.get_metadata_descriptors(project_id)
Example #9
0
 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)