django-pfx 1.2.dev36__tar.gz → 1.2.dev38__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 (87) hide show
  1. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/PKG-INFO +1 -1
  2. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/django_pfx.egg-info/PKG-INFO +1 -1
  3. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/__init__.py +2 -0
  4. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/management/commands/makeapidoc.py +8 -1
  5. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/views/rest_views.py +5 -1
  6. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_api_doc.py +20 -14
  7. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/.gitignore +0 -0
  8. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/.gitlab-ci.yml +0 -0
  9. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/.pre-commit-config.yaml +0 -0
  10. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/LICENSE +0 -0
  11. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/MANIFEST.in +0 -0
  12. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/README.md +0 -0
  13. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/django_pfx.egg-info/SOURCES.txt +0 -0
  14. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/django_pfx.egg-info/dependency_links.txt +0 -0
  15. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/django_pfx.egg-info/requires.txt +0 -0
  16. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/django_pfx.egg-info/top_level.txt +0 -0
  17. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/img/pfx.png +0 -0
  18. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/img/pfx.svg +0 -0
  19. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/__init__.py +0 -0
  20. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/apps.py +0 -0
  21. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/decorator/__init__.py +0 -0
  22. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/decorator/rest.py +0 -0
  23. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/default_settings.py +0 -0
  24. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/exceptions.py +0 -0
  25. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/fields.py +0 -0
  26. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/http/__init__.py +0 -0
  27. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/http/json_response.py +0 -0
  28. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
  29. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
  30. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/management/__init__.py +0 -0
  31. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/management/commands/__init__.py +0 -0
  32. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/middleware/__init__.py +0 -0
  33. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/middleware/authentication.py +0 -0
  34. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/middleware/locale.py +0 -0
  35. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/models/__init__.py +0 -0
  36. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/models/cache_mixins.py +0 -0
  37. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/models/not_null_fields.py +0 -0
  38. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/models/pfx_models.py +0 -0
  39. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
  40. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/serializers/__init__.py +0 -0
  41. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/serializers/json.py +0 -0
  42. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/settings.py +0 -0
  43. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/shortcuts.py +0 -0
  44. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/storage/__init__.py +0 -0
  45. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/storage/s3_storage.py +0 -0
  46. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
  47. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
  48. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
  49. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
  50. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/test.py +0 -0
  51. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/urls.py +0 -0
  52. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/views/__init__.py +0 -0
  53. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/views/authentication_views.py +0 -0
  54. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/views/fields.py +0 -0
  55. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/views/filters_views.py +0 -0
  56. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pfx/pfxcore/views/locale_views.py +0 -0
  57. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/pyproject.toml +0 -0
  58. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/requirements.txt +0 -0
  59. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/runtest.py +0 -0
  60. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/setup.cfg +0 -0
  61. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/setup.py +0 -0
  62. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/__init__.py +0 -0
  63. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/models.py +0 -0
  64. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/settings/__init__.py +0 -0
  65. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/settings/ci.py +0 -0
  66. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/settings/common.py +0 -0
  67. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/settings/dev.py +0 -0
  68. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/settings/dev_custom_example.py +0 -0
  69. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/settings/dev_default.py +0 -0
  70. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/__init__.py +0 -0
  71. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/basic_api_errors.py +0 -0
  72. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/basic_api_test.py +0 -0
  73. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_auth_api.py +0 -0
  74. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_cache.py +0 -0
  75. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_fields.py +0 -0
  76. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_filters.py +0 -0
  77. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_locale_api.py +0 -0
  78. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_perm_tests.py +0 -0
  79. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_perms_api.py +0 -0
  80. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_shortcuts.py +0 -0
  81. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_timezone_middleware.py +0 -0
  82. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_tools.py +0 -0
  83. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_user_queryset.py +0 -0
  84. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_view_decorators.py +0 -0
  85. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/tests/test_view_fields.py +0 -0
  86. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/urls.py +0 -0
  87. {django-pfx-1.2.dev36 → django-pfx-1.2.dev38}/tests/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-pfx
3
- Version: 1.2.dev36
3
+ Version: 1.2.dev38
4
4
  Summary: Django PFX is a toolkit to build web APIs dedicated to be used by React progressive web app.
5
5
  Author: Hervé Martinet
6
6
  Author-email: herve.martinet@gmail.com
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-pfx
3
- Version: 1.2.dev36
3
+ Version: 1.2.dev38
4
4
  Summary: Django PFX is a toolkit to build web APIs dedicated to be used by React progressive web app.
5
5
  Author: Hervé Martinet
6
6
  Author-email: herve.martinet@gmail.com
@@ -1,3 +1,5 @@
1
1
  from .shortcuts import register_views
2
2
 
3
3
  default_app_config = 'pfx.pfxcore.apps.PfxCoreConfig'
