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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clear-skies-gitlab
3
- Version: 2.0.1
3
+ Version: 2.0.3
4
4
  Summary: Gitlab module for Clearskies
5
5
  Project-URL: Docs, https://https://clearskies.info/modules/clear-skies-gitlab
6
6
  Project-URL: Repository, https://github.com/clearskies-py/gitlab
@@ -15,7 +15,7 @@ Classifier: License :: OSI Approved :: MIT License
15
15
  Classifier: Programming Language :: Python :: 3
16
16
  Requires-Python: <4.0,>=3.11
17
17
  Requires-Dist: clear-skies>=2.0.0
18
- Requires-Dist: gql>=4.0.0
18
+ Requires-Dist: gql[all]>=4.0.0
19
19
  Requires-Dist: requests>=2.32.5
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: types-requests>=2.32.4; extra == 'dev'
@@ -0,0 +1,68 @@
1
+ clearskies_gitlab/__init__.py,sha256=TlKrAfFOTW6YnQefxEQbUdnf_F3sVOvRKsG_6cfFAsk,123
2
+ clearskies_gitlab/defaults/__init__.py,sha256=t3Dfm98aoahHCepQnW1YBSVKgDz0QEp7hTrGL8XAcTE,341
3
+ clearskies_gitlab/defaults/gitlab_default_auth.py,sha256=w8w7LcekC38tbD-fuv5liDnvo4UsBxKVF7YZoTuzUus,456
4
+ clearskies_gitlab/defaults/gitlab_default_host.py,sha256=wlyj0u-nbUqkkZQnZFgMXKH32nNlTABfCL6iWA88V6E,411
5
+ clearskies_gitlab/defaults/gitlab_graphql_client.py,sha256=eIQ3efp2oYFuGSIGimZ1e5AC8TOTy1j8K26SU_AK-yU,609
6
+ clearskies_gitlab/exceptions/__init__.py,sha256=QUg8lVn91QMENpN_uZmYdNkhI1EjFAWN9X6cMKgKmtE,301
7
+ clearskies_gitlab/exceptions/gitlab_error.py,sha256=5hm8iYXnEfxxRkKPBXIq0v5mL1l5ZqaxlmUKnBjOe3g,2054
8
+ clearskies_gitlab/graphql/__init__.py,sha256=zIlWQCDVnQLYPmPLsK4m4HJkDLS9Ltk2BFMpfTNpBOw,89
9
+ clearskies_gitlab/graphql/backends/__init__.py,sha256=1QrNzwAnabngNZc-5lCAEdG0ePJv6BKEk3K2vNul4mk,170
10
+ clearskies_gitlab/graphql/backends/gitlab_graphql_backend.py,sha256=B_nor-KI5JEeMDe9MbLP0vT8hbUciBbaKfW4r5ursR0,1326
11
+ clearskies_gitlab/graphql/models/__init__.py,sha256=aKF4Ag-xZPUncPWJXovWAaROnsIdaItNzZmyXSYq3Mg,509
12
+ clearskies_gitlab/graphql/models/gitlab_container_repository.py,sha256=ouj2pe8REgY8EW0uTfB3m-TS_EXqD4fuEeMAnHT4CLI,1192
13
+ clearskies_gitlab/graphql/models/gitlab_container_repository_reference.py,sha256=wC_7sQ2ucmg9YxpLJ-EfgXa_gqjk3ptJP5wM2i833T0,352
14
+ clearskies_gitlab/graphql/models/gitlab_container_repository_tag.py,sha256=V4pPiQdIvrzbHczTzR-wq3DHyVB42CKnyzXW8KY869U,1090
15
+ clearskies_gitlab/graphql/models/gitlab_container_repository_tag_reference.py,sha256=IT8eUsOgVkoHpyswIasU-69yl1eXQJT6dgAh2pLBzHg,369
16
+ clearskies_gitlab/graphql/models/gitlab_group.py,sha256=jqrySCT5iVWP9NYUPaI84MUiWss6isFh0_FwBY_fV-E,633
17
+ clearskies_gitlab/graphql/models/gitlab_group_reference.py,sha256=V3y3DxKMhUWWjXINu1jxLSKublJdPqPWlr651F0mZB4,280
18
+ clearskies_gitlab/graphql/models/gitlab_project.py,sha256=IBG38Rwks6A9aqC2Qlss_qWohNQ2oUHF64irwE3-mj8,641
19
+ clearskies_gitlab/graphql/models/gitlab_project_reference.py,sha256=Z5Hi991TFQip-1151XcP-_ITVHwWmJiTDTlqRoAsg0A,290
20
+ clearskies_gitlab/rest/__init__.py,sha256=KZyBO-7OCE_qgClt-eTOh8jYIJccKpcuXHZ4eZCpW-0,316
21
+ clearskies_gitlab/rest/gitlab_branch_rule.py,sha256=D8HptQg9BdKAtPtVkRYbt1sga0R9eErECYDLLuvSa7A,569
22
+ clearskies_gitlab/rest/gitlab_cicd_variable.py,sha256=398-5SPlMk3-Zyu1dZTbpM9YCP2qNOsnydku3hiWvlc,446
23
+ clearskies_gitlab/rest/gitlab_member.py,sha256=o1G652wbIImd8rz9NJQeAlJaxAftNt-6u7quoLYFwh0,487
24
+ clearskies_gitlab/rest/backends/__init__.py,sha256=xUhpRXyB_FHhTsz94A2kviBlPzZfaKqIiHOhDrNg6Wc,115
25
+ clearskies_gitlab/rest/backends/gitlab_rest_backend.py,sha256=nAZe8JRD1xMUNNoinOBWAGWv__S3Jko9d7OhXUlTeQk,6672
26
+ clearskies_gitlab/rest/models/__init__.py,sha256=mcfdh04R8Fu5T-6Cz-Iy3CJ2LLttgkwBGd3Qp0Rtt6A,2750
27
+ clearskies_gitlab/rest/models/gitlab_rest_advanced_search.py,sha256=iFxCGDaqzRxl2a9g91P7zpj2ZAxuRbYoSiz_hsXMavY,883
28
+ clearskies_gitlab/rest/models/gitlab_rest_advanced_search_blob.py,sha256=R3DFxbAcm3Em8S6dZ51EG6m-OSaM-BQmuo035SHV5NU,628
29
+ clearskies_gitlab/rest/models/gitlab_rest_current_user.py,sha256=KrOfehkusr_FlB8Q4-IOU51Go5ULgykBDi9v883w80k,1135
30
+ clearskies_gitlab/rest/models/gitlab_rest_group.py,sha256=iJgz78APzdlK9TOv0OmqVU_3qg-lJ3cdUBkMjyqhYho,1410
31
+ clearskies_gitlab/rest/models/gitlab_rest_group_access_token.py,sha256=83tvO01CQktMwLm1Is9fIf_IkGR6zFIvvELwjkdSr4s,843
32
+ clearskies_gitlab/rest/models/gitlab_rest_group_access_token_reference.py,sha256=GZnAOIgIDJCPR55ABD4bxPT--TUOnkVV1peQMtai2dU,358
33
+ clearskies_gitlab/rest/models/gitlab_rest_group_base.py,sha256=lnX37uxnIu1aWmGjDuT1ZVk9NeHQwmnFRjS_2Wjq53s,3102
34
+ clearskies_gitlab/rest/models/gitlab_rest_group_member.py,sha256=CLkslCom4Deo2c3GdkoM8cuVYLOsvfreYzOUm64DTNs,707
35
+ clearskies_gitlab/rest/models/gitlab_rest_group_member_reference.py,sha256=XrhG_hiqGQf8vIosss2Vp4RWvNNtHxIn-TzXtPGQvgU,331
36
+ clearskies_gitlab/rest/models/gitlab_rest_group_project.py,sha256=33hEMN08aIsl4-tcIgNmruGLRYr0XqIuD9nQZ3Xs_CY,415
37
+ clearskies_gitlab/rest/models/gitlab_rest_group_project_reference.py,sha256=fp45VWXMC_3inaep1GIS6ortIucZoxh-7xb7RnTl8DI,336
38
+ clearskies_gitlab/rest/models/gitlab_rest_group_reference.py,sha256=UiHQpQNuVM3WotCNEFIlEqLwXMdy-8YqYRil-S84MQI,292
39
+ clearskies_gitlab/rest/models/gitlab_rest_group_search.py,sha256=VgpGDRwe3UhY2AXfqWpGYYY6ghUhoDNKJqeLsrNtwcA,506
40
+ clearskies_gitlab/rest/models/gitlab_rest_group_search_blob.py,sha256=_tIkwwDzJF9nGV0LL9fVqY5Tn4SSBXNg1C0dKlUQ-oM,353
41
+ clearskies_gitlab/rest/models/gitlab_rest_group_subgroup.py,sha256=x0h_alIV3QFbslXIlqHC48HAOmmFw5T96XAwWh31-uA,1937
42
+ clearskies_gitlab/rest/models/gitlab_rest_group_subgroup_reference.py,sha256=vFAlOmQ8wJswlcNGJ9zrrxidsFXC70hDfYNrNZ5VQ9g,341
43
+ clearskies_gitlab/rest/models/gitlab_rest_group_variable.py,sha256=ixs4o6BV31sepagW46d4ipunn-szKNCHtlqKB6IxG5o,607
44
+ clearskies_gitlab/rest/models/gitlab_rest_group_variable_reference.py,sha256=rGgqrOY-HCxpsstDb1_Hy_KwPt6Z37xxIJnBRD9eXXw,341
45
+ clearskies_gitlab/rest/models/gitlab_rest_namespace.py,sha256=AIh56mDeB8LtrKVhWEtZ1Gop_V9enBdObjpKfK5b-0g,2484
46
+ clearskies_gitlab/rest/models/gitlab_rest_project.py,sha256=Nc6u-R3Pb4NO6pZUYtZ6RYkygqizyiTybIkpFN47aXM,6687
47
+ clearskies_gitlab/rest/models/gitlab_rest_project_approval_config.py,sha256=E1Yhk4kWQfWA1Peyml0yrJuJeqkFfMvYffQ7vmfNmoc,1099
48
+ clearskies_gitlab/rest/models/gitlab_rest_project_approval_config_reference.py,sha256=Gfs1iFo8VOH8llpcdOquZ7uNA5qFv6LNaGx-glTC3AM,383
49
+ clearskies_gitlab/rest/models/gitlab_rest_project_approval_rule.py,sha256=W1bHWl1kv9Avs3oBtOAowVpVB0-pe2mXGDFyQuxUnJM,1249
50
+ clearskies_gitlab/rest/models/gitlab_rest_project_approval_rule_reference.py,sha256=VTWBcv225UQyxFr8ZdTpgEdXCiTerYGIbYyGdt1j-tc,373
51
+ clearskies_gitlab/rest/models/gitlab_rest_project_member.py,sha256=StXXvQ4Hs5VV2ngEMGvhdKwbXwlOu1ABbeQ-rfM3r48,717
52
+ clearskies_gitlab/rest/models/gitlab_rest_project_member_reference.py,sha256=nNz0Qm5Q5Esyugk9IiNe3Y2Q9SNwWPiLxpOQuiMNAMk,341
53
+ clearskies_gitlab/rest/models/gitlab_rest_project_protected_branch.py,sha256=95peeiCkBQCCsYWidIWWNAywBnPh1w9NUzVtrOIQwHY,1031
54
+ clearskies_gitlab/rest/models/gitlab_rest_project_protected_branch_reference.py,sha256=TCP892aJDxn_YKR0wJFfOTfkwOHoDAc6uBvrDYO5fl8,388
55
+ clearskies_gitlab/rest/models/gitlab_rest_project_reference.py,sha256=Rg3-fjN9WHoIsubKO3Un1trqPU1-ZoZAkE6jW33P568,302
56
+ clearskies_gitlab/rest/models/gitlab_rest_project_repository_commit.py,sha256=h9Q3b3YtFXpCC_OVqckohm1tCZwGCfojBL3qo6I3oSw,1532
57
+ clearskies_gitlab/rest/models/gitlab_rest_project_repository_commit_diff.py,sha256=xUxnA6TGOfwSraojid06V1wXOF-Tqp8JXw0a7Kg50nc,894
58
+ clearskies_gitlab/rest/models/gitlab_rest_project_repository_contributor.py,sha256=QEvGxMOHIKFPoxjo9OzESaJ_syHij9o_dubFvhacIJo,971
59
+ clearskies_gitlab/rest/models/gitlab_rest_project_repository_contributor_reference.py,sha256=yEIO424xhYcN7YpyAVXseMVET48RZ0hpu_WOOZTf3LA,418
60
+ clearskies_gitlab/rest/models/gitlab_rest_project_repository_file.py,sha256=0yYNi2zgUjl4UAjUvDaJ92wIutxOEpzBKNE-7dBN3ZQ,1112
61
+ clearskies_gitlab/rest/models/gitlab_rest_project_repository_file_raw.py,sha256=oExYzvAT6mUxY5mkw-nkAUZh-MmWy5lXq9UcFRst7nA,895
62
+ clearskies_gitlab/rest/models/gitlab_rest_project_repository_file_reference.py,sha256=WiK7aOhBZD_8HRvvlTQ6oWk3hXOJAyfEKdqmCIUIM9M,383
63
+ clearskies_gitlab/rest/models/gitlab_rest_project_variable.py,sha256=rfmk38ndgtdzoaoUFxRDPLhrRc5JWuNa2B2mWO1q4aM,813
64
+ clearskies_gitlab/rest/models/gitlab_rest_project_variable_reference.py,sha256=6P-9TbvhYMZGoBMM-BFFDFKsN40LEXd9FKYNTFpNayU,351
65
+ clear_skies_gitlab-2.0.3.dist-info/METADATA,sha256=NZnrQFwjEuoE0637A1J7ewQjNNAitVQc714US84tP7Q,2143
66
+ clear_skies_gitlab-2.0.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
67
+ clear_skies_gitlab-2.0.3.dist-info/licenses/LICENSE,sha256=S7gzTni6Tje0gBaQnXxs5BXdrBBKQ9eAVWjMHZccST8,1069
68
+ clear_skies_gitlab-2.0.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025, Tom Nijboer
3
+ Copyright (c) 2026, Tom Nijboer
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,3 +1,3 @@
1
- from clearskies_gitlab import backends, defaults, exceptions, models
1
+ from clearskies_gitlab import defaults, exceptions, graphql, rest
2
2
 
