Exemplo n.º 1
0
    def json(value, parameters):
        """{
             "id": integer, // the object's unique id
             "review": integer,
             "changeset": integer,
             "file": integer,
             "deleted_lines": integer,
             "inserted_lines": integer,
             "is_reviewed": boolean,
             "reviewed_by": integer,
             "assigned_reviewers": integer[],
             "draft_changes": DraftChanges or null,
           }

           DraftChanges {
             "author": integer, // author of draft changes
             "new_is_reviewed": boolean,
             "new_reviewed_by": integer,
           }"""

        draft_changes = value.draft_changes
        if draft_changes:
            draft_changes_json = {
                "author": draft_changes.author,
                "new_is_reviewed": draft_changes.new_is_reviewed,
                "new_reviewed_by": draft_changes.new_reviewed_by,
            }
        else:
            draft_changes_json = None

        return parameters.filtered(
            "reviewablefilechanges", {
                "id":
                value.id,
                "review":
                value.review,
                "changeset":
                value.changeset,
                "file":
                value.file,
                "deleted_lines":
                value.deleted_lines,
                "inserted_lines":
                value.inserted_lines,
                "is_reviewed":
                value.is_reviewed,
                "reviewed_by":
                value.reviewed_by,
                "assigned_reviewers":
                jsonapi.sorted_by_id(value.assigned_reviewers),
                "draft_changes":
                draft_changes_json,
            })
Exemplo n.º 2
0
    def json(value, parameters):
        """Filter {
             "id": integer, // the filter's id
             "type": string, // "reviewer", "watcher" or "ignored"
             "path": string, // the filtered path
             "repository": integer, // the filter's repository's id
             "delegates": integer[], // list of user ids
           }"""

        return parameters.filtered("filters", {
            "id": value.id,
            "type": value.type,
            "path": value.path,
            "repository": value.repository,
            "delegates": jsonapi.sorted_by_id(value.delegates)
        })
Exemplo n.º 3
0
    def multiple(parameters):
        """All repository filters.

           repository : REPOSITORY : -

           Include only filters for the specified repository, identified by its
           unique numeric id or short-name."""

        user = parameters.context["users"]
        repository = jsonapi.deduce("v1/repositories", parameters)
        if repository:
            repository_filters = user.repository_filters.get(repository, [])
        else:
            repository_filters = itertools.chain(
                *user.repository_filters.values())
        return jsonapi.sorted_by_id(repository_filters)
Exemplo n.º 4
0
    def multiple(parameters):
        """All repository filters.

           repository : REPOSITORY : -

           Include only filters for the specified repository, identified by its
           unique numeric id or short-name."""

        user = parameters.context["users"]
        repository = jsonapi.deduce("v1/repositories", parameters)
        if repository:
            repository_filters = user.repository_filters.get(
                repository, [])
        else:
            repository_filters = itertools.chain(
                *user.repository_filters.values())
        return jsonapi.sorted_by_id(repository_filters)
Exemplo n.º 5
0
    def json(value, parameters):
        """Filter {
             "id": integer, // the filter's id
             "type": string, // "reviewer", "watcher" or "ignored"
             "path": string, // the filtered path
             "repository": integer, // the filter's repository's id
             "delegates": integer[], // list of user ids
           }"""

        return parameters.filtered(
            "filters", {
                "id": value.id,
                "type": value.type,
                "path": value.path,
                "repository": value.repository,
                "delegates": jsonapi.sorted_by_id(value.delegates)
            })
Exemplo n.º 6
0
    def json(value, parameters):
        """{
             "id": integer, // the object's unique id
             "review": integer,
             "changeset": integer,
             "file": integer,
             "deleted_lines": integer,
             "inserted_lines": integer,
             "is_reviewed": boolean,
             "reviewed_by": integer,
             "assigned_reviewers": integer[],
             "draft_changes": DraftChanges or null,
           }

           DraftChanges {
             "author": integer, // author of draft changes
             "new_is_reviewed": boolean,
             "new_reviewed_by": integer,
           }"""

        draft_changes = value.draft_changes
        if draft_changes:
            draft_changes_json = {
                "author": draft_changes.author,
                "new_is_reviewed": draft_changes.new_is_reviewed,
                "new_reviewed_by": draft_changes.new_reviewed_by,
            }
        else:
            draft_changes_json = None

        return parameters.filtered(
            "reviewablefilechanges", {
                "id": value.id,
                "review": value.review,
                "changeset": value.changeset,
                "file": value.file,
                "deleted_lines": value.deleted_lines,
                "inserted_lines": value.inserted_lines,
                "is_reviewed": value.is_reviewed,
                "reviewed_by": value.reviewed_by,
                "assigned_reviewers": jsonapi.sorted_by_id(
                    value.assigned_reviewers),
                "draft_changes": draft_changes_json,
            })
