Exemplo n.º 1
0
 def delete(self, project_id, status_automation_id):
     """
     Remove a status automation from a production.
     ---
     tags:
       - Projects
     parameters:
       - in: path
         name: project_id
         required: true
         schema:
           type: UUID
           example: 5dc235ec-125e-4ba5-b1db-604d4babc315
       - in: path
         name: status_automation_id
         required: true
         schema:
           type: UUID
           example: 5dc235ec-125e-4ba5-b1db-604d4babc315
     responses:
         204:
           description: Status automation removed from production
     """
     user_service.check_manager_project_access(project_id)
     projects_service.remove_status_automation_setting(
         project_id, status_automation_id)
     return "", 204
Exemplo n.º 2
0
 def post(self, project_id):
     args = self.get_args([("task_type_id", "", True),
                           ("priority", None, False)])
     user_service.check_manager_project_access(project_id)
     project = projects_service.add_task_type_setting(
         project_id, args["task_type_id"], args["priority"])
     return project, 201
Exemplo n.º 3
0
 def delete(self, project_id, person_id):
     """
     Remove people listed in a production team.
     ---
     tags:
       - Projects
     parameters:
       - in: path
         name: project_id
         required: true
         schema:
           type: UUID
           example: 5dc235ec-125e-4ba5-b1db-604d4babc315
       - in: path
         name: person_id
         required: true
         schema:
           type: UUID
           example: 5dc235ec-125e-4ba5-b1db-604d4babc315
     responses:
         204:
           description: Person removed from production team
     """
     user_service.check_manager_project_access(project_id)
     projects_service.remove_team_member(project_id, person_id)
     return "", 204
Exemplo n.º 4
0
 def put(self, project_id, entity_id):
     """
     Resource to allow the modification of assets linked to an entity.
     """
     casting = request.json
     user_service.check_manager_project_access(project_id)
     return breakdown_service.update_casting(entity_id, casting)
Exemplo n.º 5
0
    def delete(self, asset_id):
        """
        Delete given asset.
        ---
        tags:
          - Assets
        parameters:
          - in: path
            name: asset_id
            schema:
                type: UUID
                example: a24a6ea4-ce75-4665-a070-57453082c25
            required: True
        responses:
          204:
            description: Given asset deleted
        """
        parser = reqparse.RequestParser()
        parser.add_argument("force", default=False, type=bool)
        args = parser.parse_args()
        force = args["force"]

        asset = assets_service.get_full_asset(asset_id)
        user_service.check_manager_project_access(asset["project_id"])

        assets_service.remove_asset(asset_id, force=force)
        return "", 204
Exemplo n.º 6
0
    def post(self, project_id, asset_type_id):
        (name, description, data, source_id) = self.get_arguments()

        user_service.check_manager_project_access(project_id)
        asset = assets_service.create_asset(project_id, asset_type_id, name,
                                            description, data, source_id)
        return asset, 201
Exemplo n.º 7
0
    def put(self, person_id):
        (task_ids) = self.get_arguments()

        if len(task_ids) > 0:
            task = tasks_service.get_task(task_ids[0])
            user_service.check_manager_project_access(task["project_id"])

        tasks = []
        for task_id in task_ids:
            try:
                task = self.assign_task(task_id, person_id)
                author = persons_service.get_current_user()
                notifications_service.create_assignation_notification(
                    task_id, person_id, author["id"]
                )
                tasks.append(task)
            except TaskNotFoundException:
                pass
            except PersonNotFoundException:
                return {"error": "Assignee doesn't exist in database."}, 400

        if len(tasks) > 0:
            projects_service.add_team_member(tasks[0]["project_id"], person_id)

        return tasks
Exemplo n.º 8
0
 def post(self, project_id):
     args = self.get_args([("person_id", "", True)])
     user_service.check_manager_project_access(project_id)
     return (
         projects_service.add_team_member(project_id, args["person_id"]),
         201,
     )
Exemplo n.º 9
0
    def get(self, playlist_id, build_job_id):
        playlist = playlists_service.get_playlist(playlist_id)
        project = projects_service.get_project(playlist["project_id"])
        build_job = playlists_service.get_build_job(build_job_id)
        user_service.check_manager_project_access(playlist["project_id"])

        if build_job["status"] != "succeeded":
            return {"error": True, "message": "Build is not finished"}, 400
        else:
            movie_file_path = fs.get_file_path(
                config,
                file_store.get_local_movie_path,
                file_store.open_movie,
                "playlists",
                build_job_id,
                "mp4",
            )
            context_name = slugify.slugify(project["name"], separator="_")
            if project["production_type"] == "tvshow":
                episode = shots_service.get_episode(playlist["episode_id"])
                context_name += "_%s" % slugify.slugify(episode["name"],
                                                        separator="_")
            attachment_filename = "%s_%s_%s.mp4" % (
                slugify.slugify(build_job["created_at"], separator="").replace(
                    "t", "_"),
                context_name,
                slugify.slugify(playlist["name"], separator="_"),
            )
            return flask_send_file(
                movie_file_path,
                conditional=True,
                mimetype="video/mp4",
                as_attachment=True,
                attachment_filename=attachment_filename,
            )