3
- __all__ = ["backends", "models", "defaults", "exceptions"]
3
+ __all__ = ["rest", "graphql", "defaults", "exceptions"]
@@ -1,7 +1,9 @@
1
1
  from clearskies_gitlab.defaults.gitlab_default_auth import GitlabDefaultAuth
2
- from clearskies_gitlab.defaults.gitlab_default_url import GitlabDefaultUrl
2
+ from clearskies_gitlab.defaults.gitlab_default_host import GitlabDefaultHost
3
+ from clearskies_gitlab.defaults.gitlab_graphql_client import GitlabDefaultGraphqlClient
3
4
 
4
5
  __all__ = [
5
6
  "GitlabDefaultAuth",
6
- "GitlabDefaultUrl",
7
+ "GitlabDefaultHost",
8
+ "GitlabDefaultGraphqlClient",
7
9
  ]
@@ -2,6 +2,9 @@ import clearskies
2
2
 
3
3
 
4
4
  class GitlabDefaultAuth(clearskies.di.AdditionalConfigAutoImport):
5
+ """Provide default Gitlab authentication from environment."""
6
+
5
7
  def provide_gitlab_auth(self, environment: clearskies.Environment):
8
+ """Provide the Gitlab authentication from environment."""
6
9
  secret_key = environment.get("GITLAB_AUTH_KEY", True)
