Skip to content

Commit

Permalink
django tests gooo
Browse files Browse the repository at this point in the history
  • Loading branch information
ferregutie committed Jul 2, 2024
1 parent 73282af commit 4771bd9
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 129 deletions.
39 changes: 11 additions & 28 deletions webapp/djakart/kart_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,6 @@
SRID = os.environ.get("REPO_CRS")
SRID_CODE = SRID.split(":")[1]

connections = {
"versions": psycopg2.connect(
database=os.environ.get("VERSION_DB", "blabla"),
user=os.environ.get("POSTGRES_USER", "blabla"),
password=os.environ.get("POSTGRES_PASSWORD", "blabla"),
host=os.environ.get("POSTGRES_SERVER", "blabla"),
port=os.environ.get("POSTGRES_PORT", "blabla")
)
}

def get_pg_versions_connection():
return psycopg2.connect(
Expand All @@ -43,6 +34,7 @@ def get_pg_versions_connection():
port=os.environ.get("POSTGRES_PORT", "blabla")
)


class KartException(Exception):
pass

Expand Down Expand Up @@ -101,6 +93,7 @@ def executeCmd(commands, cmd=False, path=None, jsonoutput=False, feedback=None):
raise KartException(str(e))
return "error: " + str(e)


def crea_fdw(nuova_versione):

