From fbb7c24d39bdef90d6f267254af5a6a03ac140a3 Mon Sep 17 00:00:00 2001 From: c0de Date: Thu, 1 Jun 2017 02:14:51 -0500 Subject: [PATCH] Add the core This sets up the database to reflect what is written in the schema Next is to add logic --- api/settings.py | 9 +++- core/__init__.py | 0 core/admin.py | 6 +++ core/apps.py | 8 ++++ core/migrations/0001_initial.py | 56 ++++++++++++++++++++++ core/migrations/0002_auto_20170601_0710.py | 30 ++++++++++++ core/migrations/__init__.py | 0 core/models.py | 35 ++++++++++++++ core/tests.py | 6 +++ core/views.py | 6 +++ 10 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 core/__init__.py create mode 100644 core/admin.py create mode 100644 core/apps.py create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/0002_auto_20170601_0710.py create mode 100644 core/migrations/__init__.py create mode 100644 core/models.py create mode 100644 core/tests.py create mode 100644 core/views.py diff --git a/api/settings.py b/api/settings.py index 458f296..410ad79 100644 --- a/api/settings.py +++ b/api/settings.py @@ -37,6 +37,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'core' ] MIDDLEWARE = [ @@ -75,8 +76,12 @@ WSGI_APPLICATION = 'api.wsgi.application' DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'gama_api', + 'USER': 'gama_api', + 'PASSWORD': 'gama_api', + 'HOST': '127.0.0.1', + 'PORT': '5432', } } diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/admin.py b/core/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/core/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/core/apps.py b/core/apps.py new file mode 100644 index 0000000..a222b43 --- /dev/null +++ b/core/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class CoreConfig(AppConfig): + name = 'core' diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..db2104e --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.1 on 2017-06-01 07:08 +from __future__ import unicode_literals + +from django.conf import settings +import django.contrib.postgres.fields.jsonb +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='api_apps', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('apikey', models.CharField(max_length=256, unique=True)), + ('name', models.CharField(max_length=512, unique=True)), + ('description', models.CharField(max_length=2048)), + ('website', models.URLField(max_length=3000)), + ('callback_uri', models.URLField(max_length=3000)), + ('settings', django.contrib.postgres.fields.jsonb.JSONField()), + ], + ), + migrations.CreateModel( + name='api_heartbeat', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('enabled', models.BooleanField()), + ('time_sent', models.DateTimeField()), + ('time_rcvd', models.DateTimeField()), + ('latency', models.FloatField()), + ('data', django.contrib.postgres.fields.jsonb.JSONField()), + ('api_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.api_apps')), + ], + ), + migrations.CreateModel( + name='api_owners', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, unique=True)), + ], + ), + migrations.AddField( + model_name='api_apps', + name='owner_id', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.api_owners'), + ), + ] diff --git a/core/migrations/0002_auto_20170601_0710.py b/core/migrations/0002_auto_20170601_0710.py new file mode 100644 index 0000000..358b938 --- /dev/null +++ b/core/migrations/0002_auto_20170601_0710.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.1 on 2017-06-01 07:10 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='api_apps', + old_name='owner_id', + new_name='owner', + ), + migrations.RenameField( + model_name='api_heartbeat', + old_name='api_id', + new_name='api', + ), + migrations.RenameField( + model_name='api_owners', + old_name='user_id', + new_name='user', + ), + ] diff --git a/core/migrations/__init__.py b/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models.py b/core/models.py new file mode 100644 index 0000000..73656b0 --- /dev/null +++ b/core/models.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib.auth.models import User +from django.db import models +from django.contrib.postgres.fields import JSONField + + +class api_owners(models.Model): + # Users who are allowed to have an API app + user = models.ForeignKey(User, unique=True, blank=False) + + +class api_apps(models.Model): + # An Application registered with our API + owner = models.ForeignKey('api_owners', blank=False) + apikey = models.CharField(max_length=256, unique=True, blank=False) + name = models.CharField(max_length=512, unique=True, blank=False) + description = models.CharField(max_length=2048) + website = models.URLField(max_length=3000) + callback_uri = models.URLField(max_length=3000) + settings = JSONField() + + +class api_heartbeat(models.Model): + # If callback_uri is configured and heartbeat is enabled in settings, + # this can be used to 'ping' the application, as well as communicate + # changes right away (bypass sync operation and change setting directly, etc) + + api = models.ForeignKey('api_apps', blank=False) + enabled = models.BooleanField(blank=False) + time_sent = models.DateTimeField(blank=False) + time_rcvd = models.DateTimeField(blank=False) + latency = models.FloatField(blank=False) + data = JSONField() diff --git a/core/tests.py b/core/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/core/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/core/views.py b/core/views.py new file mode 100644 index 0000000..e784a0b --- /dev/null +++ b/core/views.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.shortcuts import render + +# Create your views here.