Skip to content

Commit

Permalink
Merge pull request #647 from opengisch/QF-2602-pk
Browse files Browse the repository at this point in the history
Make primary key extraction more strict, do not allow layers with missing primary keys
  • Loading branch information
suricactus authored Jul 12, 2023
2 parents 1725697 + 422d6a8 commit dfb8290
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 10 deletions.
20 changes: 15 additions & 5 deletions docker-app/qfieldcloud/core/tests/test_packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,9 @@ def check_package(

def test_list_files_for_qfield(self):
cur = self.conn.cursor()
cur.execute("CREATE TABLE point (id integer, geometry geometry(point, 2056))")
cur.execute(
"CREATE TABLE point (id integer primary key, geometry geometry(point, 2056))"
)
self.conn.commit()
cur.execute(
"INSERT INTO point(id, geometry) VALUES(1, ST_GeomFromText('POINT(2725505 1121435)', 2056))"
Expand Down Expand Up @@ -412,7 +414,9 @@ def test_needs_repackaging_without_online_vector(self):

def test_needs_repackaging_with_online_vector(self):
cur = self.conn.cursor()
cur.execute("CREATE TABLE point (id integer, geometry geometry(point, 2056))")
cur.execute(
"CREATE TABLE point (id integer primary key, geometry geometry(point, 2056))"
)
self.conn.commit()
cur.execute(
"INSERT INTO point(id, geometry) VALUES(1, ST_GeomFromText('POINT(2725505 1121435)', 2056))"
Expand Down Expand Up @@ -443,7 +447,9 @@ def test_needs_repackaging_with_online_vector(self):

def test_connects_via_pgservice(self):
cur = self.conn.cursor()
cur.execute("CREATE TABLE point (id integer, geometry geometry(point, 2056))")
cur.execute(
"CREATE TABLE point (id integer primary key, geometry geometry(point, 2056))"
)
self.conn.commit()

Secret.objects.create(
Expand Down Expand Up @@ -503,7 +509,9 @@ def test_connects_via_pgservice(self):

def test_has_online_vector_data(self):
cur = self.conn.cursor()
cur.execute("CREATE TABLE point (id integer, geometry geometry(point, 2056))")
cur.execute(
"CREATE TABLE point (id integer primary key, geometry geometry(point, 2056))"
)
self.conn.commit()

self.upload_files(
Expand Down Expand Up @@ -629,7 +637,9 @@ def test_outdated_packaged_files_are_deleted(self):
subscription.plan.save()

cur = self.conn.cursor()
cur.execute("CREATE TABLE point (id integer, geometry geometry(point, 2056))")
cur.execute(
"CREATE TABLE point (id integer primary key, geometry geometry(point, 2056))"
)
self.conn.commit()
cur.execute(
"INSERT INTO point(id, geometry) VALUES(1, ST_GeomFromText('POINT(2725505 1121435)', 2056))"
Expand Down
2 changes: 1 addition & 1 deletion docker-app/qfieldcloud/core/tests/test_qfield_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def test_list_files_for_qfield(self):
cur.execute(
"""
CREATE TABLE point (
id integer,
id integer primary key,
geometry geometry(point, 2056)
);
"""
Expand Down
13 changes: 10 additions & 3 deletions docker-qgis/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,11 @@ def get_layers_data(project: QgsProject) -> Dict[str, Dict]:
error = layer.error()
layer_id = layer.id()
layer_source = LayerSource(layer)
datasource = None

if layer.dataProvider():
datasource = layer.dataProvider().uri().uri()

layers_by_id[layer_id] = {
"id": layer_id,
"name": layer.name(),
Expand All @@ -616,10 +621,12 @@ def get_layers_data(project: QgsProject) -> Dict[str, Dict]:
"QFieldSync/is_geometry_locked"
),
"qfs_photo_naming": layer.customProperty("QFieldSync/photo_naming"),
"qfc_source_data_pk_name": layer_source.pk_attr_name,
"qfs_unsupported_source_pk": layer.customProperty(
"QFieldSync/unsupported_source_pk"
),
"is_valid": layer.isValid(),
"datasource": layer.dataProvider().uri().uri()
if layer.dataProvider()
else None,
"datasource": datasource,
"type": layer.type(),
"type_name": layer.type().name,
"error_code": "no_error",
Expand Down

0 comments on commit dfb8290

Please sign in to comment.