diff options
author | CoprDistGit <infra@openeuler.org> | 2023-04-12 04:01:08 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-04-12 04:01:08 +0000 |
commit | 6d24746941ba8512197311b507abb1bca9a75f8d (patch) | |
tree | 0ce64184af67cc4e321c9ebaa46648a1ac450ab2 | |
parent | feb51f63383a3dec8df1bf6721b1e9a6ce693b57 (diff) |
automatic import of python-django-appdata
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-django-appdata.spec | 623 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 625 insertions, 0 deletions
@@ -0,0 +1 @@ +/django-appdata-0.3.2.tar.gz diff --git a/python-django-appdata.spec b/python-django-appdata.spec new file mode 100644 index 0000000..eab972f --- /dev/null +++ b/python-django-appdata.spec @@ -0,0 +1,623 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-appdata +Version: 0.3.2 +Release: 1 +Summary: Extendable field that enables Django apps to store their data on your models. +License: BSD +URL: https://github.com/ella/django-appdata/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/86/41/bfeab51479786f557d6880f4a4cb80875a171ce15b94390d4b8c208f7125/django-appdata-0.3.2.tar.gz +BuildArch: noarch + +Requires: python3-Django +Requires: python3-six + +%description +Django AppData +############## + +Extandable field and related tools that enable Django apps to extend your +reusable app. + +Motivation +********** + +When working with reusable django apps we often found that we needed to add +something extra to the model or form the app provided. Some apps try to solve +this by providing a flexible model definition and a pluggable form (see +``django.contrib.comments`` for an exmple of this approach) but even then it +leads to some duplication of efforts. + +``django-appdata`` app tries, through ``AppDataField``, ``MultiForm`` and ``AppDataModelAdmin``, +to provide a standardised approach to extending existing apps. + +Supported versions +****************** + +Python: 2.7, 3.5, 3.6, 3.7, 3.8 +Django: 1.11, 2.2, 3.0, 3.1 + +Upgrading to 0.3 +**************** + +If you are upgrading from a 0.2.x version, please note the following incompatible changes in 0.3 + +* Dropped Django < 1.11 and Python 3.4 compatibility + + +Extending Models +**************** + +When you have an extendable django app using the ``AppDataField``:: + + from django.db import models + from app_data import AppDataField + + class BlogPost(models.Model): + text = models.TextField() + app_data = AppDataField() + +your code can register a namespace on any (or all) ``AppDataField`` and store +it's own data there by registering a *container* (subclass of +``AppDataContainer``). To define the data you use django's form framework:: + + from django.forms.models import ModelMultipleChoiceField + from app_data import app_registry, AppDataForm, AppDataContainer + + from .models import Tag + + class TaggingAppDataForm(AppDataForm): + public_tags = ModelMultipleChoiceField(Tag.objects.all()) + admin_tags = ModelMultipleChoiceField(Tag.objects.all()) + + class TaggingAppDataContainer(AppDataContainer): + form_class = TaggingAppDataForm + + def tag_string(self): + print ', '.join(t.name for t in self.public_tags) + + app_registry.register('tagging', TaggingAppDataContainer) + +This should give you access to ``'tagging'`` namespace in any defined ``AppDataField``:: + + from blog_app.models import BlogPost + + bp = BlogPost() + assert bp.app_data.tagging.tag_string() == "" + + +Additional Options +~~~~~~~~~~~~~~~~~~ + +Note that if you don't need to add custom methods to your container you can +just use a factory to create the subclass:: + + app_registry.register('tagging', AppDataContainer.from_form(TaggingAppDataForm)) + +Additionaly you can restrict the registration to a given model:: + + from blog_app.models import BlogPost + + app_registry.register('tagging', TaggingAppDataContainer, BlogPost) + +Extending Forms +*************** + +``django-appdata`` supplies a ``MultiForm`` class - a wrapper around django's ``ModelForm`` +with optional added sub-forms that corresponds to namespaces registered in the +model's ``AppDataField``, typically the extendable app would create and use a +``MultiForm`` instead of a regular ``ModelForm``:: + + from app_data.forms import multiform_factory + from .models import BlogPost + + BlogPostMultiForm = multiform_factory(BlogPost) + +And when using that app any project can add additional sub-forms to that ``MultiForm``:: + + from blog_app.forms import BlogPostMultiForm + + BlogPostMultiForm.add_form('tagging', {'fields': ['public_tags']}) + +This way when the reusable app's code can remain unchanged and we can inject +additional form logic to its processing. + +Additional Options +~~~~~~~~~~~~~~~~~~ + +Any arguments and keyword arguments are passed without change to the +``ModelForm`` class the ``MultiForm`` is wrapping so even if you have custom args +for your ``ModelForm`` everything will still work:: + + from django.forms.models import BaseModelForm + + class ModelFormWithUser(ModelForm): + def __init__(self, user, *args, **kwargs): + self.user = user + super(ModelFormWithUser, self).__init__(*args, **kwargs) + + BlogPostMultiForm = multiform_factory(BlogPost, form=ModelFormWithUser) + +And of course you are not limited to the use of a factory function:: + + from app_data import MultiForm + + class MyMultiForm(MultiForm): + ModelForm = BlogPostModelForm + +MultiForms in Admin +******************* + +If you wish to add your own code to the admin interface, just use +``AppDataModelAdmin``:: + + from django.contrib import admin + from app_data.admin import AppDataModelAdmin + from blog_app.models import BlogPost + + class BlogPostAdmin(AppDataModelAdmin): + # due to the behavior of django admin validation we need to use + # get_fieldsets instead of just fieldsets + def get_fieldsets(self, request, obj=None): + return [ + (None, {'fields': ['text', ]}), + ('Tagging', {'fields': [('tagging.public_tags', 'tagging.admin_tags')]}) + ] + admin.site.register(BlogPost, BlogPostAdmin) + +Additional Options +~~~~~~~~~~~~~~~~~~ + +As with django's admin and forms you can supply your own ``MultiForm`` class by +using the ``multiform`` attribute of ``AppDataModelAdmin``. + +Behind the scenes +***************** + +``django-appdata`` uses a ``TextField`` to store the data on the model using JSON +and django's forms framework for (de)serialization and validation of the data. + +When accessing the containers in the field we will try to locate the +appropriate container in the registry. If none is found, plain data will be +returned if present (dict). To assure everything working properly we recommend +putting some sort of init code in place for your project that will make sure all +the registration is done before any actual code is run. We are using a module +called ``register`` in our apps and then a `piece of code`_ similar to admin's +autodiscover to iterate through installed apps and load this module. + +.. _`piece of code`: https://github.com/ella/ella/blob/master/ella/utils/installedapps.py#L27 + +Build status +************ + +:Master branch: + + .. image:: https://secure.travis-ci.org/ella/django-appdata.png?branch=master + :alt: Travis CI - Distributed build platform for the open source community + :target: http://travis-ci.org/#!/ella/django-appdata + + + +%package -n python3-django-appdata +Summary: Extendable field that enables Django apps to store their data on your models. +Provides: python-django-appdata +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-appdata +Django AppData +############## + +Extandable field and related tools that enable Django apps to extend your +reusable app. + +Motivation +********** + +When working with reusable django apps we often found that we needed to add +something extra to the model or form the app provided. Some apps try to solve +this by providing a flexible model definition and a pluggable form (see +``django.contrib.comments`` for an exmple of this approach) but even then it +leads to some duplication of efforts. + +``django-appdata`` app tries, through ``AppDataField``, ``MultiForm`` and ``AppDataModelAdmin``, +to provide a standardised approach to extending existing apps. + +Supported versions +****************** + +Python: 2.7, 3.5, 3.6, 3.7, 3.8 +Django: 1.11, 2.2, 3.0, 3.1 + +Upgrading to 0.3 +**************** + +If you are upgrading from a 0.2.x version, please note the following incompatible changes in 0.3 + +* Dropped Django < 1.11 and Python 3.4 compatibility + + +Extending Models +**************** + +When you have an extendable django app using the ``AppDataField``:: + + from django.db import models + from app_data import AppDataField + + class BlogPost(models.Model): + text = models.TextField() + app_data = AppDataField() + +your code can register a namespace on any (or all) ``AppDataField`` and store +it's own data there by registering a *container* (subclass of +``AppDataContainer``). To define the data you use django's form framework:: + + from django.forms.models import ModelMultipleChoiceField + from app_data import app_registry, AppDataForm, AppDataContainer + + from .models import Tag + + class TaggingAppDataForm(AppDataForm): + public_tags = ModelMultipleChoiceField(Tag.objects.all()) + admin_tags = ModelMultipleChoiceField(Tag.objects.all()) + + class TaggingAppDataContainer(AppDataContainer): + form_class = TaggingAppDataForm + + def tag_string(self): + print ', '.join(t.name for t in self.public_tags) + + app_registry.register('tagging', TaggingAppDataContainer) + +This should give you access to ``'tagging'`` namespace in any defined ``AppDataField``:: + + from blog_app.models import BlogPost + + bp = BlogPost() + assert bp.app_data.tagging.tag_string() == "" + + +Additional Options +~~~~~~~~~~~~~~~~~~ + +Note that if you don't need to add custom methods to your container you can +just use a factory to create the subclass:: + + app_registry.register('tagging', AppDataContainer.from_form(TaggingAppDataForm)) + +Additionaly you can restrict the registration to a given model:: + + from blog_app.models import BlogPost + + app_registry.register('tagging', TaggingAppDataContainer, BlogPost) + +Extending Forms +*************** + +``django-appdata`` supplies a ``MultiForm`` class - a wrapper around django's ``ModelForm`` +with optional added sub-forms that corresponds to namespaces registered in the +model's ``AppDataField``, typically the extendable app would create and use a +``MultiForm`` instead of a regular ``ModelForm``:: + + from app_data.forms import multiform_factory + from .models import BlogPost + + BlogPostMultiForm = multiform_factory(BlogPost) + +And when using that app any project can add additional sub-forms to that ``MultiForm``:: + + from blog_app.forms import BlogPostMultiForm + + BlogPostMultiForm.add_form('tagging', {'fields': ['public_tags']}) + +This way when the reusable app's code can remain unchanged and we can inject +additional form logic to its processing. + +Additional Options +~~~~~~~~~~~~~~~~~~ + +Any arguments and keyword arguments are passed without change to the +``ModelForm`` class the ``MultiForm`` is wrapping so even if you have custom args +for your ``ModelForm`` everything will still work:: + + from django.forms.models import BaseModelForm + + class ModelFormWithUser(ModelForm): + def __init__(self, user, *args, **kwargs): + self.user = user + super(ModelFormWithUser, self).__init__(*args, **kwargs) + + BlogPostMultiForm = multiform_factory(BlogPost, form=ModelFormWithUser) + +And of course you are not limited to the use of a factory function:: + + from app_data import MultiForm + + class MyMultiForm(MultiForm): + ModelForm = BlogPostModelForm + +MultiForms in Admin +******************* + +If you wish to add your own code to the admin interface, just use +``AppDataModelAdmin``:: + + from django.contrib import admin + from app_data.admin import AppDataModelAdmin + from blog_app.models import BlogPost + + class BlogPostAdmin(AppDataModelAdmin): + # due to the behavior of django admin validation we need to use + # get_fieldsets instead of just fieldsets + def get_fieldsets(self, request, obj=None): + return [ + (None, {'fields': ['text', ]}), + ('Tagging', {'fields': [('tagging.public_tags', 'tagging.admin_tags')]}) + ] + admin.site.register(BlogPost, BlogPostAdmin) + +Additional Options +~~~~~~~~~~~~~~~~~~ + +As with django's admin and forms you can supply your own ``MultiForm`` class by +using the ``multiform`` attribute of ``AppDataModelAdmin``. + +Behind the scenes +***************** + +``django-appdata`` uses a ``TextField`` to store the data on the model using JSON +and django's forms framework for (de)serialization and validation of the data. + +When accessing the containers in the field we will try to locate the +appropriate container in the registry. If none is found, plain data will be +returned if present (dict). To assure everything working properly we recommend +putting some sort of init code in place for your project that will make sure all +the registration is done before any actual code is run. We are using a module +called ``register`` in our apps and then a `piece of code`_ similar to admin's +autodiscover to iterate through installed apps and load this module. + +.. _`piece of code`: https://github.com/ella/ella/blob/master/ella/utils/installedapps.py#L27 + +Build status +************ + +:Master branch: + + .. image:: https://secure.travis-ci.org/ella/django-appdata.png?branch=master + :alt: Travis CI - Distributed build platform for the open source community + :target: http://travis-ci.org/#!/ella/django-appdata + + + +%package help +Summary: Development documents and examples for django-appdata +Provides: python3-django-appdata-doc +%description help +Django AppData +############## + +Extandable field and related tools that enable Django apps to extend your +reusable app. + +Motivation +********** + +When working with reusable django apps we often found that we needed to add +something extra to the model or form the app provided. Some apps try to solve +this by providing a flexible model definition and a pluggable form (see +``django.contrib.comments`` for an exmple of this approach) but even then it +leads to some duplication of efforts. + +``django-appdata`` app tries, through ``AppDataField``, ``MultiForm`` and ``AppDataModelAdmin``, +to provide a standardised approach to extending existing apps. + +Supported versions +****************** + +Python: 2.7, 3.5, 3.6, 3.7, 3.8 +Django: 1.11, 2.2, 3.0, 3.1 + +Upgrading to 0.3 +**************** + +If you are upgrading from a 0.2.x version, please note the following incompatible changes in 0.3 + +* Dropped Django < 1.11 and Python 3.4 compatibility + + +Extending Models +**************** + +When you have an extendable django app using the ``AppDataField``:: + + from django.db import models + from app_data import AppDataField + + class BlogPost(models.Model): + text = models.TextField() + app_data = AppDataField() + +your code can register a namespace on any (or all) ``AppDataField`` and store +it's own data there by registering a *container* (subclass of +``AppDataContainer``). To define the data you use django's form framework:: + + from django.forms.models import ModelMultipleChoiceField + from app_data import app_registry, AppDataForm, AppDataContainer + + from .models import Tag + + class TaggingAppDataForm(AppDataForm): + public_tags = ModelMultipleChoiceField(Tag.objects.all()) + admin_tags = ModelMultipleChoiceField(Tag.objects.all()) + + class TaggingAppDataContainer(AppDataContainer): + form_class = TaggingAppDataForm + + def tag_string(self): + print ', '.join(t.name for t in self.public_tags) + + app_registry.register('tagging', TaggingAppDataContainer) + +This should give you access to ``'tagging'`` namespace in any defined ``AppDataField``:: + + from blog_app.models import BlogPost + + bp = BlogPost() + assert bp.app_data.tagging.tag_string() == "" + + +Additional Options +~~~~~~~~~~~~~~~~~~ + +Note that if you don't need to add custom methods to your container you can +just use a factory to create the subclass:: + + app_registry.register('tagging', AppDataContainer.from_form(TaggingAppDataForm)) + +Additionaly you can restrict the registration to a given model:: + + from blog_app.models import BlogPost + + app_registry.register('tagging', TaggingAppDataContainer, BlogPost) + +Extending Forms +*************** + +``django-appdata`` supplies a ``MultiForm`` class - a wrapper around django's ``ModelForm`` +with optional added sub-forms that corresponds to namespaces registered in the +model's ``AppDataField``, typically the extendable app would create and use a +``MultiForm`` instead of a regular ``ModelForm``:: + + from app_data.forms import multiform_factory + from .models import BlogPost + + BlogPostMultiForm = multiform_factory(BlogPost) + +And when using that app any project can add additional sub-forms to that ``MultiForm``:: + + from blog_app.forms import BlogPostMultiForm + + BlogPostMultiForm.add_form('tagging', {'fields': ['public_tags']}) + +This way when the reusable app's code can remain unchanged and we can inject +additional form logic to its processing. + +Additional Options +~~~~~~~~~~~~~~~~~~ + +Any arguments and keyword arguments are passed without change to the +``ModelForm`` class the ``MultiForm`` is wrapping so even if you have custom args +for your ``ModelForm`` everything will still work:: + + from django.forms.models import BaseModelForm + + class ModelFormWithUser(ModelForm): + def __init__(self, user, *args, **kwargs): + self.user = user + super(ModelFormWithUser, self).__init__(*args, **kwargs) + + BlogPostMultiForm = multiform_factory(BlogPost, form=ModelFormWithUser) + +And of course you are not limited to the use of a factory function:: + + from app_data import MultiForm + + class MyMultiForm(MultiForm): + ModelForm = BlogPostModelForm + +MultiForms in Admin +******************* + +If you wish to add your own code to the admin interface, just use +``AppDataModelAdmin``:: + + from django.contrib import admin + from app_data.admin import AppDataModelAdmin + from blog_app.models import BlogPost + + class BlogPostAdmin(AppDataModelAdmin): + # due to the behavior of django admin validation we need to use + # get_fieldsets instead of just fieldsets + def get_fieldsets(self, request, obj=None): + return [ + (None, {'fields': ['text', ]}), + ('Tagging', {'fields': [('tagging.public_tags', 'tagging.admin_tags')]}) + ] + admin.site.register(BlogPost, BlogPostAdmin) + +Additional Options +~~~~~~~~~~~~~~~~~~ + +As with django's admin and forms you can supply your own ``MultiForm`` class by +using the ``multiform`` attribute of ``AppDataModelAdmin``. + +Behind the scenes +***************** + +``django-appdata`` uses a ``TextField`` to store the data on the model using JSON +and django's forms framework for (de)serialization and validation of the data. + +When accessing the containers in the field we will try to locate the +appropriate container in the registry. If none is found, plain data will be +returned if present (dict). To assure everything working properly we recommend +putting some sort of init code in place for your project that will make sure all +the registration is done before any actual code is run. We are using a module +called ``register`` in our apps and then a `piece of code`_ similar to admin's +autodiscover to iterate through installed apps and load this module. + +.. _`piece of code`: https://github.com/ella/ella/blob/master/ella/utils/installedapps.py#L27 + +Build status +************ + +:Master branch: + + .. image:: https://secure.travis-ci.org/ella/django-appdata.png?branch=master + :alt: Travis CI - Distributed build platform for the open source community + :target: http://travis-ci.org/#!/ella/django-appdata + + + +%prep +%autosetup -n django-appdata-0.3.2 + +%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-appdata -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed Apr 12 2023 Python_Bot <Python_Bot@openeuler.org> - 0.3.2-1 +- Package Spec generated @@ -0,0 +1 @@ +c8e706ffa80ccd18b9aee9036707e932 django-appdata-0.3.2.tar.gz |