From 5651f141035d80628d9982ecf243759cd899cef7 Mon Sep 17 00:00:00 2001
From: Ryan Northey <ryan@synca.io>
Date: Mon, 16 Apr 2018 20:43:20 +0100
Subject: [PATCH 1/2] Add pootle_remote app

---
 pootle/apps/pootle_remote/__init__.py         |  9 ++++
 pootle/apps/pootle_remote/abstracts.py        | 32 ++++++++++++
 pootle/apps/pootle_remote/apps.py             | 20 ++++++++
 .../pootle_remote/migrations/0001_initial.py  | 49 +++++++++++++++++++
 .../apps/pootle_remote/migrations/__init__.py |  0
 pootle/apps/pootle_remote/models.py           | 19 +++++++
 6 files changed, 129 insertions(+)
 create mode 100644 pootle/apps/pootle_remote/__init__.py
 create mode 100644 pootle/apps/pootle_remote/abstracts.py
 create mode 100644 pootle/apps/pootle_remote/apps.py
 create mode 100644 pootle/apps/pootle_remote/migrations/0001_initial.py
 create mode 100644 pootle/apps/pootle_remote/migrations/__init__.py
 create mode 100644 pootle/apps/pootle_remote/models.py

diff --git a/pootle/apps/pootle_remote/__init__.py b/pootle/apps/pootle_remote/__init__.py
new file mode 100644
index 00000000000..6dd1b1ce735
--- /dev/null
+++ b/pootle/apps/pootle_remote/__init__.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) Pootle contributors.
+#
+# This file is a part of the Pootle project. It is distributed under the GPL3
+# or later license. See the LICENSE file for a copy of the license and the
+# AUTHORS file for copyright and authorship information.
+
+default_app_config = 'pootle_remote.apps.PootleRemoteConfig'
diff --git a/pootle/apps/pootle_remote/abstracts.py b/pootle/apps/pootle_remote/abstracts.py
new file mode 100644
index 00000000000..5c32d36ebd9
--- /dev/null
+++ b/pootle/apps/pootle_remote/abstracts.py
@@ -0,0 +1,32 @@
+
+from django.db import models
+
+from pootle_language.models import Language
+
+
+class AbstractRemoteSite(models.Model):
+    url = models.URLField()
+    type = models.CharField(max_length=32)
+    sync_frequency = models.IntegerField()
+    last_sync = models.DateTimeField()
+    update_frequency = models.IntegerField()
+
+    class Meta(object):
+        abstract = True
+
+
+class AbstractRemoteProject(models.Model):
+    code = models.CharField(
+        db_index=True,
+        max_length=255,
+        null=False,
+        blank=False)
+    fullname = models.CharField(
+        db_index=True,
+        max_length=255,
+        null=False,
+        blank=False)
+    languages = models.ManyToManyField(Language)
+
+    class Meta(object):
+        abstract = True
diff --git a/pootle/apps/pootle_remote/apps.py b/pootle/apps/pootle_remote/apps.py
new file mode 100644
index 00000000000..0e6302b024d
--- /dev/null
+++ b/pootle/apps/pootle_remote/apps.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) Pootle contributors.
+#
+# This file is a part of the Pootle project. It is distributed under the GPL3
+# or later license. See the LICENSE file for a copy of the license and the
+# AUTHORS file for copyright and authorship information.
+
+import importlib
+
+from django.apps import AppConfig
+
+
+class PootleRemoteConfig(AppConfig):
+    name = "pootle_remote"
+    verbose_name = "Pootle Remote"
+    version = "0.0.1"
+
+    def ready(self):
+        importlib.import_module("pootle_remote.models")
diff --git a/pootle/apps/pootle_remote/migrations/0001_initial.py b/pootle/apps/pootle_remote/migrations/0001_initial.py
new file mode 100644
index 00000000000..531246342e5
--- /dev/null
+++ b/pootle/apps/pootle_remote/migrations/0001_initial.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.12 on 2018-04-16 19:41
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('pootle_language', '0003_ensure_unique_special_chars'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='RemoteProject',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('code', models.CharField(db_index=True, max_length=255)),
+                ('fullname', models.CharField(db_index=True, max_length=255)),
+                ('languages', models.ManyToManyField(to='pootle_language.Language')),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.CreateModel(
+            name='RemoteSite',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('url', models.URLField()),
+                ('type', models.CharField(max_length=32)),
+                ('sync_frequency', models.IntegerField()),
+                ('last_sync', models.DateTimeField()),
+                ('update_frequency', models.IntegerField()),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.AddField(
+            model_name='remoteproject',
+            name='site',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pootle_remote.RemoteSite'),
+        ),
+    ]
diff --git a/pootle/apps/pootle_remote/migrations/__init__.py b/pootle/apps/pootle_remote/migrations/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/pootle/apps/pootle_remote/models.py b/pootle/apps/pootle_remote/models.py
new file mode 100644
index 00000000000..84b38b7fca0
--- /dev/null
+++ b/pootle/apps/pootle_remote/models.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) Pootle contributors.
+#
+# This file is a part of the Pootle project. It is distributed under the GPL3
+# or later license. See the LICENSE file for a copy of the license and the
+# AUTHORS file for copyright and authorship information.
+
+from django.db import models
+
+from .abstracts import AbstractRemoteProject, AbstractRemoteSite
+
+
+class RemoteSite(AbstractRemoteSite):
+    pass
+
+
+class RemoteProject(AbstractRemoteProject):
+    site = models.ForeignKey(RemoteSite)

From 15db0c8ee801b4fbfea6aa37ba8eea21b8004e07 Mon Sep 17 00:00:00 2001
From: Ryan Northey <ryan@synca.io>
Date: Mon, 16 Apr 2018 20:43:39 +0100
Subject: [PATCH 2/2] Add pootle_remote to INSTALLED_APPS

---
 pootle/settings/50-project.conf | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pootle/settings/50-project.conf b/pootle/settings/50-project.conf
index cd375ff096a..56416ffd1a0 100644
--- a/pootle/settings/50-project.conf
+++ b/pootle/settings/50-project.conf
@@ -98,6 +98,7 @@ INSTALLED_APPS = [
     'pootle_profile',
     'pootle_data',
     'pootle_revision',
+    'pootle_remote',
     'pootle_score',
     'pootle_statistics',
     'pootle_terminology',