7
10
  return clearskies.authentication.SecretBearer(secret_key=secret_key, header_prefix="Bearer ")
@@ -0,0 +1,10 @@
1
+ import clearskies
2
+
3
+
4
+ class GitlabDefaultHost(clearskies.di.AdditionalConfigAutoImport):
5
+ """Provide default GitLab Host from environment."""
6
+
7
+ def provide_gitlab_host(self, environment: clearskies.Environment):
8
+ """Provide the GitLab host from environment or default."""
9
+ gitlab_host = environment.get("GITLAB_HOST", True)
10
+ return gitlab_host if gitlab_host else "https://gitlab.com/"
@@ -0,0 +1,18 @@
1
+ import clearskies
2
+
3
+
4
+ class GitlabDefaultGraphqlClient(clearskies.di.AdditionalConfigAutoImport):
5
+ """Provide default Gitlab authentication from environment."""
6
+
7
+ def provide_gitlab_graphql_client(
8
+ self,
9
+ gitlab_auth: clearskies.authentication.Authentication,
10
+ gitlab_host: str,
11
+ environment: clearskies.Environment,
12
+ ):
13
+ """Provide the Gitlab authentication from environment."""
14
+ return clearskies.clients.GraphqlClient(
15
+ endpoint=f"{gitlab_host.rstrip('/')}/api/graphql",
16
+ authentication=gitlab_auth,
17
+ timeout=30,
18
+ )
@@ -47,4 +47,5 @@ class GitlabParamMissingError(ValueError):
47
47
  """Error if param is missing."""
