Name | django-extra-checks JSON |
Version |
0.15.1
JSON |
| download |
home_page | None |
Summary | Collection of useful checks for Django Checks Framework |
upload_time | 2024-09-01 15:03:34 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | None |
keywords |
checks
django
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Django Extra Checks
Collection of useful checks for Django Checks Frameworks
## Checks
### Models
- **extra-checks-config** - settings.EXTRA_CHECKS is valid config for django-extra-checks (always enabled).
- **model-attribute** - Each Model in the project must have all attributes from `attrs` setting specified.
- **model-meta-attribute** - Each Model.Meta in the project must have all attributes from `attrs` setting specified.
- **no-unique-together** - Use `UniqueConstraint` with the `constraints` option instead.
- **model-admin** - Each model must be registered in admin.
- **field-file-upload-to** - `FileField` / `ImageField` must have non empty `upload_to` argument.
- **field-verbose-name** - All model's fields must have verbose name.
- **field-verbose-name-gettext** - `verbose_name` must use gettext.
- **field-verbose-name-gettext-case** - Words in text wrapped with gettext must be in one case.
- **field-help-text-gettext** - `help_text` must use gettext.
- **field-text-null** - text fields shouldn't use `null=True`.
- **field-null** - don't pass `null=False` to model fields (this is django default).
- **field-foreign-key-db-index** - ForeignKey fields must specify `db_index` explicitly (to apply only to fields in indexes: `when: indexes`).
- **field-related-name** - Related fields must specify `related_name` explicitly.
- **field-default-null** - If field nullable (`null=True`), then
`default=None` argument is redundant and should be removed.
**WARNING** Be aware that setting is database dependent,
eg. Oracle interprets empty strings as nulls as a result
django uses empty string instead of null as default.
- **field-choices-constraint** - Fields with choices must have companion CheckConstraint to enforce choices on database level, [details](https://adamj.eu/tech/2020/01/22/djangos-field-choices-dont-constrain-your-data/).
### DRF Serializers
- **drf-model-serializer-extra-kwargs** - ModelSerializer's extra_kwargs must not include fields that specified on serializer.
- **drf-model-serializer-meta-attribute** - Each ModelSerializer.Meta must have all attributes specified in `attrs`, [use case](https://hakibenita.com/django-rest-framework-slow#bonus-forcing-good-habits).
## Installation
Install with `pip install django-extra-checks`
Add `extra_checks` to `INSTALLED_APPS`.
## Settings
To enable some check define `EXTRA_CHECKS` setting with a dict of checks and its settings:
```python
EXTRA_CHECKS = {
"checks": [
# require non empty `upload_to` argument.
"field-file-upload-to",
# use dict form if check need configuration
# eg. all models must have fk to Site model
{"id": "model-attribute", "attrs": ["site"]},
# require `db_table` for all models, increase level to CRITICAL
{"id": "model-meta-attribute", "attrs": ["db_table"], "level": "CRITICAL"},
]
}
```
By default only your project apps are checked but you can use
`include_apps` option to specify apps to check (including third party apps):
```python
EXTRA_CHECKS = {
# use same names as in INSTALLED_APPS
"include_apps": ["django.contrib.sites", "my_app"],
...
}
```
#### Ignoring check problems
Use `extra-checks-disable-next-line` comment to disable checks:
```python
# disable specific checks on model
# extra-checks-disable-next-line model-attribute, model-admin
class MyModel(models.Model):
# disable all checks on image field
# extra-checks-disable-next-line
image = models.ImageField()
# separate comments and check's codes are also supported
# extra-checks-disable-next-line X014
# extra-checks-disable-next-line no-unique-together
class Meta:
...
```
Another way is to provide function that accepts field, model or
serializer class as its first argument and returns `True` if it must be skipped.
_Be aware that the more computation expensive your skipif functions the
slower django check will run._
`skipif` example:
```python
def skipif_streamfield(field, *args, **kwargs):
return isinstance(field, wagtail.core.fields.StreamField)
def skipif_non_core_app(model_cls, *args, **kwargs):
return model_cls._meta.app_label != "my_core_app"
EXTRA_CHECKS = {
"check": [
{
"id": "field-verbose-name-gettext",
# make this check skip wagtail's StreamField
"skipif": skipif_streamfield
},
{
"id": "model-admin",
# models from non core app shouldn't be registered in admin
"skipif": skipif_non_core_app,
},
]
}
```
## Development
Install dev deps in virtualenv `pip install -e .[dev,test]`.
## Credits
The project was built using ideas and code snippets from:
- [Haki Benita](https://medium.com/@hakibenita/automating-the-boring-stuff-in-django-using-the-check-framework-3495fb550a6a)
- [Jon Dufresne](https://github.com/jdufresne/django-check-admin)
- [Adam Johnson](https://adamj.eu/tech/2020/01/22/djangos-field-choices-dont-constrain-your-data/)
Raw data
{
"_id": null,
"home_page": null,
"name": "django-extra-checks",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "checks, django",
"author": null,
"author_email": "Konstantin Alekseev <mail@kalekseev.com>",
"download_url": "https://files.pythonhosted.org/packages/22/91/3d9cb571b4cbdb328d018a0b51ca7a4fe90fad83275b284d9a86b2eef933/django_extra_checks-0.15.1.tar.gz",
"platform": null,
"description": "# Django Extra Checks\n\nCollection of useful checks for Django Checks Frameworks\n\n## Checks\n\n### Models\n\n- **extra-checks-config** - settings.EXTRA_CHECKS is valid config for django-extra-checks (always enabled).\n- **model-attribute** - Each Model in the project must have all attributes from `attrs` setting specified.\n- **model-meta-attribute** - Each Model.Meta in the project must have all attributes from `attrs` setting specified.\n- **no-unique-together** - Use `UniqueConstraint` with the `constraints` option instead.\n- **model-admin** - Each model must be registered in admin.\n- **field-file-upload-to** - `FileField` / `ImageField` must have non empty `upload_to` argument.\n- **field-verbose-name** - All model's fields must have verbose name.\n- **field-verbose-name-gettext** - `verbose_name` must use gettext.\n- **field-verbose-name-gettext-case** - Words in text wrapped with gettext must be in one case.\n- **field-help-text-gettext** - `help_text` must use gettext.\n- **field-text-null** - text fields shouldn't use `null=True`.\n- **field-null** - don't pass `null=False` to model fields (this is django default).\n- **field-foreign-key-db-index** - ForeignKey fields must specify `db_index` explicitly (to apply only to fields in indexes: `when: indexes`).\n- **field-related-name** - Related fields must specify `related_name` explicitly.\n- **field-default-null** - If field nullable (`null=True`), then\n `default=None` argument is redundant and should be removed.\n **WARNING** Be aware that setting is database dependent,\n eg. Oracle interprets empty strings as nulls as a result\n django uses empty string instead of null as default.\n- **field-choices-constraint** - Fields with choices must have companion CheckConstraint to enforce choices on database level, [details](https://adamj.eu/tech/2020/01/22/djangos-field-choices-dont-constrain-your-data/).\n\n### DRF Serializers\n\n- **drf-model-serializer-extra-kwargs** - ModelSerializer's extra_kwargs must not include fields that specified on serializer.\n- **drf-model-serializer-meta-attribute** - Each ModelSerializer.Meta must have all attributes specified in `attrs`, [use case](https://hakibenita.com/django-rest-framework-slow#bonus-forcing-good-habits).\n\n## Installation\n\nInstall with `pip install django-extra-checks`\n\nAdd `extra_checks` to `INSTALLED_APPS`.\n\n## Settings\n\nTo enable some check define `EXTRA_CHECKS` setting with a dict of checks and its settings:\n\n```python\nEXTRA_CHECKS = {\n \"checks\": [\n # require non empty `upload_to` argument.\n \"field-file-upload-to\",\n # use dict form if check need configuration\n # eg. all models must have fk to Site model\n {\"id\": \"model-attribute\", \"attrs\": [\"site\"]},\n # require `db_table` for all models, increase level to CRITICAL\n {\"id\": \"model-meta-attribute\", \"attrs\": [\"db_table\"], \"level\": \"CRITICAL\"},\n ]\n}\n```\n\nBy default only your project apps are checked but you can use\n`include_apps` option to specify apps to check (including third party apps):\n\n```python\nEXTRA_CHECKS = {\n # use same names as in INSTALLED_APPS\n \"include_apps\": [\"django.contrib.sites\", \"my_app\"],\n ...\n}\n```\n\n#### Ignoring check problems\n\nUse `extra-checks-disable-next-line` comment to disable checks:\n\n```python\n# disable specific checks on model\n# extra-checks-disable-next-line model-attribute, model-admin\nclass MyModel(models.Model):\n # disable all checks on image field\n # extra-checks-disable-next-line\n image = models.ImageField()\n\n # separate comments and check's codes are also supported\n # extra-checks-disable-next-line X014\n # extra-checks-disable-next-line no-unique-together\n class Meta:\n ...\n```\n\nAnother way is to provide function that accepts field, model or\nserializer class as its first argument and returns `True` if it must be skipped.\n_Be aware that the more computation expensive your skipif functions the\nslower django check will run._\n\n`skipif` example:\n\n```python\ndef skipif_streamfield(field, *args, **kwargs):\n return isinstance(field, wagtail.core.fields.StreamField)\n\ndef skipif_non_core_app(model_cls, *args, **kwargs):\n return model_cls._meta.app_label != \"my_core_app\"\n\nEXTRA_CHECKS = {\n \"check\": [\n {\n \"id\": \"field-verbose-name-gettext\",\n # make this check skip wagtail's StreamField\n \"skipif\": skipif_streamfield\n },\n {\n \"id\": \"model-admin\",\n # models from non core app shouldn't be registered in admin\n \"skipif\": skipif_non_core_app,\n },\n ]\n}\n```\n\n## Development\n\nInstall dev deps in virtualenv `pip install -e .[dev,test]`.\n\n## Credits\n\nThe project was built using ideas and code snippets from:\n\n- [Haki Benita](https://medium.com/@hakibenita/automating-the-boring-stuff-in-django-using-the-check-framework-3495fb550a6a)\n- [Jon Dufresne](https://github.com/jdufresne/django-check-admin)\n- [Adam Johnson](https://adamj.eu/tech/2020/01/22/djangos-field-choices-dont-constrain-your-data/)\n",
"bugtrack_url": null,
"license": null,
"summary": "Collection of useful checks for Django Checks Framework",
"version": "0.15.1",
"project_urls": {
"Homepage": "https://github.com/kalekseev/django-extra-checks"
},
"split_keywords": [
"checks",
" django"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ef8279e9907c7c745dbc146f53100258f0e6df3f2722f59dd0cac6fc335960ee",
"md5": "5b5dd639008cc4d894c10a2c06703d8b",
"sha256": "3e724a76285331ca42cf340f94cea82cef99ebfe435ec27831b5edddcc9d5bcb"
},
"downloads": -1,
"filename": "django_extra_checks-0.15.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5b5dd639008cc4d894c10a2c06703d8b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 21453,
"upload_time": "2024-09-01T15:03:32",
"upload_time_iso_8601": "2024-09-01T15:03:32.710437Z",
"url": "https://files.pythonhosted.org/packages/ef/82/79e9907c7c745dbc146f53100258f0e6df3f2722f59dd0cac6fc335960ee/django_extra_checks-0.15.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "22913d9cb571b4cbdb328d018a0b51ca7a4fe90fad83275b284d9a86b2eef933",
"md5": "2b303b7231037d4c161a84378e76c9e4",
"sha256": "9a9ceba3d2c405cbf01fef718c46fbbdba46d3b402767869a05fe57684fc716d"
},
"downloads": -1,
"filename": "django_extra_checks-0.15.1.tar.gz",
"has_sig": false,
"md5_digest": "2b303b7231037d4c161a84378e76c9e4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 14850,
"upload_time": "2024-09-01T15:03:34",
"upload_time_iso_8601": "2024-09-01T15:03:34.237120Z",
"url": "https://files.pythonhosted.org/packages/22/91/3d9cb571b4cbdb328d018a0b51ca7a4fe90fad83275b284d9a86b2eef933/django_extra_checks-0.15.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-01 15:03:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kalekseev",
"github_project": "django-extra-checks",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "django-extra-checks"
}