Delete old_tests.py import schools.py
This commit is contained in:
parent
d72faeaed3
commit
dea0ef74e6
2 changed files with 0 additions and 219 deletions
|
@ -1,125 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import datetime
|
|
||||||
import os
|
|
||||||
import random
|
|
||||||
#import argparse
|
|
||||||
from optparse import make_option
|
|
||||||
|
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
|
||||||
from django.core.management import call_command
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import transaction
|
|
||||||
import django.contrib.auth
|
|
||||||
from django.utils.encoding import force_unicode
|
|
||||||
|
|
||||||
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni
|
|
||||||
from seminar.testutils import create_test_data
|
|
||||||
from seminar import ovvpfile
|
|
||||||
|
|
||||||
User = django.contrib.auth.get_user_model()
|
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
|
||||||
help = "Import (add / notice changes) schools from a ovvp-format file (skoly.csv)"
|
|
||||||
|
|
||||||
option_list = BaseCommand.option_list + (
|
|
||||||
make_option('-n', '--dry_run', dest='dry_run', default=False,
|
|
||||||
action='store_true', help="No changes to DB."),
|
|
||||||
)
|
|
||||||
# def add_arguments(self, parser):
|
|
||||||
# parser.add_argument('file', nargs='?', type=argparse.FileType('r', encoding='utf8'), default=sys.stdin)
|
|
||||||
# parser.add_argument('-n', '--dry_run', dest='dry_run', default=False,
|
|
||||||
# action='store_true', type=bool, help="No changes to DB.")
|
|
||||||
|
|
||||||
def school_diffs(self, ovvpskola, dbskola):
|
|
||||||
def compare(ovvpcol, dbcol, t=unicode):
|
|
||||||
v1 = t(dbskola.__getattribute__(dbcol))
|
|
||||||
v2 = ovvpskola[ovvpcol]
|
|
||||||
if unicode(v1) != unicode(v2):
|
|
||||||
return "%s: '%s'->'%s', " % (ovvpcol, v1, v2, )
|
|
||||||
return ""
|
|
||||||
|
|
||||||
diff = ""
|
|
||||||
diff += compare('name','nazev')
|
|
||||||
diff += compare('street','ulice')
|
|
||||||
diff += compare('town','mesto')
|
|
||||||
diff += compare('postcode','psc')
|
|
||||||
return diff
|
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
|
||||||
assert len(args) == 1
|
|
||||||
|
|
||||||
filename = args[0]
|
|
||||||
self.stdout.write(
|
|
||||||
'Parsing OVVP/OPMK-format file \'%s\' ...' % (filename, )
|
|
||||||
)
|
|
||||||
with open(filename, "r") as f:
|
|
||||||
o = ovvpfile.parse(f)
|
|
||||||
|
|
||||||
assert o.headers['version'] == '1'
|
|
||||||
self.stdout.write('Read %d schools with columns: %s' % (len(o.rows), o.columns, ))
|
|
||||||
self.stdout.write('Export created: %s' % (o.headers.get('date', 'N/A'), ))
|
|
||||||
assert 'id-aesop' in o.columns
|
|
||||||
|
|
||||||
same = 0
|
|
||||||
modified = 0
|
|
||||||
new = 0
|
|
||||||
|
|
||||||
with transaction.atomic():
|
|
||||||
for skola in o.rows:
|
|
||||||
aesop_id = 'aesop:%s' % (skola['id-aesop'], )
|
|
||||||
found = Skola.objects.filter(aesop_id=aesop_id)
|
|
||||||
assert len(found) <= 1
|
|
||||||
|
|
||||||
if found:
|
|
||||||
fs = found[0]
|
|
||||||
diff = self.school_diffs(skola, fs)
|
|
||||||
if diff:
|
|
||||||
modified += 1
|
|
||||||
self.stdout.write(u"M %11s %s" % (aesop_id, diff, )) # TODO
|
|
||||||
else:
|
|
||||||
same += 1
|
|
||||||
if int(skola['is-SS']) > int(fs.je_ss):
|
|
||||||
fs.je_ss = True
|
|
||||||
fs.save()
|
|
||||||
|
|
||||||
if int(skola['is-ZS']) > int(fs.je_zs):
|
|
||||||
fs.je_zs = True
|
|
||||||
fs.save()
|
|
||||||
|
|
||||||
else:
|
|
||||||
new += 1
|
|
||||||
# Name duplicates?
|
|
||||||
by_name = Skola.objects.filter(nazev=skola['name'], mesto=skola['town'], ulice=skola['street'])
|
|
||||||
if len(by_name) > 0:
|
|
||||||
self.stdout.write(u"W Same [name, street, town] for %s and %s (%s, %s, %s)" % (
|
|
||||||
by_name[0].aesop_id, aesop_id, skola['name'], skola['street'], skola['town'], ))
|
|
||||||
else:
|
|
||||||
self.stdout.write(u"+ %11s %s, %s, %s" % (aesop_id, skola['name'], skola['town'], skola['country'], ))
|
|
||||||
if not options['dry_run']:
|
|
||||||
newskola = Skola.objects.create(
|
|
||||||
aesop_id=aesop_id, nazev=skola['name'], kratky_nazev=skola['name'], izo=skola.get('id-izo', ''),
|
|
||||||
ulice=skola['street'], mesto=skola['town'], psc=skola['postcode'], stat=skola['country'],
|
|
||||||
je_zs=int(skola['is-ZS']), je_ss=int(skola['is-SS']),
|
|
||||||
)
|
|
||||||
|
|
||||||
self.stdout.write("Result: %d same, %d different, %d new schools" % (same, modified, new, ))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import datetime
|
|
||||||
import random
|
|
||||||
import django.contrib.auth
|
|
||||||
from unittest import TestCase
|
|
||||||
from django.test import Client
|
|
||||||
from django.core.urlresolvers import reverse, resolve
|
|
||||||
from django.core.management import call_command
|
|
||||||
|
|
||||||
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Soustredeni, Nastaveni
|
|
||||||
from seminar.testutils import create_test_data
|
|
||||||
from seminar import ovvpfile
|
|
||||||
from seminar import utils
|
|
||||||
|
|
||||||
class SeminarBasicTests(TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
create_test_data(size=2)
|
|
||||||
self.client = Client()
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
call_command('flush', noinput=True, verbosity=0, interactive=False)
|
|
||||||
self.cleint = None
|
|
||||||
|
|
||||||
def test_rocniky(self):
|
|
||||||
r19 = Rocnik.objects.get(rocnik=21)
|
|
||||||
self.assertEqual(r19.roman(), 'XXI')
|
|
||||||
|
|
||||||
def test_render_cislo_e2e(self):
|
|
||||||
cs = Cislo.objects.all()
|
|
||||||
for c in cs[:4]:
|
|
||||||
url = c.verejne_url()
|
|
||||||
r = self.client.get(url)
|
|
||||||
assert r.status_code == 200
|
|
||||||
assert len(r.content) >= 100
|
|
||||||
# TODO: Validate cntent as HTML
|
|
||||||
|
|
||||||
def test_render_problem_e2e(self):
|
|
||||||
ps = Problem.objects.all()
|
|
||||||
for p in ps[:4]:
|
|
||||||
url = p.verejne_url()
|
|
||||||
r = self.client.get(url)
|
|
||||||
assert r.status_code == 200
|
|
||||||
assert len(r.content) >= 100
|
|
||||||
# TODO: Validate cntent as HTML
|
|
||||||
|
|
||||||
def test_export_e2e(self):
|
|
||||||
i_url = '/aesop-export/index.csv'
|
|
||||||
i_r = self.client.get(i_url)
|
|
||||||
assert i_r.status_code == 200
|
|
||||||
ls = i_r.content.strip().split('\n')
|
|
||||||
|
|
||||||
for u in [ls[0], ls[-1]]:
|
|
||||||
ex_r = self.client.get('/aesop-export/' + u)
|
|
||||||
assert ex_r.status_code == 200
|
|
||||||
assert len(ex_r.content) >= 100
|
|
||||||
o = ovvpfile.parse(ex_r.content)
|
|
||||||
assert o.headers['version'] == '1'
|
|
||||||
|
|
||||||
def test_admin_url(self):
|
|
||||||
for m in [Skola, Resitel, Rocnik, Cislo, Problem, Reseni, Nastaveni]:
|
|
||||||
o = m.objects.first()
|
|
||||||
url = o.admin_url()
|
|
||||||
assert url
|
|
||||||
view = resolve(url)
|
|
||||||
assert view
|
|
||||||
|
|
||||||
def test_verejne_url(self):
|
|
||||||
for m in [Rocnik, Cislo, Problem]:
|
|
||||||
p = Problem.objects.first()
|
|
||||||
url = p.verejne_url()
|
|
||||||
assert url
|
|
||||||
view = resolve(url)
|
|
||||||
assert view
|
|
||||||
|
|
||||||
def test_ovvpfile(self):
|
|
||||||
filetext = "H1\ta\nH2\tb\tc\n\nx\ty\tz\n0\t1\t2\n3\t4\t5\n"
|
|
||||||
o = ovvpfile.parse(filetext)
|
|
||||||
assert len(o.headers) == 2
|
|
||||||
assert o.headers['H2'] == 'b\tc'
|
|
||||||
|
|
||||||
assert o.columns == ['x','y','z']
|
|
||||||
assert len(o.rows) == 2
|
|
||||||
assert o.rows[0]['z'] == '2'
|
|
||||||
|
|
||||||
t = o.to_string()
|
|
||||||
assert t == filetext
|
|
||||||
|
|
||||||
def test_roman(self):
|
|
||||||
for i in [0, 1, 23, 2015, 1999, 42, 4, 400, 78, 4321, 8765, 999]:
|
|
||||||
r = utils.roman(i)
|
|
||||||
fr = utils.from_roman(r)
|
|
||||||
assert fr == i
|
|
||||||
|
|
Loading…
Reference in a new issue