48
48
 
49
49
  def __init__(self, param_name: str, table_name: str) -> None:
50
+ """Create error with param and table name."""
50
51
  super().__init__(f"Must provide the {param_name} to add the member to when updating a {table_name}")
@@ -0,0 +1,3 @@
1
+ from clearskies_gitlab.graphql import backends, models
2
+
3
+ __all__ = ["backends", "models"]
@@ -0,0 +1,7 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies_gitlab.graphql.backends.gitlab_graphql_backend import GitlabGraphqlBackend
4
+
5
+ __all__ = [
6
+ "GitlabGraphqlBackend",
7
+ ]
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies import configs, decorators
4
+ from clearskies.backends import GraphqlBackend
5
+ from clearskies.clients.graphql_client import GraphqlClient
6
+ from clearskies.di import inject
7
+
8
+
9
+ class GitlabGraphqlBackend(GraphqlBackend):
10
+ """Backend to gitlab using graphql."""
11
+
12
+ graphql_client_name = configs.String(default="gitlab_graphql_client")
13
+
14
+ api_to_model_map = configs.AnyDict(default={})
15
+ pagination_parameter_name = configs.String(default="page")
16
+ api_casing = configs.String(default="camelCase")
17
+ model_casing = configs.String(default="snake_case")
18
+
19
+ di = inject.Di()
20
+
21
+ @decorators.parameters_to_properties
22
+ def __init__(
23
+ self,
24
+ graphql_client: GraphqlClient | None = None,
25
+ graphql_client_name: str = "gitlab_graphql_client",
26
+ root_field: str = "",
27
+ pagination_style: str = "cursor",
28
+ api_case: str = "camelCase",
29
+ model_case: str = "snake_case",
30
+ is_collection: bool | None = None,
31
+ max_relationship_depth: int = 2,
32
+ relationship_limit: int = 10,
33
+ use_connection_for_relationships: bool = True,
34
+ id_argument_name: str | None = None,
35
+ id_argument_is_array: bool = False,
36
+ id_format_pattern: str = "",
37
+ ):
38
+ self.finalize_and_validate_configuration()
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies_gitlab.graphql.models.gitlab_container_repository import GitlabContainerRepository
4
+ from clearskies_gitlab.graphql.models.gitlab_container_repository_tag import GitlabContainerRepositoryTag
5
+ from clearskies_gitlab.graphql.models.gitlab_group import GitlabGroup
6
+ from clearskies_gitlab.graphql.models.gitlab_project import GitlabProject
7
+
8
+ __all__ = [
9
+ "GitlabContainerRepository",
10
+ "GitlabContainerRepositoryTag",
11
+ "GitlabProject",
12
+ "GitlabGroup",
13
+ ]
@@ -0,0 +1,34 @@
1
+ from clearskies import Model
2
+ from clearskies.columns import BelongsToId, BelongsToModel, Datetime, HasMany, String
3
+
4
+ from clearskies_gitlab.graphql.backends import GitlabGraphqlBackend
5
+ from clearskies_gitlab.graphql.models import gitlab_container_repository_tag_reference, gitlab_project_reference
6
+
7
+
8
+ class GitlabContainerRepository(Model):
9
+ """Model for gitlab container repositories via GQL."""
10
+
11
+ id_column_name: str = "id"
12
+
13
+ backend = GitlabGraphqlBackend(
14
+ root_field="containerRepositories",
15
+ id_argument_is_array=True,
16
+ id_format_pattern="gid://gitlab/ContainerRepository/{id}",
17
+ id_argument_name="ids",
18
+ )
19
+
20
+ @classmethod
21
+ def destination_name(cls) -> str:
22
+ """Return the slug of the api endpoint for this model."""
23
+ return "containerRepository"
24
+
25
+ name = String()
26
+ location = String()
27
+ path = String()
28
+ created_at = Datetime()
29
+ project_id = BelongsToId(gitlab_project_reference.GitlabProjectReference)
30
+ project = BelongsToModel("project_id")
31
+ tags = HasMany(
32
+ gitlab_container_repository_tag_reference.GitlabContainerRepositoryTagReference,
33
+ foreign_column_name="containerRepositoryId",
34
+ )
@@ -0,0 +1,8 @@
1
+ class GitlabContainerRepositoryReference:
2
+ """Reference to GitlabContainerRepository model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.graphql.models import gitlab_container_repository
7
+
8
+ return gitlab_container_repository.GitlabContainerRepository
@@ -0,0 +1,32 @@
1
+ from clearskies import Model
2
+ from clearskies.columns import BelongsToId, BelongsToModel, Datetime, String
3
+
4
+ from clearskies_gitlab.graphql.backends import GitlabGraphqlBackend
5
+ from clearskies_gitlab.graphql.models import gitlab_container_repository_reference
6
+
7
+
8
+ class GitlabContainerRepositoryTag(Model):
9
+ """Model for gitlab container repositories via GQL."""
10
+
11
+ id_column_name: str = "name"
12
+
13
+ backend = GitlabGraphqlBackend(
14
+ root_field="containerRepositories",
15
+ id_argument_is_array=True,
16
+ id_format_pattern="gid://gitlab/ContainerRepository/{id}",
17
+ id_argument_name="ids",
18
+ )
19
+
20
+ @classmethod
21
+ def destination_name(cls) -> str:
22
+ """Return the slug of the api endpoint for this model."""
23
+ return "tag"
24
+
25
+ name = String()
26
+ digest = String()
27
+ location = String()
28
+ path = String()
29
+ created_at = Datetime()
30
+ published_at = Datetime()
31
+ container_repository_id = BelongsToId(gitlab_container_repository_reference.GitlabContainerRepositoryReference)
32
+ container_repository = BelongsToModel("container_repository_id")
@@ -0,0 +1,8 @@
1
+ class GitlabContainerRepositoryTagReference:
2
+ """Reference to GitlabContainerRepositoryTag model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.graphql.models import gitlab_container_repository_tag
7
+
8
+ return gitlab_container_repository_tag.GitlabContainerRepositoryTag
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies import Model
4
+
5
+ from clearskies_gitlab.graphql.backends import GitlabGraphqlBackend
6
+
7
+
8
+ class GitlabGroup(Model):
9
+ """Model for gitlab projects via GQL."""
10
+
11
+ gitlab_id_pattern: str = "gid://gitlab/Group/[ID]"
12
+
13
+ id_column_name: str = "id"
14
+ backend = GitlabGraphqlBackend(
15
+ root_field="groups",
16
+ id_argument_is_array=True,
17
+ id_format_pattern="gid://gitlab/Project/{id}",
18
+ id_argument_name="ids",
19
+ )
20
+
21
+ @classmethod
22
+ def destination_name(cls) -> str:
23
+ """Return the slug of the api endpoint for this model."""
24
+ return "group"
@@ -0,0 +1,8 @@
1
+ class GitlabGroupReference:
2
+ """Reference to GitlabGroup model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.graphql.models import gitlab_group
7
+
8
+ return gitlab_group.GitlabGroup
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies import Model
4
+ from clearskies.columns import String
5
+
6
+ from clearskies_gitlab.graphql.backends import GitlabGraphqlBackend
7
+
8
+
9
+ class GitlabProject(Model):
10
+ """Model for gitlab projects via GQL."""
11
+
12
+ id_column_name: str = "id"
13
+ backend = GitlabGraphqlBackend(
14
+ root_field="projects",
15
+ id_argument_is_array=True,
16
+ id_format_pattern="gid://gitlab/Project/{id}",
17
+ id_argument_name="ids",
18
+ )
19
+
20
+ @classmethod
21
+ def destination_name(cls) -> str:
22
+ """Return the slug of the api endpoint for this model."""
23
+ return "projects"
24
+
25
+ id = String()
@@ -0,0 +1,8 @@
1
+ class GitlabProjectReference:
2
+ """Reference to GitlabProject model."""
3
+
4
+ def get_model_class(self) -> type:
5
+ """Return the model class this reference points to."""
6
+ from clearskies_gitlab.graphql.models import gitlab_project
7
+
8
+ return gitlab_project.GitlabProject
@@ -0,0 +1,12 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies_gitlab.rest import backends, models
4
+ from clearskies_gitlab.rest.gitlab_cicd_variable import GitlabCICDVariable
5
+ from clearskies_gitlab.rest.gitlab_member import GitlabMember
6
+
7
+ __all__ = [
8
+ "backends",
9
+ "models",
10
+ "GitlabMember",
11
+ "GitlabCICDVariable",
12
+ ]
@@ -0,0 +1,3 @@
1
+ from clearskies_gitlab.rest.backends.gitlab_rest_backend import GitlabRestBackend
2
+
3
+ __all__ = ["GitlabRestBackend"]
@@ -1,23 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
- import logging
4
3
  import urllib
5
- from collections.abc import Callable
6
- from typing import TYPE_CHECKING, Any, cast
4
+ from typing import TYPE_CHECKING, Any
7
5
 
8
- import requests
9
- from clearskies import Column, Model, configs
6
+ from clearskies import configs
10
7
  from clearskies.backends import ApiBackend
11
8
  from clearskies.decorators import parameters_to_properties
12
9
  from clearskies.di import inject
13
- from clearskies.functional import string
14
10
  from clearskies.query import Query
15
11
  from requests.structures import CaseInsensitiveDict
16
12
 
17
- from clearskies_gitlab.exceptions import gitlab_error
18
-
19
13
  if TYPE_CHECKING:
20
- from clearskies import model
21
14
  from clearskies.authentication import Authentication
22
15
  from clearskies.query import Query
23
16
 
@@ -25,8 +18,8 @@ if TYPE_CHECKING:
25
18
  class GitlabRestBackend(ApiBackend):
26
19
  """Backend for Gitlab.com."""
27
20
 
28
- base_url = inject.ByName("gitlab_url", cache=True)
29
- authentication = inject.ByName("gitlab_auth", cache=False)
21
+ gitlab_host = inject.ByName("gitlab_host", cache=True) # type: ignore[assignment]
22
+ authentication = inject.ByName("gitlab_auth", cache=False) # type: ignore[assignment]
30
23
  requests = inject.Requests()
31
24
  _auth_headers: dict[str, str] = {}
32
25
 
@@ -47,6 +40,17 @@ class GitlabRestBackend(ApiBackend):
47
40
  ):
48
41
  self.finalize_and_validate_configuration()
49
42
 
43
+ @property
44
+ def base_url(self) -> str:
45
+ """
46
+ Docstring for base_url.
47
+
48
+ :param self: Description
49
+ :return: Description
50
+ :rtype: str
51
+ """
52
+ return f"{self.gitlab_host.rstrip('/')}/api/v4"
53
+
50
54
  def count_method(self, query: Query) -> str:
51
55
  """Return the request method to use when making a request for a record count."""
52
56
  return "HEAD"
@@ -90,6 +94,7 @@ class GitlabRestBackend(ApiBackend):
90
94
  def conditions_to_request_parameters(
91
95
  self, query: Query, used_routing_parameters: list[str]
92
96
  ) -> tuple[str, dict[str, str], dict[str, Any]]:
97
+ """Convert query conditions to request parameters."""
93
98
  route_id = ""
94
99
 
95
100
  url_parameters = {}
@@ -111,7 +116,7 @@ class GitlabRestBackend(ApiBackend):
111
116
  # self,
112
117
  # next_page_data: dict[str, Any],
113
118
  # query: Query,
114
- # response: requests.Response, # type: ignore
119
+ # response: requests.Response,
115
120
  # ) -> None:
116
121
  # """
