diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-12 05:14:25 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-12 05:14:25 +0000 |
| commit | fad727b5954d3e6f8dd8ecbd12e405f429b5e3ce (patch) | |
| tree | ce966c42256e3b898cc72e28643a1c7a9306b89f | |
| parent | 7d87efe212ffcbe215f475ee0901a7708d0d0204 (diff) | |
automatic import of python-django-service-objects
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-django-service-objects.spec | 588 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 590 insertions, 0 deletions
@@ -0,0 +1 @@ +/django-service-objects-0.7.1.tar.gz diff --git a/python-django-service-objects.spec b/python-django-service-objects.spec new file mode 100644 index 0000000..d88abf1 --- /dev/null +++ b/python-django-service-objects.spec @@ -0,0 +1,588 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-service-objects +Version: 0.7.1 +Release: 1 +Summary: Service objects for Django +License: MIT License +URL: https://github.com/mixxorz/django-service-objects +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/5d/41/86414421c90af067a9ca232bfb86c486ed1dcc7a9da4f5925ee85189252d/django-service-objects-0.7.1.tar.gz +BuildArch: noarch + +Requires: python3-Django +Requires: python3-six +Requires: python3-celery + +%description +# django-service-objects [![Latest Version][latest-version-image]][latest-version-link] +[![Build Status][build-status-image]][build-status-link] +[![Python Support][python-support-image]][python-support-link] +[![PyPI - Django Version][django-version-image]][django-link] +[![License][license-image]][license-link] + +Service objects for Django + +## What? + +This is a small library providing a `Service` base class to derive your service objects from. What are service objects? You can read more about the whys and hows in [this blog post](http://mitchel.me/2017/django-service-objects/), but for the most part, it encapsulates your business logic, decoupling it from your views and model methods. Put your business logic in service objects. + +## Installation guide + +Install from pypi: + +`pip install django-service-objects` + +Add `service_objects` to your `INSTALLED_APPS`: + +```python +# settings.py + +INSTALLED_APPS = ( + ... + 'service_objects', + ... +) +``` + +## Example + +Let's say you want to register new users. You could make a `CreateUser` service. + +```python +from django import forms + +from service_objects.services import Service + +class CreateUser(Service): + email = forms.EmailField() + password = forms.CharField(max_length=255) + subscribe_to_newsletter = forms.BooleanField(required=False) + + def process(self): + email = self.cleaned_data['email'] + password = self.cleaned_data['password'] + subscribe_to_newsletter = self.cleaned_data['subscribe_to_newsletter'] + + self.user = User.objects.create_user(username=email, email=email, password=password) + self.subscribe_to_newsletter = subscribe_to_newsletter + + if self.subscribe_to_newsletter: + newsletter = Newsletter.objects.get() + newsletter.subscribers.add(self.user) + newsletter.save() + + return self.user + + def post_process(self): + WelcomeEmail.send(self.user, is_subscribed=self.subsribe_to_newsletter) + + # Calling a celery task after successfully creating the user. + create_billing_account.delay(self.user.id) +``` + +Notice that it's basically a Django form but with a `process` method. This method gets called when you call `execute()` on the process. If your inputs are invalid, it raises `InvalidInputsError`. + +The newly added `post_process` can also be included for running extra tasks that need to be executed after the service completes. + +Here's how you use it: + +```python +CreateUser.execute({ + 'email': 'kvothe@edemaruh.com', + 'password': 'doorsofstone', + 'subscribe_to_newsletter': True, +}) +``` + +Now you can use it anywhere. + +In your views + +```python +# views.py + +# Function Based View +def create_user_view(request): + form = NewUserForm() + if request.method == 'POST': + form = NewUserForm(request.POST) + + if form.is_valid(): + try: + CreateUser.execute(request.POST) + return redirect('/success/') + except Exception: + form.add_error(None, 'Something went wrong') + + return render(request, 'registration/new-user.html', {'form': form}) + + +# Class Based View +class CreateUserView(ServiceView): + form_class = NewUserForm + service_class = CreateUser + template_name = 'registration/new-user.html' + success_url = '/success/' + +``` + +A management command + +```python +# management/commands/create_user.py + +class Command(BaseCommand): + help = "Creates a new user" + + def add_arguments(self, parser): + parser.add_argument('email') + parser.add_argument('password') + + def handle(self, *args, **options): + user = CreateUser.execute(options) + self.stdout.write(f'New user created : {user.email}') + +``` + +In your tests + +```python +class CreateUserTest(TestCase): + + def test_create_user(self): + inputs = { + 'email': 'kvothe@edemaruh.com', + 'password': 'do0r$0f$stone42', + 'subscribe_to_newsletter': True, + } + + CreateUser.execute(inputs) + + user = User.objects.get() + self.assertEqual(user.email, inputs['email']) + + newsletter = Newsletter.objects.get() + self.assertIn(user, newsletter.subscribers.all()) +``` + +And anywhere you want. You can even execute services inside other services. The possibilities are endless! + +## Documentation + +Docs can be found on [readthedocs](http://django-service-objects.readthedocs.io/en/stable/). + +If you have any questions about service objects, you can tweet me [@mixxorz](https://twitter.com/mixxorz). + +[latest-version-image]: https://img.shields.io/pypi/v/django-service-objects.svg +[latest-version-link]: https://pypi.org/project/django-service-objects/ +[build-status-image]: https://github.com/mixxorz/django-service-objects/workflows/Test/badge.svg +[build-status-link]: https://github.com/mixxorz/django-service-objects/actions +[python-support-image]: https://img.shields.io/pypi/pyversions/django-service-objects.svg +[python-support-link]: https://pypi.org/project/django-service-objects/ +[django-version-image]: https://img.shields.io/pypi/djversions/django_service_objects.svg +[django-link]: https://docs.djangoproject.com/en/3.0/releases/ +[license-image]: https://img.shields.io/pypi/l/django-service-objects.svg +[license-link]: https://github.com/mixxorz/django-service-objects/blob/master/LICENSE + + + + +%package -n python3-django-service-objects +Summary: Service objects for Django +Provides: python-django-service-objects +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-service-objects +# django-service-objects [![Latest Version][latest-version-image]][latest-version-link] +[![Build Status][build-status-image]][build-status-link] +[![Python Support][python-support-image]][python-support-link] +[![PyPI - Django Version][django-version-image]][django-link] +[![License][license-image]][license-link] + +Service objects for Django + +## What? + +This is a small library providing a `Service` base class to derive your service objects from. What are service objects? You can read more about the whys and hows in [this blog post](http://mitchel.me/2017/django-service-objects/), but for the most part, it encapsulates your business logic, decoupling it from your views and model methods. Put your business logic in service objects. + +## Installation guide + +Install from pypi: + +`pip install django-service-objects` + +Add `service_objects` to your `INSTALLED_APPS`: + +```python +# settings.py + +INSTALLED_APPS = ( + ... + 'service_objects', + ... +) +``` + +## Example + +Let's say you want to register new users. You could make a `CreateUser` service. + +```python +from django import forms + +from service_objects.services import Service + +class CreateUser(Service): + email = forms.EmailField() + password = forms.CharField(max_length=255) + subscribe_to_newsletter = forms.BooleanField(required=False) + + def process(self): + email = self.cleaned_data['email'] + password = self.cleaned_data['password'] + subscribe_to_newsletter = self.cleaned_data['subscribe_to_newsletter'] + + self.user = User.objects.create_user(username=email, email=email, password=password) + self.subscribe_to_newsletter = subscribe_to_newsletter + + if self.subscribe_to_newsletter: + newsletter = Newsletter.objects.get() + newsletter.subscribers.add(self.user) + newsletter.save() + + return self.user + + def post_process(self): + WelcomeEmail.send(self.user, is_subscribed=self.subsribe_to_newsletter) + + # Calling a celery task after successfully creating the user. + create_billing_account.delay(self.user.id) +``` + +Notice that it's basically a Django form but with a `process` method. This method gets called when you call `execute()` on the process. If your inputs are invalid, it raises `InvalidInputsError`. + +The newly added `post_process` can also be included for running extra tasks that need to be executed after the service completes. + +Here's how you use it: + +```python +CreateUser.execute({ + 'email': 'kvothe@edemaruh.com', + 'password': 'doorsofstone', + 'subscribe_to_newsletter': True, +}) +``` + +Now you can use it anywhere. + +In your views + +```python +# views.py + +# Function Based View +def create_user_view(request): + form = NewUserForm() + if request.method == 'POST': + form = NewUserForm(request.POST) + + if form.is_valid(): + try: + CreateUser.execute(request.POST) + return redirect('/success/') + except Exception: + form.add_error(None, 'Something went wrong') + + return render(request, 'registration/new-user.html', {'form': form}) + + +# Class Based View +class CreateUserView(ServiceView): + form_class = NewUserForm + service_class = CreateUser + template_name = 'registration/new-user.html' + success_url = '/success/' + +``` + +A management command + +```python +# management/commands/create_user.py + +class Command(BaseCommand): + help = "Creates a new user" + + def add_arguments(self, parser): + parser.add_argument('email') + parser.add_argument('password') + + def handle(self, *args, **options): + user = CreateUser.execute(options) + self.stdout.write(f'New user created : {user.email}') + +``` + +In your tests + +```python +class CreateUserTest(TestCase): + + def test_create_user(self): + inputs = { + 'email': 'kvothe@edemaruh.com', + 'password': 'do0r$0f$stone42', + 'subscribe_to_newsletter': True, + } + + CreateUser.execute(inputs) + + user = User.objects.get() + self.assertEqual(user.email, inputs['email']) + + newsletter = Newsletter.objects.get() + self.assertIn(user, newsletter.subscribers.all()) +``` + +And anywhere you want. You can even execute services inside other services. The possibilities are endless! + +## Documentation + +Docs can be found on [readthedocs](http://django-service-objects.readthedocs.io/en/stable/). + +If you have any questions about service objects, you can tweet me [@mixxorz](https://twitter.com/mixxorz). + +[latest-version-image]: https://img.shields.io/pypi/v/django-service-objects.svg +[latest-version-link]: https://pypi.org/project/django-service-objects/ +[build-status-image]: https://github.com/mixxorz/django-service-objects/workflows/Test/badge.svg +[build-status-link]: https://github.com/mixxorz/django-service-objects/actions +[python-support-image]: https://img.shields.io/pypi/pyversions/django-service-objects.svg +[python-support-link]: https://pypi.org/project/django-service-objects/ +[django-version-image]: https://img.shields.io/pypi/djversions/django_service_objects.svg +[django-link]: https://docs.djangoproject.com/en/3.0/releases/ +[license-image]: https://img.shields.io/pypi/l/django-service-objects.svg +[license-link]: https://github.com/mixxorz/django-service-objects/blob/master/LICENSE + + + + +%package help +Summary: Development documents and examples for django-service-objects +Provides: python3-django-service-objects-doc +%description help +# django-service-objects [![Latest Version][latest-version-image]][latest-version-link] +[![Build Status][build-status-image]][build-status-link] +[![Python Support][python-support-image]][python-support-link] +[![PyPI - Django Version][django-version-image]][django-link] +[![License][license-image]][license-link] + +Service objects for Django + +## What? + +This is a small library providing a `Service` base class to derive your service objects from. What are service objects? You can read more about the whys and hows in [this blog post](http://mitchel.me/2017/django-service-objects/), but for the most part, it encapsulates your business logic, decoupling it from your views and model methods. Put your business logic in service objects. + +## Installation guide + +Install from pypi: + +`pip install django-service-objects` + +Add `service_objects` to your `INSTALLED_APPS`: + +```python +# settings.py + +INSTALLED_APPS = ( + ... + 'service_objects', + ... +) +``` + +## Example + +Let's say you want to register new users. You could make a `CreateUser` service. + +```python +from django import forms + +from service_objects.services import Service + +class CreateUser(Service): + email = forms.EmailField() + password = forms.CharField(max_length=255) + subscribe_to_newsletter = forms.BooleanField(required=False) + + def process(self): + email = self.cleaned_data['email'] + password = self.cleaned_data['password'] + subscribe_to_newsletter = self.cleaned_data['subscribe_to_newsletter'] + + self.user = User.objects.create_user(username=email, email=email, password=password) + self.subscribe_to_newsletter = subscribe_to_newsletter + + if self.subscribe_to_newsletter: + newsletter = Newsletter.objects.get() + newsletter.subscribers.add(self.user) + newsletter.save() + + return self.user + + def post_process(self): + WelcomeEmail.send(self.user, is_subscribed=self.subsribe_to_newsletter) + + # Calling a celery task after successfully creating the user. + create_billing_account.delay(self.user.id) +``` + +Notice that it's basically a Django form but with a `process` method. This method gets called when you call `execute()` on the process. If your inputs are invalid, it raises `InvalidInputsError`. + +The newly added `post_process` can also be included for running extra tasks that need to be executed after the service completes. + +Here's how you use it: + +```python +CreateUser.execute({ + 'email': 'kvothe@edemaruh.com', + 'password': 'doorsofstone', + 'subscribe_to_newsletter': True, +}) +``` + +Now you can use it anywhere. + +In your views + +```python +# views.py + +# Function Based View +def create_user_view(request): + form = NewUserForm() + if request.method == 'POST': + form = NewUserForm(request.POST) + + if form.is_valid(): + try: + CreateUser.execute(request.POST) + return redirect('/success/') + except Exception: + form.add_error(None, 'Something went wrong') + + return render(request, 'registration/new-user.html', {'form': form}) + + +# Class Based View +class CreateUserView(ServiceView): + form_class = NewUserForm + service_class = CreateUser + template_name = 'registration/new-user.html' + success_url = '/success/' + +``` + +A management command + +```python +# management/commands/create_user.py + +class Command(BaseCommand): + help = "Creates a new user" + + def add_arguments(self, parser): + parser.add_argument('email') + parser.add_argument('password') + + def handle(self, *args, **options): + user = CreateUser.execute(options) + self.stdout.write(f'New user created : {user.email}') + +``` + +In your tests + +```python +class CreateUserTest(TestCase): + + def test_create_user(self): + inputs = { + 'email': 'kvothe@edemaruh.com', + 'password': 'do0r$0f$stone42', + 'subscribe_to_newsletter': True, + } + + CreateUser.execute(inputs) + + user = User.objects.get() + self.assertEqual(user.email, inputs['email']) + + newsletter = Newsletter.objects.get() + self.assertIn(user, newsletter.subscribers.all()) +``` + +And anywhere you want. You can even execute services inside other services. The possibilities are endless! + +## Documentation + +Docs can be found on [readthedocs](http://django-service-objects.readthedocs.io/en/stable/). + +If you have any questions about service objects, you can tweet me [@mixxorz](https://twitter.com/mixxorz). + +[latest-version-image]: https://img.shields.io/pypi/v/django-service-objects.svg +[latest-version-link]: https://pypi.org/project/django-service-objects/ +[build-status-image]: https://github.com/mixxorz/django-service-objects/workflows/Test/badge.svg +[build-status-link]: https://github.com/mixxorz/django-service-objects/actions +[python-support-image]: https://img.shields.io/pypi/pyversions/django-service-objects.svg +[python-support-link]: https://pypi.org/project/django-service-objects/ +[django-version-image]: https://img.shields.io/pypi/djversions/django_service_objects.svg +[django-link]: https://docs.djangoproject.com/en/3.0/releases/ +[license-image]: https://img.shields.io/pypi/l/django-service-objects.svg +[license-link]: https://github.com/mixxorz/django-service-objects/blob/master/LICENSE + + + + +%prep +%autosetup -n django-service-objects-0.7.1 + +%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-service-objects -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed Apr 12 2023 Python_Bot <Python_Bot@openeuler.org> - 0.7.1-1 +- Package Spec generated @@ -0,0 +1 @@ +7753958e64fac2837d01301419fd13a3 django-service-objects-0.7.1.tar.gz |
