commonground-api-common 2.6.0__py3-none-any.whl → 2.6.2__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: commonground-api-common
3
- Version: 2.6.0
3
+ Version: 2.6.2
4
4
  Summary: Commonground API tooling
5
5
  Home-page: https://github.com/maykinmedia/commonground-api-common
6
6
  Author: Maykin Media, VNG-Realisatie
@@ -28,7 +28,6 @@ Requires-Dist: django-rest-framework-condition
28
28
  Requires-Dist: drf-nested-routers>=0.94.1
29
29
  Requires-Dist: drf-spectacular
30
30
  Requires-Dist: iso-639
31
- Requires-Dist: isodate
32
31
  Requires-Dist: notifications-api-common>=0.3.1
33
32
  Requires-Dist: zgw-consumers>=0.35.1
34
33
  Requires-Dist: oyaml
@@ -1,5 +1,5 @@
1
- commonground_api_common-2.6.0.data/scripts/generate_schema,sha256=OpKgzlFc_uzA3TVW_vHSYXAD_feLaCdTEnkWjIcxVzA,280
2
- vng_api_common/__init__.py,sha256=OEib63e0yPEGlhEXyrWE1OwRnleR0cHI7KSX7oZEQLs,22
1
+ commonground_api_common-2.6.2.data/scripts/generate_schema,sha256=OpKgzlFc_uzA3TVW_vHSYXAD_feLaCdTEnkWjIcxVzA,280
2
+ vng_api_common/__init__.py,sha256=53Sii4w6BIWn-1RhaTyqUO46gDe4nDCRQDAcpsWFH24,22
3
3
  vng_api_common/admin.py,sha256=iFtUPGf-ha0I-bXgq8QIFrP23Kzk_H3FlgAjt0U-ip0,259
4
4
  vng_api_common/apps.py,sha256=QQiJXRmjX9Q91oh0P9fvVnHe3NSYd1cEcUUBw0HLBCA,3690
5
5
  vng_api_common/checks.py,sha256=tOyfV7MMLGh4anrd_W30LvJCxiyQ4sFs1mGd9mtrEc0,1175
@@ -14,7 +14,7 @@ vng_api_common/exception_handling.py,sha256=Z8Si1-GPWaTtsgaFI_zLOvlnLVLM8jqfgFIi
14
14
  vng_api_common/exceptions.py,sha256=7Qk5dlETjoQjZeGRKei4PkeLACLoZOMrMiuyi-yn6Kk,615
15
15
  vng_api_common/fields.py,sha256=1911m0CKEU-5-2t_h5P-D2YjC8BGosx8t8FQ-SGfgFw,6335
16
16
  vng_api_common/filters.py,sha256=oPivwrES1BQgSUg1jD9hJab7dyoO3VbZDVbbRRiW2SQ,5618
17
- vng_api_common/filtersets.py,sha256=Ioarp5t_cz6Hf3iIcP2Rc0D7tGYhcMQPVdIJJ2dvtv8,867
17
+ vng_api_common/filtersets.py,sha256=CpmuOg6jGKFDwVeCusax-CBI7tv-EuOSBLwewdkLu1Y,1256
18
18
  vng_api_common/generators.py,sha256=88yQN5-vRFUegfzQcsZtlpbtQyn_zZQwvs20OidPK7M,1239
19
19
  vng_api_common/geo.py,sha256=AZbrw0rwGYOmaSUk8JJSkx-4_tVrfT_cgggh9omRwhU,1862
20
20
  vng_api_common/middleware.py,sha256=2DRw0hPpvUMqwoH1Ze8S7tDB16lmj4Bnd6vN5ijkGM8,875
@@ -28,7 +28,7 @@ vng_api_common/routers.py,sha256=hEnhBulkgMM-7W_lYaykKTgTBj3-avl7DGsR9P7BbTU,189
28
28
  vng_api_common/schema.py,sha256=axs2Q8IXwpHNd5WscQg5xOErL6bWhP8WFItTt4xCFO4,16305
29
29
  vng_api_common/scopes.py,sha256=PGs6CkXorAAdWXGFY1bSy-jmsPn122Njen9aFFOpFIQ,2351
30
30
  vng_api_common/search.py,sha256=yehS6boCOk1JXLCqAMU-B62hWtbTBSf_WKIVGPgp0Mg,1045
31
- vng_api_common/serializers.py,sha256=ErIoN1br71eszZ-hRgVUycjQkK6rJNkT5ygsagZoGNg,14084
31
+ vng_api_common/serializers.py,sha256=D0DEw-iw4se1MLAlDw25G6q4g1BTEL3VXcuvMTj6qlk,13462
32
32
  vng_api_common/urls.py,sha256=9IWHYLlEIIHNaZ_Zq02qNQ2HJpETb7o-89r7yBM_tQs,270
33
33
  vng_api_common/utils.py,sha256=EHqVjZhtqnbU7YrqgYIBss28Sd19jtnTLNaMWLfj3Zw,8203
34
34
  vng_api_common/validators.py,sha256=ejaFZvFXFaBlqxjA2_07NSHKHlG5pejrfC_GHjwCj6E,12852
