clear-skies-gitlab 2.0.1__py3-none-any.whl → 2.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. {clear_skies_gitlab-2.0.1.dist-info → clear_skies_gitlab-2.0.3.dist-info}/METADATA +2 -2
  2. clear_skies_gitlab-2.0.3.dist-info/RECORD +68 -0
  3. {clear_skies_gitlab-2.0.1.dist-info → clear_skies_gitlab-2.0.3.dist-info}/WHEEL +1 -1
  4. {clear_skies_gitlab-2.0.1.dist-info → clear_skies_gitlab-2.0.3.dist-info}/licenses/LICENSE +1 -1
  5. clearskies_gitlab/__init__.py +2 -2
  6. clearskies_gitlab/defaults/__init__.py +4 -2
  7. clearskies_gitlab/defaults/gitlab_default_auth.py +3 -0
  8. clearskies_gitlab/defaults/gitlab_default_host.py +10 -0
  9. clearskies_gitlab/defaults/gitlab_graphql_client.py +18 -0
  10. clearskies_gitlab/exceptions/gitlab_error.py +1 -0
  11. clearskies_gitlab/graphql/__init__.py +3 -0
  12. clearskies_gitlab/graphql/backends/__init__.py +7 -0
  13. clearskies_gitlab/graphql/backends/gitlab_graphql_backend.py +38 -0
  14. clearskies_gitlab/graphql/models/__init__.py +13 -0
  15. clearskies_gitlab/graphql/models/gitlab_container_repository.py +34 -0
  16. clearskies_gitlab/graphql/models/gitlab_container_repository_reference.py +8 -0
  17. clearskies_gitlab/graphql/models/gitlab_container_repository_tag.py +32 -0
  18. clearskies_gitlab/graphql/models/gitlab_container_repository_tag_reference.py +8 -0
  19. clearskies_gitlab/graphql/models/gitlab_group.py +24 -0
  20. clearskies_gitlab/graphql/models/gitlab_group_reference.py +8 -0
  21. clearskies_gitlab/graphql/models/gitlab_project.py +25 -0
  22. clearskies_gitlab/graphql/models/gitlab_project_reference.py +8 -0
  23. clearskies_gitlab/rest/__init__.py +12 -0
  24. clearskies_gitlab/rest/backends/__init__.py +3 -0
  25. clearskies_gitlab/{backends → rest/backends}/gitlab_rest_backend.py +17 -12
  26. clearskies_gitlab/rest/gitlab_branch_rule.py +21 -0
  27. clearskies_gitlab/{models → rest}/gitlab_cicd_variable.py +0 -3
  28. clearskies_gitlab/{models → rest}/gitlab_member.py +0 -3
  29. clearskies_gitlab/rest/models/__init__.py +49 -0
  30. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_advanced_search.py +7 -7
  31. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_advanced_search_blob.py +1 -4
  32. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_current_user.py +7 -4
  33. clearskies_gitlab/rest/models/gitlab_rest_group.py +48 -0
  34. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_group_access_token.py +8 -6
  35. clearskies_gitlab/rest/models/gitlab_rest_group_access_token_reference.py +8 -0
  36. clearskies_gitlab/{models/gitlab_group.py → rest/models/gitlab_rest_group_base.py} +40 -5
  37. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_group_member.py +7 -6
  38. clearskies_gitlab/rest/models/gitlab_rest_group_member_reference.py +8 -0
  39. clearskies_gitlab/rest/models/gitlab_rest_group_project.py +16 -0
  40. clearskies_gitlab/rest/models/gitlab_rest_group_project_reference.py +8 -0
  41. clearskies_gitlab/rest/models/gitlab_rest_group_reference.py +9 -0
  42. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_group_search.py +2 -3
  43. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_group_search_blob.py +1 -1
  44. clearskies_gitlab/rest/models/gitlab_rest_group_subgroup.py +63 -0
  45. clearskies_gitlab/rest/models/gitlab_rest_group_subgroup_reference.py +8 -0
  46. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_group_variable.py +7 -5
  47. clearskies_gitlab/rest/models/gitlab_rest_group_variable_reference.py +8 -0
  48. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_namespace.py +28 -9
  49. clearskies_gitlab/{models/gitlab_project.py → rest/models/gitlab_rest_project.py} +129 -36
  50. clearskies_gitlab/rest/models/gitlab_rest_project_approval_config.py +34 -0
  51. clearskies_gitlab/rest/models/gitlab_rest_project_approval_config_reference.py +8 -0
  52. clearskies_gitlab/rest/models/gitlab_rest_project_approval_rule.py +42 -0
  53. clearskies_gitlab/rest/models/gitlab_rest_project_approval_rule_reference.py +8 -0
  54. clearskies_gitlab/rest/models/gitlab_rest_project_member.py +29 -0
  55. clearskies_gitlab/rest/models/gitlab_rest_project_member_reference.py +8 -0
  56. clearskies_gitlab/rest/models/gitlab_rest_project_protected_branch.py +35 -0
  57. clearskies_gitlab/rest/models/gitlab_rest_project_protected_branch_reference.py +8 -0
  58. clearskies_gitlab/rest/models/gitlab_rest_project_reference.py +9 -0
  59. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_project_repository_commit.py +15 -5
  60. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_project_repository_commit_diff.py +6 -4
  61. clearskies_gitlab/rest/models/gitlab_rest_project_repository_contributor.py +34 -0
  62. clearskies_gitlab/rest/models/gitlab_rest_project_repository_contributor_reference.py +8 -0
  63. clearskies_gitlab/rest/models/gitlab_rest_project_repository_file.py +39 -0
  64. clearskies_gitlab/rest/models/gitlab_rest_project_repository_file_raw.py +31 -0
  65. clearskies_gitlab/rest/models/gitlab_rest_project_repository_file_reference.py +8 -0
  66. clearskies_gitlab/{models/rest → rest/models}/gitlab_rest_project_variable.py +7 -5
  67. clearskies_gitlab/rest/models/gitlab_rest_project_variable_reference.py +8 -0
  68. clear_skies_gitlab-2.0.1.dist-info/RECORD +0 -42
  69. clearskies_gitlab/backends/__init__.py +0 -9
  70. clearskies_gitlab/defaults/gitlab_default_url.py +0 -7
  71. clearskies_gitlab/models/__init__.py +0 -19
  72. clearskies_gitlab/models/gitlab_gql_model.py +0 -9
  73. clearskies_gitlab/models/gitlab_namespace.py +0 -32
  74. clearskies_gitlab/models/gitlab_rest_model.py +0 -11
  75. clearskies_gitlab/models/rest/__init__.py +0 -35
  76. clearskies_gitlab/models/rest/gitlab_rest_group.py +0 -75
  77. clearskies_gitlab/models/rest/gitlab_rest_group_member_reference.py +0 -6
  78. clearskies_gitlab/models/rest/gitlab_rest_group_project.py +0 -37
  79. clearskies_gitlab/models/rest/gitlab_rest_group_reference.py +0 -6
  80. clearskies_gitlab/models/rest/gitlab_rest_group_subgroup.py +0 -65
  81. clearskies_gitlab/models/rest/gitlab_rest_group_subgroup_reference.py +0 -6
  82. clearskies_gitlab/models/rest/gitlab_rest_project.py +0 -81
  83. clearskies_gitlab/models/rest/gitlab_rest_project_reference.py +0 -6
  84. clearskies_gitlab/models/rest/gitlab_rest_project_variable_refence.py +0 -6
