diff --git a/seminar/management/commands/importschools.py b/seminar/management/commands/importschools.py deleted file mode 100644 index ef761179..00000000 --- a/seminar/management/commands/importschools.py +++ /dev/null @@ -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, )) - - - - - - - - - - - - - - - - - diff --git a/seminar/old_tests.py b/seminar/old_tests.py deleted file mode 100644 index a5e74f01..00000000 --- a/seminar/old_tests.py +++ /dev/null @@ -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 -