From 344c7ff2d6fd877e6f02462760ddd912515cb6ea Mon Sep 17 00:00:00 2001 From: Ile Date: Sat, 21 Oct 2023 22:10:06 +0300 Subject: [PATCH 1/3] Remove code generation tool dia2django It was last time used over 10 years ago so we can maybe just get rid of it. If models.py needs modifications, those can be done by hand. Database diagrams should be able to be generated from models.py or directly from database schema. --- docs/dia2django.py | 194 ---------------------------------------- docs/tietokanta.dia | Bin 3854 -> 0 bytes docs/tietokanta.jpeg | Bin 94492 -> 0 bytes web/manage.py | 1 - web/tupa/dia2django.py | 121 ------------------------- web/tupa/tietokanta.dia | Bin 4425 -> 0 bytes 6 files changed, 316 deletions(-) delete mode 100644 docs/dia2django.py delete mode 100644 docs/tietokanta.dia delete mode 100644 docs/tietokanta.jpeg delete mode 100644 web/tupa/dia2django.py delete mode 100644 web/tupa/tietokanta.dia diff --git a/docs/dia2django.py b/docs/dia2django.py deleted file mode 100644 index 83081aa2..00000000 --- a/docs/dia2django.py +++ /dev/null @@ -1,194 +0,0 @@ -#!/usr/bin/python -# -*- coding: UTF-8 -*- -##Author Igor Támara igor@tamarapatino.org -##Use this little program as you wish, if you -#include it in your work, let others know you -#are using it preserving this note, you have -#the right to make derivative works, Use it -#at your own risk. -#Tested to work on(etch testing 13-08-2007): -# Python 2.4.4 (#2, Jul 17 2007, 11:56:54) -# [GCC 4.1.3 20070629 (prerelease) (Debian 4.1.2-13)] on linux2 -class_prefix="Luotu" -dependclasses=["User","Group" ,"Permission" , "Message"] - -import codecs -import sys -import gzip -from xml.dom.minidom import * -import re - -#Type dictionary translation types SQL -> Django -tsd = {"text":"TextField" , "date":"DateField" , "varchar":"CharField" , "int":"IntegerField" , "float":"FloatField" , "serial":"AutoField" , "boolean":"BooleanField" , "numeric":"FloatField" , "timestamp":"DateTimeField" , "bigint":"IntegerField" , "datetime":"DateTimeField" , "date":"DateField" , "time" : "TimeField" , "bool" : "BooleanField" , "int" : "IntegerField" , "decimal":"FloatField"} - -#convert varchar -> CharField -v2c = re.compile('varchar\((\d+)\)') - -def index(fks,id): - """Looks for the id on fks, fks is an array of arrays, each array has on [1] - the id of the class in a dia diagram. When not present returns None, else - it returns the position of the class with id on fks""" - for i,j in fks.items(): - if fks[i][1]==id: - return i - return None - -def addparentstofks(rels,fks): - """Gets a list of relations, between parents and sons and a dict of - clases named in dia, and modifies the fks to add the parent as fk to get - order on the output of classes and replaces the base class of the son, to - put the class parent name. - """ - for j in rels : - son=index(fks,j[1]) - parent=index(fks,j[0]) - fks[son][2]=fks[son][2].replace("models.Model",parent) - if parent not in fks[son][0]: - fks[son][0].append(parent) - - -def dia2django(archivo): - f=codecs.open(archivo,"rb") - #dia files are gzipped - data = gzip.GzipFile(fileobj=f).read() - ppal=parseString(data) - #diagram -> layer -> object -> UML - Class -> name, (attribs : composite -> name,type) - datos=ppal.getElementsByTagName("dia:diagram")[0].getElementsByTagName("dia:layer")[0].getElementsByTagName("dia:object") - clases={} - herit=[] - imports=u"" - for i in datos: - #Look for the classes - if i.getAttribute("type")=="UML - Class": - myid=i.getAttribute("id") - for j in i.childNodes: - if j.nodeType==Node.ELEMENT_NODE and j.hasAttributes(): - if j.getAttribute("name")=="name": - actclas=j.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - myname= "class "+class_prefix+"%s(models.Model) :\n" % actclas - clases[actclas]=[[],myid,myname,0] - if j.getAttribute("name")=="attributes": - for l in j.getElementsByTagName("dia:composite") : - if l.getAttribute("type")=="umlattribute": - #Look for the attribute name and type - for k in l.getElementsByTagName("dia:attribute") : - if k.getAttribute("name")=="name": - nc = k.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - elif k.getAttribute("name")=="type": - tc = k.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - elif k.getAttribute("name")=="value": - val = k.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - if val=='##': - val='' - elif k.getAttribute("name")=="visibility" and k.getElementsByTagName("dia:enum")[0].getAttribute("val")=="2": - if tc.replace(" ","").lower().startswith("manytomanyfield("): - #If we find a class not in our model that is marked as being to another model - newc=tc.replace(" ","")[16:-1] - if dependclasses.count(newc)==0: - dependclasses.append(newc) - if tc.replace(" ","").lower().startswith("foreignkey("): - #If we find a class not in our model that is marked as being to another model - newc=tc.replace(" ","")[11:-1] - if dependclasses.count(newc)==0: - dependclasses.append(newc) - - #Mapping SQL types to Django - varch=v2c.search(tc) - if tc.replace(" ","").startswith("ManyToManyField(") : - myfor=tc.replace(" ","")[16:-1] - if actclas==myfor: - #In case of a recursive type, we use 'self' - tc=tc.replace(myfor,"'self'") - elif clases[actclas][0].count(myfor)==0 : - #Adding related class - if myfor not in dependclasses: - #In case we are using Auth classes or external via protected dia visibility - clases[actclas][0].append(myfor) - tc="ManyToManyField" #"models."+tc[:16] + tc[16:] - if len(val)>0: - tc=tc.replace(")",","+val+")") - elif tc.find("Field")!=-1 : - if tc.count("()")>0 and len(val)>0: - tc="models.%s" % tc.replace(")",","+val+")") - else : - tc="models.%s(%s)" %(tc ,val) - elif tc.replace(" ","").startswith("ForeignKey(") : - myfor=tc.replace(" ","")[11:-1] - if actclas==myfor: - #In case of a recursive type, we use 'self' - tc=tc.replace(myfor,"'self'") - elif clases[actclas][0].count(myfor)==0 : - #Adding foreign classes - if myfor not in dependclasses: - #In case we are using Auth classes - clases[actclas][0].append(myfor) - tc="ForeignKey" #"models."+tc[:11] + tc[11:] - if len(val)>0: - tc=tc.replace(")",","+val+")") - elif varch==None : - tc="models."+tsd[tc.strip().lower()]+"("+val+")" - else : - tc="models.CharField(maxlength="+varch.group(1)+")" - if len(val)>0 : - tc=tc.replace(")",", "+val+" )") - if not (nc=="id" and tc=="AutoField()"): - if not tc=="ForeignKey" and not tc=="ManyToManyField": - clases[actclas][2]=clases[actclas][2]+(" %s = %s\n" % (nc,tc)) - elif i.getAttribute("type")=="UML - Generalization": - mycons=['A','A'] - a=i.getElementsByTagName("dia:connection") - for j in a: - if len(j.getAttribute("to")) : mycons[int(j.getAttribute("handle"))]=j.getAttribute("to") - print mycons - if not 'A' in mycons : herit.append(mycons) - elif i.getAttribute("type")=="UML - SmallPackage": - a=i.getElementsByTagName("dia:string") - for j in a: - if len(j.childNodes[0].data[1:-1]): - imports+=u"from %s.models import *" % j.childNodes[0].data[1:-1] - - addparentstofks(herit,clases) - #Ordering the appearance of classes - #First we make a list of the classes each classs is related to. - ordered=[] - for j,k in clases.iteritems(): - #k[2]=k[2]+"\n def __unicode__(self):\n return u\"\"\n" - for fk in k[0] : - if fk not in dependclasses: - clases[fk][3]+=1 - ordered.append([j]+k) - - i=0 - while i!;1XB3t$wy^@QrybV0Kp<4Q`}p{a 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