Exemplo n.º 7
0
    def json(value, parameters):
        """{
             "id": integer or null,
             "is_empty": boolean,
             "review": integer,
             "author": integer,
             "comment": integer or null,
             "timestamp": float or null,
             "created_comments": integer[],
             "written_replies": integer[],
             "resolved_issues": integer[],
             "reopened_issues": integer[],
             "morphed_comments": MorphedComment[],
             "reviewed_changes": integer[],
             "unreviewed_changes": integer[],
           }

           MorphedComment {
             "comment": integer,
             "new_type": "issue" or "note",
           }"""

        morphed_comments = sorted([
            { "comment": comment, "new_type": new_type }
            for comment, new_type in value.morphed_comments.items()
        ], key=lambda morphed_comment: morphed_comment["comment"].id)

        timestamp = jsonapi.v1.timestamp(value.timestamp)
        return parameters.filtered(
            "batches", { "id": value.id,
                         "is_empty": value.is_empty,
                         "review": value.review,
                         "author": value.author,
                         "timestamp": timestamp,
                         "comment": value.comment,
                         "created_comments": jsonapi.sorted_by_id(
                             value.created_comments),
                         "written_replies": jsonapi.sorted_by_id(
                             value.written_replies),
                         "resolved_issues": jsonapi.sorted_by_id(
                             value.resolved_issues),
                         "reopened_issues": jsonapi.sorted_by_id(
                             value.reopened_issues),
                         "morphed_comments": morphed_comments,
                         "reviewed_changes": jsonapi.sorted_by_id(
                             value.reviewed_file_changes),
                         "unreviewed_changes": jsonapi.sorted_by_id(
                             value.unreviewed_file_changes) })
Exemplo n.º 8
0
    def delete(parameters, value, values):
        critic = parameters.critic

        if parameters.subresource_path:
            assert value and not values
            assert parameters.subresource_path[0] == "delegates"

            repository_filter = value
            delegates = jsonapi.sorted_by_id(repository_filter.delegates)

            if len(parameters.subresource_path) == 1:
                # Delete all delegates.
                delegates = []
            else:
                del delegates[parameters.subresource_path[1] - 1]

            with api.transaction.Transaction(critic) as transaction:
                transaction \
                    .modifyUser(repository_filter.subject) \
                    .modifyFilter(repository_filter) \
                    .setDelegates(delegates)

            # Remove the last component from the sub-resource path, since we've
            # just deleted the specified sub-resource(s).
            del parameters.subresource_path[-1]

            return value, values

        if value:
            repository_filters = [value]
        else:
            repository_filters = values

        with api.transaction.Transaction(critic) as transaction:
            for repository_filter in repository_filters:
                transaction \
                    .modifyUser(repository_filter.subject) \
                    .modifyFilter(repository_filter) \
                    .delete()
Exemplo n.º 9
0
    def delete(parameters, value, values):
        critic = parameters.critic

        if parameters.subresource_path:
            assert value and not values
            assert parameters.subresource_path[0] == "delegates"

            repository_filter = value
            delegates = jsonapi.sorted_by_id(repository_filter.delegates)

            if len(parameters.subresource_path) == 1:
                # Delete all delegates.
                delegates = []
            else:
                del delegates[parameters.subresource_path[1] - 1]

            with api.transaction.Transaction(critic) as transaction:
                transaction \
                    .modifyUser(repository_filter.subject) \
                    .modifyFilter(repository_filter) \
                    .setDelegates(delegates)

            # Remove the last component from the sub-resource path, since we've
            # just deleted the specified sub-resource(s).
            del parameters.subresource_path[-1]

            return value, values

        if value:
            repository_filters = [value]
        else:
            repository_filters = values

        with api.transaction.Transaction(critic) as transaction:
            for repository_filter in repository_filters:
                transaction \
                    .modifyUser(repository_filter.subject) \
                    .modifyFilter(repository_filter) \
                    .delete()
