diff options
Diffstat (limited to 'python-django-extra-checks.spec')
| -rw-r--r-- | python-django-extra-checks.spec | 480 |
1 files changed, 480 insertions, 0 deletions
diff --git a/python-django-extra-checks.spec b/python-django-extra-checks.spec new file mode 100644 index 0000000..152bfd4 --- /dev/null +++ b/python-django-extra-checks.spec @@ -0,0 +1,480 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-extra-checks +Version: 0.13.3 +Release: 1 +Summary: Collection of useful checks for Django Checks Framework +License: MIT License +URL: https://github.com/kalekseev/django-extra-checks +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/4a/4c/e470431b0c5614683a63a0084bef58153081b4756c6a6a809bba2ebb2768/django-extra-checks-0.13.3.tar.gz +BuildArch: noarch + +Requires: python3-typing-extensions +Requires: python3-Django +Requires: python3-djangorestframework +Requires: python3-django-stubs +Requires: python3-djangorestframework-stubs +Requires: python3-mypy +Requires: python3-flake8 +Requires: python3-flake8-bugbear +Requires: python3-pre-commit +Requires: python3-isort +Requires: python3-pdbpp +Requires: python3-black +Requires: python3-pytest +Requires: python3-pytest-cov +Requires: python3-pytest-django + +%description +# 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. +- **no-index-together** - Use the indexes 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-boolean-null** - prefer using `BooleanField(null=True)` instead of `NullBooleanField`. +- **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` (use `extra_checks.apps.ExtraChecksConfig` for Django versions prior to 3.2). + +## 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/) + + +%package -n python3-django-extra-checks +Summary: Collection of useful checks for Django Checks Framework +Provides: python-django-extra-checks +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-extra-checks +# 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. +- **no-index-together** - Use the indexes 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-boolean-null** - prefer using `BooleanField(null=True)` instead of `NullBooleanField`. +- **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` (use `extra_checks.apps.ExtraChecksConfig` for Django versions prior to 3.2). + +## 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/) + + +%package help +Summary: Development documents and examples for django-extra-checks +Provides: python3-django-extra-checks-doc +%description help +# 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. +- **no-index-together** - Use the indexes 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-boolean-null** - prefer using `BooleanField(null=True)` instead of `NullBooleanField`. +- **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` (use `extra_checks.apps.ExtraChecksConfig` for Django versions prior to 3.2). + +## 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/) + + +%prep +%autosetup -n django-extra-checks-0.13.3 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-django-extra-checks -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.13.3-1 +- Package Spec generated |
