mreg-api 0.6.0__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. {mreg_api-0.6.0 → mreg_api-0.7.0}/CHANGELOG.md +48 -1
  2. {mreg_api-0.6.0 → mreg_api-0.7.0}/PKG-INFO +1 -1
  3. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/reference/managers.md +4 -0
  4. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/_version.py +3 -3
  5. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/client.py +13 -1
  6. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/managers.py +294 -302
  7. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/models/fields.py +2 -3
  8. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api.egg-info/PKG-INFO +1 -1
  9. mreg_api-0.7.0/mreg_api.egg-info/scm_version.json +8 -0
  10. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_hostgroups.py +138 -2
  11. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_networks.py +117 -1
  12. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_roles.py +152 -0
  13. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_zones.py +124 -0
  14. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/test_client.py +2 -0
  15. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/test_managers.py +5 -6
  16. mreg_api-0.6.0/mreg_api.egg-info/scm_version.json +0 -8
  17. {mreg_api-0.6.0 → mreg_api-0.7.0}/.claude/CLAUDE.md +0 -0
  18. {mreg_api-0.6.0 → mreg_api-0.7.0}/.github/workflows/docs.yml +0 -0
  19. {mreg_api-0.6.0 → mreg_api-0.7.0}/.github/workflows/publish.yml +0 -0
  20. {mreg_api-0.6.0 → mreg_api-0.7.0}/.github/workflows/test.yml +0 -0
  21. {mreg_api-0.6.0 → mreg_api-0.7.0}/.gitignore +0 -0
  22. {mreg_api-0.6.0 → mreg_api-0.7.0}/.markdownlint.json +0 -0
  23. {mreg_api-0.6.0 → mreg_api-0.7.0}/.pre-commit-config.yaml +0 -0
  24. {mreg_api-0.6.0 → mreg_api-0.7.0}/LICENSE +0 -0
  25. {mreg_api-0.6.0 → mreg_api-0.7.0}/NOTES.md +0 -0
  26. {mreg_api-0.6.0 → mreg_api-0.7.0}/README.md +0 -0
  27. {mreg_api-0.6.0 → mreg_api-0.7.0}/TESTING.md +0 -0
  28. {mreg_api-0.6.0 → mreg_api-0.7.0}/ci/Dockerfile +0 -0
  29. {mreg_api-0.6.0 → mreg_api-0.7.0}/ci/docker-compose.yml +0 -0
  30. {mreg_api-0.6.0 → mreg_api-0.7.0}/ci/run_tests.sh +0 -0
  31. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/_macros/main.py +0 -0
  32. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/guides/authentication.md +0 -0
  33. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/guides/caching.md +0 -0
  34. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/guides/configuration.md +0 -0
  35. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/guides/eventlog.md +0 -0
  36. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/guides/exceptions.md +0 -0
  37. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/guides/requestlog.md +0 -0
  38. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/guides/resources.md +0 -0
  39. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/index.md +0 -0
  40. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/quick-start.md +0 -0
  41. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/reference/cache.md +0 -0
  42. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/reference/client.md +0 -0
  43. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/reference/events.md +0 -0
  44. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/reference/exceptions.md +0 -0
  45. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/reference/models.md +0 -0
  46. {mreg_api-0.6.0 → mreg_api-0.7.0}/docs/reference/requestlog.md +0 -0
  47. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/__about__.py +0 -0
  48. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/__init__.py +0 -0
  49. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/cache.py +0 -0
  50. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/endpoints.py +0 -0
  51. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/events.py +0 -0
  52. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/exceptions.py +0 -0
  53. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/models/__init__.py +0 -0
  54. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/models/abstracts.py +0 -0
  55. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/models/history.py +0 -0
  56. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/models/models.py +0 -0
  57. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/py.typed +0 -0
  58. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/requestlog.py +0 -0
  59. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/types.py +0 -0
  60. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/utilities/__init__.py +0 -0
  61. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/utilities/fs.py +0 -0
  62. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api/utilities/shared.py +0 -0
  63. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api.egg-info/SOURCES.txt +0 -0
  64. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api.egg-info/dependency_links.txt +0 -0
  65. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api.egg-info/requires.txt +0 -0
  66. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api.egg-info/scm_file_list.json +0 -0
  67. {mreg_api-0.6.0 → mreg_api-0.7.0}/mreg_api.egg-info/top_level.txt +0 -0
  68. {mreg_api-0.6.0 → mreg_api-0.7.0}/pyproject.toml +0 -0
  69. {mreg_api-0.6.0 → mreg_api-0.7.0}/setup.cfg +0 -0
  70. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/__init__.py +0 -0
  71. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/conftest.py +0 -0
  72. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/__init__.py +0 -0
  73. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/conftest.py +0 -0
  74. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_atoms.py +0 -0
  75. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_cname.py +0 -0
  76. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_dhcp.py +0 -0
  77. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_host_records.py +0 -0
  78. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_hosts.py +0 -0
  79. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_ip.py +0 -0
  80. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_labels.py +0 -0
  81. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_meta.py +0 -0
  82. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_nameservers.py +0 -0
  83. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_network_policy.py +0 -0
  84. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/integration/test_permissions.py +0 -0
  85. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/models/__init__.py +0 -0
  86. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/models/test_fields.py +0 -0
  87. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/models/test_history.py +0 -0
  88. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/models/test_models.py +0 -0
  89. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/test_cache.py +0 -0
  90. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/test_events.py +0 -0
  91. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/test_exceptions.py +0 -0
  92. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/test_requestlog.py +0 -0
  93. {mreg_api-0.6.0 → mreg_api-0.7.0}/tests/test_types.py +0 -0
  94. {mreg_api-0.6.0 → mreg_api-0.7.0}/uv.lock +0 -0
  95. {mreg_api-0.6.0 → mreg_api-0.7.0}/zensical.toml +0 -0