@@ -1,18 +1,21 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any, Self
3
+ from typing import Self
5
4
 
5
+ from clearskies import Model
6
6
  from clearskies.columns import Boolean, Datetime, Email, Integer, Json, String
7
7
 
8
- from clearskies_gitlab.models import gitlab_rest_model
8
+ from clearskies_gitlab.rest.backends import GitlabRestBackend
9
9
 
10
10
 
11
11
  class GitlabRestCurrentUser(
12
- gitlab_rest_model.GitlabRestModel,
12
+ Model,
13
13
  ):
14
14
  """Model for current user."""
15
15
 
16
+ id_column_name = "id"
17
+ backend = GitlabRestBackend()
18
+
16
19
  @classmethod
17
20
  def destination_name(cls: type[Self]) -> str:
18
21
  """Return the slug of the api endpoint for this model."""
@@ -0,0 +1,48 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Self
4
+
5
+ from clearskies.columns import (
6
+ HasMany,
7
+ )
8
+
9
+ from clearskies_gitlab.rest.models import (
10
+ gitlab_rest_group_access_token_reference,
11
+ gitlab_rest_group_base,
12
+ gitlab_rest_group_member_reference,
13
+ gitlab_rest_group_project_reference,
14
+ gitlab_rest_group_subgroup_reference,
15
+ gitlab_rest_group_variable_reference,
16
+ )
17
+
18
+
19
+ class GitlabRestGroup(
20
+ gitlab_rest_group_base.GitlabRestGroupBase,
21
+ ):
22
+ """Model for groups."""
23
+
24
+ @classmethod
25
+ def destination_name(cls: type[Self]) -> str:
26
+ """Return the slug of the api endpoint for this model."""
27
+ return "groups"
28
+
29
+ projects = HasMany(
30
+ gitlab_rest_group_project_reference.GitlabRestGroupProjectReference,
31
+ foreign_column_name="group_id",
32
+ )
33
+ access_tokens = HasMany(
34
+ gitlab_rest_group_access_token_reference.GitlabRestGroupAccessTokenReference,
35
+ foreign_column_name="group_id",
36
+ )
37
+ variables = HasMany(
38
+ gitlab_rest_group_variable_reference.GitlabRestGroupVariableReference,
39
+ foreign_column_name="group_id",
40
+ )
41
+ subgroups = HasMany(
42
+ gitlab_rest_group_subgroup_reference.GitlabRestGroupSubgroupReference,
43
+ foreign_column_name="group_id",
44
+ )
45
+ members = HasMany(
46
+ gitlab_rest_group_member_reference.GitlabRestGroupMemberReference,
47
+ foreign_column_name="group_id",
48
+ )
@@ -1,19 +1,21 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any, Self
3
+ from typing import Self
5
4
 
