Compare commits
8 Commits
Author | SHA1 | Date |
---|---|---|
Sebastian Lohff | 851c85f4be | 4 years ago |
Sebastian Lohff | a036e86b96 | 4 years ago |
Sebastian Lohff | 8a728f1568 | 4 years ago |
Sebastian Lohff | 729eab6cf9 | 4 years ago |
Sebastian Lohff | 37897b6a12 | 4 years ago |
Sebastian Lohff | a4c308af6f | 4 years ago |
Sebastian Lohff | 91f549b69e | 4 years ago |
Sebastian Lohff | 63b3f71141 | 6 years ago |
@ -0,0 +1,22 @@
|
||||
Django piston is pretty old and does not work with django1.11 out of the box.
|
||||
For the transition these are the changes required to get piston working
|
||||
|
||||
Start out by creating a new virtualenv, install the requirements, then change the following lines:
|
||||
|
||||
In piston/emitters.py:
|
||||
# instead of the original simplejson import
|
||||
import json as simplejson
|
||||
|
||||
# instead of the DateTimeAwareJsonEncoder import
|
||||
from django.core.serializers.json import DjangoJSONEncoder as DateTimeAwareJSONEncoder
|
||||
|
||||
# in ~186 replace the following line
|
||||
for f in data._meta.fields + data._meta.virtual_fields])
|
||||
# with this line
|
||||
for f in data._meta.fields + tuple(data._meta.virtual_fields)])
|
||||
|
||||
In piston/resource.py
|
||||
# in ~207 replace
|
||||
resp = HttpResponse(stream, mimetype=ct, status=status_code)
|
||||
# with this line
|
||||
resp = HttpResponse(stream, content_type=ct, status=status_code)
|
@ -0,0 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
@ -0,0 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class Api3Config(AppConfig):
|
||||
name = 'api3'
|
@ -0,0 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
@ -0,0 +1,60 @@
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework import serializers
|
||||
|
||||
from buyable.models import BuyableType, Buyable, Order, Purchase
|
||||
from transaction.models import TransactionType, Transaction, VirtualTransaction
|
||||
|
||||
|
||||
class UserSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('id', 'username',)
|
||||
|
||||
|
||||
class BuyableTypeSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = BuyableType
|
||||
fields = ['url', 'id', 'name']
|
||||
|
||||
|
||||
class BuyableSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Buyable
|
||||
fields = ['url', 'id', 'name', 'description', 'price', 'barcode', 'deposit', 'image', 'buyableType']
|
||||
|
||||
|
||||
class PurchaseSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Purchase
|
||||
fields = ['id', 'price', 'isDeposit', 'buyable']
|
||||
|
||||
|
||||
class OrderSerializer(serializers.HyperlinkedModelSerializer):
|
||||
purchases = PurchaseSerializer(source='purchase_set', many=True)
|
||||
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = ['url', 'id', 'price', 'dateTime', 'purchases']
|
||||
|
||||
|
||||
class TransactionTypeSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = TransactionType
|
||||
fields = ('url', 'id', 'name')
|
||||
|
||||
|
||||
class TransactionSerializer(serializers.HyperlinkedModelSerializer):
|
||||
transactionType = TransactionTypeSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Transaction
|
||||
fields = ('url', 'id', 'amount', 'dateTime', 'checked', 'transactionType')
|
||||
|
||||
|
||||
class VirtualTransactionSerializer(serializers.HyperlinkedModelSerializer):
|
||||
user = UserSerializer()
|
||||
recipient = UserSerializer()
|
||||
|
||||
class Meta:
|
||||
model = VirtualTransaction
|
||||
fields = ('url', 'id', 'amount', 'dateTime', 'comment', 'user', 'recipient')
|
@ -0,0 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
@ -0,0 +1,20 @@
|
||||
from django.conf.urls import include, url
|
||||
from rest_framework import routers
|
||||
|
||||
from .views import BuyableTypeViewSet, BuyableViewSet, OrderViewSet
|
||||
from .views import TransactionTypeViewSet, TransactionViewSet, VirtualTransactionViewSet
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('buyabletypes', BuyableTypeViewSet)
|
||||
router.register('buyables', BuyableViewSet)
|
||||
router.register('orders', OrderViewSet, basename='order')
|
||||
|
||||
router.register('transactiontypes', TransactionTypeViewSet)
|
||||
router.register('transactions', TransactionViewSet, 'transaction')
|
||||
router.register('virtualtransactions', VirtualTransactionViewSet, 'virtualtransaction')
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^', include(router.urls)),
|
||||
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
|
||||
]
|
@ -0,0 +1,55 @@
|
||||
from django.db.models import Q
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
|
||||
from .serializers import BuyableTypeSerializer, BuyableSerializer, OrderSerializer
|
||||
from .serializers import TransactionTypeSerializer, TransactionSerializer, VirtualTransactionSerializer
|
||||
from buyable.models import BuyableType, Buyable, Order
|
||||
from transaction.models import TransactionType, Transaction, VirtualTransaction
|
||||
|
||||
|
||||
class BuyableTypeViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = BuyableType.objects.all()
|
||||
serializer_class = BuyableTypeSerializer
|
||||
|
||||
|
||||
class BuyableViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = Buyable.objects.all()
|
||||
serializer_class = BuyableSerializer
|
||||
|
||||
|
||||
class OrderViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = [IsAuthenticated]
|
||||
serializer_class = OrderSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return Order.objects.filter(user=self.request.user)
|
||||
|
||||
|
||||
class TransactionTypeViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = TransactionType.objects.all()
|
||||
serializer_class = TransactionTypeSerializer
|
||||
|
||||
|
||||
class TransactionViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = [IsAuthenticated]
|
||||
serializer_class = TransactionSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return Transaction.objects.filter(user=self.request.user).order_by("-dateTime")
|
||||
|
||||
|
||||
class VirtualTransactionViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = [IsAuthenticated]
|
||||
serializer_class = VirtualTransactionSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return (VirtualTransaction.objects.filter(Q(user=self.request.user) | Q(recipient=self.request.user))
|
||||
.order_by("-dateTime"))
|
||||
|
||||
|
||||
# class BalanceView(APIView):
|
||||
# def get(self, request):
|
||||
# return Response({'balance': request.user.userprofile.balance}
|
||||
class BalanceViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
pass
|
@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10 on 2018-10-24 01:07
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from decimal import Decimal
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Buyable',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100)),
|
||||
('price', models.DecimalField(decimal_places=2, max_digits=8)),
|
||||
('image', models.ImageField(help_text=b'<strong>The Image needs to have a 1:1 aspect ratio.</strong>', upload_to=b'img/buyable/')),
|
||||
('deposit', models.DecimalField(decimal_places=2, max_digits=8)),
|
||||
('description', models.TextField()),
|
||||
('barcode', models.CharField(blank=True, default=b'', max_length=100)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BuyableType',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Order',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('price', models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=8)),
|
||||
('dateTime', models.DateTimeField(auto_now_add=True)),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Purchase',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('price', models.DecimalField(decimal_places=2, default=None, max_digits=8)),
|
||||
('isDeposit', models.BooleanField()),
|
||||
('buyable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='buyable.Buyable')),
|
||||
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='buyable.Order')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='buyable',
|
||||
name='buyableType',
|
||||
field=models.ManyToManyField(to='buyable.BuyableType'),
|
||||
),
|
||||
]
|
@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10 on 2018-10-24 01:07
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from decimal import Decimal
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Plugin',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=40)),
|
||||
('author', models.CharField(max_length=40)),
|
||||
('version', models.CharField(max_length=40)),
|
||||
('descr', models.TextField(default=b'')),
|
||||
('uniqueAuthblob', models.BooleanField(default=False)),
|
||||
('userCanWriteAuthblob', models.BooleanField(default=True)),
|
||||
('maxLinesPerAuthblob', models.IntegerField(default=0)),
|
||||
('userCanReadAuthblob', models.BooleanField(default=True)),
|
||||
('pluginCanWriteAuthblob', models.BooleanField(default=False)),
|
||||
('pluginCanReadAuthblob', models.BooleanField(default=False)),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PluginPermission',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('authblob', models.TextField(default=b'')),
|
||||
('plugin', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.Plugin')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserProfile',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('balance', models.DecimalField(decimal_places=2, default=Decimal('0'), max_digits=9)),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
@ -1,11 +1,22 @@
|
||||
#!/usr/bin/env python
|
||||
from django.core.management import execute_manager
|
||||
try:
|
||||
import settings # Assumed to be in the same directory.
|
||||
except ImportError:
|
||||
import sys
|
||||
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
|
||||
sys.exit(1)
|
||||
import os
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
execute_manager(settings)
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "k4ever.settings")
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError:
|
||||
# The above import may fail for some other reason. Ensure that the
|
||||
# issue is really that Django is missing to avoid masking other
|
||||
# exceptions on Python 2.
|
||||
try:
|
||||
import django
|
||||
except ImportError:
|
||||
raise ImportError(
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
"forget to activate a virtual environment?"
|
||||
)
|
||||
raise
|
||||
execute_from_command_line(sys.argv)
|
||||
|
@ -0,0 +1,6 @@
|
||||
django==1.11
|
||||
easy_thumbnails
|
||||
oauth
|
||||
django-auth-ldap
|
||||
djangorestframework
|
||||
django-piston
|
@ -0,0 +1,60 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10 on 2018-10-24 01:07
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from decimal import Decimal
|
||||
from django.conf import settings
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import transaction.validator
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Transaction',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dateTime', models.DateTimeField(auto_now_add=True)),
|
||||
('amount', models.DecimalField(decimal_places=2, max_digits=8, validators=[transaction.validator.validate_notZero])),
|
||||
('checked', models.BooleanField(default=False)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TransactionType',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100)),
|
||||
('needsCheck', models.BooleanField(default=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VirtualTransaction',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dateTime', models.DateTimeField(auto_now_add=True)),
|
||||
('amount', models.DecimalField(decimal_places=2, max_digits=8, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))], verbose_name=b'Betrag')),
|
||||
('comment', models.CharField(max_length=100, verbose_name=b'Verwendungszweck')),
|
||||
('recipient', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='receivedtransaction', to=settings.AUTH_USER_MODEL, verbose_name='Empf\xe4nger')),
|
||||
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='transaction',
|
||||
name='transactionType',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='transaction.TransactionType', verbose_name=b'Typ'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='transaction',
|
||||
name='user',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
@ -0,0 +1,20 @@
|
||||
"""
|
||||
WSGI config for cqtu project.
|
||||
|
||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
sys.path.append("/home/k4ever/k4ever")
|
||||
sys.path.append("/home/k4ever/k4ever/k4ever")
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "k4ever.settings")
|
||||
|
||||
application = get_wsgi_application()
|
||||
|
Loading…
Reference in new issue