4
+
5
+ __PFX_VIEWS__ = []
@@ -5,6 +5,7 @@ from django.core.management.base import BaseCommand
5
5
 
6
6
  from apispec import APISpec
7
7
 
8
+ from pfx.pfxcore import __PFX_VIEWS__
8
9
  from pfx.pfxcore.settings import PFXSettings
9
10
 
10
11
  settings = PFXSettings()
@@ -15,7 +16,13 @@ DEFAULT_TEMPLATE = dict(
15
16
 
16
17
 
17
18
  def get_spec():
18
- return APISpec(**{**DEFAULT_TEMPLATE, **settings.PFX_OPENAPI_TEMPLATE})
19
+ spec = APISpec(**{**DEFAULT_TEMPLATE, **settings.PFX_OPENAPI_TEMPLATE})
20
+ for view in __PFX_VIEWS__:
21
+ for url in view.get_urls():
22
+ spec.path(
23
+ path=url['path'],
24
+ operations={k: {} for k, v in url['methods'].items()})
25
+ return spec
19
26
 
20
27
 
21
28
  class Command(BaseCommand):
@@ -12,6 +12,7 @@ from django.urls import path
12
12
  from django.utils.translation import gettext_lazy as _
13
13
  from django.views import View
14
14
 
15
+ from pfx.pfxcore import __PFX_VIEWS__
15
16
  from pfx.pfxcore.decorator import rest_api
16
17
  from pfx.pfxcore.exceptions import (
17
18
  APIError,
@@ -553,7 +554,8 @@ class BaseRestView(SecuredRestViewMixin, View):
553
554
  @classmethod
554
555
  def get_urls(cls, as_pattern=False):
555
556
  def fullpath(p2):
556
- return f'{cls.rest_view_path}{p2}'.lstrip('/')
557
+ res = f'{cls.rest_view_path}{p2}'.lstrip('/')
558
+ return res if as_pattern else f'/{res}'
557
559
 
558
560
  paths = {}
559
561
  for name in dir(cls):
@@ -577,6 +579,8 @@ class BaseRestView(SecuredRestViewMixin, View):
577
579
 
578
580
  @classmethod
579
581
  def as_urlpatterns(cls):
582
+ if cls not in __PFX_VIEWS__:
583
+ __PFX_VIEWS__.append(cls)
580
584
  return cls.get_urls(as_pattern=True)
581
585
 
582
586
 
@@ -24,24 +24,30 @@ class ApiDocTest(TestAssertMixin, TestCase):
24
24
  self.assertEqual(info['version'], "1.0.0")
25
25
  self.assertEqual(info['description'], "A test API")
26
26
 
27
+ def test_paths_generation(self):
28
+ def assertMethods(paths, p, methods):
29
+ self.assertEqual(set(paths[p].keys()), methods)
30
+
31
+ spec = get_spec().to_dict()
32
+ paths = spec['paths']
33
+ assertMethods(paths, '/authors', {'get', 'post'})
34
+ assertMethods(paths, '/authors/<int:id>', {'get', 'put', 'delete'})
35
+ assertMethods(paths, '/authors/slug/<slug:slug>', {'get'})
36
+ assertMethods(paths, '/authors/cache/<int:id>', {'get'})
37
+
27
38
  def test_view_get_urls(self):
28
- def get_methods(url, p):
29
- return next(filter(lambda u: u['path'] == p, urls))['methods']
39
+ def assertMethods(urls, p, methods):
40
+ self.assertEqual(next(filter(
41
+ lambda u: u['path'] == p, urls))['methods'], methods)
30
42
 
31
43
  urls = AuthorRestView.get_urls()
32
44
 
33
45
  # Methods from RestView
34
- self.assertEqual(
35
- get_methods(urls, 'authors'),
36
- dict(get='get_list', post='post'))
37
- self.assertEqual(
38
- get_methods(urls, 'authors/<int:id>'),
39
- dict(delete='delete', get='get', put='put'))
46
+ assertMethods(urls, '/authors', dict(get='get_list', post='post'))
47
+ assertMethods(urls, '/authors/<int:id>', dict(
48
+ delete='delete', get='get', put='put'))
40
49
  # A method from SlugDetailRestViewMixin
41
- self.assertEqual(
42
- get_methods(urls, 'authors/slug/<slug:slug>'),
43
- dict(get='get_by_slug'))
50
+ assertMethods(urls, '/authors/slug/<slug:slug>', dict(
51
+ get='get_by_slug'))
44
52
  # A method from AuthorRestView itself
45
- self.assertEqual(
46
- get_methods(urls, 'authors/cache/<int:id>'),
47
- dict(get='cache_get'))
53
+ assertMethods(urls, '/authors/cache/<int:id>', dict(get='cache_get'))
File without changes
File without changes
File without changes
File without changes