6
- from clearskies.columns import BelongsToId, BelongsToModel, Boolean, Datetime, Integer, Json, String
5
+ from clearskies import Model
6
+ from clearskies.columns import Boolean, Datetime, Integer, Json, String
7
7
 
8
- from clearskies_gitlab.models import gitlab_rest_model
9
- from clearskies_gitlab.models.rest import gitlab_rest_group
8
+ from clearskies_gitlab.rest.backends import GitlabRestBackend
10
9
 
11
10
 
12
11
  class GitlabRestGroupAccessToken(
13
- gitlab_rest_model.GitlabRestModel,
12
+ Model,
14
13
  ):
15
14
  """Model for groups access tokens."""
16
15
 
16
+ id_column_name = "id"
17
+ backend = GitlabRestBackend()
18
+
17
19
  @classmethod
18
20
  def destination_name(cls: type[Self]) -> str:
19
21
  """Return the slug of the api endpoint for this model."""
@@ -0,0 +1,8 @@
1
+ class GitlabRestGroupAccessTokenReference:
2
+ """Reference to GitlabRestGroupAccessToken model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.rest.models import gitlab_rest_group_access_token
7
+
8
+ return gitlab_rest_group_access_token.GitlabRestGroupAccessToken
@@ -1,17 +1,36 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any
3
+ from typing import Self
5
4
 
6
5
  from clearskies import Model
7
- from clearskies.columns import Boolean, Datetime, Integer, Json, String
6
+ from clearskies.columns import (
7
+ BelongsToModel,
8
+ BelongsToSelf,
9
+ Boolean,
10
+ Datetime,
11
+ Integer,
12
+ Json,
13
+ Select,
14
+ String,
15
+ )
8
16
 
17
+ from clearskies_gitlab.rest.backends import GitlabRestBackend
9
18
 
10
- class GitlabGroup(Model):
11
- """Base model for groups."""
19
+
20
+ class GitlabRestGroupBase(
21
+ Model,
22
+ ):
23
+ """Model for groups."""
24
+
25
+ @classmethod
26
+ def destination_name(cls: type[Self]) -> str:
27
+ """Return the slug of the api endpoint for this model."""
28
+ return "groups"
12
29
 
13
30
  id_column_name = "id"
14
31
 
32
+ backend = GitlabRestBackend()
33
+
15
34
  id = String()
16
35
  web_url = String()
17
36
  name = String()
@@ -67,3 +86,19 @@ class GitlabGroup(Model):
67
86
  unique_project_download_limit_interval_in_seconds = Integer()
68
87
  unique_project_download_limit_alertlist = Json()
69
88
  auto_ban_user_on_excessive_projects_download = Boolean()
89
+
90
+ parent_id = BelongsToSelf()
91
+ parent = BelongsToModel("parent_id")
92
+ ### Search params
93
+ skip_groups = Json()
94
+ all_available = Boolean()
95
+ search = String()
96
+ order_by = String()
97
+ sort = String()
98
+ visibility = Select(allowed_values=["public", "internal", "private"])
99
+ with_custom_attributes = Boolean()
100
+ owned = Boolean()
101
+ min_access_level = Integer()
102
+ top_level_only = Boolean()
103
+ repository_storage = String()
104
+ marked_for_deletion_on = Datetime(date_format="%Y-%m-%d")
@@ -1,20 +1,21 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any, Self
3
+ from typing import Self
5
4
 
6
- from clearskies.columns import BelongsToId, BelongsToModel, Boolean, Json, String
5
+ from clearskies.columns import Boolean, Json, String
7
6
 
8
- from clearskies_gitlab.models import gitlab_member, gitlab_rest_model
9
- from clearskies_gitlab.models.rest import gitlab_rest_group
7
+ from clearskies_gitlab.rest import gitlab_member
8
+ from clearskies_gitlab.rest.backends import GitlabRestBackend
10
9
 
11
10
 
12
11
  class GitlabRestGroupMember(
13
- gitlab_rest_model.GitlabRestModel,
14
12
  gitlab_member.GitlabMember,
15
13
  ):
16
14
  """Model for group members."""
17
15
 
16
+ id_column_name = "id"
17
+ backend = GitlabRestBackend()
18
+
18
19
  @classmethod
19
20
  def destination_name(cls: type[Self]) -> str:
20
21
  """Return the slug of the api endpoint for this model."""
@@ -0,0 +1,8 @@
1
+ class GitlabRestGroupMemberReference:
2
+ """Reference to GitlabRestGroupMember model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.rest.models import gitlab_rest_group_member
7
+
8
+ return gitlab_rest_group_member.GitlabRestGroupMember
@@ -0,0 +1,16 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Self
4
+
5
+ from clearskies_gitlab.rest.models import gitlab_rest_project
6
+
7
+
8
+ class GitlabRestGroupProject(
9
+ gitlab_rest_project.GitlabRestProject,
10
+ ):
11
+ """Model for groups projects."""
12
+
13
+ @classmethod
14
+ def destination_name(cls: type[Self]) -> str:
15
+ """Return the slug of the api endpoint for this model."""
16
+ return "groups/:group_id/projects"
@@ -0,0 +1,8 @@
1
+ class GitlabRestGroupProjectReference:
2
+ """Reference to GitlabRestGroupProject model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.rest.models import gitlab_rest_group_project
7
+
8
+ return gitlab_rest_group_project.GitlabRestGroupProject
@@ -0,0 +1,9 @@
1
+ from clearskies_gitlab.rest.models import gitlab_rest_group
2
+
3
+
4
+ class GitlabRestGroupReference:
5
+ """Reference to GitlabRestGroup model."""
6
+
7
+ def get_model_class(self) -> type:
8
+ """Return the model class this reference points to."""
9
+ return gitlab_rest_group.GitlabRestGroup
@@ -1,11 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any, Self
3
+ from typing import Self
5
4
 
6
5
  from clearskies.columns import Integer
7
6
 
8
- from clearskies_gitlab.models.rest import gitlab_rest_advanced_search
7
+ from clearskies_gitlab.rest.models import gitlab_rest_advanced_search
9
8
 
10
9
 
11
10
  class GitlabRestGroupSearch(
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from clearskies_gitlab.models.rest import (
3
+ from clearskies_gitlab.rest.models import (
4
4
  gitlab_rest_advanced_search_blob,
5
5
  gitlab_rest_group_search,
6
6
  )
@@ -0,0 +1,63 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Self
4
+
5
+ from clearskies.columns import HasMany, HasManySelf, String
6
+
7
+ from clearskies_gitlab.rest.models import (
8
+ gitlab_rest_group_access_token_reference,
9
+ gitlab_rest_group_base,
10
+ gitlab_rest_group_member_reference,
11
+ gitlab_rest_group_project_reference,
12
+ gitlab_rest_group_variable_reference,
13
+ )
14
+
15
+
16
+ class GitlabRestGroupSubgroup(
17
+ gitlab_rest_group_base.GitlabRestGroupBase,
18
+ ):
19
+ """Model for Subgroups."""
20
+
21
+ # id_column_name = "group_id"
22
+
23
+ @classmethod
24
+ def destination_name(cls: type[Self]) -> str:
25
+ """Return the slug of the api endpoint for this model."""
26
+ return "groups/:group_id/subgroups"
27
+
28
+ group_id = String()
29
+
30
+ projects = HasMany(
31
+ gitlab_rest_group_project_reference.GitlabRestGroupProjectReference,
32
+ foreign_column_name="group_id",
33
+ )
34
+ access_tokens = HasMany(
35
+ gitlab_rest_group_access_token_reference.GitlabRestGroupAccessTokenReference,
36
+ foreign_column_name="group_id",
37
+ )
38
+ variables = HasMany(
39
+ gitlab_rest_group_variable_reference.GitlabRestGroupVariableReference,
40
+ foreign_column_name="group_id",
41
+ )
42
+ subgroups = HasManySelf(
43
+ foreign_column_name="group_id",
44
+ )
45
+ members = HasMany(
46
+ gitlab_rest_group_member_reference.GitlabRestGroupMemberReference,
47
+ foreign_column_name="group_id",
48
+ )
49
+ # parent_id = BelongsToSelf()
50
+ # parent = BelongsToModel("parent_id")
51
+ # ### Search params
52
+ # skip_groups = Json()
53
+ # all_available = Boolean()
54
+ # search = String()
55
+ # order_by = String()
56
+ # sort = String()
57
+ # visibility = Select(allowed_values=["public", "internal", "private"])
58
+ # with_custom_attributes = Boolean()
59
+ # owned = Boolean()
60
+ # min_access_level = Integer()
61
+ # top_level_only = Boolean()
62
+ # repository_storage = String()
63
+ # marked_for_deletion_on = Datetime(date_format="%Y-%m-%d")
@@ -0,0 +1,8 @@
1
+ class GitlabRestGroupSubgroupReference:
2
+ """Reference to GitlabRestGroupSubgroup model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.rest.models import gitlab_rest_group_subgroup
7
+
8
+ return gitlab_rest_group_subgroup.GitlabRestGroupSubgroup
@@ -1,19 +1,21 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import TYPE_CHECKING, Any, Self
3
+ from typing import Self
5
4
 