Exemplo n.º 10
0
 def post(self, project_id):
     user_service.check_manager_project_access(project_id)
     task_ids = request.json
     task_ids = deletion_service.remove_tasks(project_id, task_ids)
     for task_id in task_ids:
         tasks_service.clear_task_cache(task_id)
     return task_ids, 200
Exemplo n.º 11
0
    def get(self, playlist_id):
        playlist = playlists_service.get_playlist(playlist_id)
        user_service.check_manager_project_access(playlist["project_id"])

        project = projects_service.get_project(playlist["project_id"])
        (width, height) = preview_files_service.get_preview_file_dimensions(project)
        fps = preview_files_service.get_preview_file_fps(project)

        params = EncodingParameters(width=width, height=height, fps=fps)

        shots = [{"preview_file_id": x.get("preview_file_id")} for x in playlist["shots"]]

        if config.ENABLE_JOB_QUEUE:
            remote = config.ENABLE_JOB_QUEUE_REMOTE
            # remote worker can not access files local to the web app
            assert not remote or config.FS_BACKEND in ["s3", "swift"]

            current_user = persons_service.get_current_user()
            queue_store.job_queue.enqueue(
                playlists_service.build_playlist_job,
                args = (playlist, shots, params, current_user["email"], remote),
                job_timeout=3600,
            )
            return {"job": "running"}
        else:
            job = playlists_service.build_playlist_movie_file(
                playlist, shots, params, remote=False
            )
            return {"job": job["status"]}
Exemplo n.º 12
0
 def post(self, project_id):
     """
     Create an episode for given project.
     """
     name = self.get_arguments()
     projects_service.get_project(project_id)
     user_service.check_manager_project_access(project_id)
     return shots_service.create_episode(project_id, name), 201
Exemplo n.º 13
0
 def get(self, project_id):
     """
     Retrieve all entity links related to given project.
     It's mainly used for synchronisation purpose.
     """
     user_service.check_manager_project_access(project_id)
     projects_service.get_project(project_id)
     return entities_service.get_entity_links_for_project(project_id)
Exemplo n.º 14
0
 def post(self, project_id):
     args = self.get_args([("asset_type_id", "", True)])
     user_service.check_manager_project_access(project_id)
     project = projects_service.add_asset_type_setting(
         project_id,
         args["asset_type_id"]
     )
     return project, 201
Exemplo n.º 15
0
 def put(self, asset_id):
     """
     Resource to allow the modification of assets linked to a asset.
     """
     casting = request.json
     asset = assets_service.get_asset(asset_id)
     user_service.check_manager_project_access(asset["project_id"])
     return breakdown_service.update_casting(asset_id, casting)
Exemplo n.º 16
0
 def delete(self, scene_id):
     """
     Delete given scene.
     """
     scene = shots_service.get_scene(scene_id)
     user_service.check_manager_project_access(scene["project_id"])
     shots_service.remove_scene(scene_id)
     return "", 204
Exemplo n.º 17
0
 def delete(self, edit_id):
     """
     Delete given edit.
     """
     force = self.get_force()
     edit = edits_service.get_edit(edit_id)
     user_service.check_manager_project_access(edit["project_id"])
     edits_service.remove_edit(edit_id, force=force)
     return "", 204
Exemplo n.º 18
0
 def put(self, preview_file_id):
     parser = reqparse.RequestParser()
     parser.add_argument("position", default=0, type=int)
     args = parser.parse_args()
     preview_file = files_service.get_preview_file(preview_file_id)
     task = tasks_service.get_task(preview_file["task_id"])
     user_service.check_manager_project_access(task["project_id"])
     return tasks_service.update_preview_file_position(
         preview_file_id, args["position"])
Exemplo n.º 19
0
 def put(self, preview_file_id):
     annotations = request.json["annotations"]
     preview_file = files_service.get_preview_file(preview_file_id)
     task = tasks_service.get_task(preview_file["task_id"])
     user_service.check_manager_project_access(task["project_id"])
     user_service.check_entity_access(task["entity_id"])
     return preview_files_service.update_preview_file_annotations(
         task["project_id"], preview_file_id, annotations
     )
Exemplo n.º 20
0
 def delete(self, episode_id):
     """
     Retrieve given episode.
     """
     force = self.get_force()
     episode = shots_service.get_episode(episode_id)
     user_service.check_manager_project_access(episode["project_id"])
     deletion_service.remove_episode(episode_id, force=force)
     return "", 204
