Esempio n. 1
0
 def test_get_project_and_type_assets(self):
     asset_type = assets_service.get_or_create_asset_type("VFX")
     Entity.create(name="Smoke",
                   entity_type_id=asset_type["id"],
                   project_id=self.project.id)
     path_ids = (self.project.id, self.asset_type.id)
     path = "data/projects/%s/asset-types/%s/assets" % path_ids
     assets = self.get(path)
     self.assertEquals(len(assets), 1)
     self.assertDictEqual(assets[0], self.asset_dict)
Esempio n. 2
0
    def import_row(self, row, project_id):
        name = row["Name"]
        entity_type_name = row["Type"]
        description = row["Description"]

        self.add_to_cache_if_absent(
            self.entity_types,
            assets_service.get_or_create_asset_type,
            entity_type_name
        )
        entity_type_id = self.get_id_from_cache(
            self.entity_types,
            entity_type_name
        )

        try:
            entity = Entity.get_by(
                name=name,
                project_id=project_id,
                entity_type_id=entity_type_id
            )
            if entity is None:
                entity = Entity.create(
                    name=name,
                    description=description,
                    project_id=project_id,
                    entity_type_id=entity_type_id
                )
        except IntegrityError:
            pass

        return entity
Esempio n. 3
0
def create_asset(
    project_id, asset_type_id, name, description, data, source_id=None
):
    """
    Create a new asset from given parameters.
    """
    project = projects_service.get_project_raw(project_id)
    asset_type = get_asset_type_raw(asset_type_id)
    asset = Entity.create(
        project_id=project_id,
        entity_type_id=asset_type_id,
        name=name,
        description=description,
        data=data,
        source_id=source_id,
    )
    asset_dict = asset.serialize(obj_type="Asset")
    events.emit(
        "asset:new",
        {
            "asset_id": asset.id,
            "asset_type": asset_type.id,
            "project_id": project.id,
        },
    )
    return asset_dict
Esempio n. 4
0
    def import_row(self, row):
        name = row["Name"]
        project_name = row["Project"]
        entity_type_name = row["Category"]
        description = row["Description"]

        self.add_to_cache_if_absent(self.projects, project_info.get_or_create,
                                    project_name)
        project_id = self.get_id_from_cache(self.projects, project_name)

        self.add_to_cache_if_absent(self.entity_types,
                                    asset_info.get_or_create_type,
                                    entity_type_name)
        entity_type_id = self.get_id_from_cache(self.entity_types,
                                                entity_type_name)

        try:
            entity = Entity.create(name=name,
                                   description=description,
                                   project_id=project_id,
                                   entity_type_id=entity_type_id)
        except IntegrityError:
            entity = Entity.get_by(name=name,
                                   project_id=project_id,
                                   entity_type_id=entity_type_id)

        return entity
Esempio n. 5
0
File: base.py Progetto: cgwire/zou
 def generate_fixture_asset_camera(self):
     self.asset_camera = Entity.create(
         name="Main camera",
         description="Description Camera",
         project_id=self.project.id,
         entity_type_id=self.asset_type_camera.id,
     )
Esempio n. 6
0
File: base.py Progetto: cgwire/zou
 def generate_fixture_sequence_standard(self):
     self.sequence_standard = Entity.create(
         name="S01",
         project_id=self.project_standard.id,
         entity_type_id=self.sequence_type.id,
     )
     return self.sequence_standard
Esempio n. 7
0
def create_edit(project_id, name, data={}, description="", parent_id=None):
    """
    Create edit for given project and episode.
    """
    edit_type = get_edit_type()

    if parent_id is not None and len(parent_id) < 36:
        parent_id = None

    edit = Entity.get_by(
        entity_type_id=edit_type["id"],
        parent_id=parent_id,
        project_id=project_id,
        name=name,
    )
    if edit is None:
        edit = Entity.create(
            entity_type_id=edit_type["id"],
            project_id=project_id,
            parent_id=parent_id,
            name=name,
            data=data,
            description=description,
        )
    events.emit(
        "edit:new",
        {
            "edit_id": edit.id,
            "parent_id": parent_id,
        },
        project_id=project_id,
    )
    return edit.serialize(obj_type="Edit")
Esempio n. 8
0
 def generate_fixture_episode(self, name="E01", project_id=None):
     if project_id is None:
         project_id = self.project.id
     self.episode = Entity.create(name=name,
                                  project_id=project_id,
                                  entity_type_id=self.episode_type.id)
     return self.episode
