Skip to content

Commit aa5be7b

Browse files
committed
ids reservation to prevent conflicts on merging new features
1 parent d6f208c commit aa5be7b

4 files changed

Lines changed: 50 additions & 20 deletions

File tree

webapp/djakart/admin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ def get_fieldsets(self, request, obj=None):
247247
return (
248248
("intestazione", {
249249
'classes': ('grp-collapse grp-open',),
250-
'fields': ('nome', ('base','merged','clean',),'template_qgis','note','get_project','mapping_service_url',('referente','riservato'),'mapa',('crs','extent','apply_map_extent'))
250+
'fields': ('nome', ('base','merged','clean',),'reserved_ids','template_qgis','note','get_project','mapping_service_url',('referente','riservato'),'mapa',('crs','extent','apply_map_extent'))
251251
}),
252252
("rapporti", {
253253
'classes': ('grp-collapse grp-open',),
@@ -258,7 +258,7 @@ def get_fieldsets(self, request, obj=None):
258258
return (
259259
("intestazione", {
260260
'classes': ('grp-collapse grp-open',),
261-
'fields': ('nome', 'base','template_qgis','crs','note','referente','riservato')
261+
'fields': ('nome', 'base','reserved_ids','template_qgis','crs','note','referente','riservato')
262262
}),
263263
)
264264

webapp/djakart/kart_api.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ def get_config(v,key):
240240
return res
241241

242242

243-
def crea_nuova_versione(nuova_versione,base,tipo="pg"):
243+
def crea_nuova_versione(nuova_versione,base,tipo="pg",riserva_id=100):
244244
nuova_versione_path = os.path.join(settings.KART_REPO,nuova_versione)
245245
master_path = os.path.join(settings.KART_REPO,base)
246246
if tipo == 'pg':
@@ -258,7 +258,7 @@ def crea_nuova_versione(nuova_versione,base,tipo="pg"):
258258
new_wc = create_workingcopy(nuova_versione,uri,force=True)
259259
grant_select_schema(nuova_versione)
260260
#crea_fdw(nuova_versione)
261-
serial_pk_setup(nuova_versione)
261+
serial_pk_setup(nuova_versione, aumento=riserva_id)
262262

263263

264264
def get_pg_uri(v):
@@ -603,6 +603,13 @@ def recover_uncommitted_nulls(versione):
603603
with conn.cursor() as cursor:
604604
cursor.execute(sql)
605605

606+
def get_schema(schema):
607+
sql = """ SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname like '{schema}%';""".format(schema=schema)
608+
with get_pg_versions_connection() as conn:
609+
with conn.cursor() as cursor:
610+
cursor.execute(sql)
611+
return cursor.fetchone()[0]
612+
606613

607614
def get_schemas():
608615
sql = """ SELECT nspname FROM pg_catalog.pg_namespace;"""
@@ -626,23 +633,18 @@ def serial_pk_setup(versione, aumento=100):
626633
base_path = get_remote(versione)
627634
base = os.path.split(base_path)[-1]
628635
if base:
629-
schemas = get_schemas()
630-
#if not base in schemas:
631-
# base = base + "_pub"
632-
# if not base in schemas:
633-
# raise KartException
634-
sequences = get_sequences(base.replace("_pub",""))
636+
base_schema = get_schema(base)
637+
sequences = get_sequences(base_schema)
635638
for tab in list_versioned_tables(base):
636-
if not (tab + "_auto_pk_seq") in sequences:
639+
if not (tab + "_fid_seq") in sequences:
637640
continue
638-
#sql = """SELECT MAX(auto_pk) from "{schema}"."{table}";""".format(schema=versione,table=tab)
639-
sql = """SELECT last_value FROM "{schema}"."{table}_auto_pk_seq";""".format(schema=base,table=tab)
641+
sql = """SELECT last_value FROM "{schema}"."{table}_fid_seq";""".format(schema=base_schema, table=tab)
640642
cursor.execute(sql)
641-
min_pk = cursor.fetchone()[0]
642-
min_pk += 100
643-
sql = """ALTER SEQUENCE "{schema}"."{table}_auto_pk_seq" RESTART WITH {val}""".format(schema=versione, table=tab, val=min_pk)
643+
base_min_pk = cursor.fetchone()[0]
644+
min_pk = base_min_pk + aumento
645+
sql = """ALTER SEQUENCE "{schema}"."{table}_fid_seq" RESTART WITH {val}""".format(schema=versione, table=tab, val=min_pk)
644646
cursor.execute(sql)
645-
sql = """ALTER SEQUENCE "{schema}"."{table}_auto_pk_seq" RESTART WITH {val}""".format(schema=base, table=tab, val=min_pk)
647+
sql = """ALTER SEQUENCE "{schema}"."{table}_fid_seq" RESTART WITH {val}""".format(schema=base_schema, table=tab, val=min_pk)
646648
cursor.execute(sql)
647649

648650

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 5.0.6 on 2024-09-01 13:47
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('djakart', '0005_version_crs_alter_basemap_request_params_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='version',
15+
name='reserved_ids',
16+
field=models.IntegerField(default=100),
17+
),
18+
migrations.AlterField(
19+
model_name='version',
20+
name='crs',
21+
field=models.CharField(default='EPSG:3003', max_length=20, verbose_name='Coordinate system epsg code'),
22+
),
23+
migrations.AlterField(
24+
model_name='version',
25+
name='extent',
26+
field=models.JSONField(default=[99999999, 99999999, -999999, -9999999]),
27+
),
28+
]

webapp/djakart/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -491,13 +491,13 @@ def importa(self, dspath):
491491
def save(self, *args, **kwargs):
492492
self.nome = slugify(self.nome).upper()
493493
if not self.pk is None:
494-
kwargs["update_fields"] = ['note','template_qgis','referente','riservato','extent']
494+
kwargs["update_fields"] = ['note','template_qgis','referente','riservato','extent','reserved_ids']
495495
else:
496496
if self.riservato and not self.referente:
497497
self.riservato = False
498498
if self.base:
499-
crea_nuova_versione(self.nome,self.base.nome)
500-
#crea progetto
499+
self.reserved_ids = self.base.reserved_ids
500+
crea_nuova_versione(self.nome,self.base.nome,riserva_id=self.reserved_ids)
501501
self.progetto = get_qgs_filename(self.nome)
502502
self.extent = self.base.extent
503503
else:

0 commit comments

Comments
 (0)