{ "info": { "author": "Raffaele Salmaso", "author_email": "raffele@salmaso.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# django-service-urls\n\n`django-service-urls` is a setting helper for django to represent databases, caches and email settings via a single string.\n\nThis work is based on [dj-database-url](https://github.com/kennethreitz/dj-database-url) and [https://github.com/django/django/pull/8562](https://github.com/django/django/pull/8562).\n\n### Example\n\nOriginal config:\n\n```python\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': 'mydb',\n 'HOST': 'localhost',\n 'PORT': 5432,\n 'USER': 'myuser',\n 'PASSWORD': 'mypasswd',\n },\n}\n\nCACHES = {\n 'default': {\n 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',\n 'LOCATION': '127.0.0.1:11211',\n },\n}\n\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nHOST = 'localhost'\nPORT = 2525\nHOST_USER = ''\nHOST_PASSWORD = ''\nUSE_TLS = True\nUSE_SSL = False\nSSL_CERTFILE = '/etc/ssl/cert'\nSSL_KEYFILE = '/etc/ssl/key'\nTIMEOUT = 600\nUSE_LOCALTIME = False\n```\n\nReplace with:\n\n```python\nDATABASES = {\n 'default': os.environ.get('DATABASE_DEFAULT', 'postgres://myuser:mypasswd@localhost:5432/mydb'),\n}\n\nCACHES = {\n 'default': os.environ.get('CACHE_DEFAULT', 'memcached://127.0.0.1:11211'),\n}\n\nEMAIL_BACKEND = os.environ.get('EMAIL_BACKEND', 'smtps://localhost:2525?ssl_certfile=/etc/ssl/cert&ssl_keyfile=/etc/ssl/key&timeout=600')\n```\n\n## Backends\n\nCurrently `django-service-urls` supports three different services:\n\n### DATABASES (``service_urls.db``)\n\nService | Backend | URLString\n---------|---------|-----------\nPostgresql | django.db.backends.postgresql | postgres://user:passws@host:port/db\nPostgresql Socket | django.db.backends.postgresql | postgres://%2Fvar%2Frun%2Fpostgresql/db\nPostgresql (dj-database-url compat alias) | django.db.backends.postgresql | postgresql://user:passwd@host:port/db\nPostgresql (dj-database-url compat alias) | django.db.backends.postgresql | pgsql://user:passwd@host:port/db\nPostgis | django.contrib.gis.db.backends.postgis | postgis://user:passwd@host:port/db\nSqlite (memory) | django.db.backends.sqlite3 | sqlite://:memory: or sqlite://\nSqlite (file) | django.db.backends.sqlite3 | sqlite:///var/db/database.db\nSpatialite (memory) | django.contrib.gis.db.backends.spatialite | spatialite://:memory: or spatialite://\nSpatialite (file) | django.contrib.gis.db.backends.spatialite | spatialite:///var/db/database.db\nMysql | django.db.backends.mysql | mysql://user:passwd@host:port/db\nMysql + GIS | django.contrib.gis.db.backends.mysql | mysql+gis://user:passwd@host:port/db\nOracle | django.db.backends.oracle | oracle://user:passwd@host:port/db\nOracle + GIS | django.contrib.gis.db.backends.oracle | oracle+gis://user:passwd@host:port/db\n\n### CACHES (``service_urls.cache``)\n\nService | Backend | URLString\n--------|---------|-----------\nMemory | django.core.cache.backends.locmem.LocMemCache | memory://\nMemory | django.core.cache.backends.locmem.LocMemCache | memory://abc\nDatabase | django.core.cache.backends.db.DatabaseCache | db://table-name\nDummy | django.core.cache.backends.dummy.DummyCache | dummy://\nDummy | django.core.cache.backends.dummy.DummyCache | dummy://abc\nMemcached: single ip | django.core.cache.backends.memcached.MemcachedCache | memcached://1.2.3.4:1567\nMemcached+PyLibMCCache: single ip | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache://1.2.3.4:1567\nMemcached multiple ips | django.core.cache.backends.memcached.MemcachedCache | memcached://1.2.3.4:1567,1.2.3.5:1568\nMemcached+PyLibMCCache multiple ips | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache://1.2.3.4:1567,1.2.3.5:1568\nMemcached no port | django.core.cache.backends.memcached.MemcachedCache | memcached://1.2.3.4\nMemcached+PyLibMCCache no port | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache://1.2.3.4\nMemcached unix socket | django.core.cache.backends.memcached.MemcachedCache | memcached:///tmp/memcached.sock\nMemcached+PyLibMCCache unix socket | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache:///tmp/memcached.sock\nFile | django.core.cache.backends.filebased.FileBasedCache | file://C:/abc/def/xyz\nFile | django.core.cache.backends.filebased.FileBasedCache | file:///abc/def/xyz\n\n### EMAIL (``service_urls.email``)\n\nService | Backend | URLString\n--------|---------|-----------\nConsole | django.core.mail.backends.console.EmailBackend | console://\nSMTP | django.core.mail.backends.smtp.EmailBackend | smtp://localhost:25\nSMTPS (smtp+tls alias) | django.core.mail.backends.smtp.EmailBackend | smtps://localhost:465\nSMTP+TLS | django.core.mail.backends.smtp.EmailBackend | smtp+tls://localhost:465\nSMTP+SSL | django.core.mail.backends.smtp.EmailBackend | smtp+ssl://localhost:587\nFile | django.core.mail.backends.filebased.EmailBackend | file:///var/log/emails\nMemory | django.core.mail.backends.locmem.EmailBackend | memory://\nDummy | django.core.mail.backends.dummy.EmailBackend | dummy://\n\n## Installation\n\nInstall package\n\n```shell\n$ python3 -m pip install django-service-urls\n```\n\nadd `import service_urls.patch` in your `manage.py`\n\n```python\n#!/usr/bin/env python\nimport os\nimport sys\n\nimport service_urls.patch\n\n\ndef main():\n os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')\n try:\n from django.core.management import execute_from_command_line\n except ImportError as exc:\n raise ImportError(\n \"Couldn't import Django. Are you sure it's installed and \"\n \"available on your PYTHONPATH environment variable? Did you \"\n \"forget to activate a virtual environment?\"\n ) from exc\n execute_from_command_line(sys.argv)\n\n\nif __name__ == '__main__':\n main()\n```\n\nand in `wsgi.py`\n\n```python\nimport os\nimport service_urls.patch\n\nfrom django.core.wsgi import get_wsgi_application\n\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')\n\napplication = get_wsgi_application()\n```\n\n## Extend `django-service-urls`\n\n### Add another handler\n\nYou can add another handler to an already existing handler:\n\n`my_postgres_backend/service_url.py`\n```python\nfrom service_urls.services import db, postgresql_config_from_url\n\n# postgresql fork\npostgresql_config_from_url = db.register(('mypgbackend', 'my_postgres_backend'))(postgresql_config_from_url)\n```\n\n`yourapp/settings.py`\n```python\nimport my_postgres_backend.service_url\n\n\nDATABASES = {'default': 'mypgbackend://user:pwd@:/mydb'}\n```\n\n### Add another service\n\n```python\nfrom service_urls import Service\n\n\nclass SearchService(Service):\n def config_from_url(self, engine, scheme, url):\n parsed = self.parse_url(url)\n return {\n 'ENGINE': engine,\n # here all options from parsed\n }\n\n\nsearch = SearchService()\n\n\n@search.register(('myengine', 'my_search_engine'))\ndef search_config_from_url(backend, engine, scheme, url):\n return backend.config_from_url(engine, scheme, url)\n```\n\n## Changes\n\n### 1.2.0\n\n* add __lt__ and __gt__ when using Django < 2.2\n* correct settings operations under django > 1.11 (ie: when running tests which override values)\n* add Django 2.2 support\n\n### 1.1.1\n\n* correct sqlite parser\n\n### 1.1.0\n\n* add helper to monkey patch django settings\n* doc cleanup\n\n### 1.0.2\n\n* fix setup.py and MANIFEST.in\n\n### 1.0.1\n\n* fix README typos\n\n### 1.0.0\n\n* Add `service_urls.db` service and default parsers\n* Add `service_urls.cache` service and default parsers\n* Add `service_urls.email` service and default parsers\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://bitbucket.org/rsalmaso/django-service-urls/get/1.2.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/rsalmaso/django-service-urls/", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-service-urls", "package_url": "https://pypi.org/project/django-service-urls/", "platform": "", "project_url": "https://pypi.org/project/django-service-urls/", "project_urls": { "Download": "https://bitbucket.org/rsalmaso/django-service-urls/get/1.2.tar.gz", "Homepage": "https://bitbucket.org/rsalmaso/django-service-urls/" }, "release_url": "https://pypi.org/project/django-service-urls/1.2/", "requires_dist": null, "requires_python": ">=3.5", "summary": "setting helper for django to represent databases, caches and email settings via a single string", "version": "1.2" }, "last_serial": 5095603, "releases": { "0.1a0": [ { "comment_text": "", "digests": { "md5": "f7a1e37e537ef940d9b8e86a67c5a58f", "sha256": "0b11e94824b88c8d2f3db1e778d3299e4d52ef4e2aba69de7818c411e03ebb97" }, "downloads": -1, "filename": "django_service_urls-0.1a0-py3-none-any.whl", "has_sig": false, "md5_digest": "f7a1e37e537ef940d9b8e86a67c5a58f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 2515, "upload_time": "2018-12-23T19:33:12", "url": "https://files.pythonhosted.org/packages/fe/d1/0b559ba8bbfa23e650c4e1ca0f14f2823ca0ac3caaa4a938497a26b1519c/django_service_urls-0.1a0-py3-none-any.whl" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "e099674f642b4dc69f50449d5ed5bf37", "sha256": "651e0086cca5c02f972dfb836cdb9fef803c30a763d985fe7c3ce69681dba4fd" }, "downloads": -1, "filename": "django_service_urls-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e099674f642b4dc69f50449d5ed5bf37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 4217, "upload_time": "2018-12-23T20:52:43", "url": "https://files.pythonhosted.org/packages/33/d0/90216cb69fe27a4f390b58433e6a94eab2e7f3920f75562261328aeef767/django_service_urls-1.0-py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "b5b3d4d4032fb3e2bb54388a085afbde", "sha256": "6519cd8b4fc5e45c9c289bff2a492f73227cb2e5ca317ddb5fe72098d3416341" }, "downloads": -1, "filename": "django_service_urls-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b5b3d4d4032fb3e2bb54388a085afbde", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 4255, "upload_time": "2018-12-23T20:58:21", "url": "https://files.pythonhosted.org/packages/6f/a9/4a1d483bf2076af62cf1476d3eccc12163961cac6e8c39ab2e217fe306df/django_service_urls-1.0.1-py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "d5baf5a9aad2862aed2eaf94dcd4d578", "sha256": "4797657424d9f0db6512f1ddf02f62ae2f83f52ab1c668e870c59ed0b38265ba" }, "downloads": -1, "filename": "django_service_urls-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d5baf5a9aad2862aed2eaf94dcd4d578", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 8282, "upload_time": "2018-12-23T23:03:27", "url": "https://files.pythonhosted.org/packages/83/dd/f8f7b4e9960816e265567a8c2a26187e420ed3972bfb587e1f16497dc147/django_service_urls-1.0.2-py3-none-any.whl" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "8a14adaa50ed19d576d3503889f21c2d", "sha256": "1d6c3415b6220caeb5dcd7806ee3f3321d031d2dbdfb3b85b1e3719864847518" }, "downloads": -1, "filename": "django_service_urls-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8a14adaa50ed19d576d3503889f21c2d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 9566, "upload_time": "2019-01-19T08:27:54", "url": "https://files.pythonhosted.org/packages/13/c0/8216585c5e0e72ee945531242b35d302f320eaf1f03278c74bc0a8c1c374/django_service_urls-1.1-py3-none-any.whl" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "dfd79551b4c8de4ddae8dfc3673981f3", "sha256": "cce4f065ebafabc15ec3cc9925e99e3a3382842c16b09f7afe89d1053476601a" }, "downloads": -1, "filename": "django_service_urls-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dfd79551b4c8de4ddae8dfc3673981f3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 9625, "upload_time": "2019-02-05T07:58:38", "url": "https://files.pythonhosted.org/packages/ff/68/077087bfa2d2d3922c5a980f0b4462f688dbd134f3f9ab0cd816b03e52d9/django_service_urls-1.1.1-py3-none-any.whl" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "3c727d02323fd0bdc216afb9becc2685", "sha256": "7c5a0b3ddcaea1874ed57b3a7ae69fa466f7c4ca4156e168a4fc290aaa24d0b4" }, "downloads": -1, "filename": "django_service_urls-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3c727d02323fd0bdc216afb9becc2685", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 9733, "upload_time": "2019-04-04T08:52:33", "url": "https://files.pythonhosted.org/packages/e0/26/2fcaea061611e6a2608b44387af314c77f30c12bf0fba44306b70f26263d/django_service_urls-1.2-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3c727d02323fd0bdc216afb9becc2685", "sha256": "7c5a0b3ddcaea1874ed57b3a7ae69fa466f7c4ca4156e168a4fc290aaa24d0b4" }, "downloads": -1, "filename": "django_service_urls-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3c727d02323fd0bdc216afb9becc2685", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 9733, "upload_time": "2019-04-04T08:52:33", "url": "https://files.pythonhosted.org/packages/e0/26/2fcaea061611e6a2608b44387af314c77f30c12bf0fba44306b70f26263d/django_service_urls-1.2-py3-none-any.whl" } ] }