@@ -5,7 +5,54 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- <!-- ## Unreleased -->
8
+ ## Unreleased
9
+
10
+ ### Added
11
+
12
+ - `MregClient.network.update(network=)` parameter to change the network address of an existing network.
13
+ - `MregClient.zone` now has public `forward` and `reverse` sub-managers for ID-based lookups and standalone use.
14
+ - Can also be accessed directly via new `MregClient.forward_zone` and `MregClient.reverse_zone` properties.
15
+
16
+ ### Changed
17
+
18
+ - All `create` and `update` methods now support specifying their required arguments positionally. Previously, these parameters were inconsistent and were often keyword-only.
19
+ - **BREAKING**: All `update` methods now use the name `ref` for their first parameter (the object reference). Previously named after the managed entity:
20
+ - `MregClient.host.update()`: `host=` → `ref=`
21
+ - `MregClient.hostgroup.update()`: `hostgroup=` → `ref=`
22
+ - `MregClient.label.update()`: `label=` → `ref=`
23
+ - `MregClient.role.update()`: `role=` → `ref=`
24
+ - `MregClient.atom.update()`: `atom=` → `ref=`
25
+ - `MregClient.permission.update()`: `permission=` → `ref=`
26
+ - `MregClient.network_policy_attribute.update()`: `attr=` → `ref=`
27
+ - `MregClient.network_policy.update()`: `policy=` → `ref=`
28
+ - `MregClient.network.update()`: `network=` → `ref=`
29
+ - `MregClient.ip_address.update()`: `ip=` → `ref=`
30
+ - `MregClient.cname.update()`: `cname=` → `ref=`
31
+ - `MregClient.hinfo.update()`: `hinfo=` → `ref=`
32
+ - `MregClient.naptr.update()`: `naptr=` → `ref=`
33
+ - `MregClient.srv.update()`: `srv=` → `ref=`
34
+ - `MregClient.ptr_override.update()`: `ptr=` → `ref=`
35
+ - `MregClient.sshfp.update()`: `sshfp=` → `ref=`
36
+ - `MregClient.location.update()`: `location=` → `ref=`
37
+ - **BREAKING**: `MregClient.network.update(network=)` parameter now refers to a new network address for the network, not the reference to the existing network.
38
+ - `MregClient.hostgroup.create(description=)` now takes `None` (the default) to omit the description, replacing the `UNSET` sentinel. Passing `description=None` now omits the field instead of sending a null value. This was a bug, as host groups do not support null descriptions.
39
+ - `MregClient.host.update(comment=)` parameter now takes `None` and defaults to `None`. No changes in behavior when omitted compared to before (`""` was also treated as no comment, thus not included in the payload).
40
+
41
+ ### Fixed
42
+
43
+ - Docstrings for the `ttl` parameter in `MregClient.srv.create()` and `MregClient.sshfp.create()` described update semantics ("omit to leave unchanged") that do not apply to creation. The default TTL is used when unspecified.
44
+ - `MregClient.cname.update()` docstring now documents the full set of accepted reference types (`int | str | CNAME`).
45
+
46
+ ## [0.6.1](https://github.com/unioslo/mreg-api/releases/tag/0.6.1) - 2026-10-07
47
+
48
+ ### Changed
49
+
50
+ - `MregClient.network.community.get()` now always raises `EntityNotFound` if the community cannot be found.
51
+ - `MregClient.network.community.get_by_id()` now raises `GetError` if the community cannot be found (404).
52
+
53
+ ### Removed
54
+
55
+ - Error wrappers for M2M get methods. Now uses the server's own error responses.
9
56
 
