Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into feat/dpmeta-640-inden…
Browse files Browse the repository at this point in the history
…ted-json-print
  • Loading branch information
mmwinther committed Dec 18, 2024
2 parents cd88c18 + 61d62bf commit aaaa5ed
Show file tree
Hide file tree
Showing 5 changed files with 228 additions and 8 deletions.
3 changes: 1 addition & 2 deletions src/dapla_metadata/variable_definitions/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@ def __init__(self, response_body: str) -> None:
if not available or the response is invalid.
detail (str || list): A detailed error message from the response, or
"No detail provided" if not provided. If "Constraint violation"
the detail is a list with field and message.
detail contains 'field' and 'message'.
response_body (str): The raw response body string, stored for
debugging purposes.
"""
self.detail: str | list
try:
data = json.loads(response_body)
self.status = data.get("status", "Unknown status")
Expand Down
118 changes: 115 additions & 3 deletions src/dapla_metadata/variable_definitions/variable_definition.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
from datetime import date

from dapla_metadata.variable_definitions import config
from dapla_metadata.variable_definitions._client import VardefClient
from dapla_metadata.variable_definitions.exceptions import vardef_exception_handler
from dapla_metadata.variable_definitions.generated.vardef_client.api.draft_variable_definitions_api import (
DraftVariableDefinitionsApi,
)
from dapla_metadata.variable_definitions.generated.vardef_client.api.patches_api import (
PatchesApi,
)
Expand All @@ -8,6 +15,15 @@
from dapla_metadata.variable_definitions.generated.vardef_client.models.complete_response import (
CompleteResponse,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.patch import (
Patch,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.update_draft import (
UpdateDraft,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.validity_period import (
ValidityPeriod,
)


class CompletePatchOutput(CompleteResponse):
Expand Down Expand Up @@ -43,7 +59,8 @@ def from_model(
"""Create a VariableDefinition instance from a CompleteResponse or CompletePatchOutput."""
return VariableDefinition.model_construct(**model.model_dump())

def list_validity_periods(self) -> list[CompletePatchOutput]:
@vardef_exception_handler
def list_validity_periods(self) -> list[CompleteResponse]:
"""List all Validity Periods for this Variable Definition."""
return [
CompletePatchOutput.from_model(validity_period)
Expand All @@ -54,7 +71,8 @@ def list_validity_periods(self) -> list[CompletePatchOutput]:
)
]

def list_patches(self) -> list[CompletePatchOutput]:
@vardef_exception_handler
def list_patches(self) -> list[CompleteResponse]:
"""List all Patches for this Variable Definition."""
return [
CompletePatchOutput.from_model(patch)
Expand All @@ -63,7 +81,51 @@ def list_patches(self) -> list[CompletePatchOutput]:
)
]

def get_patch(self, patch_id: int) -> CompletePatchOutput:
@vardef_exception_handler
def update_draft(
self,
update_draft: UpdateDraft,
) -> CompleteResponse:
"""Update this Variable definition.
Variable definition must have status 'DRAFT'.
Args:
update_draft: The input with updated values.
Returns:
CompleteResponse: Updated Variable definition with all details.
"""
return DraftVariableDefinitionsApi(
VardefClient.get_client(),
).update_variable_definition_by_id(
variable_definition_id=self.id,
active_group=config.get_active_group(),
update_draft=update_draft,
)

@vardef_exception_handler
def delete_draft(
self,
) -> str:
"""Delete this Variable definition.
Variable definition must have status 'DRAFT'.
Returns:
str: A message if the operation was succsessful.
"""
DraftVariableDefinitionsApi(
VardefClient.get_client(),
).delete_variable_definition_by_id(
variable_definition_id=self.id,
active_group=config.get_active_group(),
)
return f"Variable {self.id} safely deleted"

@vardef_exception_handler
def get_patch(self, patch_id: int) -> CompleteResponse:
"""Get a single Patch by ID.
Args:
Expand All @@ -78,3 +140,53 @@ def get_patch(self, patch_id: int) -> CompletePatchOutput:
patch_id=patch_id,
),
)

@vardef_exception_handler
def create_patch(
self,
patch: Patch,
valid_from: date | None = None,
) -> CompleteResponse:
"""Create a new patch for this Variable definition.
Args:
patch: The input for a new patch.
valid_from: Optional date for selecting validity period to create patch in.
If value is None the patch is created in the last validity period.
Returns:
CompleteResponse: Variable definition with all details.
"""
return PatchesApi(
VardefClient.get_client(),
).create_patch(
variable_definition_id=self.id,
active_group=config.get_active_group(),
patch=patch,
valid_from=valid_from,
)

