From ac1cee9fa06388d90303307cf836d0d5ea13965a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 23 Aug 2016 02:19:02 +0200 Subject: [PATCH] add models.py to mapdata which should replace classes.py soon --- src/c3nav/mapdata/migrations/0001_initial.py | 79 ++++++++++++++++++++ src/c3nav/mapdata/migrations/__init__.py | 0 src/c3nav/mapdata/models.py | 42 +++++++++++ src/c3nav/settings.py | 3 + 4 files changed, 124 insertions(+) create mode 100644 src/c3nav/mapdata/migrations/0001_initial.py create mode 100644 src/c3nav/mapdata/migrations/__init__.py create mode 100644 src/c3nav/mapdata/models.py diff --git a/src/c3nav/mapdata/migrations/0001_initial.py b/src/c3nav/mapdata/migrations/0001_initial.py new file mode 100644 index 00000000..e067e68a --- /dev/null +++ b/src/c3nav/mapdata/migrations/0001_initial.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.9 on 2016-08-23 00:17 +from __future__ import unicode_literals + +import django.contrib.gis.db.models.fields +from django.db import migrations, models +import django.db.models.deletion +import parler.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='MapLevel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'abstract': False, + }, + bases=(parler.models.TranslatableModelMixin, models.Model), + ), + migrations.CreateModel( + name='MapPackage', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('extends', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='extended_by', to='mapdata.MapPackage', verbose_name='extends map package')), + ], + options={ + 'abstract': False, + }, + bases=(parler.models.TranslatableModelMixin, models.Model), + ), + migrations.CreateModel( + name='MapPackageTranslation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), + ('title', models.CharField(max_length=50, verbose_name='package title')), + ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='mapdata.MapPackage')), + ], + options={ + 'db_table': 'mapdata_mappackage_translation', + 'db_tablespace': '', + 'managed': True, + 'verbose_name': 'map package Translation', + 'default_permissions': (), + }, + ), + migrations.CreateModel( + name='MapSource', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.FileField(upload_to='mapsources/', verbose_name='source image')), + ('bottom_left', django.contrib.gis.db.models.fields.PointField(srid=4326, verbose_name='bottom left coordinates')), + ('top_right', django.contrib.gis.db.models.fields.PointField(srid=4326, verbose_name='bottom left coordinates')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='sources', to='mapdata.MapPackage', verbose_name='map package')), + ], + options={ + 'abstract': False, + }, + bases=(parler.models.TranslatableModelMixin, models.Model), + ), + migrations.AddField( + model_name='maplevel', + name='package', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='levels', to='mapdata.MapPackage', verbose_name='map package'), + ), + migrations.AlterUniqueTogether( + name='mappackagetranslation', + unique_together=set([('language_code', 'master')]), + ), + ] diff --git a/src/c3nav/mapdata/migrations/__init__.py b/src/c3nav/mapdata/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/c3nav/mapdata/models.py b/src/c3nav/mapdata/models.py new file mode 100644 index 00000000..daf054cc --- /dev/null +++ b/src/c3nav/mapdata/models.py @@ -0,0 +1,42 @@ +from django.contrib.gis.db import models +from django.utils.translation import ugettext_lazy as _ + +from parler.models import TranslatedFields + +from ..models import TranslatableGeoModel + + +class MapPackage(TranslatableGeoModel): + """ + A c3nav map package + """ + name = models.CharField(_('package identifier'), max_length=50, help_text=_('e.g. de.c3nav.33c3')), + width = models.IntegerField(_('map width'), max_length=50, null=True, help_text='in meters'), + height = models.IntegerField(_('map height'), max_length=50, null=True, help_text='in meters'), + extends = models.ForeignKey('self', on_delete=models.PROTECT, null=True, related_name='extended_by', + verbose_name=_('extends map package')) + + translations = TranslatedFields( + title=models.CharField(_('package title'), max_length=50), + ) + + +class MapLevel(TranslatableGeoModel): + """ + A map level (-1, 0, 1, 2…) + """ + name = models.CharField(_('level name'), max_length=50, help_text=_('Usually just an integer (e.g. -1, 0, 1, 2)')), + package = models.ForeignKey('MapPackage', on_delete=models.PROTECT, related_name='levels', + verbose_name=_('map package')) + + +class MapSource(TranslatableGeoModel): + """ + A map source, images of levels that can be useful as backgrounds for the map editor + """ + name = models.SlugField(_('source name'), max_length=50, unique=True), + package = models.ForeignKey('MapPackage', on_delete=models.PROTECT, related_name='sources', + verbose_name=_('map package')) + image = models.FileField(_('source image'), upload_to='mapsources/') + bottom_left = models.PointField(_('bottom left coordinates')) + top_right = models.PointField(_('bottom left coordinates')) diff --git a/src/c3nav/settings.py b/src/c3nav/settings.py index 457709cd..d3fcdf78 100644 --- a/src/c3nav/settings.py +++ b/src/c3nav/settings.py @@ -16,6 +16,7 @@ config.read(['/etc/c3nav/c3nav.cfg', os.path.expanduser('~/.c3nav.cfg'), 'c3nav. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) DATA_DIR = config.get('c3nav', 'datadir', fallback=os.environ.get('DATA_DIR', 'data')) LOG_DIR = os.path.join(DATA_DIR, 'logs') +MEDIA_ROOT = os.path.join(DATA_DIR, 'media') MAP_DIRS = tuple(n for n in config.get('c3nav', 'mapdirs', fallback='').split(',') if n) @@ -23,6 +24,8 @@ if not os.path.exists(DATA_DIR): os.mkdir(DATA_DIR) if not os.path.exists(LOG_DIR): os.mkdir(LOG_DIR) +if not os.path.exists(MEDIA_ROOT): + os.mkdir(MEDIA_ROOT) if config.has_option('django', 'secret'): SECRET_KEY = config.get('django', 'secret')