django-multisite2 2.0.0__tar.gz → 2.1.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 (114) hide show
  1. django_multisite2-2.1.0/.flake8 +6 -0
  2. django_multisite2-2.1.0/.github/dependabot.yml +8 -0
  3. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.github/workflows/build.yml +16 -9
  4. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.pre-commit-config.yaml +13 -7
  5. django_multisite2-2.1.0/AUTHORS +1 -0
  6. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/CHANGES +7 -1
  7. django_multisite2-2.1.0/MANIFEST.in +4 -0
  8. {django-multisite2-2.0.0/django_multisite2.egg-info → django_multisite2-2.1.0}/PKG-INFO +55 -31
  9. django-multisite2-2.0.0/PKG-INFO → django_multisite2-2.1.0/README.rst +38 -46
  10. django-multisite2-2.0.0/README.rst → django_multisite2-2.1.0/django_multisite2.egg-info/PKG-INFO +66 -15
  11. django_multisite2-2.1.0/django_multisite2.egg-info/SOURCES.txt +106 -0
  12. django_multisite2-2.1.0/django_multisite2.egg-info/requires.txt +7 -0
  13. django_multisite2-2.1.0/multisite/__pycache__/__init__.cpython-312.pyc +0 -0
  14. django_multisite2-2.1.0/multisite/__pycache__/apps.cpython-312.pyc +0 -0
  15. django_multisite2-2.1.0/multisite/__pycache__/exceptions.cpython-312.pyc +0 -0
  16. django_multisite2-2.1.0/multisite/__pycache__/forms.cpython-312.pyc +0 -0
  17. django_multisite2-2.1.0/multisite/__pycache__/hacks.cpython-312.pyc +0 -0
  18. django_multisite2-2.1.0/multisite/__pycache__/threadlocals.cpython-312.pyc +0 -0
  19. django_multisite2-2.1.0/multisite/__pycache__/utils.cpython-312.pyc +0 -0
  20. django_multisite2-2.1.0/multisite/admin/__pycache__/__init__.cpython-312.pyc +0 -0
  21. django_multisite2-2.1.0/multisite/admin/__pycache__/alias_admin.cpython-312.pyc +0 -0
  22. django_multisite2-2.1.0/multisite/admin/__pycache__/multisite_changelist.cpython-312.pyc +0 -0
  23. django_multisite2-2.1.0/multisite/admin/__pycache__/multisite_model_admin.cpython-312.pyc +0 -0
  24. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/multisite_model_admin.py +17 -5
  25. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/exceptions.py +6 -1
  26. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/forms.py +3 -1
  27. django_multisite2-2.1.0/multisite/management/__pycache__/__init__.cpython-312.pyc +0 -0
  28. django_multisite2-2.1.0/multisite/management/commands/__pycache__/__init__.cpython-312.pyc +0 -0
  29. django_multisite2-2.1.0/multisite/management/commands/__pycache__/update_public_suffix_list.cpython-312.pyc +0 -0
  30. django_multisite2-2.1.0/multisite/middleware/__pycache__/__init__.cpython-312.pyc +0 -0
  31. django_multisite2-2.1.0/multisite/middleware/__pycache__/cookie_domain_middleware.cpython-312.pyc +0 -0
  32. django_multisite2-2.1.0/multisite/middleware/__pycache__/dynamic_site_middleware.cpython-312.pyc +0 -0
  33. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/middleware/cookie_domain_middleware.py +4 -2
  34. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/middleware/dynamic_site_middleware.py +13 -6
  35. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0003_alter_alias_options_alter_alias_unique_together_and_more.py +0 -1
  36. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0004_alter_alias_managers.py +0 -1
  37. django_multisite2-2.1.0/multisite/migrations/__pycache__/0001_initial.cpython-312.pyc +0 -0
  38. django_multisite2-2.1.0/multisite/migrations/__pycache__/0002_alter_alias_id_alter_alias_is_canonical.cpython-312.pyc +0 -0
  39. django_multisite2-2.1.0/multisite/migrations/__pycache__/0003_alter_alias_options_alter_alias_unique_together_and_more.cpython-312.pyc +0 -0
  40. django_multisite2-2.1.0/multisite/migrations/__pycache__/0004_alter_alias_managers.cpython-312.pyc +0 -0
  41. django_multisite2-2.1.0/multisite/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
  42. django_multisite2-2.1.0/multisite/models/__pycache__/__init__.cpython-312.pyc +0 -0
  43. django_multisite2-2.1.0/multisite/models/__pycache__/alias.cpython-312.pyc +0 -0
  44. django_multisite2-2.1.0/multisite/models/__pycache__/managers.cpython-312.pyc +0 -0
  45. django_multisite2-2.1.0/multisite/models/__pycache__/signals.cpython-312.pyc +0 -0
  46. django_multisite2-2.1.0/multisite/models/__pycache__/validators.cpython-312.pyc +0 -0
  47. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/managers.py +7 -3
  48. django_multisite2-2.1.0/multisite/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  49. django_multisite2-2.1.0/multisite/tests/__pycache__/get_test_allowed_hosts.cpython-312.pyc +0 -0
  50. django_multisite2-2.1.0/multisite/tests/__pycache__/get_test_http_response.cpython-312.pyc +0 -0
  51. django_multisite2-2.1.0/multisite/tests/__pycache__/test_settings.cpython-312.pyc +0 -0
  52. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/get_test_http_response.py +1 -1
  53. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  54. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/request_factory.cpython-312.pyc +0 -0
  55. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_alias.cpython-312.pyc +0 -0
  56. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_contrib_site.cpython-312.pyc +0 -0
  57. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_cookie_domain_middleware.cpython-312.pyc +0 -0
  58. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_dynamic_site_middleware.cpython-312.pyc +0 -0
  59. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_site_cache.cpython-312.pyc +0 -0
  60. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_site_domain.cpython-312.pyc +0 -0
  61. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_site_id.cpython-312.pyc +0 -0
  62. django_multisite2-2.1.0/multisite/tests/tests/__pycache__/test_template_loader.cpython-312.pyc +0 -0
  63. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_alias.py +5 -2
  64. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_cookie_domain_middleware.py +6 -4
  65. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_dynamic_site_middleware.py +13 -7
  66. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_site_id.py +3 -2
  67. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_template_loader.py +1 -4
  68. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/threadlocals.py +19 -10
  69. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/utils.py +3 -1
  70. django_multisite2-2.1.0/pyproject.toml +88 -0
  71. django_multisite2-2.1.0/setup.cfg +4 -0
  72. django-multisite2-2.0.0/MANIFEST.in +0 -3
  73. django-multisite2-2.0.0/django_multisite2.egg-info/SOURCES.txt +0 -64
  74. django-multisite2-2.0.0/django_multisite2.egg-info/not-zip-safe +0 -1
  75. django-multisite2-2.0.0/django_multisite2.egg-info/requires.txt +0 -1
  76. django-multisite2-2.0.0/pyproject.toml +0 -32
  77. django-multisite2-2.0.0/setup.cfg +0 -59
  78. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.coveragerc +0 -0
  79. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.gitignore +0 -0
  80. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/.yamllint +0 -0
  81. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/LICENSE +0 -0
  82. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/django_multisite2.egg-info/dependency_links.txt +0 -0
  83. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/django_multisite2.egg-info/top_level.txt +0 -0
  84. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/__init__.py +0 -0
  85. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/__init__.py +0 -0
  86. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/alias_admin.py +0 -0
  87. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/admin/multisite_changelist.py +0 -0
  88. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/apps.py +0 -0
  89. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/hacks.py +0 -0
  90. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/management/__init__.py +0 -0
  91. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/management/commands/__init__.py +0 -0
  92. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/management/commands/update_public_suffix_list.py +0 -0
  93. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/middleware/__init__.py +0 -0
  94. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0001_initial.py +0 -0
  95. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/0002_alter_alias_id_alter_alias_is_canonical.py +0 -0
  96. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/migrations/__init__.py +0 -0
  97. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/__init__.py +0 -0
  98. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/alias.py +0 -0
  99. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/signals.py +0 -0
  100. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/models/validators.py +0 -0
  101. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/__init__.py +0 -0
  102. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/get_test_allowed_hosts.py +0 -0
  103. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/hosts.py +0 -0
  104. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/test_settings.py +0 -0
  105. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/__init__.py +0 -0
  106. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/request_factory.py +0 -0
  107. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_contrib_site.py +0 -0
  108. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_site_cache.py +0 -0
  109. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite/tests/tests/test_site_domain.py +0 -0
  110. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/__init__.py +0 -0
  111. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/apps.py +0 -0
  112. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/urls.py +0 -0
  113. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/multisite_app/views.py +0 -0
  114. {django-multisite2-2.0.0 → django_multisite2-2.1.0}/runtests.py +0 -0