crea_fdw_template = """
Expand Down Expand Up @@ -139,6 +132,7 @@ def crea_fdw(nuova_versione):
cursor.execute(crea_fdw_template.format(**common_params, schema=nuova_versione+"_pub"))
return None


def crea_pg_schema(nuova_versione, readonly=False):

if readonly:
Expand All @@ -151,10 +145,8 @@ def crea_pg_schema(nuova_versione, readonly=False):
'''

cursor = get_pg_versions_connection().cursor()

cursor.execute(crea_schema_template.format(schema=nuova_versione, owner=schema_owner))
print (crea_schema_template.format(schema=nuova_versione, owner=schema_owner))
return True


def grant_select_schema(versione, schema_user=KART_PGUSER, schema_admin=KART_SU):

Expand Down Expand Up @@ -192,16 +184,16 @@ def grant_select_schema(versione, schema_user=KART_PGUSER, schema_admin=KART_SU)
))
return None

def elimina_pg_schema(nuova_versione):
def elimina_pg_schema(versione):

schema_owner = KART_SU
schema_owner = PG_SU
canc_schema_template = '''
DROP SCHEMA IF EXISTS "{schema}" CASCADE
'''

cursor = get_pg_versions_connection().cursor()
try:
cursor.execute(canc_schema_template.format(schema=nuova_versione, owner=schema_owner))
cursor.execute(canc_schema_template.format(schema=versione, owner=schema_owner))
return True
except Exception as e:
print(e)
Expand All @@ -211,7 +203,6 @@ def crea_nuovo_repository(repo_name,bare=True,readonly_workingcopy=None):
repo_path = os.path.join(settings.KART_REPO,repo_name)
cmds = ["init", repo_path]
if readonly_workingcopy:
print ("crea_nuovo_repository params", repo_name, readonly_workingcopy)
crea_pg_schema(readonly_workingcopy, readonly=True)
cmds.append("--workingcopy-location")
cmds.append("postgresql://{user}:{password}@{host}:{port}/{db}/{schema}".format(
Expand All @@ -224,14 +215,13 @@ def crea_nuovo_repository(repo_name,bare=True,readonly_workingcopy=None):
))
if bare:
cmds = ["init", "--bare", repo_path]
print ("KART CMDS", cmds)
if not os.path.exists(repo_path):
cmd = executeCmd(cmds)
return cmd

def get_config(v,key):
v_path = os.path.join(settings.KART_REPO,v)
res = executeCmd(["config", "-l"])
res = executeCmd(["--repo",v_path,"config", "-l"])
return res

def crea_nuova_versione(nuova_versione,base,tipo="pg"):
Expand Down Expand Up @@ -259,14 +249,13 @@ def get_pg_uri(v):
return "postgresql://{user}:{password}@{host}:{port}/{db}/{schema}".format(
user=PG_SU,
password=PG_PWD,
host=os.environ.get("HOST_EXTERNAL",'pgserver'),
port=os.environ.get("POSTGRES_PORT_EXTERNAL",'pgport'),
host=os.environ.get("POSTGRES_SERVER",'pgserver'),
port=os.environ.get("POSTGRES_PORT",'pgport'),
db=settings.DBPREFIX + os.environ.get("VERSION_DB",'pgdb'),
schema=v
)

def create_workingcopy(v, uri=None, force=False):
print ("CREATE WORKINGCOPY", v, uri)
v_path = os.path.join(settings.KART_REPO,v)
cmds = ["--repo",v_path,"create-workingcopy"]
if force:
Expand Down Expand Up @@ -347,18 +336,15 @@ def importa_dataset(versione,ds_path,max_extent=None):
#EXTRACT EXTENT
ogrinfo_pass1 = executeCmd(["/usr/bin/ogrinfo", ds_path],cmd=True)
#^[0-9]+: .*$
print("ogrinfo_pass1",ogrinfo_pass1)
lyrs = []
for group in re.findall(r"^[0-9]+: .*(?=\()", ogrinfo_pass1, flags=re.MULTILINE):
print (group)
lyrs.append(group)
clean_group = group.split(":")[-1].strip()
ogrinfo_pass2 = executeCmd(["/usr/bin/ogrinfo", "-so", ds_path, clean_group],cmd=True)
extent_row = re.findall(r"^Extent.*$",ogrinfo_pass2, flags=re.MULTILINE)
if extent_row:
extent_json = extent_row[0].replace("Extent: (","[").replace(") - (",", ").replace(")","]")
extent = json.loads(extent_json)
print ("group %s %s" % (group, extent))
if extent[0] < max_extent[0]:
max_extent[0] = extent[0]
if extent[1] < max_extent[1]:
Expand All @@ -368,7 +354,7 @@ def importa_dataset(versione,ds_path,max_extent=None):
if extent[3] > max_extent[3]:
max_extent[3] = extent[3]

print ("MAXEXTENT", max_extent)
print ("MAXEXTENT", versione, max_extent)

importa_cmd = executeCmd(["--repo", versione_path, "import", "--replace-existing", "-a", ds_path])
grant_select_schema(versione)
Expand Down Expand Up @@ -457,7 +443,6 @@ def genera_diff_versione(versione, hash=None, prev=None, crs=SRID, format='html'
if format == 'html':
#diff_template_location = os.path.join(os.path.dirname(os.path.realpath(__file__)),'diff-view.html')
response = requests.get("http://localhost:8000/djakart/diff-view/%s/" % versione)
print (response.text)
with open("/tmp/diff-view.html", "w", encoding="utf8") as diff_template:
diff_template.write(response.text)
if hash == 'HEAD':
Expand Down Expand Up @@ -600,8 +585,6 @@ def serial_pk_setup(versione, aumento=100):
# if not base in schemas:
# raise KartException
sequences = get_sequences(base.replace("_pub",""))
print (list_versioned_tables(base))
print (base)
for tab in list_versioned_tables(base):
if not (tab + "_auto_pk_seq") in sequences:
continue
Expand Down
7 changes: 0 additions & 7 deletions webapp/djakart/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -447,19 +447,12 @@ def save(self, *args, **kwargs):
self.progetto = get_qgs_filename(self.nome)
self.extent = self.base.extent
else:
print("save1")
crea_nuovo_repository(self.nome,bare=False,readonly_workingcopy=self.schema)
print("save2")
grant_select_schema(self.schema)
print("save3")
kart_cmd(self.nome,["import", "-a", os.path.join(os.path.dirname(__file__),"prototipo.gpkg")]) #"--replace-existing",
print("save4")

print("save5")
self.aggiorna_progetto()
print("save6")
self.salva_cache()
print("save7")
super().save(*args, **kwargs)

def __str__(self):
Expand Down
Binary file added webapp/djakart/test/b0101_vincoli.gpkg
Binary file not shown.
174 changes: 80 additions & 94 deletions webapp/djakart/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from djakart.kart_api import (
KartException,
get_pg_versions_connection,
elimina_pg_schema,
crea_nuova_versione,
elimina_versione,
crea_nuovo_repository,
Expand Down Expand Up @@ -62,112 +63,97 @@ def destroy_kart_version(ver):
version_path = os.path.join(settings.KART_REPO, ver.nome)
os.system('rm -Rf %s' % version_path)
os.system('rm -f %s*.*' % version_path)
elimina_pg_schema(ver)


#@override_settings(DBPREFIX="test_")
class versioniTests(TestCase):

databases = '__all__'
maxDiff = None

def envver(crs="EPSG:32632", dsimport=None):
def decorator(func):
def wrapper(version_test_case):
new_ver = create_version(crs)
if dsimport:
gpkg_path = os.path.join(os.path.dirname(__file__),'test',dsimport)
ext = new_ver.importa(gpkg_path)
func(version_test_case,new_ver)
new_ver.delete()
destroy_kart_version(new_ver)
wrapper.__name__ = func.__name__
return wrapper
return decorator

@envver(crs="EPSG:32632")
def test_create_newversion(self,testver):
print ("DATABASES",self.databases)
self.assertFalse(not testver.pk, "Version %s" % testver.nome)

@envver(crs="EPSG:32632", dsimport='test_data_state_A.gpkg')
def test_import_dataset(self,testver):
tabs = testver.kart_tables
self.assertTrue((tabs[0] == '01_one' and tabs[1] == 'basetiles'), "Version %s" % testver.nome)

@envver(crs="EPSG:32632", dsimport='test_data_state_A.gpkg')
def test_clone(self,testver):
clone = version.objects.create(
dsimport = "b0101_vincoli.gpkg"
crs = "EPSG:3003"
clone = None

def setUp(self):
self.testver = create_version(self.crs)
if self.dsimport:
gpkg_path = os.path.join(os.path.dirname(__file__),'test',self.dsimport)
ext = self.testver.importa(gpkg_path)

def tearDown(self):
destroy_kart_version(self.testver)
if self.clone:
destroy_kart_version(self.clone)


#def envver(crs="EPSG:32632", dsimport=None):
# def decorator(func):
# def wrapper(version_test_case):
# new_ver = create_version(crs)
# if dsimport:
# gpkg_path = os.path.join(os.path.dirname(__file__),'test',dsimport)
# ext = new_ver.importa(gpkg_path)
# func(version_test_case,new_ver)
# new_ver.delete()
# destroy_kart_version(new_ver)
# wrapper.__name__ = func.__name__
# return wrapper
# return decorator

#@envver(crs="EPSG:32632")
def test_create_newversion(self):
self.assertFalse(not self.testver.pk, "Version %s" % self.testver.nome)

#@envver(crs="EPSG:32632", dsimport='test_data_state_A.gpkg')
def test_import_dataset(self):
tabs = self.testver.kart_tables
self.assertTrue((tabs[0] == 'b0101011_Vincolo' and tabs[1] == 'b0101021_VincoloPaesaggist' and tabs[2] == 'b0101031_VincDestForestale'), "Version %s" % self.testver.nome)

def test_clone(self):
self.clone = version.objects.create(
nome=uuid.uuid4().hex[0:4],
crs=testver.crs,
base=testver
crs=self.testver.crs,
base=self.testver
)
tabs = clone.kart_tables
print ("clone tabs", tabs)
self.assertTrue((tabs[0] == '01_one' and tabs[1] == 'basetiles'), "Cloned version %s" % clone.nome)

@envver(crs="EPSG:32632", dsimport='test_data_state_A.gpkg')
def test_insert_and_commit(self,testver):
cursor = get_pg_versions_connection().cursor()
clone = version.objects.create(
tabs = self.clone.kart_tables
self.assertTrue((tabs[0] == 'b0101011_Vincolo' and tabs[1] == 'b0101021_VincoloPaesaggist' and tabs[2] == 'b0101031_VincDestForestale'), "Cloned version %s" % self.clone.nome)


def test_insert(self):
connection = get_pg_versions_connection()
cursor = connection.cursor()
self.clone = version.objects.create(
nome=uuid.uuid4().hex[0:4],
crs=testver.crs,
base=testver
crs=self.testver.crs,
base=self.testver
)

cursor.execute("SELECT schema_name FROM information_schema.schemata")
res = cursor.fetchall()
print ("SCHEMAS", res) #
cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_schema = '%s'" % testver.schema)
res = cursor.fetchall()
print ("SCHEMA", testver.schema, "TABLES", res)
cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_schema = '%s'" % clone.schema)
res = cursor.fetchall()
print ("SCHEMA", clone.schema, "TABLES", res)
sql_add = """
INSERT INTO "{schema}"."b0101011_Vincolo"(fid, "ARTICOLO", "DETTVINC", geom) VALUES (nextval('"{schema}"."b0101011_Vincolo_fid_seq"'::regclass), '{schema}', 99, 'MultiPolygon (((1722916.68287772010080516 5034227.90152797847986221, 1724565.71380323800258338 5035908.84918108768761158, 1725235.96508264215663075 5033802.34516010340303183, 1722916.68287772010080516 5034227.90152797847986221)))');
""".format(schema=self.clone.schema)
print (sql_add)
cursor.execute(sql_add)
print ("cursor.statusmessage",cursor.statusmessage)
connection.commit()
self.clone.salva_cache()
self.assertTrue(self.clone.cambiamenti_non_registrati, "Cloned version %s" % self.clone.nome)


sql_add = """
INSERT INTO "{schema}"."basetiles"(fid, layer, content, geom) VALUES (nextval('"{schema}"."basetiles_fid_seq"'::regclass), '{schema}', 1, 'MultiPolygon Z (((725034.29041177907492965 5036778.0809512697160244 0, 726719.34362095000687987 5036778.0809512697160244 0, 725896.41065833170432597 5035210.58959390129894018 0, 725034.29041177907492965 5036778.0809512697160244 0)))');
""".format(schema=clone.schema)
print("cursor", cursor.execute(sql_add))
print("SQL", sql_add)
#ogr_cmd = '''ogrinfo -ro {conn} -sql "{sql}"'''.format(conn=get_pg_uri(clone.schema), sql=sql_add)
#print (ogr_cmd)
#os.system(ogr_cmd)
print ("STAtUS", clone.status, "cambiamenti_non_registrati", clone.cambiamenti_non_registrati)
self.assertTrue(clone.cambiamenti_non_registrati, "Cloned version %s" % clone.nome)

@envver(crs="EPSG:32632", dsimport='test_data_state_A.gpkg')
def test_update_and_commit(self,testver):
print ("kart.workingcopy.location", testver.get_config('kart.workingcopy.location'))
cursor = get_pg_versions_connection().cursor()
clone = version.objects.create(
def test_update(self):
connection = get_pg_versions_connection()

cursor = connection.cursor()
self.clone = version.objects.create(
nome=uuid.uuid4().hex[0:4],
crs=testver.crs,
base=testver
crs=self.testver.crs,
base=self.testver
)

sql_select = """
SELECT layer,content FROM "{schema}"."basetiles"
""".format(schema=clone.schema)
res = cursor.execute(sql_select)
rows = cursor.fetchall()
print(1,sql_select, res, rows)

sql_add = """
UPDATE "{schema}"."basetiles"
SET content = 9999 WHERE layer='tile4'
""".format(schema=clone.schema)
print("cursor", cursor.execute(sql_add))
print("SQL", sql_add)
#ogr_cmd = '''ogrinfo -ro {conn} -sql "{sql}"'''.format(conn=get_pg_uri(clone.schema), sql=sql_add)
#print (ogr_cmd)
#os.system(ogr_cmd)
res = cursor.execute(sql_select)
rows = cursor.fetchall()
print ("kart.workingcopy.location", clone.get_config('kart.workingcopy.location'))
print(2,sql_select, res, rows)
print ("STAtUS", clone.status_(), "cambiamenti_non_registrati", clone.cambiamenti_non_registrati, clone.is_clean_())
self.assertTrue(clone.cambiamenti_non_registrati, "Cloned version %s" % clone.nome)

@staticmethod
def disconnect(self,*args, **kwargs):
print("disconnect", args,kwargs)
sql_updt = """
UPDATE "{schema}"."b0101011_Vincolo"
SET "ARTICOLO" = 'TEST' WHERE "N_AREAV"='0015';
""".format(schema=self.clone.schema)
cursor.execute(sql_updt)
connection.commit()
self.clone.salva_cache()
self.assertTrue(self.clone.cambiamenti_non_registrati, "Cloned version %s" % self.clone.nome)

0 comments on commit 4771bd9

Please sign in to comment.