summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-12 05:14:25 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-12 05:14:25 +0000
commitfad727b5954d3e6f8dd8ecbd12e405f429b5e3ce (patch)
treece966c42256e3b898cc72e28643a1c7a9306b89f
parent7d87efe212ffcbe215f475ee0901a7708d0d0204 (diff)
automatic import of python-django-service-objects
-rw-r--r--.gitignore1
-rw-r--r--python-django-service-objects.spec588
-rw-r--r--sources1
3 files changed, 590 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..adf9f5e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/sources b/sources
new file mode 100644
index 0000000..74271dc
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+7753958e64fac2837d01301419fd13a3 django-service-objects-0.7.1.tar.gz