@@ -0,0 +1,6 @@
1
+ [flake8]
2
+ extend-ignore = E226,W503,E203,W605
3
+ max-line-length = 88
4
+ max-complexity = 10
5
+ exclude = */migrations/*,.tox,.git,__pycache__,build,dist,.eggs,.egg-info
6
+ per-file-ignores = __init__.py: F401
@@ -0,0 +1,8 @@
1
+ ---
2
+ version: 2
3
+ updates:
4
+
5
+ - package-ecosystem: "github-actions"
6
+ directory: "/"
7
+ schedule:
8
+ interval: "weekly"
@@ -5,20 +5,16 @@ on: [push, pull_request]
5
5
 
6
6
  jobs:
7
7
  build:
8
- name: build (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }})
8
+ name: |
9
+ build (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }}, ${{ matrix.database-engine }})
9
10
  runs-on: ubuntu-latest
10
11
 
11
12
  strategy:
12
13
  fail-fast: false
13
14
  matrix:
14
- python-version: ['3.11', '3.12']
15
- django-version: ['4.2', '5.0', 'dev']
16
-
17
- exclude:
18
- - python-version: '3.12'
19
- django-version: '4.2'
20
- - python-version: '3.11'
21
- django-version: 'dev'
15
+ python-version: ['3.12', '3.13']
16
+ django-version: ['5.2', 'dev']
17
+ database-engine: ["mysql", "postgres"]
22
18
  services:
23
19
  mysql:
24
20
  image: mysql:latest
@@ -28,6 +24,17 @@ jobs:
28
24
  ports:
29
25
  - 3306:3306
30
26
  options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
27
+ postgres:
28
+ image: postgres:latest
29
+ env:
30
+ POSTGRES_PASSWORD: postgres
31
+ options: >-
32
+ --health-cmd pg_isready
33
+ --health-interval 10s
34
+ --health-timeout 5s
35
+ --health-retries 5
36
+ ports:
37
+ - 5432:5432
31
38
 
32
39
  steps:
33
40
  - name: Install pycups and words dependency
@@ -3,32 +3,32 @@ exclude: tests/etc/user-*
3
3
 
4
4
  repos:
5
5
  - repo: https://github.com/PyCQA/bandit
6
- rev: 1.7.5
6
+ rev: 1.8.6
7
7
  hooks:
8
8
  - id: bandit
9
9
  args:
10
10
  - "-x *test*.py"
11
11
 
12
12
  - repo: https://github.com/psf/black
13
- rev: 23.11.0
13
+ rev: 25.1.0
14
14
  hooks:
15
15
  - id: black
16
16
  language_version: python3.10
17
17
 
18
18
  - repo: https://github.com/pycqa/flake8
19
- rev: 6.1.0
19
+ rev: 7.3.0
20
20
  hooks:
21
21
  - id: flake8
22
22
  args:
23
- - "--config=setup.cfg"
23
+ - "--config=.flake8"
24
24
 
25
25
  - repo: https://github.com/PyCQA/isort
26
- rev: 5.12.0
26
+ rev: 5.13.2
27
27
  hooks:
28
28
  - id: isort
29
29
 
30
30
  - repo: https://github.com/pre-commit/pre-commit-hooks
31
- rev: v4.5.0
31
+ rev: v5.0.0
32
32
  hooks:
33
33
  - id: requirements-txt-fixer
34
34
  files: requirements/.*\.txt$
@@ -40,10 +40,16 @@ repos:
40
40
  - id: check-merge-conflict
41
41
  - id: debug-statements
42
42
  - id: detect-private-key
43
+ - id: check-toml
43
44
 
44
45
  - repo: https://github.com/adrienverge/yamllint
45
- rev: v1.33.0
46
+ rev: v1.37.1
46
47
  hooks:
47
48
  - id: yamllint
48
49
  args:
49
50
  - "--strict"
51
+
52
+ - repo: https://github.com/rstcheck/rstcheck
53
+ rev: v6.2.5
54
+ hooks:
55
+ - id: rstcheck
@@ -0,0 +1 @@
1
+ Leonid S Shestera <leonid@shestera.ru>
@@ -2,10 +2,16 @@
2
2
  Release Notes
3
3
  =============
4
4
 
5
+ 2.0.1
6
+ -----
7
+ - change from ValueError to multisite specific exceptions
8
+ when getting default SITE_ID in development mode.
9
+ - add typing hints
10
+
5
11
  2.0.0
6
12
  -----
7
13
  - major refactor, drop support for lower than py 3.11 and DJ4.2
8
- - drop pytest, use unitests / runtests.py
14
+ - drop pytest, use unitests / runtests.py
9
15
  - replace rel.to with related_model (Django 4.2)
10
16
  - remove deprecated `process_requests`
11
17
  - add more specific exception handling
@@ -0,0 +1,4 @@
1
+ include AUTHORS CHANGES LICENSE
2
+ include MANIFEST.in
3
+ include README.rst
4
+ graft multisite
@@ -1,42 +1,65 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: django-multisite2
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: Serve multiple sites from a single Django application
5
- Home-page: http://github.com/erikvw/django-multisite
6
- Author: Leonid S Shestera
7
- Author-email: leonid@shestera.ru
8
- Maintainer: Ecometrica
9
- Maintainer-email: dev@ecometrica.com
10
- Classifier: Development Status :: 4 - Beta
5
+ Author-email: Leonid S Shestera <leonid@shestera.ru>
6
+ Maintainer-email: Erik van Widenfelt <ew2789@gmail.com>
7
+ License-Expression: GPL-3.0-or-later
8
+ Project-URL: Homepage, http://github.com/erikvw/django-multisite2
9
+ Project-URL: Documentation, http://github.com/erikvw/django-multisite2/blob/develop/README.rst
10
+ Project-URL: Repository, http://github.com/erikvw/django-multisite2.git
11
+ Project-URL: Changelog, http://github.com/erikvw/django-multisite2/blob/main/CHANGES
12
+ Keywords: django,nginx,edc,clinical trials,research,data management,gunicorn,deployment
11
13
  Classifier: Environment :: Web Environment
12
14
  Classifier: Framework :: Django
15
+ Classifier: Framework :: Django :: 5.2
16
+ Classifier: Development Status :: 5 - Production/Stable
13
17
  Classifier: Intended Audience :: Developers
14
- Classifier: License :: OSI Approved :: BSD License
18
+ Classifier: Intended Audience :: Science/Research
15
19
  Classifier: Operating System :: OS Independent
16
- Classifier: Programming Language :: Python
17
- Classifier: Programming Language :: Python :: 3.11
18
20
  Classifier: Programming Language :: Python :: 3.12
19
- Classifier: Topic :: Internet
20
- Classifier: Topic :: Internet :: WWW/HTTP
21
- Classifier: Topic :: Software Development :: Libraries
22
- Classifier: Topic :: Utilities
23
- Requires-Python: >=3.11
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Requires-Python: >=3.12
24
23
  Description-Content-Type: text/x-rst
25
24
  License-File: LICENSE
26
25
  Requires-Dist: tldextract
26
+ Provides-Extra: test
27
+ Requires-Dist: coverage; extra == "test"
28
+ Requires-Dist: mock; extra == "test"
29
+ Requires-Dist: tox; extra == "test"
30
+ Requires-Dist: pluggy; extra == "test"
31
+ Dynamic: license-file
27
32
 
28
- |actions| |codecov| |downloads| |maintainability| |black|
33
+ |pypi| |actions| |codecov| |downloads| |maintainability| |black|
29
34
 
30
35
 
31
36
 
32
- README
33
- ======
37
+ django_multisite2
38
+ =================
34
39
 
35
- Python 3.11+ Django 4.2+
40
+ With ``django_multisite2`` a single instance of a Django project can serve multiple sites using a single settings file (multi-tenant). The current ``SITE_ID`` is extracted from the URL.
36
41
 
37
- Older versions of Django are supported by the original `django-multisite`_ project.
42
+ In ``settings``, the static ``SITE_ID`` is replaced with ``django_multisite2`` dynamic ``SiteID``::
38
43
 
39
- .. _django-multisite: https://github.com/ecometrica/django-multisite
44
+ # settings.py
45
+ SITE_ID = SiteID(default=1)
46
+
47
+ the dynamic ``SiteID`` behaves like an integer. When combined with ``django_multisite2`` middleware, ``SiteID`` will return the current ``SITE_ID`` based on the url. For example, each url below is an alias of the same server instance. With ``django_multisite2`` you might have something like this::
48
+
49
+ # https://harare.example.com
50
+ >>> from django.conf import settings
51
+ >>> settings.SITE_ID
52
+ 10
53
+
54
+ # https://kampala.example.com
55
+ >>> from django.conf import settings
56
+ >>> settings.SITE_ID
57
+ 20
58
+
59
+
60
+ Python 3.11+ Django 4.2+. New releases are cut from the ``main`` branch.
61
+
62
+ Older versions of Django are supported by the original `django-multisite`_ project.
40
63
 
41
64
 
42
65
  Installation
@@ -46,7 +69,7 @@ Install with pip:
46
69
 
47
70
  .. code-block::
48
71
 
49
- pip install django-multisite2 (no release yet)
72
+ pip install django-multisite2
50
73
 
51
74
 
52
75
  Replace your ``SITE_ID`` in ``settings.py`` to:
@@ -129,6 +152,9 @@ settings.py::
129
152
 
130
153
  Templates
131
154
  ---------
155
+
156
+ This feature has been removed in version 2.0.0.
157
+
132
158
  If required, create template subdirectories for domain level templates (in a
133
159
  location specified in settings.TEMPLATES['DIRS'].
134
160
 
@@ -144,12 +170,10 @@ optional MULTISITE_DEFAULT_TEMPLATE_DIR setting, e.g.::
144
170
  templates/multisite_templates
145
171
 
146
172
 
147
- Cross-domain cookies
148
- --------------------
173
+ Cross-domain cookie support
174
+ ---------------------------
149
175
 
150
- In order to support `cross-domain cookies`_,
151
- for purposes like single-sign-on,
152
- prepend the following to the top of
176
+ In order to support `cross-domain cookies`_ , for purposes like single-sign-on, prepend the following to the top of
153
177
  settings.py MIDDLEWARE (MIDDLEWARE_CLASSES for Django < 1.10)::
154
178
 
155
179
  MIDDLEWARE = (
@@ -178,8 +202,6 @@ run::
178
202
 
179
203
  manage.py update_public_suffix_list
180
204
 
181
- .. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
182
- .. _Public Suffix List: http://publicsuffix.org/
183
205
 
184
206
  Post-migrate signal: post_migrate_sync_alias
185
207
  --------------------------------------------
@@ -222,7 +244,9 @@ To run the tests::
222
244
 
223
245
  python runtests.py
224
246
 
225
-
247
+ .. _django-multisite: https://github.com/ecometrica/django-multisite
248
+ .. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
249
+ .. _Public Suffix List: http://publicsuffix.org/
226
250
 
227
251
  .. |pypi| image:: https://img.shields.io/pypi/v/django-multisite2.svg
228
252
  :target: https://pypi.python.org/pypi/django-multisite2
@@ -1,42 +1,33 @@
1
- Metadata-Version: 2.1
2
- Name: django-multisite2
3
- Version: 2.0.0
4
- Summary: Serve multiple sites from a single Django application
5
- Home-page: http://github.com/erikvw/django-multisite
6
- Author: Leonid S Shestera
7
- Author-email: leonid@shestera.ru
8
- Maintainer: Ecometrica
9
- Maintainer-email: dev@ecometrica.com
10
- Classifier: Development Status :: 4 - Beta
11
- Classifier: Environment :: Web Environment
12
- Classifier: Framework :: Django
13
- Classifier: Intended Audience :: Developers
14
- Classifier: License :: OSI Approved :: BSD License
15
- Classifier: Operating System :: OS Independent
16
- Classifier: Programming Language :: Python
17
- Classifier: Programming Language :: Python :: 3.11
18
- Classifier: Programming Language :: Python :: 3.12
19
- Classifier: Topic :: Internet
20
- Classifier: Topic :: Internet :: WWW/HTTP
21
- Classifier: Topic :: Software Development :: Libraries
22
- Classifier: Topic :: Utilities
23
- Requires-Python: >=3.11
24
- Description-Content-Type: text/x-rst
25
- License-File: LICENSE
26
- Requires-Dist: tldextract
27
-
28
- |actions| |codecov| |downloads| |maintainability| |black|
29
-
30
-
31
-
32
- README
33
- ======
34
-
35
- Python 3.11+ Django 4.2+
1
+ |pypi| |actions| |codecov| |downloads| |maintainability| |black|
36
2
 
37
- Older versions of Django are supported by the original `django-multisite`_ project.
38
3
 
39
- .. _django-multisite: https://github.com/ecometrica/django-multisite
4
+
5
+ django_multisite2
6
+ =================
7
+
8
+ With ``django_multisite2`` a single instance of a Django project can serve multiple sites using a single settings file (multi-tenant). The current ``SITE_ID`` is extracted from the URL.
9
+
10
+ In ``settings``, the static ``SITE_ID`` is replaced with ``django_multisite2`` dynamic ``SiteID``::
11
+
12
+ # settings.py
13
+ SITE_ID = SiteID(default=1)
14
+
15
+ the dynamic ``SiteID`` behaves like an integer. When combined with ``django_multisite2`` middleware, ``SiteID`` will return the current ``SITE_ID`` based on the url. For example, each url below is an alias of the same server instance. With ``django_multisite2`` you might have something like this::
16
+
17
+ # https://harare.example.com
18
+ >>> from django.conf import settings
19
+ >>> settings.SITE_ID
20
+ 10
21
+
22
+ # https://kampala.example.com
23
+ >>> from django.conf import settings
24
+ >>> settings.SITE_ID
25
+ 20
26
+
27
+
28
+ Python 3.11+ Django 4.2+. New releases are cut from the ``main`` branch.
29
+
30
+ Older versions of Django are supported by the original `django-multisite`_ project.
40
31
 
41
32
 
42
33
  Installation
@@ -46,7 +37,7 @@ Install with pip:
46
37
 
47
38
  .. code-block::
48
39
 
49
- pip install django-multisite2 (no release yet)
40
+ pip install django-multisite2
50
41
 
51
42
 
52
43
  Replace your ``SITE_ID`` in ``settings.py`` to:
@@ -129,6 +120,9 @@ settings.py::
129
120
 
130
121
  Templates
131
122
  ---------
123
+
124
+ This feature has been removed in version 2.0.0.
125
+
132
126
  If required, create template subdirectories for domain level templates (in a
133
127
  location specified in settings.TEMPLATES['DIRS'].
134
128
 
@@ -144,12 +138,10 @@ optional MULTISITE_DEFAULT_TEMPLATE_DIR setting, e.g.::
144
138
  templates/multisite_templates
145
139
 
146
140
 
147
- Cross-domain cookies
148
- --------------------
141
+ Cross-domain cookie support
142
+ ---------------------------
149
143
 
150
- In order to support `cross-domain cookies`_,
151
- for purposes like single-sign-on,
152
- prepend the following to the top of
144
+ In order to support `cross-domain cookies`_ , for purposes like single-sign-on, prepend the following to the top of
153
145
  settings.py MIDDLEWARE (MIDDLEWARE_CLASSES for Django < 1.10)::
154
146
 
155
147
  MIDDLEWARE = (
@@ -178,8 +170,6 @@ run::
178
170
 
179
171
  manage.py update_public_suffix_list
180
172
 
181
- .. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
182
- .. _Public Suffix List: http://publicsuffix.org/
183
173
 
184
174
  Post-migrate signal: post_migrate_sync_alias
185
175
  --------------------------------------------
@@ -222,7 +212,9 @@ To run the tests::
222
212
 
223
213
  python runtests.py
224
214
 
225
-
215
+ .. _django-multisite: https://github.com/ecometrica/django-multisite
216
+ .. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
217
+ .. _Public Suffix List: http://publicsuffix.org/
226
218
 
227
219
  .. |pypi| image:: https://img.shields.io/pypi/v/django-multisite2.svg
228
220
  :target: https://pypi.python.org/pypi/django-multisite2
@@ -1,15 +1,65 @@
1
- |actions| |codecov| |downloads| |maintainability| |black|
1
+ Metadata-Version: 2.4
2
+ Name: django-multisite2
3
+ Version: 2.1.0
4
+ Summary: Serve multiple sites from a single Django application
5
+ Author-email: Leonid S Shestera <leonid@shestera.ru>
6
+ Maintainer-email: Erik van Widenfelt <ew2789@gmail.com>
7
+ License-Expression: GPL-3.0-or-later
8
+ Project-URL: Homepage, http://github.com/erikvw/django-multisite2
9
+ Project-URL: Documentation, http://github.com/erikvw/django-multisite2/blob/develop/README.rst
10
+ Project-URL: Repository, http://github.com/erikvw/django-multisite2.git
11
+ Project-URL: Changelog, http://github.com/erikvw/django-multisite2/blob/main/CHANGES
12
+ Keywords: django,nginx,edc,clinical trials,research,data management,gunicorn,deployment
13
+ Classifier: Environment :: Web Environment
14
+ Classifier: Framework :: Django
15
+ Classifier: Framework :: Django :: 5.2
16
+ Classifier: Development Status :: 5 - Production/Stable
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: Intended Audience :: Science/Research
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Requires-Python: >=3.12
23
+ Description-Content-Type: text/x-rst
24
+ License-File: LICENSE
25
+ Requires-Dist: tldextract
26
+ Provides-Extra: test
27
+ Requires-Dist: coverage; extra == "test"
28
+ Requires-Dist: mock; extra == "test"
29
+ Requires-Dist: tox; extra == "test"
30
+ Requires-Dist: pluggy; extra == "test"
31
+ Dynamic: license-file
32
+
33
+ |pypi| |actions| |codecov| |downloads| |maintainability| |black|
34
+
35
+
36
+
37
+ django_multisite2
38
+ =================
39
+
40
+ With ``django_multisite2`` a single instance of a Django project can serve multiple sites using a single settings file (multi-tenant). The current ``SITE_ID`` is extracted from the URL.
41
+
42
+ In ``settings``, the static ``SITE_ID`` is replaced with ``django_multisite2`` dynamic ``SiteID``::
43
+
44
+ # settings.py
45
+ SITE_ID = SiteID(default=1)
2
46
 
47
+ the dynamic ``SiteID`` behaves like an integer. When combined with ``django_multisite2`` middleware, ``SiteID`` will return the current ``SITE_ID`` based on the url. For example, each url below is an alias of the same server instance. With ``django_multisite2`` you might have something like this::
3
48
 
49
+ # https://harare.example.com
50
+ >>> from django.conf import settings
51
+ >>> settings.SITE_ID
52
+ 10
4
53
 
5
- README
6
- ======
54
+ # https://kampala.example.com
55
+ >>> from django.conf import settings
56
+ >>> settings.SITE_ID
57
+ 20
7
58
 
8
- Python 3.11+ Django 4.2+
9
59
 
10
- Older versions of Django are supported by the original `django-multisite`_ project.
60
+ Python 3.11+ Django 4.2+. New releases are cut from the ``main`` branch.
11
61
 
12
- .. _django-multisite: https://github.com/ecometrica/django-multisite
62
+ Older versions of Django are supported by the original `django-multisite`_ project.
13
63
 
14
64
 
15
65
  Installation
@@ -19,7 +69,7 @@ Install with pip:
19
69
 
20
70
  .. code-block::
21
71
 
22
- pip install django-multisite2 (no release yet)
72
+ pip install django-multisite2
23
73
 
24
74
 
25
75
  Replace your ``SITE_ID`` in ``settings.py`` to:
@@ -102,6 +152,9 @@ settings.py::
102
152
 
103
153
  Templates
104
154
  ---------
155
+
156
+ This feature has been removed in version 2.0.0.
157
+
105
158
  If required, create template subdirectories for domain level templates (in a
106
159
  location specified in settings.TEMPLATES['DIRS'].
107
160
 
@@ -117,12 +170,10 @@ optional MULTISITE_DEFAULT_TEMPLATE_DIR setting, e.g.::
117
170
  templates/multisite_templates
118
171
 
119
172
 
120
- Cross-domain cookies
121
- --------------------
173
+ Cross-domain cookie support
174
+ ---------------------------
122
175
 
123
- In order to support `cross-domain cookies`_,
124
- for purposes like single-sign-on,
125
- prepend the following to the top of
176
+ In order to support `cross-domain cookies`_ , for purposes like single-sign-on, prepend the following to the top of
126
177
  settings.py MIDDLEWARE (MIDDLEWARE_CLASSES for Django < 1.10)::
127
178
 
128
179
  MIDDLEWARE = (
@@ -151,8 +202,6 @@ run::
151
202
 
152
203
  manage.py update_public_suffix_list
153
204
 
154
- .. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
155
- .. _Public Suffix List: http://publicsuffix.org/
156
205
 
157
206
  Post-migrate signal: post_migrate_sync_alias
158
207
  --------------------------------------------
@@ -195,7 +244,9 @@ To run the tests::
195
244
 
196
245
  python runtests.py
197
246
 
198
-
247
+ .. _django-multisite: https://github.com/ecometrica/django-multisite
248
+ .. _cross-domain cookies: http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Path
249
+ .. _Public Suffix List: http://publicsuffix.org/
199
250
 
200
251
  .. |pypi| image:: https://img.shields.io/pypi/v/django-multisite2.svg
201
252
  :target: https://pypi.python.org/pypi/django-multisite2
@@ -0,0 +1,106 @@
1
+ .coveragerc
2
+ .flake8
3
+ .gitignore
4
+ .pre-commit-config.yaml
5
+ .yamllint
6
+ AUTHORS
7
+ CHANGES
8
+ LICENSE
9
+ MANIFEST.in
10
+ README.rst
11
+ pyproject.toml
12
+ runtests.py
13
+ .github/dependabot.yml
14
+ .github/workflows/build.yml
15
+ django_multisite2.egg-info/PKG-INFO
16
+ django_multisite2.egg-info/SOURCES.txt
17
+ django_multisite2.egg-info/dependency_links.txt
18
+ django_multisite2.egg-info/requires.txt
19
+ django_multisite2.egg-info/top_level.txt
20
+ multisite/__init__.py
21
+ multisite/apps.py
22
+ multisite/exceptions.py
23
+ multisite/forms.py
24
+ multisite/hacks.py
25
+ multisite/threadlocals.py
26
+ multisite/utils.py
27
+ multisite/__pycache__/__init__.cpython-312.pyc
28
+ multisite/__pycache__/apps.cpython-312.pyc
29
+ multisite/__pycache__/exceptions.cpython-312.pyc
30
+ multisite/__pycache__/forms.cpython-312.pyc
31
+ multisite/__pycache__/hacks.cpython-312.pyc
32
+ multisite/__pycache__/threadlocals.cpython-312.pyc
33
+ multisite/__pycache__/utils.cpython-312.pyc
34
+ multisite/admin/__init__.py
35
+ multisite/admin/alias_admin.py
36
+ multisite/admin/multisite_changelist.py
37
+ multisite/admin/multisite_model_admin.py
38
+ multisite/admin/__pycache__/__init__.cpython-312.pyc
39
+ multisite/admin/__pycache__/alias_admin.cpython-312.pyc
40
+ multisite/admin/__pycache__/multisite_changelist.cpython-312.pyc
41
+ multisite/admin/__pycache__/multisite_model_admin.cpython-312.pyc
42
+ multisite/management/__init__.py
43
+ multisite/management/__pycache__/__init__.cpython-312.pyc
44
+ multisite/management/commands/__init__.py
45
+ multisite/management/commands/update_public_suffix_list.py
46
+ multisite/management/commands/__pycache__/__init__.cpython-312.pyc
47
+ multisite/management/commands/__pycache__/update_public_suffix_list.cpython-312.pyc
48
+ multisite/middleware/__init__.py
49
+ multisite/middleware/cookie_domain_middleware.py
50
+ multisite/middleware/dynamic_site_middleware.py
51
+ multisite/middleware/__pycache__/__init__.cpython-312.pyc
52
+ multisite/middleware/__pycache__/cookie_domain_middleware.cpython-312.pyc
53
+ multisite/middleware/__pycache__/dynamic_site_middleware.cpython-312.pyc
54
+ multisite/migrations/0001_initial.py
55
+ multisite/migrations/0002_alter_alias_id_alter_alias_is_canonical.py
56
+ multisite/migrations/0003_alter_alias_options_alter_alias_unique_together_and_more.py
57
+ multisite/migrations/0004_alter_alias_managers.py
58
+ multisite/migrations/__init__.py
59
+ multisite/migrations/__pycache__/0001_initial.cpython-312.pyc
60
+ multisite/migrations/__pycache__/0002_alter_alias_id_alter_alias_is_canonical.cpython-312.pyc
61
+ multisite/migrations/__pycache__/0003_alter_alias_options_alter_alias_unique_together_and_more.cpython-312.pyc
62
+ multisite/migrations/__pycache__/0004_alter_alias_managers.cpython-312.pyc
63
+ multisite/migrations/__pycache__/__init__.cpython-312.pyc
64
+ multisite/models/__init__.py
65
+ multisite/models/alias.py
66
+ multisite/models/managers.py
67
+ multisite/models/signals.py
68
+ multisite/models/validators.py
69
+ multisite/models/__pycache__/__init__.cpython-312.pyc
70
+ multisite/models/__pycache__/alias.cpython-312.pyc
71
+ multisite/models/__pycache__/managers.cpython-312.pyc
72
+ multisite/models/__pycache__/signals.cpython-312.pyc
73
+ multisite/models/__pycache__/validators.cpython-312.pyc
74
+ multisite/tests/__init__.py
75
+ multisite/tests/get_test_allowed_hosts.py
76
+ multisite/tests/get_test_http_response.py
77
+ multisite/tests/hosts.py
78
+ multisite/tests/test_settings.py
79
+ multisite/tests/__pycache__/__init__.cpython-312.pyc
80
+ multisite/tests/__pycache__/get_test_allowed_hosts.cpython-312.pyc
81
+ multisite/tests/__pycache__/get_test_http_response.cpython-312.pyc
82
+ multisite/tests/__pycache__/test_settings.cpython-312.pyc
83
+ multisite/tests/tests/__init__.py
84
+ multisite/tests/tests/request_factory.py
85
+ multisite/tests/tests/test_alias.py
86
+ multisite/tests/tests/test_contrib_site.py
87
+ multisite/tests/tests/test_cookie_domain_middleware.py
88
+ multisite/tests/tests/test_dynamic_site_middleware.py
89
+ multisite/tests/tests/test_site_cache.py
90
+ multisite/tests/tests/test_site_domain.py
91
+ multisite/tests/tests/test_site_id.py
92
+ multisite/tests/tests/test_template_loader.py
93
+ multisite/tests/tests/__pycache__/__init__.cpython-312.pyc
94
+ multisite/tests/tests/__pycache__/request_factory.cpython-312.pyc
95
+ multisite/tests/tests/__pycache__/test_alias.cpython-312.pyc
96
+ multisite/tests/tests/__pycache__/test_contrib_site.cpython-312.pyc
97
+ multisite/tests/tests/__pycache__/test_cookie_domain_middleware.cpython-312.pyc
98
+ multisite/tests/tests/__pycache__/test_dynamic_site_middleware.cpython-312.pyc
99
+ multisite/tests/tests/__pycache__/test_site_cache.cpython-312.pyc
100
+ multisite/tests/tests/__pycache__/test_site_domain.cpython-312.pyc
101
+ multisite/tests/tests/__pycache__/test_site_id.cpython-312.pyc
102
+ multisite/tests/tests/__pycache__/test_template_loader.cpython-312.pyc
103
+ multisite_app/__init__.py
104
+ multisite_app/apps.py
105
+ multisite_app/urls.py
106
+ multisite_app/views.py
@@ -0,0 +1,7 @@
1
+ tldextract
2
+
3
+ [test]
4
+ coverage
5
+ mock
6
+ tox
7
+ pluggy