Esempio n. 9
0
 def test_get_sequence_from_shot_no_sequence(self):
     self.shot_noseq = Entity.create(name="P01NOSEQ",
                                     project_id=self.project.id,
                                     entity_type_id=self.shot_type.id)
     self.assertRaises(SequenceNotFoundException,
                       shots_service.get_sequence_from_shot,
                       self.shot_noseq)
Esempio n. 10
0
def create_sequence(project_id, episode_id, name):
    """
    Create sequence for given project and episode.
    """
    sequence_type = get_sequence_type()

    if episode_id is not None:
        get_episode(episode_id)  # raises EpisodeNotFound if it fails.

    sequence = Entity.get_by(
        entity_type_id=sequence_type["id"],
        parent_id=episode_id,
        project_id=project_id,
        name=name,
    )
    if sequence is None:
        sequence = Entity.create(
            entity_type_id=sequence_type["id"],
            project_id=project_id,
            parent_id=episode_id,
            name=name,
        )
    events.emit(
        "sequence:new", {"sequence_id": sequence.id}, project_id=project_id
    )
    return sequence.serialize(obj_type="Sequence")
Esempio n. 11
0
def create_shot(project_id, sequence_id, name, data={}, nb_frames=0):
    """
    Create shot for given project and sequence.
    """
    shot_type = get_shot_type()

    if sequence_id is not None:
        # raises SequenceNotFound if it fails.
        sequence = get_sequence(sequence_id)

    shot = Entity.get_by(
        entity_type_id=shot_type["id"],
        parent_id=sequence_id,
        project_id=project_id,
        name=name,
    )
    if shot is None:
        shot = Entity.create(
            entity_type_id=shot_type["id"],
            project_id=project_id,
            parent_id=sequence_id,
            name=name,
            data=data,
            nb_frames=nb_frames,
        )
    events.emit(
        "shot:new",
        {
            "shot_id": shot.id,
            "episode_id": sequence["parent_id"],
        },
        project_id=project_id,
    )
    return shot.serialize(obj_type="Shot")
Esempio n. 12
0
def create_scene(project_id, sequence_id, name):
    """
    Create scene for given project and sequence.
    """
    scene_type = get_scene_type()

    if sequence_id is not None:
        # raises SequenceNotFound if it fails.
        sequence = get_sequence(sequence_id)
        if sequence["project_id"] != project_id:
            raise SequenceNotFoundException

    scene = Entity.get_by(
        entity_type_id=scene_type["id"],
        parent_id=sequence_id,
        project_id=project_id,
        name=name,
    )
    if scene is None:
        scene = Entity.create(
            entity_type_id=scene_type["id"],
            project_id=project_id,
            parent_id=sequence_id,
            name=name,
            data={},
        )
    events.emit("scene:new", {"scene_id": scene.id}, project_id=project_id)
    return scene.serialize(obj_type="Scene")
Esempio n. 13
0
    def import_row(self, row, project_id):
        asset_name = row["Name"]
        entity_type_name = row["Type"]
        description = row.get("Description", "")
        episode_name = row.get("Episode", None)
        episode_id = None
        if episode_name is not None:
            if episode_name != "MP" and episode_name not in self.episodes:
                self.episodes[
                    episode_name] = shots_service.get_or_create_episode(
                        project_id, episode_name)["id"]
            episode_id = self.episodes.get(episode_name, None)

        self.add_to_cache_if_absent(
            self.entity_types,
            assets_service.get_or_create_asset_type,
            entity_type_name,
        )
        entity_type_id = self.get_id_from_cache(self.entity_types,
                                                entity_type_name)

        entity = Entity.get_by(name=asset_name,
                               project_id=project_id,
                               entity_type_id=entity_type_id,
                               source_id=episode_id)

        data = {}
        for name, field_name in self.descriptor_fields.items():
            if name in row:
                data[field_name] = row[name]
            elif entity is not None \
            and entity.data is not None \
            and field_name in entity.data:
                data[field_name] = entity.data[field_name]

        if entity is None:
            entity = Entity.create(
                name=asset_name,
                description=description,
                project_id=project_id,
                entity_type_id=entity_type_id,
                source_id=episode_id,
                data=data,
            )
            events.emit("asset:new", {
                "asset_id": str(entity.id),
                "episode_id": episode_id
            },
                        project_id=project_id)

        elif self.is_update:
            entity.update({"description": description, "data": data})
            events.emit("asset:update", {
                "asset_id": str(entity.id),
                "episode_id": episode_id
            },
                        project_id=project_id)

        return entity.serialize()
