Skip to content

Commit b3f1f62

Browse files
committed
refactor: use pydandic settings to handle configuration
see #21
1 parent 5cfca24 commit b3f1f62

File tree

5 files changed

+27
-68
lines changed

5 files changed

+27
-68
lines changed

gitlab2sentry/__init__.py

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@
66
from slugify import slugify
77

88
from gitlab2sentry.exceptions import SentryProjectCreationFailed
9-
from gitlab2sentry.resources import (
10-
G2S_STATS,
11-
GRAPHQL_FETCH_PROJECT_QUERY,
12-
GRAPHQL_LIST_PROJECTS_QUERY,
13-
G2SProject,
14-
settings,
15-
)
9+
from gitlab2sentry.resources import settings, G2SProject, G2S_STATS, GRAPHQL_LIST_PROJECTS_QUERY, GRAPHQL_FETCH_PROJECT_QUERY
1610
from gitlab2sentry.utils import GitlabProvider, SentryProvider
1711

1812
logging.basicConfig(
@@ -37,9 +31,7 @@ def _get_gitlab_provider(self) -> GitlabProvider:
3731
return GitlabProvider(settings.gitlab_url, settings.gitlab_token)
3832

3933
def _get_sentry_provider(self) -> SentryProvider:
40-
return SentryProvider(
41-
settings.sentry_url, settings.sentry_token, settings.sentry_org_slug
42-
)
34+
return SentryProvider(settings.sentry_url, settings.sentry_token, settings.sentry_org_slug)
4335

4436
def _ensure_sentry_group(self, name: str) -> None:
4537
if name not in self.sentry_groups:
@@ -116,9 +108,7 @@ def _get_mr_states(
116108
):
117109
if not (sentryclirc_mr_state and sentryclirc_mr_state == "opened"):
118110
sentryclirc_mr_state = mr["state"]
119-
elif mr["title"] == settings.dsn_mr_title.format(
120-
project_name=project_name
121-
):
111+
elif mr["title"] == settings.dsn_mr_title.format(project_name=project_name):
122112
if not (dsn_mr_state and dsn_mr_state == "opened"):
123113
dsn_mr_state = mr["state"]
124114
else:
@@ -240,7 +230,7 @@ def _create_sentry_project(
240230
full_path: str,
241231
sentry_group_name: str,
242232
sentry_project_name: str,
243-
sentry_project_slug: str,
233+
sentry_project_slug: str
244234
) -> Optional[Dict[str, Any]]:
245235
try:
246236
return self.sentry_provider.get_or_create_project(
@@ -266,7 +256,7 @@ def _handle_g2s_project(
266256
self,
267257
g2s_project: G2SProject,
268258
sentry_group_name: str,
269-
custom_name: Optional[str] = None,
259+
custom_name: Optional[str] = None
270260
) -> bool:
271261
"""
272262
Creates sentry project for all given gitlab projects. It
@@ -314,7 +304,7 @@ def _handle_g2s_project(
314304
g2s_project.full_path,
315305
sentry_group_name,
316306
sentry_project_name,
317-
sentry_project_slug,
307+
sentry_project_slug
318308
)
319309

320310
# If Sentry fails to create project skip
@@ -358,7 +348,9 @@ def _handle_g2s_project(
358348
return False
359349

360350
def update(
361-
self, full_path: Optional[str] = None, custom_name: Optional[str] = None
351+
self,
352+
full_path: Optional[str] = None,
353+
custom_name: Optional[str] = None
362354
) -> None:
363355
"""
364356
args: full_path
@@ -380,7 +372,7 @@ def update(
380372
if g2s_project:
381373
sentry_group_name = g2s_project.group.split("/")[0].strip()
382374
self._handle_g2s_project(
383-
g2s_project, sentry_group_name, custom_name # type: ignore
375+
g2s_project, sentry_group_name, custom_name # type: ignore
384376
)
385377
else:
386378
logging.info(

gitlab2sentry/resources.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import os
21
from collections import namedtuple
32
from typing import List, Tuple
4-
53
from pydantic import Field
64
from pydantic_settings import BaseSettings
75

8-
ENV = os.getenv("ENV", "production")
6+
97

108

119
class Settings(BaseSettings):

gitlab2sentry/utils/gitlab_provider.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@
1616

1717
class GraphQLClient:
1818
def __init__(
19-
self,
20-
url: Optional[str] = settings.gitlab_url,
21-
token: Optional[str] = settings.gitlab_token,
19+
self, url: Optional[str] = settings.gitlab_url, token: Optional[str] = settings.gitlab_token
2220
):
2321
self._client = Client(
2422
transport=self._get_transport(url, token),
@@ -83,9 +81,7 @@ def project_list_query(
8381

8482
class GitlabProvider:
8583
def __init__(
86-
self,
87-
url: Optional[str] = settings.gitlab_url,
88-
token: Optional[str] = settings.gitlab_token,
84+
self, url: Optional[str] = settings.gitlab_url, token: Optional[str] = settings.gitlab_token
8985
) -> None:
9086
self.gitlab = self._get_gitlab(url, token)
9187
self._gql_client = GraphQLClient(url, token)
@@ -102,9 +98,7 @@ def _get_gitlab(self, url: Optional[str], token: Optional[str]) -> Gitlab:
10298

10399
def _get_update_limit(self) -> Optional[datetime]:
104100
if settings.gitlab_project_creation_limit:
105-
return datetime.now() - timedelta(
106-
days=settings.gitlab_project_creation_limit
107-
)
101+
return datetime.now() - timedelta(days=settings.gitlab_project_creation_limit)
108102
else:
109103
return None
110104

tests/conftest.py

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55

66
from gitlab2sentry import Gitlab2Sentry
77
from gitlab2sentry.resources import G2SProject, settings
8+
from gitlab2sentry.resources import (
9+
settings,
10+
G2SProject,
11+
)
812
from gitlab2sentry.utils.gitlab_provider import GitlabProvider, GraphQLClient
913
from gitlab2sentry.utils.sentry_provider import SentryProvider
1014

@@ -19,7 +23,6 @@
1923
"%Y-%m-%dT%H:%M:%SZ",
2024
)
2125

22-
2326
@pytest.fixture
2427
def g2s_fixture():
2528
yield Gitlab2Sentry()
@@ -106,7 +109,11 @@ def create_graphql_json_object(**kwargs):
106109
"rawTextBlob": settings.dsn_mr_content.format(
107110
sentry_url=settings.sentry_url,
108111
dsn=settings.sentry_dsn,
112+
<<<<<<< HEAD
109113
project_slug=TEST_PROJECT_NAME,
114+
=======
115+
project_slug=TEST_PROJECT_NAME
116+
>>>>>>> 438fae9 (refactor: use pydandic settings to handle configuration)
110117
),
111118
}
112119
else:
@@ -131,9 +138,13 @@ def create_graphql_json_object(**kwargs):
131138
if kwargs["dsn_mr_state"]:
132139
dsn_mr = {
133140
"id": "gid://gitlab/MergeRequest/0001",
141+
<<<<<<< HEAD
134142
"title": settings.dsn_mr_title.format(
135143
project_name=response_dict["node"]["name"]
136144
),
145+
=======
146+
"title": settings.dsn_mr_title.format(project_name=response_dict["node"]["name"]),
147+
>>>>>>> 438fae9 (refactor: use pydandic settings to handle configuration)
137148
"state": kwargs["dsn_mr_state"],
138149
}
139150
response_dict["node"]["mergeRequests"]["nodes"].append(dsn_mr)
@@ -350,38 +361,3 @@ def payload_sentry_project():
350361
sentryclirc_mr_state="merged",
351362
dsn_mr_state="merged",
352363
)
353-
354-
355-
GRAPHQL_TEST_QUERY = {
356-
"name": "TEST_QUERY",
357-
"instance": "projects",
358-
"body": """
359-
{
360-
project(fullPath: "none") {
361-
id
362-
fullPath
363-
name
364-
createdAt
365-
mergeRequestsEnabled
366-
group {
367-
name
368-
}
369-
repository {
370-
blobs {
371-
nodes {
372-
name
373-
rawTextBlob
374-
}
375-
}
376-
}
377-
mergeRequests {
378-
nodes {
379-
id
380-
title
381-
state
382-
}
383-
}
384-
}
385-
}
386-
""",
387-
}

tests/test_gitlab_provider.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ def test_project_list_query(gql_client_fixture, payload_new_project, mocker):
6464

6565
def test_get_gitlab(gitlab_provider_fixture):
6666
assert isinstance(
67-
gitlab_provider_fixture._get_gitlab(settings.gitlab_url, settings.gitlab_token),
68-
Gitlab,
67+
gitlab_provider_fixture._get_gitlab(settings.gitlab_url, settings.gitlab_token), Gitlab
6968
)
7069

7170

0 commit comments

Comments
 (0)