117
122
  # Update the next_page_data dictionary with the appropriate data needed to fetch the next page of records.
@@ -0,0 +1,21 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies import Model
4
+ from clearskies.columns import Boolean, Datetime, Integer, Json, String
5
+
6
+
7
+ class GitlabBranchRule(Model):
8
+ """Model for GitLab branch rules."""
9
+
10
+ id = Integer()
11
+ name = String()
12
+ protected = Boolean()
13
+ developers_can_push = Boolean()
14
+ developers_can_merge = Boolean()
15
+ can_push = Boolean()
16
+ default = Boolean()
17
+ created_at = Datetime()
18
+ updated_at = Datetime()
19
+ code_owner_approval_required = Boolean()
20
+ unprotect_access_levels = Json()
21
+ push_access_levels = Json()
@@ -1,8 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any
5
-
6
3
  from clearskies import Model
7
4
  from clearskies.columns import Boolean, String
8
5
 
@@ -1,8 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any
5
-
6
3
  from clearskies import Model
7
4
  from clearskies.columns import Datetime, Email, Integer, Json, String
8
5
 
@@ -0,0 +1,49 @@
1
+ from __future__ import annotations
2
+
3
+ from clearskies_gitlab.rest.models.gitlab_rest_advanced_search import GitlabRestAdvancedSearch
4
+ from clearskies_gitlab.rest.models.gitlab_rest_advanced_search_blob import GitlabRestAdvancedSearchBlob
5
+ from clearskies_gitlab.rest.models.gitlab_rest_current_user import GitlabRestCurrentUser
6
+ from clearskies_gitlab.rest.models.gitlab_rest_group import GitlabRestGroup
7
+ from clearskies_gitlab.rest.models.gitlab_rest_group_access_token import GitlabRestGroupAccessToken
8
+ from clearskies_gitlab.rest.models.gitlab_rest_group_project import GitlabRestGroupProject
9
+ from clearskies_gitlab.rest.models.gitlab_rest_group_search import GitlabRestGroupSearch
10
+ from clearskies_gitlab.rest.models.gitlab_rest_group_search_blob import GitlabRestGroupSearchBlob
11
+ from clearskies_gitlab.rest.models.gitlab_rest_group_subgroup import GitlabRestGroupSubgroup
12
+ from clearskies_gitlab.rest.models.gitlab_rest_group_variable import GitlabRestGroupVariable
13
+ from clearskies_gitlab.rest.models.gitlab_rest_project import GitlabRestProject
14
+ from clearskies_gitlab.rest.models.gitlab_rest_project_approval_config import GitlabRestProjectApprovalConfig
15
+ from clearskies_gitlab.rest.models.gitlab_rest_project_approval_rule import GitlabRestProjectApprovalRule
16
+ from clearskies_gitlab.rest.models.gitlab_rest_project_member import GitlabRestProjectMember
17
+ from clearskies_gitlab.rest.models.gitlab_rest_project_protected_branch import GitlabRestProjectProtectedBranch
18
+ from clearskies_gitlab.rest.models.gitlab_rest_project_repository_commit import GitlabRestProjectRepositoryCommit
19
+ from clearskies_gitlab.rest.models.gitlab_rest_project_repository_commit_diff import (
20
+ GitlabRestProjectRepositoryCommitDiff,
21
+ )
22
+ from clearskies_gitlab.rest.models.gitlab_rest_project_repository_contributor import (
23
+ GitlabRestProjectRepositoryContributor,
24
+ )
25
+ from clearskies_gitlab.rest.models.gitlab_rest_project_repository_file import GitlabRestProjectRepositoryFile
26
+ from clearskies_gitlab.rest.models.gitlab_rest_project_variable import GitlabRestProjectVariable
27
+
28
+ __all__ = [
29
+ "GitlabRestAdvancedSearch",
30
+ "GitlabRestAdvancedSearchBlob",
31
+ "GitlabRestCurrentUser",
32
+ "GitlabRestGroup",
33
+ "GitlabRestGroupAccessToken",
34
+ "GitlabRestGroupProject",
35
+ "GitlabRestGroupSearch",
36
+ "GitlabRestGroupSearchBlob",
37
+ "GitlabRestGroupSubgroup",
38
+ "GitlabRestGroupVariable",
39
+ "GitlabRestProject",
40
+ "GitlabRestProjectApprovalConfig",
41
+ "GitlabRestProjectApprovalRule",
42
+ "GitlabRestProjectMember",
43
+ "GitlabRestProjectProtectedBranch",
44
+ "GitlabRestProjectRepositoryCommit",
45
+ "GitlabRestProjectRepositoryCommitDiff",
46
+ "GitlabRestProjectRepositoryContributor",
47
+ "GitlabRestProjectRepositoryFile",
48
+ "GitlabRestProjectVariable",
49
+ ]
@@ -1,17 +1,17 @@
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, Json, Select, 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
- class GitlabRestAdvancedSearch(
12
- gitlab_rest_model.GitlabRestModel,
13
- ):
14
- """Model for groups access tokens."""
11
+ class GitlabRestAdvancedSearch(Model):
12
+ """Model for advanced search."""
13
+
14
+ backend = GitlabRestBackend()
15
15
 
16
16
  @classmethod
17
17
  def destination_name(cls: type[Self]) -> str:
@@ -1,11 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections import OrderedDict
4
- from typing import Any
5
-
6
3
  from clearskies.columns import BelongsToId, BelongsToModel, Integer, String
7
4
 
8
- from clearskies_gitlab.models.rest import gitlab_rest_advanced_search, gitlab_rest_project
5
+ from clearskies_gitlab.rest.models import gitlab_rest_advanced_search, gitlab_rest_project
9
6
 
10
7
 
11
8
  class GitlabRestAdvancedSearchBlob(