Esempio n. 14
0
File: base.py Progetto: Arubinu/zou
 def generate_fixture_asset(self,
                            name="Tree",
                            description="Description Tree"):
     self.asset = Entity.create(name=name,
                                description=description,
                                project_id=self.project.id,
                                entity_type_id=self.asset_type.id)
     return self.asset
Esempio n. 15
0
File: base.py Progetto: Arubinu/zou
 def generate_fixture_asset_character(self,
                                      name="Rabbit",
                                      description="Main char"):
     self.asset_character = Entity.create(
         name=name,
         description=description,
         project_id=self.project.id,
         entity_type_id=self.asset_type_character.id)
Esempio n. 16
0
File: base.py Progetto: cgwire/zou
 def generate_fixture_edit(self, name="Edit", parent_id=None):
     self.edit = Entity.create(
         name=name,
         description="Description of the Edit",
         project_id=self.project.id,
         entity_type_id=self.edit_type.id,
         parent_id=parent_id,
     )
     return self.edit
Esempio n. 17
0
File: assets.py Progetto: 3dzayn/zou
    def import_row(self, row, project_id):
        asset_name = row["Name"]
        entity_type_name = row["Type"]
        description = row["Description"]
        episode_name = row.get("Episode", None)
        episode_id = None
        if episode_name is not None:
            if episode_name != "MP" and episode_name not in self.episodes:
                self.episodes[
                    episode_name
                ] = shots_service.get_or_create_episode(
                    project_id, episode_name
                )["id"]
            episode_id = self.episodes.get(episode_name, None)

        self.add_to_cache_if_absent(
            self.entity_types,
            assets_service.get_or_create_asset_type,
            entity_type_name,
        )
        entity_type_id = self.get_id_from_cache(
            self.entity_types, entity_type_name
        )

        entity = Entity.get_by(
            name=asset_name,
            project_id=project_id,
            entity_type_id=entity_type_id,
            source_id=episode_id
        )

        data = {}
        for name, field_name in self.descriptor_fields.items():
            if name in row:
                data[field_name] = row[name]
            elif entity is not None \
            and entity.data is not None \
            and field_name in entity.data:
                data[field_name] = entity.data[field_name]

        if entity is None:
            try:
                entity = Entity.create(
                    name=asset_name,
                    description=description,
                    project_id=project_id,
                    entity_type_id=entity_type_id,
                    source_id=episode_id,
                    data=data,
                )
            except IntegrityError:
                current_app.logger.error("Row import failed", exc_info=1)

        elif self.is_update:
            entity.update({"description": description, "data": data})

        return entity.serialize()
Esempio n. 18
0
def create_episode(project_id, name):
    episode_type = get_episode_type()
    episode = Entity.get_by(entity_type_id=episode_type["id"],
                            project_id=project_id,
                            name=name)
    if episode is None:
        episode = Entity.create(entity_type_id=episode_type["id"],
                                project_id=project_id,
                                name=name)
    return episode.serialize(obj_type="Episode")
Esempio n. 19
0
File: base.py Progetto: mathbou/zou
 def generate_fixture_shot_standard(self, name="SH01"):
     self.shot_standard = Entity.create(
         name=name,
         description="Description Shot 01",
         data={"fps": 25, "frame_in": 0, "frame_out": 100},
         project_id=self.project_standard.id,
         entity_type_id=self.shot_type.id,
         parent_id=self.sequence_standard.id,
     )
     return self.shot_standard
Esempio n. 20
0
File: base.py Progetto: mathbou/zou
 def generate_fixture_shot(self, name="P01", nb_frames=0):
     self.shot = Entity.create(
         name=name,
         description="Description Shot 01",
         data={"fps": 25, "frame_in": 0, "frame_out": 100},
         project_id=self.project.id,
         entity_type_id=self.shot_type.id,
         parent_id=self.sequence.id,
         nb_frames=nb_frames,
     )
     return self.shot
