Cleanup secrets management, pre-run checks.

This commit is contained in:
Philip Sargent 2020-06-20 15:43:28 +01:00
parent b35a0b0d26
commit e697466557
25 changed files with 334 additions and 1018 deletions

View File

@ -1,545 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
# created by
# $ python manage.py makemigrations core
# in troggle/core/migrations/0001_initial.py
# Useful shorthand for db structure
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Area',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('short_name', models.CharField(max_length=100)),
('name', models.CharField(max_length=200, blank=True, null=True)),
('description', models.TextField(blank=True, null=True)),
('parent', models.ForeignKey(blank=True, null=True, to='core.Area')),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Cave',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('official_name', models.CharField(max_length=160)),
('kataster_code', models.CharField(max_length=20, blank=True, null=True)),
('kataster_number', models.CharField(max_length=10, blank=True, null=True)),
('unofficial_number', models.CharField(max_length=60, blank=True, null=True)),
('explorers', models.TextField(blank=True, null=True)),
('underground_description', models.TextField(blank=True, null=True)),
('equipment', models.TextField(blank=True, null=True)),
('references', models.TextField(blank=True, null=True)),
('survey', models.TextField(blank=True, null=True)),
('kataster_status', models.TextField(blank=True, null=True)),
('underground_centre_line', models.TextField(blank=True, null=True)),
('notes', models.TextField(blank=True, null=True)),
('length', models.CharField(max_length=100, blank=True, null=True)),
('depth', models.CharField(max_length=100, blank=True, null=True)),
('extent', models.CharField(max_length=100, blank=True, null=True)),
('survex_file', models.CharField(max_length=100, blank=True, null=True)),
('description_file', models.CharField(max_length=200, blank=True, null=True)),
('url', models.CharField(max_length=200, blank=True, null=True)),
('filename', models.CharField(max_length=200)),
('area', models.ManyToManyField(blank=True, null=True, to='core.Area')),
],
options={
'ordering': ('kataster_code', 'unofficial_number'),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='CaveAndEntrance',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('entrance_letter', models.CharField(max_length=20, blank=True, null=True)),
('cave', models.ForeignKey(to='core.Cave')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='CaveDescription',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('short_name', models.CharField(max_length=50, unique=True)),
('long_name', models.CharField(max_length=200, blank=True, null=True)),
('description', models.TextField(blank=True, null=True)),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.CreateModel(
name='CaveSlug',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('slug', models.SlugField(unique=True)),
('primary', models.BooleanField(default=False)),
('cave', models.ForeignKey(to='core.Cave')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='DataIssue',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('date', models.DateTimeField(auto_now_add=True)),
('parser', models.CharField(max_length=50, blank=True, null=True)),
('message', models.CharField(max_length=400, blank=True, null=True)),
],
options={
'ordering': ['date'],
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Entrance',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('name', models.CharField(max_length=100, blank=True, null=True)),
('entrance_description', models.TextField(blank=True, null=True)),
('explorers', models.TextField(blank=True, null=True)),
('map_description', models.TextField(blank=True, null=True)),
('location_description', models.TextField(blank=True, null=True)),
('approach', models.TextField(blank=True, null=True)),
('underground_description', models.TextField(blank=True, null=True)),
('photo', models.TextField(blank=True, null=True)),
('marking', models.CharField(max_length=2, choices=[('P', 'Paint'), ('P?', 'Paint (?)'), ('T', 'Tag'), ('T?', 'Tag (?)'), ('R', 'Needs Retag'), ('S', 'Spit'), ('S?', 'Spit (?)'), ('U', 'Unmarked'), ('?', 'Unknown')])),
('marking_comment', models.TextField(blank=True, null=True)),
('findability', models.CharField(max_length=1, blank=True, null=True, choices=[('?', 'To be confirmed ...'), ('S', 'Coordinates'), ('L', 'Lost'), ('R', 'Refindable')])),
('findability_description', models.TextField(blank=True, null=True)),
('alt', models.TextField(blank=True, null=True)),
('northing', models.TextField(blank=True, null=True)),
('easting', models.TextField(blank=True, null=True)),
('tag_station', models.TextField(blank=True, null=True)),
('exact_station', models.TextField(blank=True, null=True)),
('other_station', models.TextField(blank=True, null=True)),
('other_description', models.TextField(blank=True, null=True)),
('bearings', models.TextField(blank=True, null=True)),
('url', models.CharField(max_length=200, blank=True, null=True)),
('filename', models.CharField(max_length=200)),
('cached_primary_slug', models.CharField(max_length=200, blank=True, null=True)),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.CreateModel(
name='EntranceSlug',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('slug', models.SlugField(unique=True)),
('primary', models.BooleanField(default=False)),
('entrance', models.ForeignKey(to='core.Entrance')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Expedition',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('year', models.CharField(max_length=20, unique=True)),
('name', models.CharField(max_length=100)),
],
options={
'ordering': ('-year',),
'get_latest_by': 'year',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='ExpeditionDay',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('date', models.DateField()),
('expedition', models.ForeignKey(to='core.Expedition')),
],
options={
'ordering': ('date',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='LogbookEntry',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('date', models.DateField()),
('title', models.CharField(max_length=200)),
('cave_slug', models.SlugField()),
('place', models.CharField(max_length=100, blank=True, null=True, help_text="Only use this if you haven't chosen a cave")),
('text', models.TextField()),
('slug', models.SlugField()),
('filename', models.CharField(max_length=200, null=True)),
('entry_type', models.CharField(max_length=50, null=True, default='wiki', choices=[('wiki', 'Wiki style logbook'), ('html', 'Html style logbook')])),
('expedition', models.ForeignKey(blank=True, null=True, to='core.Expedition')),
('expeditionday', models.ForeignKey(null=True, to='core.ExpeditionDay')),
],
options={
'verbose_name_plural': 'Logbook Entries',
'ordering': ('-date',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='NewSubCave',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('name', models.CharField(max_length=200, unique=True)),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.CreateModel(
name='OtherCaveName',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('name', models.CharField(max_length=160)),
('cave', models.ForeignKey(to='core.Cave')),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Person',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('first_name', models.CharField(max_length=100)),
('last_name', models.CharField(max_length=100)),
('fullname', models.CharField(max_length=200)),
('is_vfho', models.BooleanField(default=False, help_text='VFHO is the Vereines für Höhlenkunde in Obersteier, a nearby Austrian caving club.')),
('mug_shot', models.CharField(max_length=100, blank=True, null=True)),
('blurb', models.TextField(blank=True, null=True)),
('orderref', models.CharField(max_length=200)),
('user', models.OneToOneField(blank=True, null=True, to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name_plural': 'People',
'ordering': ('orderref',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='PersonExpedition',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('slugfield', models.SlugField(blank=True, null=True)),
('is_guest', models.BooleanField(default=False)),
('expo_committee_position', models.CharField(max_length=200, blank=True, null=True, choices=[('leader', 'Expo leader'), ('medical', 'Expo medical officer'), ('treasurer', 'Expo treasurer'), ('sponsorship', 'Expo sponsorship coordinator'), ('research', 'Expo research coordinator')])),
('nickname', models.CharField(max_length=100, blank=True, null=True)),
('expedition', models.ForeignKey(to='core.Expedition')),
('person', models.ForeignKey(to='core.Person')),
],
options={
'ordering': ('-expedition',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='PersonTrip',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('time_underground', models.FloatField(help_text='In decimal hours')),
('is_logbook_entry_author', models.BooleanField(default=False)),
('logbook_entry', models.ForeignKey(to='core.LogbookEntry')),
('personexpedition', models.ForeignKey(null=True, to='core.PersonExpedition')),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.CreateModel(
name='QM',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('new_since_parsing', models.BooleanField(default=False, editable=False)),
('non_public', models.BooleanField(default=False)),
('number', models.IntegerField(help_text='this is the sequential number in the year')),
('grade', models.CharField(max_length=1, choices=[('A', 'A: Large obvious lead'), ('B', 'B: Average lead'), ('C', 'C: Tight unpromising lead'), ('D', 'D: Dig'), ('X', 'X: Unclimbable aven')])),
('location_description', models.TextField(blank=True)),
('nearest_station_description', models.CharField(max_length=400, blank=True, null=True)),
('nearest_station_name', models.CharField(max_length=200, blank=True, null=True)),
('area', models.CharField(max_length=100, blank=True, null=True)),
('completion_description', models.TextField(blank=True, null=True)),
('comment', models.TextField(blank=True, null=True)),
('found_by', models.ForeignKey(blank=True, null=True, related_name='QMs_found', to='core.LogbookEntry')),
],
options={
'abstract': False,
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexBlock',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('name', models.CharField(max_length=100)),
('text', models.TextField()),
('date', models.DateField(blank=True, null=True)),
('begin_char', models.IntegerField()),
('survexpath', models.CharField(max_length=200)),
('totalleglength', models.FloatField()),
('cave', models.ForeignKey(blank=True, null=True, to='core.Cave')),
('expedition', models.ForeignKey(blank=True, null=True, to='core.Expedition')),
('expeditionday', models.ForeignKey(null=True, to='core.ExpeditionDay')),
('parent', models.ForeignKey(blank=True, null=True, to='core.SurvexBlock')),
],
options={
'ordering': ('id',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexDirectory',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('path', models.CharField(max_length=200)),
('cave', models.ForeignKey(blank=True, null=True, to='core.Cave')),
],
options={
'ordering': ('id',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexEquate',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('cave', models.ForeignKey(blank=True, null=True, to='core.Cave')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexFile',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('path', models.CharField(max_length=200)),
('cave', models.ForeignKey(blank=True, null=True, to='core.Cave')),
('survexdirectory', models.ForeignKey(blank=True, null=True, to='core.SurvexDirectory')),
],
options={
'ordering': ('id',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexLeg',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('tape', models.FloatField()),
('compass', models.FloatField()),
('clino', models.FloatField()),
('block', models.ForeignKey(to='core.SurvexBlock')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexPersonRole',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('nrole', models.CharField(max_length=200, blank=True, null=True, choices=[('insts', 'Instruments'), ('dog', 'Other'), ('notes', 'Notes'), ('pics', 'Pictures'), ('tape', 'Tape measure'), ('useless', 'Useless'), ('helper', 'Helper'), ('disto', 'Disto'), ('consultant', 'Consultant')])),
('personname', models.CharField(max_length=100)),
('expeditionday', models.ForeignKey(null=True, to='core.ExpeditionDay')),
('person', models.ForeignKey(blank=True, null=True, to='core.Person')),
('personexpedition', models.ForeignKey(blank=True, null=True, to='core.PersonExpedition')),
('persontrip', models.ForeignKey(blank=True, null=True, to='core.PersonTrip')),
('survexblock', models.ForeignKey(to='core.SurvexBlock')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexScansFolder',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('fpath', models.CharField(max_length=200)),
('walletname', models.CharField(max_length=200)),
],
options={
'ordering': ('walletname',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexScanSingle',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('ffile', models.CharField(max_length=200)),
('name', models.CharField(max_length=200)),
('survexscansfolder', models.ForeignKey(null=True, to='core.SurvexScansFolder')),
],
options={
'ordering': ('name',),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexStation',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('name', models.CharField(max_length=100)),
('x', models.FloatField(blank=True, null=True)),
('y', models.FloatField(blank=True, null=True)),
('z', models.FloatField(blank=True, null=True)),
('block', models.ForeignKey(to='core.SurvexBlock')),
('equate', models.ForeignKey(blank=True, null=True, to='core.SurvexEquate')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='SurvexTitle',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('title', models.CharField(max_length=200)),
('cave', models.ForeignKey(blank=True, null=True, to='core.Cave')),
('survexblock', models.ForeignKey(to='core.SurvexBlock')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='TunnelFile',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('tunnelpath', models.CharField(max_length=200)),
('tunnelname', models.CharField(max_length=200)),
('bfontcolours', models.BooleanField(default=False)),
('filesize', models.IntegerField(default=0)),
('npaths', models.IntegerField(default=0)),
('survexblocks', models.ManyToManyField(to='core.SurvexBlock')),
('survexscans', models.ManyToManyField(to='core.SurvexScanSingle')),
('survexscansfolders', models.ManyToManyField(to='core.SurvexScansFolder')),
('survextitles', models.ManyToManyField(to='core.SurvexTitle')),
('tunnelcontains', models.ManyToManyField(to='core.TunnelFile')),
],
options={
'ordering': ('tunnelpath',),
},
bases=(models.Model,),
),
migrations.AddField(
model_name='survexleg',
name='stationfrom',
field=models.ForeignKey(related_name='stationfrom', to='core.SurvexStation'),
preserve_default=True,
),
migrations.AddField(
model_name='survexleg',
name='stationto',
field=models.ForeignKey(related_name='stationto', to='core.SurvexStation'),
preserve_default=True,
),
migrations.AddField(
model_name='survexdirectory',
name='primarysurvexfile',
field=models.ForeignKey(blank=True, null=True, related_name='primarysurvexfile', to='core.SurvexFile'),
preserve_default=True,
),
migrations.AddField(
model_name='survexblock',
name='survexfile',
field=models.ForeignKey(blank=True, null=True, to='core.SurvexFile'),
preserve_default=True,
),
migrations.AddField(
model_name='survexblock',
name='survexscansfolder',
field=models.ForeignKey(null=True, to='core.SurvexScansFolder'),
preserve_default=True,
),
migrations.AddField(
model_name='qm',
name='nearest_station',
field=models.ForeignKey(blank=True, null=True, to='core.SurvexStation'),
preserve_default=True,
),
migrations.AddField(
model_name='qm',
name='ticked_off_by',
field=models.ForeignKey(blank=True, null=True, related_name='QMs_ticked_off', to='core.LogbookEntry'),
preserve_default=True,
),
migrations.AddField(
model_name='cavedescription',
name='linked_entrances',
field=models.ManyToManyField(blank=True, null=True, to='core.Entrance'),
preserve_default=True,
),
migrations.AddField(
model_name='cavedescription',
name='linked_qms',
field=models.ManyToManyField(blank=True, null=True, to='core.QM'),
preserve_default=True,
),
migrations.AddField(
model_name='cavedescription',
name='linked_subcaves',
field=models.ManyToManyField(blank=True, null=True, to='core.NewSubCave'),
preserve_default=True,
),
migrations.AddField(
model_name='caveandentrance',
name='entrance',
field=models.ForeignKey(to='core.Entrance'),
preserve_default=True,
),
]

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2020-06-16 23:22
# Generated by Django 1.11.29 on 2020-06-20 14:27
from __future__ import unicode_literals
from django.conf import settings
@ -185,7 +185,7 @@ class Migration(migrations.Migration):
('non_public', models.BooleanField(default=False)),
('date', models.DateField()),
('title', models.CharField(max_length=200)),
('cave_slug', models.SlugField()),
('cave_slug', models.SlugField(blank=True, null=True)),
('place', models.CharField(blank=True, help_text="Only use this if you haven't chosen a cave", max_length=100, null=True)),
('text', models.TextField()),
('slug', models.SlugField()),

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-06-19 14:11
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='logbookentry',
name='cave_slug',
field=models.SlugField(blank=True),
),
]

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-06-19 14:13
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0002_auto_20200619_1511'),
]
operations = [
migrations.AlterField(
model_name='logbookentry',
name='cave_slug',
field=models.SlugField(blank=True, null=True),
),
]

View File

@ -86,6 +86,7 @@ def surveyscansingle(request, path, file):
#return render_to_response('survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
def expofilessingle(request, filepath):
# defaults to content_type="text/pain" needs fixing for PDFs
fn=urllib.parse.unquote(filepath)
return HttpResponse(content=open(settings.EXPOFILES+fn,"rb"))

View File

@ -4,6 +4,8 @@
from collections import Counter, Iterator, Mapping, OrderedDict
/mnt/d/CUCC-Expo/t37/lib/python3.7/site-packages/django/core/paginator.py:126: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
class Page(collections.Sequence):
/mnt/d/CUCC-Expo/t37/troggle/core/view_surveys.py:41: DeprecationWarning: invalid escape sequence \d
mname = re.match("(.*?)(?:-(\d+))?\.(png|jpg|jpeg)$(?i)", fname)
/mnt/d/CUCC-Expo/t37/lib/python3.7/site-packages/registration/auth_urls_classes.py:19: DeprecationWarning:
include('registration.auth_urls') is deprecated and will be
removed in django-registration 3.0. Use

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2020-06-16 23:46
# Generated by Django 1.11.29 on 2020-06-20 14:27
from __future__ import unicode_literals
from django.db import migrations, models

52
lines-of-python.txt Normal file
View File

@ -0,0 +1,52 @@
4 ./core/context.py
4 ./flatpages/admin.py
6 ./core/templatetags/link.py
6 ./core/views.py
6 ./manage.py
8 ./core/templatetags/csrffaker.py
26 ./core/management/commands/reset_db.py
26 ./export/toqms.py
26 ./flatpages/migrations/0001_initial.py
33 ./localsettingswindows.py
37 ./localsettingsubuntu.py
38 ./profiles/urls.py
38 ./profiles/utils.py
39 ./localsettings-expo-live.py
39 ./localsettingsdocker.py
39 ./localsettingsserver.py
41 ./localsettingspotatohut.py
41 ./middleware.py
44 ./dump.py
47 ./reset-django.py
48 ./core/templatetags/survex_markup.py
49 ./parsers/subcaves.py
63 ./logbooksdump.py
69 ./core/TESTS/tests.py
73 ./localsettings.py
73 ./localsettingsWSL.py
81 ./settings.py
92 ./core/views_statistics.py
97 ./core/forms.py
98 ./core/admin.py
99 ./parsers/QMs.py
102 ./parsers/people.py
103 ./core/view_surveys.py
103 ./django-patch/html_parser.py
124 ./core/templatetags/wiki_markup.py
135 ./utils.py
156 ./flatpages/views.py
164 ./modelviz.py
167 ./core/models.py
175 ./core/views_other.py
198 ./parsers/caves.py
217 ./core/views_logbooks.py
256 ./core/views_survex.py
276 ./profiles/views.py
355 ./troggle-inspectdb.py
359 ./databaseReset.py
387 ./core/views_caves.py
431 ./parsers/survex.py
462 ./core/migrations/0001_initial.py
515 ./parsers/logbooks.py
534 ./0001_initial.py
6609

58
lines-of-templates.txt Normal file
View File

@ -0,0 +1,58 @@
3 ./templates/options.html
4 ./templates/personForm.html
4 ./templates/registration/logout.html
5 ./templates/registration/registration_activate.html
6 ./templates/registration/activation_email.html
7 ./templates/admin/base_site.html
7 ./templates/pagenotfound.html
8 ./templates/nonpublic.html
12 ./templates/cave_logbook.html
13 ./templates/cave_description.html
13 ./templates/core/expedition_list.html
13 ./templates/expobase.html
13 ./templates/object_list.html
15 ./templates/editentrance.html
15 ./templates/editflatpage.html
15 ./templates/flatpage.html
15 ./templates/registration/login.html
16 ./templates/editcave.html
16 ./templates/fileupload.html
16 ./templates/menu.html
16 ./templates/svxfiledifflistonly.html
17 ./templates/editcave2.html
19 ./templates/cavemillenial.html
19 ./templates/registration/activate.html
21 ./templates/logbook2005style.html
22 ./templates/tasks.html
23 ./templates/statistics.html
24 ./README/index.html
24 ./templates/dataformat/logbookentry.html
25 ./templates/profiles/select_profile.html
25 ./templates/survexscansfolders.html
27 ./templates/survexscansfolder.html
31 ./templates/caveindex.html
33 ./templates/tunnelfiles.html
35 ./templates/person.html
35 ./templates/qm.html
35 ./templates/survexblock.html
36 ./templates/cave_uground_description.html
37 ./templates/pathsreport.html
38 ./templates/personindex.html
39 ./templates/expowebbase.html
42 ./templates/subcave.html
46 ./templates/frontpage.html
47 ./templates/personexpedition.html
47 ./templates/registration/registration_form.html
54 ./templates/svxfilecavelist.html
62 ./templates/svxfile.html
64 ./templates/svxcavesingle.html
69 ./templates/logbookentry.html
71 ./templates/expedition.html
75 ./templates/base.html
75 ./templates/entrance.html
75 ./templates/newlogbookentry.html
85 ./templates/editfile.html
102 ./templates/prospecting.html
115 ./templates/controlPanel.html
439 ./templates/cave.html
2265

View File

@ -13,7 +13,7 @@ DATABASES = {
}
EXPOUSER = 'expo'
EXPOUSERPASS = 'somepasshere'
EXPOUSERPASS = "nnn:gggggg"
EXPOUSER_EMAIL = 'wookey@wookware.org'
REPOS_ROOT_PATH = '/expo/'

View File

@ -4,6 +4,9 @@ import sys
# password and _don't_ check that file back to the repo as it exposes
# your/our password to the world!
# This will ALL NEED TO BE CHANGED to match localsettingsWSL / python3 / Django v1.18.29
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
@ -68,7 +71,7 @@ EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "cuccexpo@gmail.com"
EMAIL_HOST_PASSWORD = "khvtffkhvtff"
EMAIL_HOST_PASSWORD = "insert-real-email-password-here"
EMAIL_PORT=587

View File

@ -3,6 +3,9 @@ import sys
# password and _don't_ check that file back to the repo as it exposes
# your/our password to the world!
# This will ALL NEED TO BE CHANGED to match localsettingsWSL / python3 / Django v1.18.29
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
@ -15,7 +18,7 @@ DATABASES = {
}
EXPOUSER = 'expo'
EXPOUSERPASS = 'realpasshere'
EXPOUSERPASS = "nnn:gggggg"
EXPOUSER_EMAIL = 'wookey@wookware.org'
REPOS_ROOT_PATH = '/home/expo/'
@ -68,6 +71,6 @@ FEINCMS_ADMIN_MEDIA='/site_media/feincms/'
#EMAIL_HOST = "smtp.gmail.com"
#EMAIL_HOST_USER = "cuccexpo@gmail.com"
#EMAIL_HOST_PASSWORD = "khvtffkhvtff"
EMAIL_HOST_PASSWORD = "insert-real-email-password-here"
#EMAIL_PORT=587
#EMAIL_USE_TLS = True

View File

@ -1,6 +1,8 @@
import sys
# link localsettings to this file for use on expo computer in austria
# This will ALL NEED TO BE CHANGED to match localsettingsWSL / python3 / Django v1.18.29
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
@ -13,7 +15,7 @@ DATABASES = {
}
EXPOUSER = 'expo'
EXPOUSERPASS = 'realpasshere'
EXPOUSERPASS = "nnn:gggggg"
EXPOUSER_EMAIL = 'wookey@wookware.org'
REPOS_ROOT_PATH = '/home/expo/expofiles/'

View File

@ -1,3 +1,7 @@
# This will ALL NEED TO BE CHANGED to match localsettingsWSL / python3 / Django v1.18.29
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
@ -10,7 +14,7 @@ DATABASES = {
}
EXPOUSER = 'expo'
EXPOUSERPASS = 'realpasshere'
EXPOUSERPASS = "nnn:gggggg"
EXPOUSER_EMAIL = 'wookey@wookware.org'
SURVEX_DATA = 'c:\\Expo\\loser\\'
@ -44,13 +48,9 @@ STATIC_ROOT = DIR_ROOT
#FILES = "http://framos.lawoftheland.co.uk/troggle/survey_files/"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "cuccexpo@gmail.com"
EMAIL_HOST_PASSWORD = ""
EMAIL_HOST_PASSWORD = "insert-real-email-password-here"
EMAIL_PORT=587
EMAIL_USE_TLS = True
# URL that handles the media served from MEDIA_ROOT. Make sure to use a

33
pre-push.sh Normal file
View File

@ -0,0 +1,33 @@
#! /bin/sh
# create and sanitise files for pushing to repo
# Philip Sargent 2020/06/20
echo deprecations.
python -Wall manage.py check -v 3 2>deprecations.txt >/dev/null
echo diffsettings.
python manage.py diffsettings | grep "###" > diffsettings.txt
echo pip freeze.
pip freeze > requirements.txt
echo inspectdb.
python manage.py inspectdb > troggle-inspectdb.py
#egrep -in "unable|error" troggle-inspectdb.py
echo remove passwords.
cp localsettings.py localsettingsWSL.py
grep EXPOUSERPASS localsettings*.py
sed -i '/EXPOUSERPASS/ s/^.*$/EXPOUSERPASS = "nnn:gggggg"/' localsettings*.py
sed -i '/EXPOUSERPASS/ s/^.*$/EXPOUSERPASS = "nnn:gggggg"/' diffsettings.txt
echo " " reset: EXPOUSERPASS = \"nnn:gggggg\"
grep EMAIL_HOST_PASSWORD localsettings*.py
sed -i '/EMAIL_HOST_PASSWORD/ s/^.*$/EMAIL_HOST_PASSWORD = "insert-real-email-password-here"/' localsettings*.py
sed -i '/EMAIL_HOST_PASSWORD/ s/^.*$/EMAIL_HOST_PASSWORD = "insert-real-email-password-here"/' diffsettings.txt
echo " " reset: EMAIL_HOST_PASSWORD = \"insert-real-email-password-here\"
grep SECRET_KEY *settings.*
sed -i '/SECRET_KEY/ s/^.*$/SECRET_KEY = "not-the-real-secret-key-a#vaeozn0---^fj!355qki*vj2"/' settings.py
sed -i '/SECRET_KEY/ s/^.*$/SECRET_KEY = "not-the-real-secret-key-a#vaeozn0---^fj!355qki*vj2"/' diffsettings.txt
echo " " reset: SECRET_KEY = \"not-the-real-secret-key-a#vaeozn0---^fj!355qki*vj2\"
#
# Do these before final testing, *not* just before pushing:
# python reset-django.py
# python manage.py makemigrations
# python manage.py test
# python manage.py inspectdb > troggle-inspectdb.py
# egrep -i "unable|error" troggle-inspectdb.py

17
pre-run.sh Normal file
View File

@ -0,0 +1,17 @@
#! /bin/sh
# Do these before final testing, *not* just before pushing:
# Philip Sargent 2020/06/20
python reset-django.py
echo After cleanup deletion, remake all migrations.
python manage.py makemigrations >/dev/null
python manage.py test
echo Run inspectdb:
python manage.py inspectdb > troggle-inspectdb.py
# egrep -in "unable|error" troggle-inspectdb.py
echo ""
# count non-blank lines of python and template HTML code
# includes all variants of settings.py files
find . -name \*.html -print0 | xargs -0 egrep -vc "#|^\s*$" | grep -v "0$" | awk -F ":" '{ sum +=$2; print $2, $1; } END {print sum}'| sort -n > lines-of-templates.txt
find . -name \*.py -print0 | xargs -0 egrep -vc "#|^\s*$" | grep -v "0$" | awk -F ":" '{ sum +=$2; print $2, $1; } END {print sum}'| sort -n > lines-of-python.txt
echo `tail -1 lines-of-python.txt` non-comment lines of python.

View File

@ -1,7 +0,0 @@
confusable-homoglyphs==2.0.2
Django==1.10.8
django-registration==2.3
Pillow==7.1.2
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.1

View File

@ -1,8 +0,0 @@
confusable-homoglyphs==2.0.2
Django==1.11.29
django-registration==2.3
Pillow==7.1.2
pytz==2020.1
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.1

View File

@ -1,7 +0,0 @@
Django==1.9.13
django-extensions==2.2.9
django-registration==2.0
Pillow==7.1.2
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.1

View File

@ -1,109 +0,0 @@
appdirs==1.4.3
apturl==0.5.2
astroid==2.4.1
attrs==19.3.0
Automat==0.8.0
blinker==1.4
catfish==1.4.13
certifi==2019.11.28
chardet==3.0.4
Click==7.0
cloud-init==20.1
colorama==0.4.3
command-not-found==0.3
configobj==5.0.6
constantly==15.1.0
coverage==5.1
cryptography==2.8
cupshelpers==1.0
dbus-python==1.2.16
defer==1.0.6
distlib==0.3.0
distro==1.4.0
distro-info===0.23ubuntu1
Django==1.7
django-extensions==2.2.9
django-registration==2.0
django-tinymce==2.0.1
docutils==0.16
entrypoints==0.3
filelock==3.0.12
httplib2==0.14.0
hyperlink==19.0.0
idna==2.8
importlib-metadata==1.5.0
incremental==16.10.1
isort==4.3.21
Jinja2==2.10.1
jsonpatch==1.22
jsonpointer==2.0
jsonschema==3.2.0
keyring==18.0.1
language-selector==0.1
launchpadlib==1.10.13
lazr.restfulclient==0.14.2
lazr.uri==1.0.3
lazy-object-proxy==1.4.3
lightdm-gtk-greeter-settings==1.2.2
macaroonbakery==1.3.1
MarkupSafe==1.1.0
mccabe==0.6.1
menulibre==2.2.1
more-itertools==4.2.0
mugshot==0.4.2
netifaces==0.10.4
oauthlib==3.1.0
olefile==0.46
onboard==1.4.1
pexpect==4.6.0
Pillow==7.1.2
protobuf==3.6.1
psutil==5.5.1
pyasn1==0.4.2
pyasn1-modules==0.2.1
pycairo==1.16.2
pycups==1.9.73
Pygments==2.3.1
PyGObject==3.36.0
PyHamcrest==1.9.0
PyJWT==1.7.1
pylint==2.5.2
pymacaroons==0.13.0
PyNaCl==1.3.0
pyOpenSSL==19.0.0
pyRFC3339==1.1
pyrsistent==0.15.5
pyserial==3.4
python-apt==2.0.0
python-dateutil==2.7.3
python-debian===0.1.36ubuntu1
pytz==2019.3
pyxdg==0.26
PyYAML==5.3.1
reportlab==3.5.34
requests==2.22.0
requests-unixsocket==0.2.0
roman==2.0.0
rope==0.17.0
SecretStorage==2.3.1
service-identity==18.1.0
sgt-launcher==0.2.5
simplejson==3.16.0
six==1.14.0
ssh-import-id==5.10
systemd-python==234
toml==0.10.1
Twisted==18.9.0
ubuntu-advantage-tools==20.3
ubuntu-drivers-common==0.0.0
ufw==0.36
unattended-upgrades==0.1
Unidecode==1.1.1
urllib3==1.25.8
virtualenv==20.0.17
wadllib==1.3.3
wrapt==1.12.1
xcffib==0.8.1
xkit==0.0.0
zipp==1.0.0
zope.interface==4.7.1

View File

@ -1,7 +0,0 @@
Django==1.8.19
django-extensions==2.2.9
django-registration==2.0
Pillow==7.1.0
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.0

View File

@ -1,7 +0,0 @@
Django==1.8.19
django-extensions==2.2.9
django-registration==2.0
Pillow==7.1.2
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.1

View File

@ -1,7 +0,0 @@
Django==1.8.19
django-extensions==2.2.9
django-registration==2.0
Pillow==7.1.0
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.0

View File

@ -92,7 +92,7 @@ APPEND_SLASH = False
SMART_APPEND_SLASH = True
# Make this unique, and don't share it with anybody.
SECRET_KEY = 'a#vaeozn0)uz_9t_%v5n#tj)m+%ace6b_0(^fj!355qki*v)j2'
SECRET_KEY = "not-the-real-secret-key-a#vaeozn0---^fj!355qki*vj2"
LOGIN_REDIRECT_URL = '/'

View File

@ -1,22 +1,17 @@
** importing troggle/settings.py
** importing troggle/localsettings.py
** finished importing troggle/localsettings.py
** finished importing troggle/settings.py
1 settings on loading databaseReset.py
* importing troggle/settings.py
* importing troggle/localsettings.py
+ finished importing troggle/localsettings.py
+ finished importing troggle/settings.py
* importing troggle/settings.py
+ finished importing troggle/settings.py
** importing troggle/core/views_other.py
# This is an auto-generated Django model module.
# autogenerated by:
# $ python manage.py inspectdb
# You'll have to do the following manually to clean this up:
# * Rearrange models' order
# * Make sure each model has one field with primary_key=True
# * Make sure each ForeignKey has `on_delete` set to the desired behavior.
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
#
# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [app_label]'
# into your database.
from __future__ import unicode_literals
from django.db import models
@ -29,65 +24,42 @@ class AuthGroup(models.Model):
class Meta:
managed = False
db_table = 'auth_group'
class AuthGroupPermissions(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
group = models.ForeignKey(AuthGroup)
permission = models.ForeignKey('AuthPermission')
class Meta:
managed = False
db_table = 'auth_group_permissions'
# Unable to inspect table 'auth_group_permissions'
# The error was: list index out of range
class AuthPermission(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(max_length=50)
content_type = models.ForeignKey('DjangoContentType')
content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING)
codename = models.CharField(max_length=100)
name = models.CharField(max_length=255)
class Meta:
managed = False
db_table = 'auth_permission'
unique_together = (('content_type', 'codename'),)
class AuthUser(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
password = models.CharField(max_length=128)
last_login = models.DateTimeField()
last_login = models.DateTimeField(blank=True, null=True)
is_superuser = models.BooleanField()
username = models.CharField(unique=True, max_length=30)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.CharField(max_length=75)
email = models.CharField(max_length=254)
is_staff = models.BooleanField()
is_active = models.BooleanField()
date_joined = models.DateTimeField()
username = models.CharField(unique=True, max_length=150)
class Meta:
managed = False
db_table = 'auth_user'
class AuthUserGroups(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
user = models.ForeignKey(AuthUser)
group = models.ForeignKey(AuthGroup)
class Meta:
managed = False
db_table = 'auth_user_groups'
class AuthUserUserPermissions(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
user = models.ForeignKey(AuthUser)
permission = models.ForeignKey(AuthPermission)
class Meta:
managed = False
db_table = 'auth_user_user_permissions'
# Unable to inspect table 'auth_user_groups'
# The error was: list index out of range
# Unable to inspect table 'auth_user_user_permissions'
# The error was: list index out of range
class CoreArea(models.Model):
@ -95,9 +67,9 @@ class CoreArea(models.Model):
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
short_name = models.CharField(max_length=100)
name = models.CharField(max_length=200, blank=True)
description = models.TextField(blank=True)
parent = models.ForeignKey('self', blank=True, null=True)
name = models.CharField(max_length=200, blank=True, null=True)
description = models.TextField(blank=True, null=True)
parent = models.ForeignKey('self', models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
@ -109,23 +81,23 @@ class CoreCave(models.Model):
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
official_name = models.CharField(max_length=160)
kataster_code = models.CharField(max_length=20, blank=True)
kataster_number = models.CharField(max_length=10, blank=True)
unofficial_number = models.CharField(max_length=60, blank=True)
explorers = models.TextField(blank=True)
underground_description = models.TextField(blank=True)
equipment = models.TextField(blank=True)
references = models.TextField(blank=True)
survey = models.TextField(blank=True)
kataster_status = models.TextField(blank=True)
underground_centre_line = models.TextField(blank=True)
notes = models.TextField(blank=True)
length = models.CharField(max_length=100, blank=True)
depth = models.CharField(max_length=100, blank=True)
extent = models.CharField(max_length=100, blank=True)
survex_file = models.CharField(max_length=100, blank=True)
description_file = models.CharField(max_length=200, blank=True)
url = models.CharField(max_length=200, blank=True)
kataster_code = models.CharField(max_length=20, blank=True, null=True)
kataster_number = models.CharField(max_length=10, blank=True, null=True)
unofficial_number = models.CharField(max_length=60, blank=True, null=True)
explorers = models.TextField(blank=True, null=True)
underground_description = models.TextField(blank=True, null=True)
equipment = models.TextField(blank=True, null=True)
references = models.TextField(blank=True, null=True)
survey = models.TextField(blank=True, null=True)
kataster_status = models.TextField(blank=True, null=True)
underground_centre_line = models.TextField(blank=True, null=True)
notes = models.TextField(blank=True, null=True)
length = models.CharField(max_length=100, blank=True, null=True)
depth = models.CharField(max_length=100, blank=True, null=True)
extent = models.CharField(max_length=100, blank=True, null=True)
survex_file = models.CharField(max_length=100, blank=True, null=True)
description_file = models.CharField(max_length=200, blank=True, null=True)
url = models.CharField(max_length=200, blank=True, null=True)
filename = models.CharField(max_length=200)
class Meta:
@ -135,19 +107,20 @@ class CoreCave(models.Model):
class CoreCaveArea(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
cave_id = models.IntegerField()
area = models.ForeignKey(CoreArea)
cave = models.ForeignKey(CoreCave, models.DO_NOTHING)
area = models.ForeignKey(CoreArea, models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_cave_area'
unique_together = (('cave', 'area'),)
class CoreCaveandentrance(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
cave_id = models.IntegerField()
entrance_id = models.IntegerField()
entrance_letter = models.CharField(max_length=20, blank=True)
entrance_letter = models.CharField(max_length=20, blank=True, null=True)
cave = models.ForeignKey(CoreCave, models.DO_NOTHING)
entrance = models.ForeignKey('CoreEntrance', models.DO_NOTHING)
class Meta:
managed = False
@ -159,8 +132,8 @@ class CoreCavedescription(models.Model):
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
short_name = models.CharField(unique=True, max_length=50)
long_name = models.CharField(max_length=200, blank=True)
description = models.TextField(blank=True)
long_name = models.CharField(max_length=200, blank=True, null=True)
description = models.TextField(blank=True, null=True)
class Meta:
managed = False
@ -169,39 +142,42 @@ class CoreCavedescription(models.Model):
class CoreCavedescriptionLinkedEntrances(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
cavedescription_id = models.IntegerField()
entrance = models.ForeignKey('CoreEntrance')
cavedescription = models.ForeignKey(CoreCavedescription, models.DO_NOTHING)
entrance = models.ForeignKey('CoreEntrance', models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_cavedescription_linked_entrances'
unique_together = (('cavedescription', 'entrance'),)
class CoreCavedescriptionLinkedQms(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
cavedescription_id = models.IntegerField()
qm_id = models.IntegerField()
cavedescription = models.ForeignKey(CoreCavedescription, models.DO_NOTHING)
qm = models.ForeignKey('CoreQm', models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_cavedescription_linked_qms'
unique_together = (('cavedescription', 'qm'),)
class CoreCavedescriptionLinkedSubcaves(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
cavedescription_id = models.IntegerField()
newsubcave_id = models.IntegerField()
cavedescription = models.ForeignKey(CoreCavedescription, models.DO_NOTHING)
newsubcave = models.ForeignKey('CoreNewsubcave', models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_cavedescription_linked_subcaves'
unique_together = (('cavedescription', 'newsubcave'),)
class CoreCaveslug(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
cave_id = models.IntegerField()
slug = models.CharField(unique=True, max_length=50)
primary = models.BooleanField()
cave = models.ForeignKey(CoreCave, models.DO_NOTHING)
class Meta:
managed = False
@ -213,8 +189,8 @@ class CoreDataissue(models.Model):
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
date = models.DateTimeField()
parser = models.CharField(max_length=50, blank=True)
message = models.CharField(max_length=400, blank=True)
parser = models.CharField(max_length=50, blank=True, null=True)
message = models.CharField(max_length=400, blank=True, null=True)
class Meta:
managed = False
@ -225,29 +201,29 @@ class CoreEntrance(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
name = models.CharField(max_length=100, blank=True)
entrance_description = models.TextField(blank=True)
explorers = models.TextField(blank=True)
map_description = models.TextField(blank=True)
location_description = models.TextField(blank=True)
approach = models.TextField(blank=True)
underground_description = models.TextField(blank=True)
photo = models.TextField(blank=True)
name = models.CharField(max_length=100, blank=True, null=True)
entrance_description = models.TextField(blank=True, null=True)
explorers = models.TextField(blank=True, null=True)
map_description = models.TextField(blank=True, null=True)
location_description = models.TextField(blank=True, null=True)
approach = models.TextField(blank=True, null=True)
underground_description = models.TextField(blank=True, null=True)
photo = models.TextField(blank=True, null=True)
marking = models.CharField(max_length=2)
marking_comment = models.TextField(blank=True)
findability = models.CharField(max_length=1, blank=True)
findability_description = models.TextField(blank=True)
alt = models.TextField(blank=True)
northing = models.TextField(blank=True)
easting = models.TextField(blank=True)
tag_station = models.TextField(blank=True)
exact_station = models.TextField(blank=True)
other_station = models.TextField(blank=True)
other_description = models.TextField(blank=True)
bearings = models.TextField(blank=True)
url = models.CharField(max_length=200, blank=True)
marking_comment = models.TextField(blank=True, null=True)
findability = models.CharField(max_length=1, blank=True, null=True)
findability_description = models.TextField(blank=True, null=True)
alt = models.TextField(blank=True, null=True)
northing = models.TextField(blank=True, null=True)
easting = models.TextField(blank=True, null=True)
tag_station = models.TextField(blank=True, null=True)
exact_station = models.TextField(blank=True, null=True)
other_station = models.TextField(blank=True, null=True)
other_description = models.TextField(blank=True, null=True)
bearings = models.TextField(blank=True, null=True)
url = models.CharField(max_length=200, blank=True, null=True)
filename = models.CharField(max_length=200)
cached_primary_slug = models.CharField(max_length=200, blank=True)
cached_primary_slug = models.CharField(max_length=200, blank=True, null=True)
class Meta:
managed = False
@ -256,9 +232,9 @@ class CoreEntrance(models.Model):
class CoreEntranceslug(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
entrance_id = models.IntegerField()
slug = models.CharField(unique=True, max_length=50)
primary = models.BooleanField()
entrance = models.ForeignKey(CoreEntrance, models.DO_NOTHING)
class Meta:
managed = False
@ -281,8 +257,8 @@ class CoreExpeditionday(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
expedition = models.ForeignKey(CoreExpedition)
date = models.DateField()
expedition = models.ForeignKey(CoreExpedition, models.DO_NOTHING)
class Meta:
managed = False
@ -294,15 +270,15 @@ class CoreLogbookentry(models.Model):
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
date = models.DateField()
expeditionday = models.ForeignKey(CoreExpeditionday, blank=True, null=True)
expedition = models.ForeignKey(CoreExpedition, blank=True, null=True)
title = models.CharField(max_length=200)
cave_slug = models.CharField(max_length=50)
place = models.CharField(max_length=100, blank=True)
cave_slug = models.CharField(max_length=50, blank=True, null=True)
place = models.CharField(max_length=100, blank=True, null=True)
text = models.TextField()
slug = models.CharField(max_length=50)
filename = models.CharField(max_length=200, blank=True)
entry_type = models.CharField(max_length=50, blank=True)
filename = models.CharField(max_length=200, blank=True, null=True)
entry_type = models.CharField(max_length=50, blank=True, null=True)
expedition = models.ForeignKey(CoreExpedition, models.DO_NOTHING, blank=True, null=True)
expeditionday = models.ForeignKey(CoreExpeditionday, models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
@ -325,7 +301,7 @@ class CoreOthercavename(models.Model):
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
name = models.CharField(max_length=160)
cave = models.ForeignKey(CoreCave)
cave = models.ForeignKey(CoreCave, models.DO_NOTHING)
class Meta:
managed = False
@ -340,10 +316,10 @@ class CorePerson(models.Model):
last_name = models.CharField(max_length=100)
fullname = models.CharField(max_length=200)
is_vfho = models.BooleanField()
mug_shot = models.CharField(max_length=100, blank=True)
blurb = models.TextField(blank=True)
mug_shot = models.CharField(max_length=100, blank=True, null=True)
blurb = models.TextField(blank=True, null=True)
orderref = models.CharField(max_length=200)
user_id = models.IntegerField(unique=True, blank=True, null=True)
user = models.ForeignKey(AuthUser, models.DO_NOTHING, unique=True, blank=True, null=True)
class Meta:
managed = False
@ -354,12 +330,12 @@ class CorePersonexpedition(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
expedition = models.ForeignKey(CoreExpedition)
person = models.ForeignKey(CorePerson)
slugfield = models.CharField(max_length=50, blank=True)
slugfield = models.CharField(max_length=50, blank=True, null=True)
is_guest = models.BooleanField()
expo_committee_position = models.CharField(max_length=200, blank=True)
nickname = models.CharField(max_length=100, blank=True)
expo_committee_position = models.CharField(max_length=200, blank=True, null=True)
nickname = models.CharField(max_length=100, blank=True, null=True)
expedition = models.ForeignKey(CoreExpedition, models.DO_NOTHING)
person = models.ForeignKey(CorePerson, models.DO_NOTHING)
class Meta:
managed = False
@ -370,10 +346,10 @@ class CorePersontrip(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
personexpedition = models.ForeignKey(CorePersonexpedition, blank=True, null=True)
time_underground = models.FloatField()
logbook_entry = models.ForeignKey(CoreLogbookentry)
is_logbook_entry_author = models.BooleanField()
logbook_entry = models.ForeignKey(CoreLogbookentry, models.DO_NOTHING)
personexpedition = models.ForeignKey(CorePersonexpedition, models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
@ -384,17 +360,17 @@ class CoreQm(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
new_since_parsing = models.BooleanField()
non_public = models.BooleanField()
found_by = models.ForeignKey(CoreLogbookentry, blank=True, null=True)
ticked_off_by = models.ForeignKey(CoreLogbookentry, blank=True, null=True)
number = models.IntegerField()
grade = models.CharField(max_length=1)
location_description = models.TextField()
nearest_station_description = models.CharField(max_length=400, blank=True)
nearest_station_name = models.CharField(max_length=200, blank=True)
nearest_station = models.ForeignKey('CoreSurvexstation', blank=True, null=True)
area = models.CharField(max_length=100, blank=True)
completion_description = models.TextField(blank=True)
comment = models.TextField(blank=True)
nearest_station_description = models.CharField(max_length=400, blank=True, null=True)
nearest_station_name = models.CharField(max_length=200, blank=True, null=True)
area = models.CharField(max_length=100, blank=True, null=True)
completion_description = models.TextField(blank=True, null=True)
comment = models.TextField(blank=True, null=True)
found_by = models.ForeignKey(CoreLogbookentry, models.DO_NOTHING, blank=True, null=True)
nearest_station = models.ForeignKey('CoreSurvexstation', models.DO_NOTHING, blank=True, null=True)
ticked_off_by = models.ForeignKey(CoreLogbookentry, models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
@ -404,17 +380,18 @@ class CoreQm(models.Model):
class CoreSurvexblock(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(max_length=100)
parent = models.ForeignKey('self', blank=True, null=True)
text = models.TextField()
cave_id = models.IntegerField(blank=True, null=True)
date = models.DateField(blank=True, null=True)
expeditionday_id = models.IntegerField(blank=True, null=True)
expedition_id = models.IntegerField(blank=True, null=True)
survexfile = models.ForeignKey('CoreSurvexfile', blank=True, null=True)
begin_char = models.IntegerField()
survexpath = models.CharField(max_length=200)
survexscansfolder_id = models.IntegerField(blank=True, null=True)
totalleglength = models.FloatField()
legsall = models.IntegerField(blank=True, null=True)
legssplay = models.IntegerField(blank=True, null=True)
legssurfc = models.IntegerField(blank=True, null=True)
totalleglength = models.FloatField(blank=True, null=True)
cave = models.ForeignKey(CoreCave, models.DO_NOTHING, blank=True, null=True)
expedition = models.ForeignKey(CoreExpedition, models.DO_NOTHING, blank=True, null=True)
expeditionday = models.ForeignKey(CoreExpeditionday, models.DO_NOTHING, blank=True, null=True)
survexfile = models.ForeignKey('CoreSurvexfile', models.DO_NOTHING, blank=True, null=True)
survexscansfolder = models.ForeignKey('CoreSurvexscansfolder', models.DO_NOTHING, blank=True, null=True)
parent = models.ForeignKey('self', models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
@ -424,8 +401,8 @@ class CoreSurvexblock(models.Model):
class CoreSurvexdirectory(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
path = models.CharField(max_length=200)
cave_id = models.IntegerField(blank=True, null=True)
primarysurvexfile_id = models.IntegerField(blank=True, null=True)
cave = models.ForeignKey(CoreCave, models.DO_NOTHING, blank=True, null=True)
primarysurvexfile = models.ForeignKey('CoreSurvexfile', models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
@ -434,51 +411,15 @@ class CoreSurvexdirectory(models.Model):
class CoreSurvexequate(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
cave_id = models.IntegerField(blank=True, null=True)
cave = models.ForeignKey(CoreCave, models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
db_table = 'core_survexequate'
class CoreSurvexfile(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
path = models.CharField(max_length=200)
survexdirectory = models.ForeignKey(CoreSurvexdirectory, blank=True, null=True)
cave_id = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'core_survexfile'
class CoreSurvexleg(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
block_id = models.IntegerField()
stationfrom = models.ForeignKey('CoreSurvexstation')
stationto = models.ForeignKey('CoreSurvexstation')
tape = models.FloatField()
compass = models.FloatField()
clino = models.FloatField()
class Meta:
managed = False
db_table = 'core_survexleg'
class CoreSurvexpersonrole(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
survexblock = models.ForeignKey(CoreSurvexblock)
nrole = models.CharField(max_length=200, blank=True)
personname = models.CharField(max_length=100)
person_id = models.IntegerField(blank=True, null=True)
personexpedition_id = models.IntegerField(blank=True, null=True)
persontrip_id = models.IntegerField(blank=True, null=True)
expeditionday_id = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'core_survexpersonrole'
# Unable to inspect table 'core_survexfile'
# The error was: list index out of range
# Unable to inspect table 'core_survexpersonrole'
# The error was: list index out of range
class CoreSurvexscansfolder(models.Model):
@ -495,36 +436,15 @@ class CoreSurvexscansingle(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
ffile = models.CharField(max_length=200)
name = models.CharField(max_length=200)
survexscansfolder = models.ForeignKey(CoreSurvexscansfolder, blank=True, null=True)
survexscansfolder = models.ForeignKey(CoreSurvexscansfolder, models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
db_table = 'core_survexscansingle'
class CoreSurvexstation(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(max_length=100)
block_id = models.IntegerField()
equate = models.ForeignKey(CoreSurvexequate, blank=True, null=True)
x = models.FloatField(blank=True, null=True)
y = models.FloatField(blank=True, null=True)
z = models.FloatField(blank=True, null=True)
class Meta:
managed = False
db_table = 'core_survexstation'
class CoreSurvextitle(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
survexblock = models.ForeignKey(CoreSurvexblock)
title = models.CharField(max_length=200)
cave_id = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'core_survextitle'
# Unable to inspect table 'core_survexstation'
# The error was: list index out of range
# Unable to inspect table 'core_survextitle'
# The error was: list index out of range
class CoreTunnelfile(models.Model):
@ -538,82 +458,65 @@ class CoreTunnelfile(models.Model):
class Meta:
managed = False
db_table = 'core_tunnelfile'
class CoreTunnelfileSurvexblocks(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
tunnelfile_id = models.IntegerField()
survexblock = models.ForeignKey(CoreSurvexblock)
class Meta:
managed = False
db_table = 'core_tunnelfile_survexblocks'
# Unable to inspect table 'core_tunnelfile_survexblocks'
# The error was: list index out of range
class CoreTunnelfileSurvexscans(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
tunnelfile_id = models.IntegerField()
survexscansingle = models.ForeignKey(CoreSurvexscansingle)
tunnelfile = models.ForeignKey(CoreTunnelfile, models.DO_NOTHING)
survexscansingle = models.ForeignKey(CoreSurvexscansingle, models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_tunnelfile_survexscans'
unique_together = (('tunnelfile', 'survexscansingle'),)
class CoreTunnelfileSurvexscansfolders(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
tunnelfile_id = models.IntegerField()
survexscansfolder = models.ForeignKey(CoreSurvexscansfolder)
tunnelfile = models.ForeignKey(CoreTunnelfile, models.DO_NOTHING)
survexscansfolder = models.ForeignKey(CoreSurvexscansfolder, models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_tunnelfile_survexscansfolders'
unique_together = (('tunnelfile', 'survexscansfolder'),)
class CoreTunnelfileSurvextitles(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
tunnelfile_id = models.IntegerField()
survextitle = models.ForeignKey(CoreSurvextitle)
tunnelfile = models.ForeignKey(CoreTunnelfile, models.DO_NOTHING)
survextitle = models.ForeignKey('CoreSurvextitle', models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_tunnelfile_survextitles'
unique_together = (('tunnelfile', 'survextitle'),)
class CoreTunnelfileTunnelcontains(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
from_tunnelfile_id = models.IntegerField()
to_tunnelfile_id = models.IntegerField()
from_tunnelfile = models.ForeignKey(CoreTunnelfile, models.DO_NOTHING)
to_tunnelfile = models.ForeignKey(CoreTunnelfile, models.DO_NOTHING)
class Meta:
managed = False
db_table = 'core_tunnelfile_tunnelcontains'
class DjangoAdminLog(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
action_time = models.DateTimeField()
object_id = models.TextField(blank=True)
object_repr = models.CharField(max_length=200)
action_flag = models.PositiveSmallIntegerField()
change_message = models.TextField()
content_type = models.ForeignKey('DjangoContentType', blank=True, null=True)
user = models.ForeignKey(AuthUser)
class Meta:
managed = False
db_table = 'django_admin_log'
unique_together = (('from_tunnelfile', 'to_tunnelfile'),)
# Unable to inspect table 'django_admin_log'
# The error was: list index out of range
class DjangoContentType(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(max_length=100)
app_label = models.CharField(max_length=100)
model = models.CharField(max_length=100)
class Meta:
managed = False
db_table = 'django_content_type'
unique_together = (('app_label', 'model'),)
class DjangoMigrations(models.Model):
@ -627,17 +530,6 @@ class DjangoMigrations(models.Model):
db_table = 'django_migrations'
class DjangoRedirect(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
site = models.ForeignKey('DjangoSite')
old_path = models.CharField(max_length=200)
new_path = models.CharField(max_length=200)
class Meta:
managed = False
db_table = 'django_redirect'
class DjangoSession(models.Model):
session_key = models.CharField(primary_key=True, max_length=40)
session_data = models.TextField()
@ -648,20 +540,10 @@ class DjangoSession(models.Model):
db_table = 'django_session'
class DjangoSite(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
domain = models.CharField(max_length=100)
name = models.CharField(max_length=50)
class Meta:
managed = False
db_table = 'django_site'
class FlatpagesEntranceredirect(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
originalurl = models.CharField(db_column='originalURL', max_length=200) # Field name made lowercase.
entrance = models.ForeignKey(CoreEntrance)
entrance = models.ForeignKey(CoreEntrance, models.DO_NOTHING)
class Meta:
managed = False
@ -681,7 +563,7 @@ class FlatpagesRedirect(models.Model):
class RegistrationRegistrationprofile(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
activation_key = models.CharField(max_length=40)
user = models.ForeignKey(AuthUser, unique=True)
user = models.ForeignKey(AuthUser, models.DO_NOTHING, unique=True)
class Meta:
managed = False