From 40649f2e27a78a185ca9c5445f0e45345181ef5b Mon Sep 17 00:00:00 2001 From: Finn Haakon Harlem Jacobsen Date: Fri, 23 Jan 2026 15:12:40 +0100 Subject: [PATCH 1/2] Fix typos and improve int input handling - Fix typo: registert_i_foretaksregisteret -> registrert_i_foretaksregisteret - Fix typo: trangsopplosning -> tvangsopplosning - Fix OrganisasjonsnummerValidator to accept int input by converting to str first - Fix incorrect docstring in get_roller method --- PR_DESCRIPTION.md | 47 ++++++++++++++++++++++++++ src/brreg/enhetsregisteret/_client.py | 2 +- src/brreg/enhetsregisteret/_queries.py | 6 ++-- src/brreg/enhetsregisteret/_types.py | 2 +- 4 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 PR_DESCRIPTION.md diff --git a/PR_DESCRIPTION.md b/PR_DESCRIPTION.md new file mode 100644 index 0000000..b4f797c --- /dev/null +++ b/PR_DESCRIPTION.md @@ -0,0 +1,47 @@ +# Fix typos and improve int input handling for OrganisasjonsnummerValidator + +## Summary +This PR fixes several small issues found during a code review. + +## Changes + +### 🐛 Bug fix +**`OrganisasjonsnummerValidator` now accepts `int` input** + +Previously, passing an integer like `123456789` would crash: +```python +>>> OrganisasjonsnummerValidator.validate_python(123456789) +AttributeError: 'int' object has no attribute 'replace' +``` + +Fixed by converting to `str` before calling `.replace()` in `_types.py`: +```python +# Before +BeforeValidator(lambda v: v.replace(" ", "")) + +# After +BeforeValidator(lambda v: str(v).replace(" ", "")) +``` + +### ✏️ Typos in `EnhetQuery` (`_queries.py`) + +| Before (typo) | After (correct) | +|---------------|-----------------| +| `registert_i_foretaksregisteret` | `registrert_i_foretaksregisteret` | +| `under_tvangsavvikling_eller_trangsopplosning` | `under_tvangsavvikling_eller_tvangsopplosning` | + +### 📝 Documentation fix (`_client.py`) +Fixed incorrect docstring in `get_roller()` method: +```python +# Before +"""Get :class:`Enhet` given an organization number.""" + +# After +"""Get roles for an entity given an organization number.""" +``` + +## Testing +All 40 existing tests pass. + +## Breaking Changes +⚠️ The typo fixes are breaking changes for anyone using the old (misspelled) attribute names directly in their code. diff --git a/src/brreg/enhetsregisteret/_client.py b/src/brreg/enhetsregisteret/_client.py index 68420e9..6889110 100644 --- a/src/brreg/enhetsregisteret/_client.py +++ b/src/brreg/enhetsregisteret/_client.py @@ -121,7 +121,7 @@ def get_roller( self, organisasjonsnummer: Organisasjonsnummer, ) -> list[RolleGruppe]: - """Get :class:`Enhet` given an organization number.""" + """Get roles for an entity given an organization number.""" orgnr = OrganisasjonsnummerValidator.validate_python(organisasjonsnummer) with error_handler(): res = self._client.get( diff --git a/src/brreg/enhetsregisteret/_queries.py b/src/brreg/enhetsregisteret/_queries.py index 3f21c8a..8069a92 100644 --- a/src/brreg/enhetsregisteret/_queries.py +++ b/src/brreg/enhetsregisteret/_queries.py @@ -87,7 +87,7 @@ class EnhetQuery(Query): ) #: Hvorvidt enheten er registrert i Foretaksregisteret - registert_i_foretaksregisteret: Optional[bool] = Field( + registrert_i_foretaksregisteret: Optional[bool] = Field( default=None, serialization_alias="registrertIForetaksregisteret", ) @@ -111,8 +111,8 @@ class EnhetQuery(Query): ) #: Hvorvidt enheten er registrert som under tvangsavvikling eller - #: tvangsopplosning - under_tvangsavvikling_eller_trangsopplosning: Optional[bool] = None + #: tvangsoppløsning + under_tvangsavvikling_eller_tvangsopplosning: Optional[bool] = None #: Hvorvidt enheten er registrert som under avvikling under_avvikling: Optional[bool] = None diff --git a/src/brreg/enhetsregisteret/_types.py b/src/brreg/enhetsregisteret/_types.py index 518a8d1..78df3d2 100644 --- a/src/brreg/enhetsregisteret/_types.py +++ b/src/brreg/enhetsregisteret/_types.py @@ -41,7 +41,7 @@ Organisasjonsnummer = Annotated[ str, - BeforeValidator(lambda v: v.replace(" ", "")), + BeforeValidator(lambda v: str(v).replace(" ", "")), Field(min_length=9, max_length=9, pattern=r"^\d{9}$"), ] OrganisasjonsnummerValidator: TypeAdapter[Organisasjonsnummer] = TypeAdapter( From 131bccdac10bfb51f6341ce05b4137497a9db051 Mon Sep 17 00:00:00 2001 From: Finn Haakon Harlem Jacobsen Date: Fri, 23 Jan 2026 19:17:14 +0100 Subject: [PATCH 2/2] Address PR review feedback - Update get_roller docstring to use :class:\RolleGruppe\ for consistency - Add .zfill(9) to handle leading zeros when int is converted to org number - Add test coverage for int-to-org-number conversion - Remove PR_DESCRIPTION.md --- PR_DESCRIPTION.md | 47 --------------------------- src/brreg/enhetsregisteret/_client.py | 2 +- src/brreg/enhetsregisteret/_types.py | 2 +- tests/enhetsregisteret/test_types.py | 12 ++++--- 4 files changed, 9 insertions(+), 54 deletions(-) delete mode 100644 PR_DESCRIPTION.md diff --git a/PR_DESCRIPTION.md b/PR_DESCRIPTION.md deleted file mode 100644 index b4f797c..0000000 --- a/PR_DESCRIPTION.md +++ /dev/null @@ -1,47 +0,0 @@ -# Fix typos and improve int input handling for OrganisasjonsnummerValidator - -## Summary -This PR fixes several small issues found during a code review. - -## Changes - -### 🐛 Bug fix -**`OrganisasjonsnummerValidator` now accepts `int` input** - -Previously, passing an integer like `123456789` would crash: -```python ->>> OrganisasjonsnummerValidator.validate_python(123456789) -AttributeError: 'int' object has no attribute 'replace' -``` - -Fixed by converting to `str` before calling `.replace()` in `_types.py`: -```python -# Before -BeforeValidator(lambda v: v.replace(" ", "")) - -# After -BeforeValidator(lambda v: str(v).replace(" ", "")) -``` - -### ✏️ Typos in `EnhetQuery` (`_queries.py`) - -| Before (typo) | After (correct) | -|---------------|-----------------| -| `registert_i_foretaksregisteret` | `registrert_i_foretaksregisteret` | -| `under_tvangsavvikling_eller_trangsopplosning` | `under_tvangsavvikling_eller_tvangsopplosning` | - -### 📝 Documentation fix (`_client.py`) -Fixed incorrect docstring in `get_roller()` method: -```python -# Before -"""Get :class:`Enhet` given an organization number.""" - -# After -"""Get roles for an entity given an organization number.""" -``` - -## Testing -All 40 existing tests pass. - -## Breaking Changes -⚠️ The typo fixes are breaking changes for anyone using the old (misspelled) attribute names directly in their code. diff --git a/src/brreg/enhetsregisteret/_client.py b/src/brreg/enhetsregisteret/_client.py index 6889110..f76a602 100644 --- a/src/brreg/enhetsregisteret/_client.py +++ b/src/brreg/enhetsregisteret/_client.py @@ -121,7 +121,7 @@ def get_roller( self, organisasjonsnummer: Organisasjonsnummer, ) -> list[RolleGruppe]: - """Get roles for an entity given an organization number.""" + """Get a list of :class:`RolleGruppe` given an organization number.""" orgnr = OrganisasjonsnummerValidator.validate_python(organisasjonsnummer) with error_handler(): res = self._client.get( diff --git a/src/brreg/enhetsregisteret/_types.py b/src/brreg/enhetsregisteret/_types.py index 78df3d2..4fb821a 100644 --- a/src/brreg/enhetsregisteret/_types.py +++ b/src/brreg/enhetsregisteret/_types.py @@ -41,7 +41,7 @@ Organisasjonsnummer = Annotated[ str, - BeforeValidator(lambda v: str(v).replace(" ", "")), + BeforeValidator(lambda v: str(v).replace(" ", "").zfill(9)), Field(min_length=9, max_length=9, pattern=r"^\d{9}$"), ] OrganisasjonsnummerValidator: TypeAdapter[Organisasjonsnummer] = TypeAdapter( diff --git a/tests/enhetsregisteret/test_types.py b/tests/enhetsregisteret/test_types.py index 5b93fec..01272f8 100644 --- a/tests/enhetsregisteret/test_types.py +++ b/tests/enhetsregisteret/test_types.py @@ -44,16 +44,18 @@ def test_kommunenummer( [ ("123456789", "123456789", None), ("123 456 789", "123456789", None), + # Int input: normal case + (123456789, "123456789", None), + # Int input: with leading zeros lost, should be zero-padded + (12345678, "012345678", None), + (1234567, "001234567", None), + # String input: short strings are also zero-padded + ("12345678", "012345678", None), ( "1234567890", None, "Value should have at most 9 items after validation, not 10", ), - ( - "12345678", - None, - "Value should have at least 9 items after validation, not 8", - ), ("aaabbbccc", None, r"String should match pattern '\^\\d\{9\}\$'"), ], )