Esempio n. 21
0
def create_episode(project_id, name):
    """
    Create episode for given project.
    """
    episode_type = get_episode_type()
    episode = Entity.get_by(entity_type_id=episode_type["id"],
                            project_id=project_id,
                            name=name)
    if episode is None:
        episode = Entity.create(entity_type_id=episode_type["id"],
                                project_id=project_id,
                                name=name)
    events.emit("episode:new", {"episode_id": episode.id})
    return episode.serialize(obj_type="Episode")
Esempio n. 22
0
    def generate_fixture_sequence(self,
                                  name="S01",
                                  episode_id=None,
                                  project_id=None):
        if episode_id is None and hasattr(self, "episode"):
            episode_id = self.episode.id

        if project_id is None:
            project_id = self.project.id

        self.sequence = Entity.create(name=name,
                                      project_id=project_id,
                                      entity_type_id=self.sequence_type.id,
                                      parent_id=episode_id)
Esempio n. 23
0
def create_sequence(project_id, episode_id, name):
    sequence_type = get_sequence_type()

    if episode_id is not None:
        get_episode(episode_id)  # raises EpisodeNotFound if it fails.

    sequence = Entity.get_by(entity_type_id=sequence_type["id"],
                             parent_id=episode_id,
                             project_id=project_id,
                             name=name)
    if sequence is None:
        sequence = Entity.create(entity_type_id=sequence_type["id"],
                                 project_id=project_id,
                                 parent_id=episode_id,
                                 name=name)
    return sequence.serialize(obj_type="Sequence")
Esempio n. 24
0
    def import_row(self, row):
        project_name = row["Project"]
        episode_name = row["Episode"]
        sequence_name = row["Sequence"]
        shot_name = row["Name"]
        description = row["Description"]
        fps = row["FPS"]
        frame_in = row["Frame In"]
        frame_out = row["Frame Out"]

        self.add_to_cache_if_absent(self.projects, project_info.get_or_create,
                                    project_name)
        project_id = self.get_id_from_cache(self.projects, project_name)

        episode_key = "%s-%s" % (project_id, episode_name)
        if episode_key not in self.episodes:
            project = self.projects[project_name]
            self.episodes[episode_key] = \
                shot_info.get_or_create_episode(project, episode_name)

        sequence_key = "%s-%s" % (project_id, sequence_name)
        if sequence_key not in self.sequences:
            project = self.projects[project_name]
            episode = self.episodes[episode_key]
            self.sequences[sequence_key] = \
                shot_info.get_or_create_sequence(project, episode, sequence_name)
        sequence_id = self.get_id_from_cache(self.sequences, sequence_key)

        shot_type = shot_info.get_shot_type()
        try:
            entity = Entity.create(name=shot_name,
                                   description=description,
                                   project_id=project_id,
                                   parent_id=sequence_id,
                                   entity_type_id=shot_type.id,
                                   data={
                                       "fps": fps,
                                       "frame_in": frame_in,
                                       "frame_out": frame_out
                                   })
        except IntegrityError:
            entity = Entity.get_by(name=shot_name,
                                   project_id=project_id,
                                   parent_id=sequence_id,
                                   entity_type_id=shot_type.id)

        return entity
Esempio n. 25
0
    def import_row(self, row, project_id):
        episode_name = row["Episode"]
        sequence_name = row["Sequence"]
        shot_name = row["Name"]
        description = row["Description"]
        frame_in = row["Frame In"]
        frame_out = row["Frame Out"]

        episode_key = "%s-%s" % (project_id, episode_name)
        if episode_key not in self.episodes:
            self.episodes[episode_key] = \
                shots_service.get_or_create_episode(project_id, episode_name)

        sequence_key = "%s-%s-%s" % (project_id, episode_name, sequence_name)
        if sequence_key not in self.sequences:
            episode = self.episodes[episode_key]
            self.sequences[sequence_key] = \
                shots_service.get_or_create_sequence(
                    project_id,
                    episode["id"],
                    sequence_name
                )
        sequence_id = self.get_id_from_cache(self.sequences, sequence_key)

        shot_type = shots_service.get_shot_type()
        try:
            entity = Entity.create(
                name=shot_name,
                description=description,
                project_id=project_id,
                parent_id=sequence_id,
                entity_type_id=shot_type["id"],
                data={
                    "frame_in": frame_in,
                    "frame_out": frame_out
                }
            )
        except IntegrityError:
            entity = Entity.get_by(
                name=shot_name,
                project_id=project_id,
                parent_id=sequence_id,
                entity_type_id=shot_type["id"]
            )

        return entity.serialize()