MB_Pc`L_o^>dj2uhae&KPH80OH+VmranlqD7 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

O<#F8w$Z9~RQLILD3KI0ER6D-= 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 n@5_G&Wi_AY diff --git a/web/manage.py b/web/manage.py index 8cabc9a7..c5c9dedc 100755 --- a/web/manage.py +++ b/web/manage.py @@ -2,7 +2,6 @@ import sys print sys.path -from tupa.dia2django import luoMallienRungot from django.core.management import execute_manager try: diff --git a/web/tupa/dia2django.py b/web/tupa/dia2django.py deleted file mode 100644 index 1da581cd..00000000 --- a/web/tupa/dia2django.py +++ /dev/null @@ -1,121 +0,0 @@ -# encoding: utf-8 -# KiPa(KisaPalvelu), tuloslaskentajärjestelmä partiotaitokilpailuihin -# Copyright (C) 2010 Espoon Partiotuki ry. ept@partio.fi - - -import codecs -import gzip -import xml.dom.minidom -import re -import sys - -class Atribuutti: - nimi = "" - tyyppi = "" - arvo = "" - -class Luokka: - nimi = "" - atribuutit=[] - -class Kaavio: - luokat=[] - -def haeNimi( luokalle) : - nimi = "" - for c in luokalle.childNodes: - if c.nodeType==xml.dom.minidom.Node.ELEMENT_NODE and c.hasAttributes(): - if c.getAttribute("name")=="name": - nimi= c.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - return nimi - -def haeAtribuutit( luokalle ) : - atribuutit=[] - for c in luokalle.childNodes: - if c.nodeType==xml.dom.minidom.Node.ELEMENT_NODE and c.hasAttributes(): - if c.getAttribute("name")=="attributes": - for l in c.getElementsByTagName("dia:composite") : - if l.getAttribute("type")=="umlattribute": - atr=Atribuutti() - #Look for the attribute name and type - for k in l.getElementsByTagName("dia:attribute") : - if k.getAttribute("name")=="name": - atr.nimi = k.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - elif k.getAttribute("name")=="type": - atr.tyyppi = k.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - elif k.getAttribute("name")=="value": - atr.arvo = k.getElementsByTagName("dia:string")[0].childNodes[0].data[1:-1] - atribuutit.append(atr) - return atribuutit - -def haeLuokat(objekteista): - luokat=[] - for o in objekteista: - if o.getAttribute("type")=="UML - Class": - luokka=Luokka() - luokka.nimi=haeNimi( o ) - luokka.atribuutit= haeAtribuutit(o) - luokat.append(luokka) - return luokat - -dictSqlDjango= {"text":"TextField" , "date":"DateField" , "varchar":"CharField" , "int":"IntegerField" , "float":"FloatField" , "serial":"AutoField" , "boolean":"BooleanField" , "numeric":"FloatField" , "timestamp":"DateTimeField" , "bigint":"IntegerField" , "datetime":"DateTimeField" , "date":"DateField" , "time" : "TimeField" , "bool" : "BooleanField" , "int" : "IntegerField" , "decimal":"DecimalField" } - -varcharRE= re.compile('varchar\((\d+)\)') - -def haeLuokanRunko(luokka,rivin_alku) : - runko = "\n" - for a in luokka.atribuutit: - varchar=varcharRE.search(a.tyyppi) - tyyppi="" - - if a.tyyppi.strip(" ") in dictSqlDjango.keys() : - tyyppi = dictSqlDjango[a.tyyppi.strip()]+ "()" - else: - tyyppi = a.tyyppi - if varchar: - tyyppi = "CharField(max_length="+varchar.group(1)+")" - if len(a.arvo)>0 : - if not re.search(".*\(\)",tyyppi) : - tyyppi = tyyppi.replace(")",", "+a.arvo+" )") - else : - tyyppi = tyyppi.replace(")",a.arvo+" )") - runko += rivin_alku + a.nimi + " = models."+ tyyppi + "\n" - return runko - - -def korvaaLuokanRunko(koodi,luokka): - sisennys_haku = re.search('.*?(?=#gen_dia_class ' + luokka.nimi +'\n)',koodi) - sisennys="" - if sisennys_haku: - sisennys=len(sisennys_haku.group(0)) * " " - runko=haeLuokanRunko(luokka,sisennys) - return re.sub(ur'(?s)(?<=#gen_dia_class '+ luokka.nimi +'\n).*?#end_dia_class', - runko+"\n"+sisennys +r"#end_dia_class",koodi) - -def luoMallienRungot(kaavion_nimi,koodin_nimi): - source=open( koodin_nimi , "r" ) - koodi=source.read() - koodi=unicode(koodi,"utf-8") - source.close() - - f=codecs.open(kaavion_nimi,"rb") - data = gzip.GzipFile(fileobj=f).read() - dataObjectModel =xml.dom.minidom.parseString(data) - objektit=dataObjectModel.getElementsByTagName("dia:diagram")[0].getElementsByTagName("dia:layer")[0].getElementsByTagName("dia:object") - - for l in haeLuokat(objektit): - koodi= korvaaLuokanRunko(koodi,l) - source=open( koodin_nimi,"w" ) - source.write( koodi.encode("utf-8")) - - -if __name__ == '__main__': - if len(sys.argv) == 3: - luoMallienRungot(sys.argv[1],sys.argv[2]) - else : - print sys.argv[0] + ' - Generates bodies of django data models to python sources. \n' - print ' bodies to be generated have to be tagged in source with comments: ' - print ' #gen_dia_class CLASSNAME' - print ' #end_dia_class \n' - print " Use:\n "+sys.argv[0]+" diagram.dia source.py\n\n" - diff --git a/web/tupa/tietokanta.dia b/web/tupa/tietokanta.dia deleted file mode 100644 index c002b72b37a0090c87fea12d7394f2d5637b1677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4425 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 From 5034852b04d2502adf3c38043dbb4f4aadec5ab2 Mon Sep 17 00:00:00 2001 From: Ile Date: Sat, 21 Oct 2023 22:49:08 +0300 Subject: [PATCH 2/3] Remove code generation marker comments --- web/tupa/models.py | 55 ---------------------------------------------- 1 file changed, 55 deletions(-) diff --git a/web/tupa/models.py b/web/tupa/models.py index 44c12895..ef930ee3 100644 --- a/web/tupa/models.py +++ b/web/tupa/models.py @@ -19,28 +19,18 @@ import sys class Kipa(models.Model): - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Kipa - versio = models.IntegerField() - #end_dia_class class Meta: db_table = "versio" class Kisa(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Kisa - nimi = models.CharField(max_length=255) aika = models.CharField(max_length=255, blank=True, null=True ) paikka = models.CharField(max_length=255, blank=True ) tunnistus = models.BooleanField() - #end_dia_class def __unicode__(self) : return self.nimi @@ -49,10 +39,6 @@ class Meta: db_table = u"kipa_kisa" class Sarja(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Sarja - nimi = models.CharField(max_length=255) vartion_maksimikoko = models.IntegerField(blank=True, null=True, default=0 ) vartion_minimikoko = models.IntegerField(blank=True, null=True,default=0 ) @@ -61,7 +47,6 @@ class Sarja(models.Model) : tasapiste_teht2 = models.IntegerField(blank=True, null=True ) tasapiste_teht3 = models.IntegerField(blank=True, null=True ) - #end_dia_class def __unicode__(self) : return self.kisa.nimi+"."+self.nimi @@ -112,10 +97,6 @@ class Meta: db_table = u"kipa_sarja" class Vartio(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Vartio - nro = models.IntegerField() nimi = models.CharField(max_length=255) sarja = models.ForeignKey(Sarja) @@ -127,7 +108,6 @@ class Vartio(models.Model) : keskeyttanyt = models.IntegerField(blank=True, null=True ) ulkopuolella = models.IntegerField(blank=True , null=True ) - #end_dia_class def save(self,*args,**kwargs) : # Tulokset uusiksi tallennuksen yhteydessä self.sarja.tuloksetUusiksi() @@ -146,10 +126,6 @@ class Meta: db_table = u"kipa_vartio" class Henkilo(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Henkilo - nimi = models.CharField(max_length=255) syntymavuosi = models.IntegerField(blank=True , null=True ) lippukunta = models.CharField(max_length=255, blank=True, null=True ) @@ -157,7 +133,6 @@ class Henkilo(models.Model) : puhelin_nro = models.CharField(max_length=15, blank=True, null=True ) homma = models.CharField(max_length=255, blank=True, null=True ) - #end_dia_class def __unicode__(self) : return self.nimi class Meta: @@ -165,10 +140,6 @@ class Meta: db_table = u"kipa_henkilo" class Tehtava(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Tehtava - nimi = models.CharField(max_length=255) lyhenne = models.CharField(max_length=255) tehtavaryhma = models.CharField(max_length=255, blank=True ) @@ -181,7 +152,6 @@ class Tehtava(models.Model) : maksimipisteet = models.CharField(max_length=255) svirhe = models.BooleanField() - #end_dia_class def mukanaOlevatVartiot(self): """ Palauttaa listan Vartioista jotka ovat mukana tehtavan interpoloinneissa. @@ -237,16 +207,11 @@ class OsaTehtava(models.Model) : ("ka","kokonaisaika"), ("ala","alkuaika ja loppuaika"), ("vk","vapaa kaava"), ) - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class OsaTehtava - nimi = models.CharField(max_length=255) tyyppi = models.CharField(max_length=255, choices = OSA_TYYPIT ) kaava = models.CharField(max_length=255) tehtava = models.ForeignKey(Tehtava) - #end_dia_class def save(self,*args,**kwargs) : # Tulokset uusiksi tallennuksen yhteydessä self.tehtava.sarja.tuloksetUusiksi() super(OsaTehtava,self).save(*args,**kwargs) @@ -270,16 +235,11 @@ class SyoteMaarite(models.Model) : ('aika', 'aika'), ('piste', 'piste'),) - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class SyoteMaarite - nimi = models.CharField(max_length=255) tyyppi = models.CharField(max_length=255, choices=TYYPPI_VAIHTOEHDOT ) kali_vihje = models.CharField(max_length=255, blank=True , null=True ) osa_tehtava = models.ForeignKey(OsaTehtava) - #end_dia_class def save(self,*args,**kwargs) : # Tulokset uusiksi tallennuksen yhteydessä self.osa_tehtava.tehtava.sarja.tuloksetUusiksi() super(SyoteMaarite,self).save(*args,**kwargs) @@ -300,16 +260,11 @@ class Meta: db_table = u"kipa_syotemaarite" class Syote(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Syote - arvo = models.CharField(max_length=255, blank = True, null=True ) vartio = models.ForeignKey(Vartio, blank=True, null=True ) maarite = models.ForeignKey(SyoteMaarite) tarkistus = models.CharField(max_length=255, blank=True,null=True ) - #end_dia_class def save(self,*args,**kwargs) : # Tulokset uusiksi tallennuksen yhteydessä self.vartio.sarja.tuloksetUusiksi() super(Syote,self).save(*args,**kwargs) @@ -332,15 +287,10 @@ class Meta: class TulosTaulu(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class TulosTaulu - vartio = models.ForeignKey(Vartio) tehtava = models.ForeignKey(Tehtava) pisteet = models.CharField(max_length=255) - #end_dia_class def save(self,*args,**kwargs) : # Tulokset uusiksi tallennuksen yhteydessä self.vartio.sarja.tuloksetUusiksi() super(TulosTaulu,self).save(*args,**kwargs) @@ -369,15 +319,10 @@ class Meta: db_table = u'kipa_testaustulos' class Parametri(models.Model) : - # code between "#gen_dia_class xxx"-> "#end_dia_class" tags is autogenerated from tietokanta.dia" - # for these parts only make changes to data table definitions in tietokanta.dia! - #gen_dia_class Parametri - nimi = models.CharField(max_length=255) arvo = models.CharField(max_length=255) osa_tehtava = models.ForeignKey(OsaTehtava) - #end_dia_class class Meta: verbose_name_plural = "OsaTehtavan paramentrit" db_table = u'kipa_parametri' From 43826a5a548e18d4438a1ec2cea96f45ce93262b Mon Sep 17 00:00:00 2001 From: Ile Date: Sun, 22 Oct 2023 08:29:32 +0300 Subject: [PATCH 3/3] Remove tedia2sql dependency Django should create needed tables as an initial migration. --- docs/update.sh | 3 --- 1 file changed, 3 deletions(-) delete mode 100755 docs/update.sh diff --git a/docs/update.sh b/docs/update.sh deleted file mode 100755 index fd88b891..00000000 --- a/docs/update.sh +++ /dev/null @@ -1,3 +0,0 @@ -tedia2sql -i tietokanta.dia -o tietokanta.sql -t mysql -d -mysql --execute="create database if not exists tupa" -mysql tupa < tietokanta.sql