1from gitlab.base import RequiredOptional, RESTManager, RESTObject
2from gitlab.mixins import CreateMixin, RetrieveMixin, SaveMixin, UpdateMixin
3
4from .merge_requests import ProjectDeploymentMergeRequestManager  # noqa: F401
5
6__all__ = [
7    "ProjectDeployment",
8    "ProjectDeploymentManager",
9]
10
11
12class ProjectDeployment(SaveMixin, RESTObject):
13    _managers = (("mergerequests", "ProjectDeploymentMergeRequestManager"),)
14
15
16class ProjectDeploymentManager(RetrieveMixin, CreateMixin, UpdateMixin, RESTManager):
17    _path = "/projects/%(project_id)s/deployments"
18    _obj_cls = ProjectDeployment
19    _from_parent_attrs = {"project_id": "id"}
20    _list_filters = (
21        "order_by",
22        "sort",
23        "updated_after",
24        "updated_before",
25        "environment",
26        "status",
27    )
28    _create_attrs = RequiredOptional(
29        required=("sha", "ref", "tag", "status", "environment")
30    )
31