@@ -183,7 +183,7 @@ vng_api_common/tests/auth.py,sha256=IKDWTEFv4Bign4F70-ibsFcnJqRxEJaXvqaPQJWa1xY,
183
183
  vng_api_common/tests/caching.py,sha256=zfIw5cRRvO9cekHZZKfRqZc8cx5IfJUYNmcH6cuIMg4,624
184
184
  vng_api_common/tests/schema.py,sha256=WDvifDQQiKqIpQijpeQ7rYkFroJmuPuHe7zNhl1Bigk,2293
185
185
  vng_api_common/tests/urls.py,sha256=PFrYzQbBC0TFPMEn3uPhcBG0IQs9JsEPqckicJT1UA4,2159
186
- commonground_api_common-2.6.0.dist-info/METADATA,sha256=HsGhhHvzoGLHlqzsYvNxs_qrG76ym2BtbcCX3u7jqx8,6988
187
- commonground_api_common-2.6.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
188
- commonground_api_common-2.6.0.dist-info/top_level.txt,sha256=vPismc83zPzWXTmlNCCwfDlFV9iygJYxNJW5iDjKTgw,15
189
- commonground_api_common-2.6.0.dist-info/RECORD,,
186
+ commonground_api_common-2.6.2.dist-info/METADATA,sha256=wBqB31TZDGKWyv6an6TP8I6tBFwVUgnQed6gevn6mWg,6965
187
+ commonground_api_common-2.6.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
188
+ commonground_api_common-2.6.2.dist-info/top_level.txt,sha256=vPismc83zPzWXTmlNCCwfDlFV9iygJYxNJW5iDjKTgw,15
189
+ commonground_api_common-2.6.2.dist-info/RECORD,,
@@ -1 +1 @@
1
- __version__ = "2.6.0"
1
+ __version__ = "2.6.2"
@@ -25,3 +25,13 @@ class FilterSet(filterset.FilterSet):
25
25
  """
26
26
 
27
27
  FILTER_DEFAULTS = FILTER_FOR_DBFIELD_DEFAULTS
28
+
29
+ @classmethod
30
+ def filter_for_field(cls, field, field_name, lookup_expr=None):
31
+ """
32
+ Add help texts for model field filters
33
+ """
34
+ filter_set = super().filter_for_field(field, field_name, lookup_expr)
35
+ if not filter_set.extra.get("help_text"):
36
+ filter_set.extra["help_text"] = getattr(field, "help_text", None)
37
+ return filter_set
@@ -1,4 +1,3 @@
1
- import datetime
2
1
  import inspect
3
2
  from collections import OrderedDict
4
3
  from functools import reduce
@@ -8,7 +7,7 @@ from django.db import models, transaction
8
7
  from django.db.models import Model
9
8
  from django.utils.translation import gettext_lazy as _
10
9
 
11
- import isodate
10
+ from dateutil.relativedelta import relativedelta
12
11
  from rest_framework import fields, serializers
13
12
  from rest_framework.request import Request
14
13
  from rest_framework_nested.relations import NestedHyperlinkedRelatedField
@@ -18,41 +17,29 @@ from .descriptors import GegevensGroepType
18
17
 
19
18
  try:
20
19
  # 1.1.x
21
- from relativedeltafield.utils import format_relativedelta, relativedelta
20
+ from relativedeltafield.utils import format_relativedelta, parse_relativedelta
22
21
  except ImportError:
23
22
  try:
24
23
  # 1.0.x
25
- from relativedeltafield import format_relativedelta, relativedelta
24
+ from relativedeltafield import format_relativedelta, parse_relativedelta
26
25
  except ImportError:
27
26
  format_relativedelta = None
28
- relativedelta = None
27
+ parse_relativedelta = None
29
28
 
30
29
 
31
30
  class DurationField(fields.DurationField):
32
31
  def to_internal_value(self, value):
33
- if isinstance(value, datetime.timedelta):
32
+ if isinstance(value, relativedelta):
34
33
  return value
35
34
  try:
36
- parsed = isodate.parse_duration(str(value))
37
- except isodate.ISO8601Error:
35
+ return parse_relativedelta(str(value))
36
+ except ValueError:
38
37
  self.fail("invalid", format="P(n)Y(n)M(n)D")
39
- else:
40
- if isinstance(parsed, isodate.Duration):
41
- # TODO: start should probably be a proper object, but we should
42
- # really switch to relativedeltafield
43
- parsed = parsed.totimedelta(start=datetime.datetime.now())
44
- assert isinstance(parsed, datetime.timedelta)
45
- return parsed
46
38
 
47
39
  def to_representation(self, value) -> Optional[str]:
48
- if relativedelta and isinstance(value, relativedelta):
49
- # relativedeltafield 1.1.2 returns a relativedelta() object with no duration,
50
- # to keep behaviour consistent with older versions, change that to `None`
51
- if not value:
52
- return None
40
+ if isinstance(value, relativedelta):
53
41
  return format_relativedelta(value)
54
-
55
- return isodate.duration_isoformat(value)
42
+ return None
56
43
 
57
44
 
58
45
  class FieldValidationErrorSerializer(serializers.Serializer):