6
- from clearskies.columns import BelongsToId, BelongsToModel, String
5
+ from clearskies.columns import String
7
6
 
8
- from clearskies_gitlab.models import gitlab_cicd_variable, gitlab_rest_model
7
+ from clearskies_gitlab.rest import gitlab_cicd_variable
8
+ from clearskies_gitlab.rest.backends import GitlabRestBackend
9
9
 
10
10
 
11
11
  class GitlabRestGroupVariable(
12
- gitlab_rest_model.GitlabRestModel,
13
12
  gitlab_cicd_variable.GitlabCICDVariable,
14
13
  ):
15
14
  """Model for gitlab group variables."""
16
15
 
16
+ id_column_name = "id"
17
+ backend = GitlabRestBackend()
18
+
17
19
  @classmethod
18
20
  def destination_name(cls: type[Self]) -> str:
19
21
  """Return the slug of the api endpoint for this model."""
@@ -0,0 +1,8 @@
1
+ class GitlabRestGroupVariableReference:
2
+ """Reference to GitlabRestGroupVariable model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.rest.models import gitlab_rest_group_variable
7
+
8
+ return gitlab_rest_group_variable.GitlabRestGroupVariable
@@ -1,10 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any, Self
3
+ from typing import Self
5
4
 
5
+ from clearskies import Model
6
6
  from clearskies.columns import (
7
- BelongsToId,
8
7
  BelongsToModel,
9
8
  BelongsToSelf,
10
9
  Boolean,
@@ -16,8 +15,8 @@ from clearskies.columns import (
16
15
  String,
17
16
  )
18
17
 
19
- from clearskies_gitlab.models import gitlab_namespace, gitlab_rest_model
20
- from clearskies_gitlab.models.rest import (
18
+ from clearskies_gitlab.rest.backends import GitlabRestBackend
19
+ from clearskies_gitlab.rest.models import (
21
20
  gitlab_rest_group_access_token,
22
21
  gitlab_rest_group_subgroup_reference,
23
22
  gitlab_rest_group_variable,
@@ -25,17 +24,37 @@ from clearskies_gitlab.models.rest import (
25
24
  )
26
25
 
27
26
 
28
- class GitlabRestNamespace(
29
- gitlab_rest_model.GitlabRestModel,
30
- gitlab_namespace.GitlabNamespace,
31
- ):
27
+ class GitlabRestNamespace(Model):
32
28
  """Model for namespaces."""
33
29
 
30
+ backend = GitlabRestBackend()
31
+
34
32
  @classmethod
35
33
  def destination_name(cls: type[Self]) -> str:
36
34
  """Return the slug of the api endpoint for this model."""
37
35
  return "namespaces"
38
36
 
37
+ id_column_name = "id"
38
+
39
+ id = String()
40
+ name = String()
41
+ path = String()
42
+ kind = Select(allowed_values=["group", "user"])
43
+ full_path = String()
44
+ avatar_url = String()
45
+ web_url = String()
46
+ billable_members_count = Integer()
47
+ plan = Select(allowed_values=["free", "premium", "ultimate", "bronze", "silver", "gold"])
48
+ end_date = Datetime()
49
+ trial_ends_on = Datetime()
50
+ trial = Boolean()
51
+ root_repository_size = Integer()
52
+ projects_count = Integer()
53
+ max_seats_used = Integer()
54
+ max_seats_used_changed_at = Datetime()
55
+ seats_in_use = Integer()
56
+ members_counts_with_descendants = Integer()
57
+
39
58
  projects = HasMany(
40
59
  gitlab_rest_project_reference.GitlabRestProjectReference,
41
60
  foreign_column_name="group_id",
@@ -1,72 +1,101 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any
3
+ from typing import Self
5
4
 
6
5
  from clearskies import Model
7
- from clearskies.columns import BelongsToId, BelongsToModel, Boolean, Datetime, Integer, Json, Select, String
6
+ from clearskies.columns import (
7
+ BelongsToId,
8
+ BelongsToModel,
9
+ Boolean,
10
+ Datetime,
11
+ HasMany,
12
+ HasOne,
13
+ Integer,
14
+ Json,
15
+ Select,
16
+ String,
17
+ )
8
18
 
9
- from clearskies_gitlab.models import gitlab_group, gitlab_namespace
19
+ from clearskies_gitlab.rest.backends import GitlabRestBackend
20
+ from clearskies_gitlab.rest.models import (
21
+ gitlab_rest_group_reference,
22
+ gitlab_rest_namespace,
23
+ gitlab_rest_project_approval_config_reference,
24
+ gitlab_rest_project_approval_rule_reference,
25
+ gitlab_rest_project_protected_branch_reference,
26
+ gitlab_rest_project_variable_reference,
27
+ )
10
28
 
11
29
 
12
- class GitlabProject(Model):
13
- """Base model for projects."""
30
+ class GitlabRestProject(Model):
31
+ """Model for projects."""
14
32
 
15
- id_column_name = "id"
33
+ id_column_name: str = "id"
34
+
35
+ backend = GitlabRestBackend(
36
+ api_to_model_map={
37
+ "namespace.id": ["namespace_id", "group_id"],
38
+ }
39
+ )
40
+
41
+ @classmethod
42
+ def destination_name(cls: type[Self]) -> str:
43
+ """Return the slug of the api endpoint for this model."""
44
+ return "projects"
16
45
 
17
46
  id = String()
18
- group_id = BelongsToId(gitlab_group.GitlabGroup)
19
- group = BelongsToModel("group_id")
20
- user_id = String()
21
- namespace_id = BelongsToId(gitlab_namespace.GitlabNamespace)
22
- namespace = BelongsToModel("namespace_id")
47
+
23
48
  description = String()
24
49
  description_html = String()
25
- default_branch = String()
26
50
  visibility = String()
27
51
  ssh_url_to_repo = String()
28
52
  http_url_to_repo = String()
29
53
  web_url = String()
30
- readme_url = String()
31
54
  topics = Json()
32
- owner = Json()
33
55
  name = String()
34
- name_with_namespace = String()
35
56
  path = String()
36
- path_with_namespace = String()
37
57
  issues_enabled = Boolean()
38
58
  open_issues_count = Integer()
39
59
  merge_requests_enabled = Boolean()
40
60
  jobs_enabled = Boolean()
41
61
  wiki_enabled = Boolean()
42
62
  snippets_enabled = Boolean()
43
- can_create_merge_request_in = Boolean()
44
- resolve_outdated_diff_discussions = Boolean()
45
- container_registry_access_level = Select(allowed_values=["disabled", "private", "enabled"])
46
- container_security_and_compliance_access_level = Select(allowed_values=["disabled", "private", "enabled"])
47
- container_expiration_policy = Json()
48
63
  created_at = Datetime()
49
64
  updated_at = Datetime()
50
65
  last_activity_at = Datetime()
66
+ import_status = String()
67
+ archived = Boolean()
68
+ avatar_url = String()
69
+ shared_runners_enabled = Boolean()
70
+ forks_count = Integer()
71
+ star_count = Integer()
72
+
73
+ group_id = BelongsToId(gitlab_rest_group_reference.GitlabRestGroupReference)
74
+ group = BelongsToModel("group_id")
75
+
76
+ namespace_id = BelongsToId(gitlab_rest_namespace.GitlabRestNamespace)
77
+ namespace = BelongsToModel("namespace_id")
78
+
79
+ allow_pipeline_trigger_approve_deployment = Boolean()
80
+
81
+ # REST-specific fields not available in GraphQL
82
+ default_branch = String()
51
83
  creator_id = Integer()
84
+ readme_url = String()
85
+ owner = Json()
86
+ resolve_outdated_diff_discussions = Boolean()
52
87
  import_url = String()
53
88
  import_type = String()
54
- import_status = String()
55
89
  import_error = String()
56
- permissions = Json()
57
- archived = Boolean()
58
- avatar_url = String()
59
90
  license_url = String()
60
91
  license = Json()
61
- shared_runners_enabled = Boolean()
62
92
  group_runners_enabled = Boolean()
63
- forks_count = Integer()
64
- star_count = Integer()
93
+ container_registry_access_level = Select(allowed_values=["disabled", "private", "enabled"])
94
+ container_security_and_compliance_access_level = Select(allowed_values=["disabled", "private", "enabled"])
95
+ container_expiration_policy = Json()
65
96
  runners_token = String()
66
- ci_default_git_depth = Integer()
67
97
  ci_forward_deployment_enabled = Boolean()
68
98
  ci_forward_deployment_rollback_allowed = Boolean()
69
- ci_allow_fork_pipelines_to_run_in_parent_project = Boolean()
70
99
  ci_separated_caches = Boolean()
71
100
  ci_restrict_pipeline_cancellation_role = Select(allowed_values=["maintainer", "developer", "no_one"])
72
101
  ci_pipeline_variables_minimum_override_role = Select(
@@ -78,17 +107,13 @@ class GitlabProject(Model):
78
107
  repository_storage = String()
79
108
  only_allow_merge_if_pipeline_succeeds = Boolean()
80
109
  allow_merge_on_skipped_pipeline = Boolean()
81
- allow_pipeline_trigger_approve_deployment = Boolean()
82
110
  restrict_user_defined_variables = Boolean()
83
111
  only_allow_merge_if_all_discussions_are_resolved = Boolean()
84
112
  remove_source_branch_after_merge = Boolean()
85
113
  printing_merge_requests_link_enabled = Boolean()
86
114
  request_access_enabled = Boolean()
87
- only_allow_merge_if_pipeline_succeeds = Boolean()
88
115
  merge_method = Select(allowed_values=["merge", "rebase_merge", "ff"])
89
116
  squash_option = Select(allowed_values=["never", "always", "default_on", "default_off"])
90
- auto_devops_enabled = Boolean()
91
- auto_devops_deploy_strategy = Select(allowed_values=["continuous", "manual", "timed_incremental"])
92
117
  mirror = Boolean()
93
118
  mirror_user_id = Integer()
94
119
  mirror_trigger_builds = Boolean()
@@ -104,7 +129,75 @@ class GitlabProject(Model):
104
129
  merge_commit_template = String()
105
130
  squash_commit_template = String()
106
131
  issue_branch_template = String()
107
- marked_for_deletion_on = Datetime()
108
132
  compliance_frameworks = Json()
109
133
  statistics = Json()
110
134
  container_registry_image_prefix = String()
135
+
136
+ can_create_merge_request_in = Boolean()
137
+ auto_devops_enabled = Boolean()
138
+ auto_devops_deploy_strategy = Select(allowed_values=["continuous", "manual", "timed_incremental"])
139
+ ci_allow_fork_pipelines_to_run_in_parent_project = Boolean()
140
+ ci_default_git_depth = Integer()
141
+ name_with_namespace = String()
142
+ path_with_namespace = String()
143
+ permissions = Json()
144
+
145
+ variables = HasMany(
146
+ gitlab_rest_project_variable_reference.GitlabRestProjectVariableReference,
147
+ foreign_column_name="project_id",
148
+ )
149
+
150
+ protected_branches = HasMany(
151
+ gitlab_rest_project_protected_branch_reference.GitlabRestProjectProtectedBranchReference,
152
+ foreign_column_name="project_id",
153
+ )
154
+
155
+ approval_config = HasOne(
156
+ gitlab_rest_project_approval_config_reference.GitlabRestProjectApprovalConfigReference,
157
+ foreign_column_name="project_id",
158
+ )
159
+
160
+ approval_rules = HasMany(
161
+ gitlab_rest_project_approval_rule_reference.GitlabRestProjectApprovalRuleReference,
162
+ foreign_column_name="project_id",
163
+ )
164
+
165
+ # contributors = HasMany(
166
+ ### Search params
167
+ include_hidden = Boolean()
168
+ include_pending_delete = Boolean()
169
+ last_activity_after = Datetime()
170
+ last_activity_before = Datetime()
171
+ membership = Boolean()
172
+ min_access_level = Integer()
173
+ order_by = Select(
174
+ allowed_values=[
175
+ "id",
176
+ "name",
177
+ "path",
178
+ "created_at",
179
+ "updated_at",
180
+ "star_count",
181
+ "last_activity_at",
182
+ "similarity",
183
+ ]
184
+ )
185
+ owned = Boolean()
186
+ repository_checksum_failed = Boolean()
187
+ repository_storage = String()
188
+ search_namespaces = Boolean()
189
+ search = String()
190
+ simple = Boolean()
191
+ sort = String()
192
+ starred = Boolean()
193
+ topic_id = Integer()
194
+ topic = String()
195
+ updated_after = Datetime()
196
+ updated_before = Datetime()
197
+ visibility = Select(allowed_values=["public", "internal", "private"])
198
+ wiki_checksum_failed = Boolean()
199
+ with_custom_attributes = Boolean()
200
+ with_issues_enabled = Boolean()
201
+ with_merge_requests_enabled = Boolean()
202
+ with_programming_language = String()
203
+ marked_for_deletion_on = Datetime(date_format="%Y-%m-%d")