{ "info": { "author": "Dmitriy Ferens", "author_email": "ferensdima@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "====================\r\ndjango-classsettings\r\n====================\r\n\r\n.. image:: https://travis-ci.org/dferens/django-classsettings.png?branch=master\r\n :target: https://travis-ci.org/dferens/django-classsettings\r\n\r\n.. image:: https://coveralls.io/repos/dferens/django-classsettings/badge.png?branch=master\r\n :target: https://coveralls.io/r/dferens/django-classsettings?branch=master\r\n\r\nJust a collection of Django settings helpers.\r\n\r\n1. `Requirements`_.\r\n2. `Settings`_.\r\n3. `urlconfs helpers`_.\r\n\r\nRequirements\r\n------------\r\n\r\n- Python 2.6, 2.7, 3.2, 3.3\r\n- Django 1.4-1.6\r\n\r\nSettings\r\n--------\r\n\r\nSettings class - adds ability to group Django settings with classes. As many text editors and IDEs indexes code symbols, with such approach you can\r\neasily navigate to any group and any line of your settings file.\r\n\r\n.. code-block:: python\r\n\r\n class Apps(Settings):\r\n def DJANGO_APPS(self): return (\r\n 'django.contrib.auth',\r\n ...\r\n )\r\n def THIRD_PARTY_APPS(self): return (\r\n 'rest_framework',\r\n 'south',\r\n )\r\n def OWN_APPS(self): return (\r\n 'app1',\r\n 'app2',\r\n )\r\n def INSTALLED_APPS(self):\r\n return self.DJANGO_APPS() + self.THIRD_PARTY_APPS() + self.OWN_APPS()\r\n\r\nWith **Sublime Text 3** press :code:`Cmd+Shift+R` and type \"THIRD\".\r\nSame thing could be done with *TEMPLATE_CONTEXT_PROCESSORS*, *MIDDLEWARE_CLASSES* etc.\r\n\r\nConfig class - injects dictionary of variables into module's scope:\r\n\r\n.. code-block:: python\r\n\r\n from classsettings import Config\r\n \r\n class REST_FRAMEWORK(Config):\r\n def DEFAULT_FILTER_BACKENDS(self): return (\r\n 'rest_framework.filters.DjangoFilterBackend',\r\n )\r\n DEFAULT_RENDERER_CLASSES = ('rest_framework.renderers.YAMLRenderer',)\r\n\r\nWill result in\r\n\r\n.. code-block:: python\r\n\r\n REST_FRAMEWORK = {\r\n 'DEFAULT_FILTER_BACKENDS': (\r\n 'rest_framework.filter.DjangoFilterBackend',\r\n ),\r\n 'DEFAULT_RENDERER_CLASSES': (\r\n 'rest_framework.renderers.YAMLRenderer',\r\n )\r\n }\r\n\r\nAnd some decorators may be found usefull:\r\n\r\n.. code-block:: python\r\n\r\n from classsettings import Settings, from_env\r\n \r\n class MySettingsGroup(Settings):\r\n # Will look for `EMAIL_HOST` key in `os.environ`\r\n # and use `smtp.gmail.com` if such key was not found\r\n @from_env\r\n def EMAIL_HOST(self): return 'smtp.gmail.com'\r\n \r\n # Will raise Django's `ImproperlyConfigured` exception\r\n # if such key was not found\r\n @from_env\r\n def SECRET_KEY(self): pass\r\n\r\n # Will look for specified key\r\n @from_env(key='CUSTOM_ENV_VAR_NAME')\r\n def variable(self): pass\r\n\r\n # Will apply `through` callable to result\r\n @from_env(through=dj_database_url.parse)\r\n def DATABASE_URL(self): return 'sqlite://'\r\n\r\n\r\nurlconfs helpers\r\n----------------\r\n\r\n.. _urlconfs:\r\n\r\n\r\nSample urlconf:\r\n\r\n.. code-block:: python\r\n\r\n from django.conf.urls import patterns, url\r\n\r\n import views\r\n\r\n urlpatterns = patterns('',\r\n url(r'^$', views.ProjectList.as_view(), name='projects_project_list'),\r\n\r\n url(r'^create/$', views.ProjectCreate.as_view(), name='projects_project_create'),\r\n url(r'^view/(?P\\w+)/$', views.ProjectDetail.as_view(), name='projects_project_view'),\r\n url(r'^update/(?P\\w+)/$', views.ProjectUpdate.as_view(), name='projects_project_update'),\r\n url(r'^delete/(?P\\w+)/$', views.ProjectDelete.as_view(), name='projects_project_delete'),\r\n\r\n url('^accounts/(?P\\d+)/$', 'project.accounts.profile_info', name='users_info')\r\n url('^accounts/edit/$', 'project.accounts.profile_edit', name='users_edit')\r\n )\r\n\r\nis equivalent to\r\n\r\n.. code-block:: python\r\n\r\n from classsettings.urls import Scope, url\r\n\r\n import views\r\n\r\n #\r\n # Define url pattern, views or view name prefix:\r\n #\r\n # Views resolution:\r\n #\r\n # some.module, 'string' => getattr(module, 'string')\r\n # 'scope_str', 'string' => 'string'.format('scope_str', ...)\r\n #\r\n with Scope(regex='^', views=views, name='projects') as root:\r\n #\r\n # Strings are formatted with `str.format`:\r\n #\r\n # value.format(value_of_parent_scope, **scope.context)\r\n #\r\n # Additional context variables can be defined and used with `{variable}`\r\n with Scope(name='{}_project', pk=r'(?P\\w+)') as project:\r\n # Also supported\r\n project['pk'] = r'(?P\\w+)'\r\n\r\n # For CBV `.as_view()` is called automatically\r\n url('{}$', 'ProjectList', name='{}_list') # url => '^$', name => 'projects_project_list' \r\n url('{}create/$', 'ProjectCreate', name='{}_create')\r\n url('{}view/{pk}/$', 'ProjectDetail', name='{}_detail')\r\n url('{}update/{pk}/$', 'ProjectUpdate', name='{}_update')\r\n url('{}delete/{pk}/$', 'ProjectDelete', name='{}_delete')\r\n\r\n with Scope(regex='{}accounts/', views='project.accounts', name='users',\r\n user_id=r'(?P\\d+)'):\r\n url('{}{user_id}?/$', '{}.profile_info', name='{}_info')\r\n url('{}edit/$', '{}.profile_edit', name='{}_edit')\r\n\r\n urlpatterns = root.urls\r\n\r\nFor urls defined outside *Scope object* native django's url function is used.", "description_content_type": null, "docs_url": null, "download_url": "https://pypi.python.org/pypi/django-classsettings", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dferens/django-classsettings", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-classsettings", "package_url": "https://pypi.org/project/django-classsettings/", "platform": "Any", "project_url": "https://pypi.org/project/django-classsettings/", "project_urls": { "Download": "https://pypi.python.org/pypi/django-classsettings", "Homepage": "https://github.com/dferens/django-classsettings" }, "release_url": "https://pypi.org/project/django-classsettings/1.0.2/", "requires_dist": null, "requires_python": null, "summary": "Django settings helpers", "version": "1.0.2" }, "last_serial": 1068434, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "0c467e73079cb9e8a7d55246f15f2c7a", "sha256": "b116ed498723c0f871e7d0bd21c9386ad6e317849c5b3b4c9a3aec1aa2f4243c" }, "downloads": -1, "filename": "django-classsettings-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0c467e73079cb9e8a7d55246f15f2c7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3386, "upload_time": "2014-03-08T16:26:47", "url": "https://files.pythonhosted.org/packages/be/9e/53d8ed00247c39bef6f4372df73ef1a0e410298709de3c280ae172b6ad82/django-classsettings-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "eca3cc8b3af62f880bb88ef787074c34", "sha256": "a5554148d2131278057ef878764fcd4aa527bc0cf886a6f1b7315bd7d4dec0e4" }, "downloads": -1, "filename": "django-classsettings-1.0.1.tar.gz", "has_sig": false, "md5_digest": "eca3cc8b3af62f880bb88ef787074c34", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3835, "upload_time": "2014-03-09T00:10:22", "url": "https://files.pythonhosted.org/packages/fc/df/89b9906c4b47a1b3025be962b9cf9caf5f23a6c24d014b63f9a0dc277e42/django-classsettings-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "227e6e17ca94d5c28d1c0427d281ccae", "sha256": "b15e09dabb69c9ee713a6f6993ccaa4883e6361a1556df29171a2b74d6380caa" }, "downloads": -1, "filename": "django-classsettings-1.0.2.tar.gz", "has_sig": false, "md5_digest": "227e6e17ca94d5c28d1c0427d281ccae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6734, "upload_time": "2014-04-22T22:11:46", "url": "https://files.pythonhosted.org/packages/a1/7b/d32ac7bc22eae354c0329e839001d40b150dcdc34f3a773bc227e27ce479/django-classsettings-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "227e6e17ca94d5c28d1c0427d281ccae", "sha256": "b15e09dabb69c9ee713a6f6993ccaa4883e6361a1556df29171a2b74d6380caa" }, "downloads": -1, "filename": "django-classsettings-1.0.2.tar.gz", "has_sig": false, "md5_digest": "227e6e17ca94d5c28d1c0427d281ccae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6734, "upload_time": "2014-04-22T22:11:46", "url": "https://files.pythonhosted.org/packages/a1/7b/d32ac7bc22eae354c0329e839001d40b150dcdc34f3a773bc227e27ce479/django-classsettings-1.0.2.tar.gz" } ] }