Skip to content

Commit

Permalink
Update settings getters and setters to allow optional setter_id
Browse files Browse the repository at this point in the history
  • Loading branch information
samad-yar-khan committed Apr 13, 2024
1 parent c381025 commit 0ca78ac
Showing 1 changed file with 39 additions and 87 deletions.
126 changes: 39 additions & 87 deletions apiserver/dora/api/settings.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import Dict

from flask import Blueprint
from voluptuous import Required, Schema, Coerce, All
from voluptuous import Required, Schema, Coerce, All, Optional
from werkzeug.exceptions import BadRequest, NotFound

from dora.api.request_utils import dataschema, queryschema, uuid_validator
Expand All @@ -18,18 +18,22 @@
Schema(
{
Required("setting_type"): All(str, Coerce(settings_type_validator)),
Required("setter_id"): All(str, Coerce(uuid_validator)),
Optional("setter_id"): All(str, Coerce(uuid_validator)),
}
),
)
def get_team_settings(team_id: str, setting_type: SettingType, setter_id: str):
def get_team_settings(team_id: str, setting_type: SettingType, setter_id: str = None):

query_validator = get_query_validator()

team = query_validator.team_validator(team_id)
setter = query_validator.user_validator(setter_id)

if str(setter.org_id) != str(team.org_id):
setter = None

if setter_id:
setter = query_validator.user_validator(setter_id)

if setter and str(setter.org_id) != str(team.org_id):
raise BadRequest(f"User {setter_id} does not belong to team {team_id}")

settings_service = get_settings_service()
Expand All @@ -55,21 +59,28 @@ def get_team_settings(team_id: str, setting_type: SettingType, setter_id: str):
Schema(
{
Required("setting_type"): All(str, Coerce(settings_type_validator)),
Required("setter_id"): All(str, Coerce(uuid_validator)),
Optional("setter_id"): All(str, Coerce(uuid_validator)),
Required("setting_data"): dict,
}
),
)
def put_team_settings(
team_id: str, setting_type: SettingType, setter_id: str, setting_data: Dict = None
team_id: str,
setting_type: SettingType,
setter_id: str = None,
setting_data: Dict = None,
):

query_validator = get_query_validator()

team = query_validator.team_validator(team_id)
setter = query_validator.user_validator(setter_id)

if str(setter.org_id) != str(team.org_id):
setter = None

if setter_id:
setter = query_validator.user_validator(setter_id)

if setter and str(setter.org_id) != str(team.org_id):
raise BadRequest(f"User {setter_id} does not belong to team {team_id}")

settings_service = get_settings_service()
Expand All @@ -83,92 +94,26 @@ def put_team_settings(
return adapt_configuration_settings_response(settings)


@app.route("/users/<user_id>/settings", methods={"GET"})
@queryschema(
Schema(
{
Required("setting_type"): All(str, Coerce(settings_type_validator)),
Required("setter_id"): All(str, Coerce(uuid_validator)),
}
),
)
def get_user_settings(user_id: str, setting_type: SettingType, setter_id: str):
query_validator = get_query_validator()

user = query_validator.user_validator(user_id)
setter = query_validator.user_validator(setter_id)

if str(setter.org_id) != str(user.org_id):
raise BadRequest(f"User {setter_id} does not belong to org {str(user.org_id)}")

settings_service = get_settings_service()
settings = settings_service.get_settings(
setting_type=setting_type,
entity_type=EntityType.USER,
entity_id=user_id,
)

if not settings:
settings = settings_service.save_settings(
setting_type=setting_type,
entity_type=EntityType.USER,
entity_id=user_id,
setter=setter,
)

return adapt_configuration_settings_response(settings)


@app.route("/users/<user_id>/settings", methods={"PUT"})
@dataschema(
Schema(
{
Required("setting_type"): All(str, Coerce(settings_type_validator)),
Required("setter_id"): All(str, Coerce(uuid_validator)),
Required("setting_data"): dict,
}
),
)
def put_user_settings(
user_id: str, setting_type: SettingType, setter_id: str, setting_data: Dict = None
):
query_validator = get_query_validator()

user = query_validator.user_validator(user_id)
setter = query_validator.user_validator(setter_id)

if not setter:
raise NotFound(f"User not found for user_id {setter_id}")
if str(setter.org_id) != str(user.org_id):
raise BadRequest(f"User {setter_id} does not belong to org {str(user.org_id)}")

settings_service = get_settings_service()
settings = settings_service.save_settings(
setting_type=setting_type,
entity_type=EntityType.USER,
entity_id=user_id,
setter=setter,
setting_data=setting_data,
)
return adapt_configuration_settings_response(settings)


@app.route("/orgs/<org_id>/settings", methods={"GET"})
@queryschema(
Schema(
{
Required("setting_type"): All(str, Coerce(settings_type_validator)),
Required("setter_id"): All(str, Coerce(uuid_validator)),
Optional("setter_id"): All(str, Coerce(uuid_validator)),
}
),
)
def get_org_settings(org_id: str, setting_type: SettingType, setter_id: str):
def get_org_settings(org_id: str, setting_type: SettingType, setter_id: str = None):

query_validator = get_query_validator()
org: Organization = query_validator.org_validator(org_id)
setter: Users = query_validator.user_validator(setter_id)

if str(setter.org_id) != str(org_id):
setter = None

if setter_id:
setter = query_validator.user_validator(setter_id)

if setter and str(setter.org_id) != str(org_id):
raise BadRequest(f"User {setter_id} does not belong to org {org_id}")

settings_service = get_settings_service()
Expand All @@ -194,19 +139,26 @@ def get_org_settings(org_id: str, setting_type: SettingType, setter_id: str):
Schema(
{
Required("setting_type"): All(str, Coerce(settings_type_validator)),
Required("setter_id"): All(str, Coerce(uuid_validator)),
Optional("setter_id"): All(str, Coerce(uuid_validator)),
Required("setting_data"): dict,
}
),
)
def put_org_settings(
org_id: str, setting_type: SettingType, setter_id: str, setting_data: Dict = None
org_id: str,
setting_type: SettingType,
setter_id: str = None,
setting_data: Dict = None,
):
query_validator = get_query_validator()
org: Organization = query_validator.org_validator(org_id)
setter: Users = query_validator.user_validator(setter_id)

if str(setter.org_id) != str(org_id):
setter = None

if setter_id:
setter = query_validator.user_validator(setter_id)

if setter and str(setter.org_id) != str(org_id):
raise BadRequest(f"User {setter_id} does not belong to org {org_id}")

settings_service = get_settings_service()
Expand Down

0 comments on commit 0ca78ac

Please sign in to comment.