init DRF + sde models
This commit is contained in:
0
api/__init__.py
Normal file
0
api/__init__.py
Normal file
3
api/admin.py
Normal file
3
api/admin.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
6
api/apps.py
Normal file
6
api/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ApiConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'api'
|
||||
33
api/esi.py
Normal file
33
api/esi.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import datetime
|
||||
import os
|
||||
import redis
|
||||
import pickle
|
||||
from esy.client import ESIClient
|
||||
from esy.auth import ESIAuthenticator
|
||||
|
||||
|
||||
class ESICache(object):
|
||||
def __init__(self, **kwargs):
|
||||
self._r = redis.Redis(**kwargs)
|
||||
# self._r = redis.StrictRedis(host=redis_url, port=redis_port, db=db)
|
||||
|
||||
def get(self, key):
|
||||
# return pickle.loads(self._r[key])
|
||||
return pickle.loads(self._r.get(key))
|
||||
|
||||
def set(self, key, data, cached_until: datetime.datetime):
|
||||
self._r.set(key, pickle.dumps(data), ex=cached_until - datetime.datetime.now(datetime.timezone.utc))
|
||||
|
||||
def __contains__(self, item):
|
||||
# return item in self._r
|
||||
return self._r.exists(item)
|
||||
|
||||
|
||||
esi_client_id = os.getenv('ESI_CLIENT_ID')
|
||||
esi_secret_key = os.getenv('ESI_SECRET_KEY')
|
||||
|
||||
esi_cache = ESICache(host=os.getenv("REDIS_URL"), port=int(os.getenv("REDIS_PORT")), db="0",
|
||||
password=os.getenv("REDIS_PASSWD"))
|
||||
|
||||
esi_client = ESIClient.get_client(user_agent=os.getenv('ESI_USER_AGENT'), cache=esi_cache)
|
||||
esi_auth = ESIAuthenticator()
|
||||
108
api/migrations/0001_initial.py
Normal file
108
api/migrations/0001_initial.py
Normal file
@@ -0,0 +1,108 @@
|
||||
# Generated by Django 4.2.6 on 2023-10-26 15:51
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SDECategory',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('published', models.BooleanField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEGroup',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('published', models.BooleanField()),
|
||||
('useBasePrice', models.BooleanField()),
|
||||
('fittableNonSingletion', models.BooleanField()),
|
||||
('anchored', models.BooleanField()),
|
||||
('anchorable', models.BooleanField()),
|
||||
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='groups', to='api.sdecategory')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEIcon',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('iconFile', models.CharField()),
|
||||
('description', models.CharField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEMarektGroup',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('description', models.CharField(default='')),
|
||||
('hasTypes', models.BooleanField()),
|
||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='api.sdeicon')),
|
||||
('parent_marketgroup', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child_marketgroups', to='api.sdemarektgroup')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEMetaGroup',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('iconSuffix', models.CharField()),
|
||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='metagroups', to='api.sdeicon')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDEType',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField()),
|
||||
('description', models.CharField()),
|
||||
('published', models.BooleanField()),
|
||||
('basePrice', models.FloatField()),
|
||||
('volume', models.FloatField()),
|
||||
('portionSize', models.IntegerField()),
|
||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='types', to='api.sdegroup')),
|
||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='types', to='api.sdeicon')),
|
||||
('marketgroup', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='types', to='api.sdemarektgroup')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SDETypeMaterial',
|
||||
fields=[
|
||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
||||
('quantity', models.IntegerField()),
|
||||
('material_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='typematerials_of', to='api.sdetype')),
|
||||
('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='typematerials', to='api.sdetype')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdetype',
|
||||
name='materials',
|
||||
field=models.ManyToManyField(related_name='material_of', through='api.SDETypeMaterial', to='api.sdetype'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdetype',
|
||||
name='metagroup',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='types', to='api.sdemetagroup'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdegroup',
|
||||
name='icon',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='groups', to='api.sdeicon'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sdecategory',
|
||||
name='icon',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='categories', to='api.sdeicon'),
|
||||
),
|
||||
]
|
||||
0
api/migrations/__init__.py
Normal file
0
api/migrations/__init__.py
Normal file
4
api/models.py
Normal file
4
api/models.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from django.db import models
|
||||
from .models_esi import *
|
||||
from .models_sde import *
|
||||
|
||||
2
api/models_esi.py
Normal file
2
api/models_esi.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from django.db import models
|
||||
|
||||
66
api/models_sde.py
Normal file
66
api/models_sde.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from django.db import models
|
||||
|
||||
|
||||
class SDEIcon(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
iconFile = models.CharField()
|
||||
description = models.CharField()
|
||||
|
||||
|
||||
class SDECategory(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
icon = models.ForeignKey(SDEIcon, related_name="categories", null=True, on_delete=models.SET_NULL)
|
||||
name = models.CharField()
|
||||
published = models.BooleanField()
|
||||
|
||||
|
||||
class SDEGroup(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
category = models.ForeignKey(SDECategory, related_name="groups", on_delete=models.CASCADE)
|
||||
name = models.CharField()
|
||||
published = models.BooleanField()
|
||||
useBasePrice = models.BooleanField()
|
||||
fittableNonSingletion = models.BooleanField()
|
||||
anchored = models.BooleanField()
|
||||
anchorable = models.BooleanField()
|
||||
icon = models.ForeignKey(SDEIcon, related_name="groups", null=True, on_delete=models.SET_NULL)
|
||||
|
||||
|
||||
class SDEMarektGroup(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
icon = models.ForeignKey(SDEIcon, null=True, on_delete=models.SET_NULL)
|
||||
name = models.CharField()
|
||||
description = models.CharField(default="")
|
||||
hasTypes = models.BooleanField()
|
||||
parent_marketgroup = models.ForeignKey("self", null=True, related_name="child_marketgroups", on_delete=models.CASCADE)
|
||||
|
||||
|
||||
class SDEMetaGroup(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
icon = models.ForeignKey(SDEIcon, related_name="metagroups", null=True, on_delete=models.SET_NULL)
|
||||
name = models.CharField()
|
||||
iconSuffix = models.CharField()
|
||||
|
||||
|
||||
class SDEType(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
group = models.ForeignKey(SDEGroup, related_name="types", on_delete=models.CASCADE)
|
||||
marketgroup = models.ForeignKey(SDEMarektGroup, related_name="types", on_delete=models.CASCADE)
|
||||
metagroup = models.ForeignKey(SDEMetaGroup, related_name="types", on_delete=models.CASCADE)
|
||||
name = models.CharField()
|
||||
description = models.CharField()
|
||||
published = models.BooleanField()
|
||||
basePrice = models.FloatField()
|
||||
icon = models.ForeignKey(SDEIcon, related_name="types", null=True, on_delete=models.SET_NULL)
|
||||
volume = models.FloatField()
|
||||
portionSize = models.IntegerField()
|
||||
materials = models.ManyToManyField("self", through="SDETypeMaterial", symmetrical=False, related_name="material_of")
|
||||
|
||||
|
||||
class SDETypeMaterial(models.Model):
|
||||
id = models.IntegerField(primary_key=True)
|
||||
type = models.ForeignKey(SDEType, on_delete=models.CASCADE, related_name="typematerials")
|
||||
material_type = models.ForeignKey(SDEType, on_delete=models.CASCADE, related_name="typematerials_of")
|
||||
|
||||
quantity = models.IntegerField()
|
||||
|
||||
15
api/serializers.py
Normal file
15
api/serializers.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from django.contrib.auth.models import User, Group
|
||||
from rest_framework import serializers
|
||||
|
||||
|
||||
class UserSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['url', 'username', 'email', 'groups']
|
||||
|
||||
|
||||
class GroupSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Group
|
||||
fields = ['url', 'name']
|
||||
|
||||
3
api/tests.py
Normal file
3
api/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
24
api/views.py
Normal file
24
api/views.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from django.shortcuts import render
|
||||
from django.contrib.auth.models import User, Group
|
||||
from rest_framework import viewsets
|
||||
from rest_framework import permissions
|
||||
from api.serializers import UserSerializer, GroupSerializer
|
||||
|
||||
|
||||
class UserViewSet(viewsets.ModelViewSet):
|
||||
"""
|
||||
API endpoint that allows users to be viewed or edited.
|
||||
"""
|
||||
queryset = User.objects.all().order_by('-date_joined')
|
||||
serializer_class = UserSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
||||
class GroupViewSet(viewsets.ModelViewSet):
|
||||
"""
|
||||
API endpoint that allows groups to be viewed or edited.
|
||||
"""
|
||||
queryset = Group.objects.all()
|
||||
serializer_class = GroupSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
Reference in New Issue
Block a user