diff --git a/.DS_Store b/.DS_Store index c10ec4f..dc5052e 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/EDMS/EDMS/__init__.py b/EDMS/EDMS/__init__.py index e69de29..1e3599b 100644 --- a/EDMS/EDMS/__init__.py +++ b/EDMS/EDMS/__init__.py @@ -0,0 +1,5 @@ +# This will make sure the app is always imported when +# Django starts so that shared_task will use this app. +from .celery import app as celery_app + +__all__ = ('celery_app',) \ No newline at end of file diff --git a/EDMS/EDMS/celery.py b/EDMS/EDMS/celery.py new file mode 100644 index 0000000..b81af5d --- /dev/null +++ b/EDMS/EDMS/celery.py @@ -0,0 +1,21 @@ +import os +from celery import Celery + +# set the default Django settings module for the 'celery' program. +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'EDMS.settings') + +app = Celery('EDMS') + +# Using a string here means the worker doesn't have to serialize +# the configuration object to child processes. +# - namespace='CELERY' means all celery-related configuration keys +# should have a `CELERY_` prefix. +app.config_from_object('django.conf:settings', namespace='CELERY') + +# Load task modules from all registered Django app configs. +app.autodiscover_tasks() + + +@app.task(bind=True) +def debug_task(self): + print(f'Request: {self.request!r}') \ No newline at end of file diff --git a/EDMS/EDMS/settings.py b/EDMS/EDMS/settings.py index aa7c150..e3e38f7 100644 --- a/EDMS/EDMS/settings.py +++ b/EDMS/EDMS/settings.py @@ -37,8 +37,9 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + + 'shoppingCart', - 'django_crontab', ] @@ -83,10 +84,9 @@ DATABASES = { } } -#cron job -CRONJOBS = [ - ('*/1 * * * *', 'shoppingCart.cron.expired_order_items') -] + + + # Password validation # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators @@ -133,4 +133,5 @@ STATICFILES_DIRS = [ ] -MEDIA_ROOT = BASE_DIR / 'static/images' \ No newline at end of file +MEDIA_ROOT = BASE_DIR / 'static/images' + diff --git a/EDMS/db.sqlite3 b/EDMS/db.sqlite3 index 3949114..9438e11 100644 Binary files a/EDMS/db.sqlite3 and b/EDMS/db.sqlite3 differ diff --git a/EDMS/shoppingCart/admin.py b/EDMS/shoppingCart/admin.py index 765f09f..88ff410 100644 --- a/EDMS/shoppingCart/admin.py +++ b/EDMS/shoppingCart/admin.py @@ -6,3 +6,4 @@ admin.site.register(Customer) admin.site.register(Product) admin.site.register(Order) admin.site.register(OrderItem) +admin.site.register(Test) diff --git a/EDMS/shoppingCart/cron.py b/EDMS/shoppingCart/cron.py deleted file mode 100644 index d16f132..0000000 --- a/EDMS/shoppingCart/cron.py +++ /dev/null @@ -1,19 +0,0 @@ -from .models import OrderItem -from datetime import timedelta,datetime - -def expired_order_items(): - #get time now - time_now = datetime.now() - #querry order items with expired set to false - qs = OrderItem.objects.filter(expired=False) - - #for items in qs: - for item in qs: - #set expiry date = orderitem .date created + timedelta(minutes=2) - expiry_date = item.date_created + timedelta(minutes=2) - #check if time now < expiry date: - if time_now >= expiry_date: - #set expired field to true - item.expired = True - # delete order item - item.delete() \ No newline at end of file diff --git a/EDMS/shoppingCart/migrations/0005_test.py b/EDMS/shoppingCart/migrations/0005_test.py new file mode 100644 index 0000000..645b4d2 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0005_test.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.2 on 2020-10-16 14:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0004_auto_20201016_1152'), + ] + + operations = [ + migrations.CreateModel( + name='Test', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=4)), + ], + ), + ] diff --git a/EDMS/shoppingCart/migrations/0006_auto_20201018_1229.py b/EDMS/shoppingCart/migrations/0006_auto_20201018_1229.py new file mode 100644 index 0000000..7277723 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0006_auto_20201018_1229.py @@ -0,0 +1,26 @@ +# Generated by Django 3.1.2 on 2020-10-18 12:29 + +import datetime +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0005_test'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='date_created', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 12, 30, 18, 872950)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0007_auto_20201018_1316.py b/EDMS/shoppingCart/migrations/0007_auto_20201018_1316.py new file mode 100644 index 0000000..ba38b4a --- /dev/null +++ b/EDMS/shoppingCart/migrations/0007_auto_20201018_1316.py @@ -0,0 +1,28 @@ +# Generated by Django 3.1.2 on 2020-10-18 13:16 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0006_auto_20201018_1229'), + ] + + operations = [ + migrations.RemoveField( + model_name='orderitem', + name='expired', + ), + migrations.AddField( + model_name='order', + name='expired', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 13, 17, 6, 8469)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0008_auto_20201018_1342.py b/EDMS/shoppingCart/migrations/0008_auto_20201018_1342.py new file mode 100644 index 0000000..2862aec --- /dev/null +++ b/EDMS/shoppingCart/migrations/0008_auto_20201018_1342.py @@ -0,0 +1,29 @@ +# Generated by Django 3.1.2 on 2020-10-18 13:42 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0007_auto_20201018_1316'), + ] + + operations = [ + migrations.AddField( + model_name='orderitem', + name='expired', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 18, 13, 42, 9, 885618)), + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 13, 43, 9, 885636)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0009_auto_20201018_1354.py b/EDMS/shoppingCart/migrations/0009_auto_20201018_1354.py new file mode 100644 index 0000000..0e60faf --- /dev/null +++ b/EDMS/shoppingCart/migrations/0009_auto_20201018_1354.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.2 on 2020-10-18 13:54 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0008_auto_20201018_1342'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='date_created', + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 13, 55, 33, 184566)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0010_auto_20201018_1401.py b/EDMS/shoppingCart/migrations/0010_auto_20201018_1401.py new file mode 100644 index 0000000..5d6f795 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0010_auto_20201018_1401.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0009_auto_20201018_1354'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='complete', + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateField(), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0011_order_complete.py b/EDMS/shoppingCart/migrations/0011_order_complete.py new file mode 100644 index 0000000..c67ab7f --- /dev/null +++ b/EDMS/shoppingCart/migrations/0011_order_complete.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0010_auto_20201018_1401'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='complete', + field=models.BooleanField(default=False), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0012_auto_20201018_1430.py b/EDMS/shoppingCart/migrations/0012_auto_20201018_1430.py new file mode 100644 index 0000000..ae676dd --- /dev/null +++ b/EDMS/shoppingCart/migrations/0012_auto_20201018_1430.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:30 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0011_order_complete'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(verbose_name=datetime.date(2020, 10, 25)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0013_auto_20201018_1439.py b/EDMS/shoppingCart/migrations/0013_auto_20201018_1439.py new file mode 100644 index 0000000..e712115 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0013_auto_20201018_1439.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:39 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0012_auto_20201018_1430'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(null=True, verbose_name=datetime.date(2020, 10, 25)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0014_auto_20201018_1443.py b/EDMS/shoppingCart/migrations/0014_auto_20201018_1443.py new file mode 100644 index 0000000..f4aaeb4 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0014_auto_20201018_1443.py @@ -0,0 +1,21 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:43 + +import datetime +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0013_auto_20201018_1439'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name=datetime.date(2020, 10, 25)), + preserve_default=False, + ), + ] diff --git a/EDMS/shoppingCart/migrations/0015_auto_20201018_1448.py b/EDMS/shoppingCart/migrations/0015_auto_20201018_1448.py new file mode 100644 index 0000000..78ebe02 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0015_auto_20201018_1448.py @@ -0,0 +1,27 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:48 + +import datetime +from django.db import migrations, models +import django.utils.timezone +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0014_auto_20201018_1443'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name=datetime.datetime(2020, 10, 18, 14, 47, 51, 354484, tzinfo=utc)), + preserve_default=False, + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 25, 14, 47, 51, 354511, tzinfo=utc)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0016_auto_20201018_1456.py b/EDMS/shoppingCart/migrations/0016_auto_20201018_1456.py new file mode 100644 index 0000000..04fe58a --- /dev/null +++ b/EDMS/shoppingCart/migrations/0016_auto_20201018_1456.py @@ -0,0 +1,27 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0015_auto_20201018_1448'), + ] + + operations = [ + migrations.RemoveField( + model_name='orderitem', + name='order', + ), + migrations.RemoveField( + model_name='orderitem', + name='product', + ), + migrations.DeleteModel( + name='Order', + ), + migrations.DeleteModel( + name='OrderItem', + ), + ] diff --git a/EDMS/shoppingCart/migrations/0017_order_orderitem.py b/EDMS/shoppingCart/migrations/0017_order_orderitem.py new file mode 100644 index 0000000..66c1195 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0017_order_orderitem.py @@ -0,0 +1,38 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:57 + +import datetime +from django.db import migrations, models +import django.db.models.deletion +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0016_auto_20201018_1456'), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date_created', models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 18, 14, 57, 32, 274339, tzinfo=utc))), + ('expiry_date', models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 25, 14, 57, 32, 274372, tzinfo=utc))), + ('expired', models.BooleanField(default=False)), + ('complete', models.BooleanField(default=False)), + ('customer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.customer')), + ], + ), + migrations.CreateModel( + name='OrderItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', models.IntegerField(blank=True, default=0, null=True)), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('expired', models.BooleanField(default=False)), + ('order', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.order')), + ('product', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.product')), + ], + ), + ] diff --git a/EDMS/shoppingCart/migrations/0018_auto_20201018_1522.py b/EDMS/shoppingCart/migrations/0018_auto_20201018_1522.py new file mode 100644 index 0000000..67f9b83 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0018_auto_20201018_1522.py @@ -0,0 +1,24 @@ +# Generated by Django 3.1.2 on 2020-10-18 15:22 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0017_order_orderitem'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 15, 22, 1, 700384)), + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 15, 24, 1, 700420)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0019_auto_20201018_1759.py b/EDMS/shoppingCart/migrations/0019_auto_20201018_1759.py new file mode 100644 index 0000000..95192db --- /dev/null +++ b/EDMS/shoppingCart/migrations/0019_auto_20201018_1759.py @@ -0,0 +1,31 @@ +# Generated by Django 3.1.2 on 2020-10-18 17:59 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0018_auto_20201018_1522'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='expiry_date', + ), + migrations.RemoveField( + model_name='orderitem', + name='date_created', + ), + migrations.RemoveField( + model_name='orderitem', + name='expired', + ), + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 17, 59, 41, 21325)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0020_auto_20201018_2051.py b/EDMS/shoppingCart/migrations/0020_auto_20201018_2051.py new file mode 100644 index 0000000..87043e8 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0020_auto_20201018_2051.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.2 on 2020-10-18 20:51 + +import datetime +from django.db import migrations, models +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0019_auto_20201018_1759'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 20, 51, 23, 928323, tzinfo=utc)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0021_auto_20201018_2056.py b/EDMS/shoppingCart/migrations/0021_auto_20201018_2056.py new file mode 100644 index 0000000..84dc0f8 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0021_auto_20201018_2056.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.2 on 2020-10-18 20:56 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0020_auto_20201018_2051'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/EDMS/shoppingCart/models.py b/EDMS/shoppingCart/models.py index 42573f7..94f4452 100644 --- a/EDMS/shoppingCart/models.py +++ b/EDMS/shoppingCart/models.py @@ -1,9 +1,15 @@ from django.db import models from django.contrib.auth.models import User +from datetime import datetime, timedelta +from django.utils import timezone + # Create your models here. +class Test(models.Model): + name = models.CharField(max_length=4) + class Customer(models.Model): user = models.OneToOneField(User, on_delete =models.CASCADE, null=True, blank=True) name = models.CharField(max_length=200, null=True) @@ -22,9 +28,10 @@ class Product(models.Model): class Order(models.Model): customer = models.ForeignKey(Customer, on_delete = models.SET_NULL, blank=True, null=True) - complete = models.BooleanField(default=False, null=True, blank=True) + date_created = models.DateTimeField(default = timezone.now) + expired = models.BooleanField(default=False) + complete = models.BooleanField(default=False) - def __str__ (self): return str(self.id) @@ -32,13 +39,7 @@ class OrderItem(models.Model): product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True) order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True) quantity = models.IntegerField(default=0, null=True, blank=True) - date_created = models.DateTimeField(auto_now_add=True) - expired = models.BooleanField(default=False) - + def __str__(self): return self.product.name - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/EDMS/shoppingCart/urls.py b/EDMS/shoppingCart/urls.py index 1eb81d2..337689d 100644 --- a/EDMS/shoppingCart/urls.py +++ b/EDMS/shoppingCart/urls.py @@ -5,6 +5,7 @@ from django.urls import path urlpatterns = [ path('', views.main, name="main"), path('updateItem/', views.updateItem, name="updateItem"), + ] diff --git a/EDMS/shoppingCart/views.py b/EDMS/shoppingCart/views.py index fb641b8..7357d78 100644 --- a/EDMS/shoppingCart/views.py +++ b/EDMS/shoppingCart/views.py @@ -1,19 +1,46 @@ from django.shortcuts import render +from django.views import View from .models import * # Create your views here. -from django.http.response import JsonResponse +from django.http.response import JsonResponse, HttpResponse import json -from django.contrib import messages +import pytz # main page def main(request): + customer = Customer.objects.get(id=1) + products = Product.objects.all() order, created = Order.objects.get_or_create(customer=customer, complete= False) - customerOrderItem = order.orderitem_set.all() - products = Product.objects.all() + customerOrderItem = order.orderitem_set.all() + + #start time for order expiry + utc = pytz.UTC + print('date_Created:' + str(order.date_created)) + + expiry_time = timedelta(minutes=2) + print('expiry time' + str(expiry_time)) + + expiry_date = order.date_created + expiry_time + print('expiry_date:' + str(expiry_date)) + + date_now = utc.localize(datetime.now()) + print('date now:' + str(date_now)) + #check if expiry date is reached + if date_now >= expiry_date: + order.expired= True + order.save() + + #check if order is expired + if order.expired == True: + order.delete() + for item in customerOrderItem: + item.delete() + Order.objects.create(customer=customer, complete= False) + context = {'customer':customer, 'order':order, 'customerOrderItem':customerOrderItem, 'products':products} return render(request,'shoppingCart/main.html', context) @@ -26,11 +53,9 @@ def updateItem(request): customer = request.user.customer product = Product.objects.get(id=productId) - order, created = Order.objects.get_or_create(customer=customer,complete=False) + order, created = Order.objects.get_or_create(customer=customer, complete= False) orderItem, created = OrderItem.objects.get_or_create(order=order, product=product) - #query order that did not expire - #querry orderitems in the order #make sure the quantity does not exceed 9 if orderItem.quantity >= 9 : @@ -49,4 +74,3 @@ def updateItem(request): print('ProductID: ', productId, 'Action:',action) return JsonResponse('item added', safe=False) - diff --git a/EDMS/static/js/cart.js b/EDMS/static/js/cart.js index ffdfa10..7f8d110 100644 --- a/EDMS/static/js/cart.js +++ b/EDMS/static/js/cart.js @@ -18,7 +18,7 @@ for (i = 0; i < updateButton.length; i++) { function updateUserOrder(productId, action) { - var url = '/updateItem/' + var url = '/main_class/' fetch(url, { method: 'POST', diff --git a/Pipfile b/Pipfile index 7a8362b..e3bc28f 100644 --- a/Pipfile +++ b/Pipfile @@ -9,6 +9,7 @@ verify_ssl = true django = "*" pillow = "*" django-crontab = "*" +celery = "*" [requires] python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock index 0301188..a146a7d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "292744283c56cc32f20b13692b19ffe1958359200bfe6539399352866167da4e" + "sha256": "d9d9a412445aee8a1e4ebb76250dda9d583b4ccd098608581d3a31152a3dfc3c" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,14 @@ ] }, "default": { + "amqp": { + "hashes": [ + "sha256:9881f8e6fe23e3db9faa6cfd8c05390213e1d1b95c0162bc50552cad75bffa5f", + "sha256:a8fb8151eb9d12204c9f1784c0da920476077609fa0a70f2468001e3a4258484" + ], + "markers": "python_version >= '3.6'", + "version": "==5.0.1" + }, "asgiref": { "hashes": [ "sha256:7e51911ee147dd685c3c8b805c0ad0cb58d360987b56953878f8c06d2d1c6f1a", @@ -24,6 +32,42 @@ "markers": "python_version >= '3.5'", "version": "==3.2.10" }, + "billiard": { + "hashes": [ + "sha256:bff575450859a6e0fbc2f9877d9b715b0bbc07c3565bb7ed2280526a0cdf5ede", + "sha256:d91725ce6425f33a97dfa72fb6bfef0e47d4652acd98a032bd1a7fbf06d5fa6a" + ], + "version": "==3.6.3.0" + }, + "celery": { + "hashes": [ + "sha256:313930fddde703d8e37029a304bf91429cd11aeef63c57de6daca9d958e1f255", + "sha256:72138dc3887f68dc58e1a2397e477256f80f1894c69fa4337f8ed70be460375b" + ], + "index": "pypi", + "version": "==5.0.0" + }, + "click": { + "hashes": [ + "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", + "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==7.1.2" + }, + "click-didyoumean": { + "hashes": [ + "sha256:112229485c9704ff51362fe34b2d4f0b12fc71cc20f6d2b3afabed4b8bfa6aeb" + ], + "version": "==0.0.3" + }, + "click-repl": { + "hashes": [ + "sha256:9c4c3d022789cae912aad8a3f5e1d7c2cdd016ee1225b5212ad3e8691563cda5", + "sha256:b9f29d52abc4d6059f8e276132a111ab8d94980afe6a5432b9d996544afa95d5" + ], + "version": "==0.1.6" + }, "django": { "hashes": [ "sha256:a2127ad0150ec6966655bedf15dbbff9697cc86d61653db2da1afa506c0b04cc", @@ -39,6 +83,14 @@ "index": "pypi", "version": "==0.7.1" }, + "kombu": { + "hashes": [ + "sha256:6dc509178ac4269b0e66ab4881f70a2035c33d3a622e20585f965986a5182006", + "sha256:f4965fba0a4718d47d470beeb5d6446e3357a62402b16c510b6a2f251e05ac3c" + ], + "markers": "python_version >= '3.6'", + "version": "==5.0.2" + }, "pillow": { "hashes": [ "sha256:04d984e45a0b9815f4b407e8aadb50f25fbb82a605d89db927376e94c3adf371", @@ -74,6 +126,14 @@ "index": "pypi", "version": "==8.0.0" }, + "prompt-toolkit": { + "hashes": [ + "sha256:25c95d2ac813909f813c93fde734b6e44406d1477a9faef7c915ff37d39c0a8c", + "sha256:7debb9a521e0b1ee7d2fe96ee4bd60ef03c6492784de0547337ca4433e46aa63" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==3.0.8" + }, "pytz": { "hashes": [ "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", @@ -81,6 +141,14 @@ ], "version": "==2020.1" }, + "six": { + "hashes": [ + "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", + "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.15.0" + }, "sqlparse": { "hashes": [ "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0", @@ -88,6 +156,21 @@ ], "markers": "python_version >= '3.5'", "version": "==0.4.1" + }, + "vine": { + "hashes": [ + "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30", + "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e" + ], + "markers": "python_version >= '3.6'", + "version": "==5.0.0" + }, + "wcwidth": { + "hashes": [ + "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", + "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" + ], + "version": "==0.2.5" } }, "develop": {}