Exemplo n.º 10
0
    def json(value, parameters):
        """Review {
             "id": integer,
             "state": string,
             "summary": string,
             "description": string or null,
             "repository": integer,
             "branch": integer,
             "owners": integer[],
             "active_reviewers": integer[],
             "assigned_reviewers": integer[],
             "watchers": integer[],
             "partitions": Partition[],
             "issues": integer[],
             "notes": integer[],
             "pending_rebase": integer or null,
             "progress": float,
             "progress_per_commit": CommitChangeCount[],
           }

           Partition {
             "commits": integer[],
             "rebase": integer or null,
           }

           CommitChangeCount {
             "commit_id": integer,
             "total_changes": integer,
             "reviewed_changes": integer,
           }"""

        def change_counts_as_dict(change_counts):
            return [{
                "commit_id": change_count.commit_id,
                "total_changes": change_count.total_changes,
                "reviewed_changes": change_count.reviewed_changes,
                } for change_count in change_counts]

        partitions = []

        def add_partition(partition):
            if partition.following:
                partition_rebase = partition.following.rebase
            else:
                partition_rebase = None

            partitions.append({ "commits": list(partition.commits.topo_ordered),
                                "rebase": partition_rebase })

            if partition.following:
                add_partition(partition.following.partition)

        add_partition(value.first_partition)

        return parameters.filtered(
            "reviews", { "id": value.id,
                         "state": value.state,
                         "summary": value.summary,
                         "description": value.description,
                         "repository": value.repository,
                         "branch": value.branch,
                         "owners": jsonapi.sorted_by_id(value.owners),
                         "active_reviewers": jsonapi.sorted_by_id(
                             value.active_reviewers),
                         "assigned_reviewers": jsonapi.sorted_by_id(
                             value.assigned_reviewers),
                         "watchers": jsonapi.sorted_by_id(value.watchers),
                         "partitions": partitions,
                         "issues": jsonapi.sorted_by_id(value.issues),
                         "notes": jsonapi.sorted_by_id(value.notes),
                         "pending_rebase": value.pending_rebase,
                         "progress": value.total_progress,
                         "progress_per_commit":
                             change_counts_as_dict(value.progress_per_commit)})
Exemplo n.º 11
0
    def json(value, parameters):
        """Review {
             "id": integer,
             "state": string,
             "summary": string,
             "description": string or null,
             "repository": integer,
             "branch": integer,
             "owners": integer[],
             "active_reviewers": integer[],
             "assigned_reviewers": integer[],
             "watchers": integer[],
             "partitions": Partition[],
             "issues": integer[],
             "notes": integer[],
             "pending_rebase": integer or null,
             "progress": float,
             "progress_per_commit": CommitChangeCount[],
           }

           Partition {
             "commits": integer[],
             "rebase": integer or null,
           }

           CommitChangeCount {
             "commit_id": integer,
             "total_changes": integer,
             "reviewed_changes": integer,
           }"""
        def change_counts_as_dict(change_counts):
            return [{
                "commit_id": change_count.commit_id,
                "total_changes": change_count.total_changes,
                "reviewed_changes": change_count.reviewed_changes,
            } for change_count in change_counts]

        partitions = []

        def add_partition(partition):
            if partition.following:
                partition_rebase = partition.following.rebase
            else:
                partition_rebase = None

            partitions.append({
                "commits": list(partition.commits.topo_ordered),
                "rebase": partition_rebase
            })

            if partition.following:
                add_partition(partition.following.partition)

        add_partition(value.first_partition)

        return parameters.filtered(
            "reviews", {
                "id":
                value.id,
                "state":
                value.state,
                "summary":
                value.summary,
                "description":
                value.description,
                "repository":
                value.repository,
                "branch":
                value.branch,
                "owners":
                jsonapi.sorted_by_id(value.owners),
                "active_reviewers":
                jsonapi.sorted_by_id(value.active_reviewers),
                "assigned_reviewers":
                jsonapi.sorted_by_id(value.assigned_reviewers),
                "watchers":
                jsonapi.sorted_by_id(value.watchers),
                "partitions":
                partitions,
                "issues":
                jsonapi.sorted_by_id(value.issues),
                "notes":
                jsonapi.sorted_by_id(value.notes),
                "pending_rebase":
                value.pending_rebase,
                "progress":
                value.total_progress,
                "progress_per_commit":
                change_counts_as_dict(value.progress_per_commit)
            })