Web M&M
https://mam.matfyz.cz
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.2 KiB
137 lines
5.2 KiB
10 years ago
|
# Poznámky k exportu a reimportu MaM dat #
|
||
|
|
||
|
### Dakos Oracle dump - postup ###
|
||
|
|
||
|
Na lib. stroji na KAMu spustit:
|
||
|
|
||
|
ORACLE_HOME=/nfs/nikam/sw/oracle-10.2/ora_home_10.2/ LC_ALL=C AESOP_PASSWD=<password-of-MAMOPER> perl oracle_dump
|
||
|
|
||
|
Dumpne vsechny tabulky krom SYS.*
|
||
|
|
||
|
from seminar.dksdump.helpers import read_all_tables, matchrows, onerow
|
||
|
ts = read_all_tables('seminar/dksdump/oracle_dks_dump/')
|
||
|
|
||
|
Načte a vypíše všechny tabulky. Yay!
|
||
|
Pozor! V základu mají všechny podivný 2. řádek s bordelem! (čísla 3, 12, ...)
|
||
|
|
||
|
Import do SQLite3 pomocí `.mode tabs` a `.import DKSROOT.V_SKOLY.csv DKSROOT_V_SKOLY`.
|
||
|
|
||
|
### Postup pomocí sqlite3 s Dakos daty ###
|
||
|
|
||
|
`MM_RESENI`, `MM_RESENI#BODY`:
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
### Konkrétní programy pro data (starší metoda) ###
|
||
|
|
||
|
Používají ovvpfile pro načtení souborů.
|
||
|
|
||
|
#### DAKOS ID pro nektere skoly ####
|
||
|
|
||
|
for i in sk[1:]:
|
||
|
f = Skola.objects.filter(nazev=i['NAZEV'], izo=i['IZO']);
|
||
|
if len(f)==1:
|
||
|
f[0].dakos_id = i['ID']; f[0].save()
|
||
|
|
||
|
|
||
|
#### Resitel ####
|
||
|
|
||
|
for i in ts['BW-resitelia-export']:
|
||
|
Resitel.objects.create(jmeno=i['jmeno'], prijmeni=i['prijmeni'], pohlavi_muz=(i['pohlavi']==u'mu\u017e'),
|
||
|
rok_maturity=int(i['rok_maturity']), email=i['email'], telefon=i['telefon'], zasilat=Resitel.ZASILAT_DOMU,
|
||
|
ulice=i['ulica']+' '+i['cislo'], mesto=i['obec'], psc=i['psc'], stat=i['stat'], dakos_id=i['rid'],
|
||
|
poznamka="{'skola': '%s', 'dakos_skola_id': '%s'}\n" % (i['skola'], i['dakos_skola_id'], ))
|
||
|
|
||
|
Doplneni nekterych skol:
|
||
|
|
||
|
ae = ts['Aesop-MaM-export-2014-10-20-mod']
|
||
|
skoly = ts['Aesop-skoly-export-2015-05-14-mod']
|
||
|
for i in ae:
|
||
|
r = Resitel.objects.get(jmeno=i['name'], prijmeni=i['surname']);
|
||
|
izo = i['school'].lstrip('izo:');
|
||
|
aesop_id = [s for s in skoly if izo in repr(s)][0]['id-aesop'];
|
||
|
sch = Skola.objects.get(aesop_id='aesop:'+aesop_id);
|
||
|
r.skola=sch; r.save()
|
||
|
|
||
|
#### Cisla ####
|
||
|
|
||
|
Hlavne ze souboru `archiv/seznam.csv`
|
||
|
Navic nejaka data z DB, ale nic moc
|
||
|
|
||
|
for i in ts['BW-archiv-cisla-copy-mod']: Cislo.objects.create(rocnik=Rocnik.objects.get(rocnik=int(i['rocnik'])), cislo=i['cislo'])
|
||
|
|
||
|
#### Uzivatele ####
|
||
|
|
||
|
for i in ts['MAMOPER.MM_PASSWD']:
|
||
|
if not User.objects.filter(username=i['LOGIN']): User.objects.create_user(i['LOGIN'])
|
||
|
|
||
|
#### Problemy ####
|
||
|
|
||
|
`MM_ZADANIA`:
|
||
|
|
||
|
typtable={'1': Problem.TYP_ULOHA, '2':Problem.TYP_TEMA, '3':Problem.TYP_SERIAL}
|
||
|
for i in ts['MAMOPER.MM_ZADANIA']:
|
||
|
print i
|
||
|
c = Cislo.objects.get(cislo=i['CISLO'] if i['CISLO']!='9' else '1', rocnik__rocnik=int(i['ROCNIK']))
|
||
|
opravovatel = User.objects.get(username=i['OPRAVUJE']) if i['OPRAVUJE'] else None
|
||
|
Problem.objects.create(nazev=i['NAZOV'], typ=typtable[i['TYP']], stav=Problem.STAV_ZADANY, opravovatel=opravovatel,
|
||
|
kod=i['ULOHA'], cislo_zadani=c, body=int(i['MAX_BODY']) if i['MAX_BODY'] else None,
|
||
|
dakos_id='ZAD:%s.%s.%s.%s'%(i['ROCNIK'], i['CISLO'], i['ULOHA'], i['TYP'],))
|
||
|
|
||
|
`MM_DOZ`:
|
||
|
Dekodovani stavu navrhu (MFIO - oblast, Tema, Konfera, Pouzita, Zamitnuta, Doplnit (?))
|
||
|
|
||
|
def dectag(x): return ["MFIOTKPZD"[bi] for bi in range(0, 9) if (int(x) & (1 << bi))]
|
||
|
from django.utils.html import escape
|
||
|
def transdate(s):
|
||
|
if '.' not in s: return None
|
||
|
d,m,r = s.split('.'); return datetime.date(int(r)+2000, int(m), int(d))
|
||
|
for i in ts['MAMOPER.MM_DOZ']:
|
||
|
print i;
|
||
|
tags=dectag(i['ZARADENIE']);
|
||
|
autor = User.objects.get(username=i['ORG']) if i['ORG'] else None;
|
||
|
Problem.objects.create(nazev=i['NAZOV'], typ=Problem.TYP_TEMA if 'T' in tags else Problem.TYP_ULOHA,
|
||
|
stav=Problem.STAV_ZADANY if 'P' in tags else (Problem.STAV_SMAZANY if 'Z' in tags else Problem.STAV_NAVRH),
|
||
|
dakos_id='DOZ:%s'%(i['ID'], ), text_problemu_org=escape(i['ZADANIE']), timestamp=transdate(i['CAS']))
|
||
|
|
||
|
`MM_AZAD`:
|
||
|
|
||
|
def romdec(rom):
|
||
|
if not rom: return 0
|
||
|
if rom[0] == 'X': return 10 + romdec(rom[1:])
|
||
|
if rom[-1] == 'X': return 10 - romdec(rom[:-1])
|
||
|
if rom[0] == 'V': return 5 + romdec(rom[1:])
|
||
|
if rom[-1] == 'V': return 5 - romdec(rom[:-1])
|
||
|
if rom[0] == 'I': return 1 + romdec(rom[1:])
|
||
|
assert False
|
||
|
for i in ts['MAMOPER.MM_AZAD'][1:]:
|
||
|
print i;
|
||
|
tags=dectag(i['ZAMERANIE']);
|
||
|
r = romdec(i['ROC_Z']);
|
||
|
c1 = Cislo.objects.filter(rocnik__rocnik=r, cislo=i['CIS_Z']);
|
||
|
c1 = c1[0] if len(c1) else None;
|
||
|
c2 = Cislo.objects.filter(rocnik__rocnik=r, cislo=i['CIS_V']);
|
||
|
c2 = c2[0] if len(c2) else None;
|
||
|
Problem.objects.create(nazev=i['NAZOV'], typ=Problem.TYP_TEMA if 'T' in tags else Problem.TYP_ULOHA, stav=Problem.STAV_ZADANY,
|
||
|
kod=i['ZADANIE'][1:], cislo_zadani=c1, cislo_reseni=c2, dakos_id='AZAD:%s'%(i['ID'], ),
|
||
|
text_problemu_org=escape(u'Abstrakt:\n'+i['ABSTRAKT']))
|
||
|
for i in ts['MAMOPER.MM_AZAD'][1:]:
|
||
|
print i; tags=dectag(i['ZAMERANIE']); p = Problem.objects.get(dakos_id='AZAD:%s'%(i['ID'], ));
|
||
|
[p.zamereni.add(t) for t in tags if t in 'MFIO']; p.save()
|
||
|
|
||
|
#### Reseni ####
|
||
|
|
||
|
`MM_RIESENIA`:
|
||
|
|
||
|
for i in ts['MAMOPER.MM_RIESENIA']:
|
||
|
tstp = datetime.datetime.fromtimestamp(int(i['DORUCENA']));
|
||
|
print i, tstp;
|
||
|
r = Resitel.objects.get(dakos_id=i['RIESITEL']);
|
||
|
u = Problem.objects.get(dakos_id="ZAD:%s.%s.%s.%s" % (i['ROCNIK'], i['CISLO'], i['ULOHA'], i['TYP'],));
|
||
|
Reseni.objects.create(problem=u, resitel=r, body=int(i['POCET_BODOV'] or '0'),
|
||
|
poznamka='Zdroj: MM_RIESENIA\nForma: %s\n%s' % ({'1':'E', '2':'P'}[i['FORMA']], i['POZNAMKA'], ), timestamp=tstp)
|
||
|
|
||
|
|