Skip to content

refactor: use pydandic settings to handle configuration #23

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ push: build
docker push $(IMG):$(TAG)

test:
ENV="test" pytest
pytest

qa:
isort --profile black . && black . && flake8
Expand Down
3 changes: 2 additions & 1 deletion dev-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ pytest
pytest-mock
types-python-slugify
types-PyYAML
types-requests
types-requests
pytest-env==1.1.5
43 changes: 18 additions & 25 deletions gitlab2sentry/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,11 @@

from gitlab2sentry.exceptions import SentryProjectCreationFailed
from gitlab2sentry.resources import (
DSN_MR_TITLE,
G2S_STATS,
GITLAB_GRAPHQL_SUFFIX,
GITLAB_GROUP_IDENTIFIER,
GITLAB_TOKEN,
GITLAB_URL,
GRAPHQL_FETCH_PROJECT_QUERY,
GRAPHQL_LIST_PROJECTS_QUERY,
SENTRY_ORG_SLUG,
SENTRY_TOKEN,
SENTRY_URL,
SENTRYCLIRC_FILEPATH,
SENTRYCLIRC_MR_TITLE,
G2SProject,
settings,
)
from gitlab2sentry.utils import GitlabProvider, SentryProvider

Expand All @@ -43,10 +34,12 @@ def __str__(self) -> str:
return "<Gitlab2Sentry>"

def _get_gitlab_provider(self) -> GitlabProvider:
return GitlabProvider(GITLAB_URL, GITLAB_TOKEN)
return GitlabProvider(settings.gitlab_url, settings.gitlab_token)

def _get_sentry_provider(self) -> SentryProvider:
return SentryProvider(SENTRY_URL, SENTRY_TOKEN, SENTRY_ORG_SLUG)
return SentryProvider(
settings.sentry_url, settings.sentry_token, settings.sentry_org_slug
)

def _ensure_sentry_group(self, name: str) -> None:
if name not in self.sentry_groups:
Expand Down Expand Up @@ -118,12 +111,14 @@ def _get_mr_states(
sentryclirc_mr_state, dsn_mr_state = None, None
if mr_list:
for mr in mr_list:
if mr["title"] == SENTRYCLIRC_MR_TITLE.format(
if mr["title"] == settings.sentryclirc_mr_title.format(
project_name=project_name
):
if not (sentryclirc_mr_state and sentryclirc_mr_state == "opened"):
sentryclirc_mr_state = mr["state"]
elif mr["title"] == DSN_MR_TITLE.format(project_name=project_name):
elif mr["title"] == settings.dsn_mr_title.format(
project_name=project_name
):
if not (dsn_mr_state and dsn_mr_state == "opened"):
dsn_mr_state = mr["state"]
else:
Expand All @@ -138,7 +133,7 @@ def _is_group_project(self, group: Optional[Dict[str, Any]]) -> bool:

def _get_sentryclirc_file(self, blob: List[Dict[str, Any]]) -> tuple:
has_sentryclirc_file, has_dsn = False, False
if blob and blob[0]["name"] == SENTRYCLIRC_FILEPATH:
if blob and blob[0]["name"] == settings.sentryclirc_filepath:
has_sentryclirc_file = True
if blob[0].get("rawTextBlob"):
for line in blob[0]["rawTextBlob"].split("\n"):
Expand Down Expand Up @@ -191,7 +186,7 @@ def _get_paginated_projects(self) -> List[Dict[str, Any]]:
query_start_time = time.time()
logging.info(
"{}: Starting querying all Gitlab group-projects with Graphql at {}/{}".format( # noqa
self.__str__(), GITLAB_URL, GITLAB_GRAPHQL_SUFFIX
self.__str__(), settings.gitlab_url, settings.gitlab_graphql_suffix
)
)
request_gen = self.gitlab_provider.get_all_projects(GRAPHQL_LIST_PROJECTS_QUERY)
Expand All @@ -209,7 +204,7 @@ def _get_gitlab_project(self, full_path: str) -> Optional[G2SProject]:
GRAPHQL_FETCH_PROJECT_QUERY["full_path"] = full_path
logging.info(
"{}: Starting querying for specific Gitlab project with Graphql at {}/{}".format( # noqa
self.__str__(), GITLAB_URL, GITLAB_GRAPHQL_SUFFIX
self.__str__(), settings.gitlab_url, settings.gitlab_graphql_suffix
)
)
result = self.gitlab_provider.get_project(GRAPHQL_FETCH_PROJECT_QUERY)
Expand All @@ -227,7 +222,7 @@ def _get_gitlab_groups(self):
result = result_node["node"]
if self._is_group_project(result["group"]):
group_name = result["fullPath"].split("/")[0]
if group_name.startswith(GITLAB_GROUP_IDENTIFIER):
if group_name.startswith(settings.gitlab_group_identifier):
g2s_project = self._get_g2s_project(result)

if g2s_project:
Expand All @@ -245,7 +240,7 @@ def _create_sentry_project(
full_path: str,
sentry_group_name: str,
sentry_project_name: str,
sentry_project_slug: str
sentry_project_slug: str,
) -> Optional[Dict[str, Any]]:
try:
return self.sentry_provider.get_or_create_project(
Expand All @@ -271,7 +266,7 @@ def _handle_g2s_project(
self,
g2s_project: G2SProject,
sentry_group_name: str,
custom_name: Optional[str] = None
custom_name: Optional[str] = None,
) -> bool:
"""
Creates sentry project for all given gitlab projects. It
Expand Down Expand Up @@ -319,7 +314,7 @@ def _handle_g2s_project(
g2s_project.full_path,
sentry_group_name,
sentry_project_name,
sentry_project_slug
sentry_project_slug,
)

# If Sentry fails to create project skip
Expand Down Expand Up @@ -363,9 +358,7 @@ def _handle_g2s_project(
return False

def update(
self,
full_path: Optional[str] = None,
custom_name: Optional[str] = None
self, full_path: Optional[str] = None, custom_name: Optional[str] = None
) -> None:
"""
args: full_path
Expand All @@ -387,7 +380,7 @@ def update(
if g2s_project:
sentry_group_name = g2s_project.group.split("/")[0].strip()
self._handle_g2s_project(
g2s_project, sentry_group_name, custom_name # type: ignore
g2s_project, sentry_group_name, custom_name # type: ignore
)
else:
logging.info(
Expand Down
Loading
Loading