@vardef_exception_handler
def create_validity_period(
self,
validity_period: ValidityPeriod,
) -> CompleteResponse:
"""Create a new validity period for this Variable definition.
In order to create a new validity period input must contain updated
'definition' text for all present languages and a new valid from.
Args:
validity_period: The input for new validity period
Returns:
CompleteResponse: Variable definition with all details.
"""
return ValidityPeriodsApi(
VardefClient.get_client(),
).create_validity_period(
variable_definition_id=self.id,
active_group=config.get_active_group(),
validity_period=validity_period,
)
34 changes: 33 additions & 1 deletion tests/variable_definitions/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
from dapla_metadata.variable_definitions.generated.vardef_client.models.patch import (
Patch,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.person import (
Person,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.update_draft import (
UpdateDraft,
)
Expand All @@ -34,6 +37,8 @@
from dapla_metadata.variable_definitions.generated.vardef_client.models.variable_status import (
VariableStatus,
)
from dapla_metadata.variable_definitions.variable_definition import VariableDefinition
from tests.utils.constants import VARDEF_EXAMPLE_DEFINITION_ID
from tests.utils.microcks_testcontainer import MicrocksContainer


Expand Down Expand Up @@ -85,6 +90,34 @@ def draft(language_string_type, contact) -> Draft:
)


@pytest.fixture
def variable_definition(language_string_type, contact, owner) -> VariableDefinition:
return VariableDefinition(
id=VARDEF_EXAMPLE_DEFINITION_ID,
patch_id=1,
name=language_string_type,
short_name="var_test",
definition=language_string_type,
classification_reference="91",
unit_types=["01"],
subject_fields=["a", "b"],
contains_special_categories_of_personal_data=True,
variable_status=VariableStatus.PUBLISHED_EXTERNAL,
measurement_type="test",
valid_from=date(2024, 11, 1),
valid_until=None,
external_reference_uri="http://www.example.com",
comment=language_string_type,
related_variable_definition_uris=["http://www.example.com"],
contact=contact,
owner=owner,
created_at=date(2024, 11, 1),
created_by=Person(code="724", name="name"),
last_updated_at=date(2024, 11, 1),
last_updated_by=Person(code="724", name="name"),
)


@pytest.fixture
def update_draft(language_string_type, contact, owner) -> UpdateDraft:
return UpdateDraft(
Expand Down Expand Up @@ -136,7 +169,6 @@ def patch(language_string_type, contact, owner) -> Patch:
contains_special_categories_of_personal_data=True,
variable_status=VariableStatus.PUBLISHED_EXTERNAL,
measurement_type="test",
valid_until=date(2024, 11, 1),
external_reference_uri="http://www.example.com",
comment=language_string_type,
related_variable_definition_uris=["http://www.example.com"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1284,7 +1284,7 @@ paths:
Create patch:
value:
id: wypvb3wd
patch_id: 1
patch_id: 2
name:
en: Country Background
nb: Landbakgrunn
Expand Down Expand Up @@ -1321,7 +1321,7 @@ paths:
subject_fields:
- he04
contains_special_categories_of_personal_data: true
variable_status: DRAFT
variable_status: PUBLISHED_INTERNAL
valid_from: 2003-01-01
external_reference_uri: https://www.ssb.no/a/metadata/conceptvariable/vardok/1919/nb
comment:
Expand Down
77 changes: 77 additions & 0 deletions tests/variable_definitions/test_vardef.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,21 @@
from dapla_metadata.variable_definitions.generated.vardef_client.models.complete_response import (
CompletePatchOutput,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.complete_response import (
CompleteResponse,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.draft import (
Draft,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.patch import (
Patch,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.update_draft import (
UpdateDraft,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.validity_period import (
ValidityPeriod,
)
from dapla_metadata.variable_definitions.generated.vardef_client.models.variable_status import (
VariableStatus,
)
Expand All @@ -22,6 +34,8 @@
from tests.utils.constants import VARDEF_EXAMPLE_DATE
from tests.utils.constants import VARDEF_EXAMPLE_DEFINITION_ID

PATCH_ID = 2


def test_list_variable_definitions(client_configuration: Configuration):
VardefClient.set_config(client_configuration)
Expand Down Expand Up @@ -111,3 +125,66 @@ def test_migrate_from_vardok(
assert my_draft.id is not None
assert my_draft.patch_id == 1
assert my_draft.variable_status == VariableStatus.DRAFT


def test_update_draft(
monkeypatch: pytest.MonkeyPatch,
client_configuration: Configuration,
update_draft: UpdateDraft,
):
monkeypatch.setenv(DAPLA_GROUP_CONTEXT, VARDEF_EXAMPLE_ACTIVE_GROUP)
VardefClient.set_config(client_configuration)
my_draft = Vardef.get_variable_definition(
variable_definition_id=VARDEF_EXAMPLE_DEFINITION_ID,
)
assert isinstance(my_draft.update_draft(update_draft), CompleteResponse)


def test_delete_draft(
monkeypatch: pytest.MonkeyPatch,
client_configuration: Configuration,
):
monkeypatch.setenv(DAPLA_GROUP_CONTEXT, VARDEF_EXAMPLE_ACTIVE_GROUP)
VardefClient.set_config(client_configuration)
my_draft = Vardef.get_variable_definition(
variable_definition_id=VARDEF_EXAMPLE_DEFINITION_ID,
)
assert my_draft.id is not None
result = my_draft.delete_draft()
assert result == f"Variable {VARDEF_EXAMPLE_DEFINITION_ID} safely deleted"


def test_create_patch(
monkeypatch: pytest.MonkeyPatch,
client_configuration: Configuration,
patch: Patch,
variable_definition: VariableDefinition,
):
monkeypatch.setenv(DAPLA_GROUP_CONTEXT, VARDEF_EXAMPLE_ACTIVE_GROUP)
VardefClient.set_config(client_configuration)
my_variable = variable_definition
assert my_variable.patch_id == 1
created_patch = my_variable.create_patch(
patch=patch,
valid_from=VARDEF_EXAMPLE_DATE,
)
assert isinstance(
created_patch,
CompleteResponse,
)
assert created_patch.patch_id == PATCH_ID


def test_create_validity_period(
monkeypatch: pytest.MonkeyPatch,
client_configuration: Configuration,
validity_period: ValidityPeriod,
variable_definition: VariableDefinition,
):
monkeypatch.setenv(DAPLA_GROUP_CONTEXT, VARDEF_EXAMPLE_ACTIVE_GROUP)
VardefClient.set_config(client_configuration)
my_variable = variable_definition
assert isinstance(
my_variable.create_validity_period(validity_period),
CompleteResponse,
)

0 comments on commit aaaa5ed

Please sign in to comment.