Esempio n. 26
0
    def generate_fixture_scene(self,
                               name="SC01",
                               project_id=None,
                               sequence_id=None):
        if project_id is None:
            project_id = self.project.id

        if sequence_id is None:
            sequence_id = self.sequence.id

        self.scene = Entity.create(name=name,
                                   description="Description Scene 01",
                                   data={},
                                   project_id=project_id,
                                   entity_type_id=self.scene_type.id,
                                   parent_id=self.sequence.id)
        return self.scene
Esempio n. 27
0
def create_shot(project_id, sequence_id, name, data={}):
    shot_type = get_shot_type()

    if sequence_id is not None:
        get_sequence(sequence_id)  # raises SequenceNotFound if it fails.

    shot = Entity.get_by(entity_type_id=shot_type["id"],
                         parent_id=sequence_id,
                         project_id=project_id,
                         name=name)
    if shot is None:
        shot = Entity.create(entity_type_id=shot_type["id"],
                             project_id=project_id,
                             parent_id=sequence_id,
                             name=name,
                             data=data)
    return shot.serialize(obj_type="Shot")
Esempio n. 28
0
    def run_import(self, file_path, project_id):
        result = []
        self.check_permissions()
        self.prepare_import()
        xml_file = etree.parse(file_path)
        root = xml_file.getroot()
        episode = shots_service.get_or_create_first_episode(project_id)
        shot_type = shots_service.get_shot_type()

        clips = root.iter('clipitem')
        for clip in clips:
           sequence_name = clip.find('name').text.split('_')[0]
           shot_name = clip.find('name').text.split('_')[1]
           start = clip.find('start').text
           end = clip.find('end').text

           if start == '-1':
               if clip.getprevious().tag == 'transitionitem':
                   start = clip.getprevious().find('start').text

           if end == '-1':
               if clip.getnext().tag == 'transitionitem':
                   end = clip.getnext().find('end').text

           duration = int(end) - int(start)
           self.sequences[sequence_name] = shots_service.get_or_create_sequence(project_id, episode['id'], sequence_name)

           sequence_id = self.get_id_from_cache(self.sequences, sequence_name)
           try:
               entity = Entity.create(
                   name=shot_name,
                   project_id=project_id,
                   parent_id=sequence_id,
                   entity_type_id=shot_type["id"],
                   nb_frames=str(duration)
               )
           except IntegrityError:
                entity = Entity.get_by(
                    name=shot_name,
                    project_id=project_id,
                    parent_id=sequence_id,
                    entity_type_id=shot_type["id"]
                )
           result.append(entity.serialize())

        return result
Esempio n. 29
0
    def import_row(self, row, project_id):
        asset_name = row["Name"]
        entity_type_name = row["Type"]
        description = row["Description"]
        episode_name = row.get("Episode", None)
        episode_id = None
        if episode_name is not None:
            episode_id = self.episodes.get(episode_name, None)

        self.add_to_cache_if_absent(
            self.entity_types,
            assets_service.get_or_create_asset_type,
            entity_type_name,
        )
        entity_type_id = self.get_id_from_cache(
            self.entity_types, entity_type_name
        )

        data = {}
        for name, field_name in self.descriptor_fields.items():
            if name in row:
                data[field_name] = row[name]

        try:
            entity = Entity.get_by(
                name=asset_name,
                project_id=project_id,
                entity_type_id=entity_type_id,
                source_id=episode_id
            )
            if entity is None:
                entity = Entity.create(
                    name=asset_name,
                    description=description,
                    project_id=project_id,
                    entity_type_id=entity_type_id,
                    source_id=episode_id,
                    data=data,
                )
            else:
                entity.update({"description": description, "data": data})
        except IntegrityError:
            pass

        return entity.serialize()
Esempio n. 30
0
def create_scene(project_id, sequence_id, name):
    scene_type = get_scene_type()

    if sequence_id is not None:
        # raises SequenceNotFound if it fails.
        sequence = get_sequence(sequence_id)
        if sequence["project_id"] != project_id:
            raise SequenceNotFoundException

    scene = Entity.get_by(entity_type_id=scene_type["id"],
                          parent_id=sequence_id,
                          project_id=project_id,
                          name=name)
    if scene is None:
        scene = Entity.create(entity_type_id=scene_type["id"],
                              project_id=project_id,
                              parent_id=sequence_id,
                              name=name,
                              data={})
    return scene.serialize(obj_type="Scene")