Exemplo n.º 21
0
    def get(self, playlist_id):
        """
        Build given playlist as mp4 movie.
        ---
        tags:
        - Playlists
        parameters:
          - in: path
            name: playlist_id
            required: True
            schema:
                type: UUID
                example: a24a6ea4-ce75-4665-a070-57453082c25
        responses:
            200:
                description: Given playlist built as mp4 movie
        """
        playlist = playlists_service.get_playlist(playlist_id)
        user_service.check_manager_project_access(playlist["project_id"])

        project = projects_service.get_project(playlist["project_id"])
        (width, height) = preview_files_service.get_preview_file_dimensions(
            project
        )
        fps = preview_files_service.get_preview_file_fps(project)
        full = self.get_bool_parameter("full")
        params = EncodingParameters(width=width, height=height, fps=fps)

        shots = [
            {"preview_file_id": x.get("preview_file_id")}
            for x in playlist["shots"]
        ]

        if config.ENABLE_JOB_QUEUE:
            remote = config.ENABLE_JOB_QUEUE_REMOTE
            # remote worker can not access files local to the web app
            assert not remote or config.FS_BACKEND in ["s3", "swift"]

            current_user = persons_service.get_current_user()
            queue_store.job_queue.enqueue(
                playlists_service.build_playlist_job,
                args=(
                    playlist,
                    shots,
                    params,
                    current_user["email"],
                    full,
                    remote,
                ),
                job_timeout=int(config.JOB_QUEUE_TIMEOUT),
            )
            return {"job": "running"}
        else:
            job = playlists_service.build_playlist_movie_file(
                playlist, shots, params, full, remote=False
            )
            return {"job": job["status"]}
Exemplo n.º 22
0
 def delete(self, sequence_id):
     """
     Delete given sequence.
     """
     force = self.get_force()
     sequence = shots_service.get_sequence(sequence_id)
     user_service.check_manager_project_access(sequence["project_id"])
     shots_service.remove_sequence(sequence_id, force=force)
     return "", 204
Exemplo n.º 23
0
 def post(self, project_id):
     """
     Create a shot for given project.
     """
     (sequence_id, name) = self.get_arguments()
     projects_service.get_project(project_id)
     user_service.check_manager_project_access(project_id)
     scene = shots_service.create_scene(project_id, sequence_id, name)
     return scene, 201
Exemplo n.º 24
0
    def post(self, task_type_id):
        criterions = query.get_query_criterions_from_request(request)
        if "project_id" not in criterions:
            return {"error": True, "message": "Project ID is missing"}, 400

        user_service.check_manager_project_access(criterions["project_id"])
        shots = shots_service.get_shots(criterions)
        task_type = tasks_service.get_task_type(task_type_id)
        tasks = [tasks_service.create_task(task_type, shot) for shot in shots]
        return tasks, 201
Exemplo n.º 25
0
    def get(self, playlist_id):
        playlist = playlists_service.get_playlist(playlist_id)
        user_service.check_manager_project_access(playlist["project_id"])

        if config.ENABLE_JOB_QUEUE:
            current_user = persons_service.get_current_user()
            build_playlist_task.delay(playlist, current_user["email"])
            return {"job": "running"}
        else:
            playlists_service.build_playlist_movie_file(playlist)
            return {"job": "succeeded"}
Exemplo n.º 26
0
    def delete(self, asset_id):
        parser = reqparse.RequestParser()
        parser.add_argument("force", default=False, type=bool)
        args = parser.parse_args()
        force = args["force"]

        asset = assets_service.get_full_asset(asset_id)
        user_service.check_manager_project_access(asset["project_id"])

        deleted_asset = assets_service.remove_asset(asset_id, force=force)
        return '', 204
Exemplo n.º 27
0
    def post(self, project_id):
        """
        Create a shot for given project.
        """
        (sequence_id, name, data, nb_frames) = self.get_arguments()
        projects_service.get_project(project_id)
        user_service.check_manager_project_access(project_id)

        shot = shots_service.create_shot(
            project_id, sequence_id, name, data=data, nb_frames=nb_frames
        )
        return shot, 201
Exemplo n.º 28
0
 def delete(self, instance_id):
     """
     Delete a comment corresponding at given ID.
     """
     comment = tasks_service.get_comment(instance_id)
     task = tasks_service.get_task(comment["object_id"])
     user_service.check_manager_project_access(task["project_id"])
     self.pre_delete(comment)
     deletion_service.remove_comment(comment["id"])
     tasks_service.reset_task_data(comment["object_id"])
     tasks_service.clear_comment_cache(comment["id"])
     self.post_delete(comment)
     return "", 204
Exemplo n.º 29
0
    def put(self):
        (task_ids) = self.get_arguments()

        if len(task_ids) > 0:
            task = tasks_service.get_task(task_ids[0])
            user_service.check_manager_project_access(task["project_id"])

        for task_id in task_ids:
            try:
                tasks_service.clear_assignation(task_id)
            except TaskNotFoundException:
                pass
        return task_ids
Exemplo n.º 30
0
 def get(self, playlist_id):
     playlist = playlists_service.get_playlist(playlist_id)
     user_service.check_manager_project_access(playlist["project_id"])
     if config.ENABLE_JOB_QUEUE:
         current_user = persons_service.get_current_user()
         queue_store.job_queue.enqueue(
             playlists_service.build_playlist_job,
             args=(playlist, current_user["email"]),
             job_timeout=3600,
         )
         return {"job": "running"}
     else:
         playlists_service.build_playlist_movie_file(playlist)
         return {"job": "succeeded"}