10
57
  ## [0.6.0](https://github.com/unioslo/mreg-api/releases/tag/0.6.0) - 2026-09-24
11
58
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mreg-api
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: MREG API
5
5
  Author-email: Terje Kvernes <terjekv@uio.no>
6
6
  Maintainer-email: Peder Hovdan Andresen <pederhan@uio.no>
@@ -68,6 +68,10 @@ Other managers, such as the read-only meta-endpoint managers exposed via [`MregC
68
68
 
69
69
  ::: mreg_api.managers.ZoneManager
70
70
 
71
+ ::: mreg_api.managers.ForwardZoneManager
72
+
73
+ ::: mreg_api.managers.ReverseZoneManager
74
+
71
75
  ::: mreg_api.managers.DelegationManager
72
76
 
73
77
  ::: mreg_api.managers.NameServerManager
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.6.0'
22
- __version_tuple__ = version_tuple = (0, 6, 0)
21
+ __version__ = version = '0.7.0'
22
+ __version_tuple__ = version_tuple = (0, 7, 0)
23
23
 
24
- __commit_id__ = commit_id = 'gd639af42f'
24
+ __commit_id__ = commit_id = 'g511737d41'
@@ -56,6 +56,7 @@ from mreg_api.managers import DelegationManager
56
56
  from mreg_api.managers import DhcpHostIPv4Manager
57
57
  from mreg_api.managers import DhcpHostIPv6ByIPv4Manager
58
58
  from mreg_api.managers import DhcpHostIPv6Manager
59
+ from mreg_api.managers import ForwardZoneManager
59
60
  from mreg_api.managers import HInfoManager
60
61
  from mreg_api.managers import HostGroupManager
61
62
  from mreg_api.managers import HostManager
@@ -72,6 +73,7 @@ from mreg_api.managers import NetworkPolicyAttributeManager
72
73
  from mreg_api.managers import NetworkPolicyManager
73
74
  from mreg_api.managers import PermissionManager
74
75
  from mreg_api.managers import PTROverrideManager
76
+ from mreg_api.managers import ReverseZoneManager
75
77
  from mreg_api.managers import RoleManager
76
78
  from mreg_api.managers import SrvManager
77
79
  from mreg_api.managers import SSHFPManager
@@ -389,9 +391,19 @@ class MregClient:
389
391
 
390
392
  @functools.cached_property
391
393
  def zone(self) -> ZoneManager:
392
- """Manage forward and reverse zones."""
394
+ """Manage forward and reverse zones based on their names."""
393
395
  return ZoneManager(self)
394
396
 
397
+ @functools.cached_property
398
+ def forward_zone(self) -> ForwardZoneManager:
399
+ """Manage forward zones."""
400
+ return ForwardZoneManager(self)
401
+
402
+ @functools.cached_property
403
+ def reverse_zone(self) -> ReverseZoneManager:
404
+ """Manage reverse zones."""
405
+ return ReverseZoneManager(self)
406
+
395
407
  def __init__(
396
408
  self,
397
409
  url: str,