Skip to content

Commit 89e6e55

Browse files
committed
ruff format
1 parent ddb68a8 commit 89e6e55

File tree

8 files changed

+528
-301
lines changed

8 files changed

+528
-301
lines changed

src/search_geom_service.py

Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212
# Extract coords from bbox string like
1313
# BOX(2644230.6300308 1246806.79350726,2644465.86084414 1246867.82022007)
14-
BBOX_RE = re.compile(r'^BOX\((-?\d+(\.\d+)?) (-?\d+(\.\d+)?),(-?\d+(\.\d+)?) (-?\d+(\.\d+)?)\)$')
14+
BBOX_RE = re.compile(
15+
r"^BOX\((-?\d+(\.\d+)?) (-?\d+(\.\d+)?),(-?\d+(\.\d+)?) (-?\d+(\.\d+)?)\)$"
16+
)
1517

1618

1719
class SearchGeomService:
@@ -33,11 +35,11 @@ def __init__(self, tenant, logger):
3335
self.resources = SearchResources(config, permissions)
3436

3537
self.db_engine = DatabaseEngine()
36-
self.dbs = {} # db connections with db_url as key
37-
self.default_db_url = config.get('db_url')
38+
self.dbs = {} # db connections with db_url as key
39+
self.default_db_url = config.get("db_url")
3840

3941
def _get_db(self, cfg):
40-
db_url = cfg.get('db_url', self.default_db_url)
42+
db_url = cfg.get("db_url", self.default_db_url)
4143
if db_url not in self.dbs:
4244
self.dbs[db_url] = self.db_engine.db_engine(db_url)
4345
return self.dbs[db_url]
@@ -52,43 +54,46 @@ def query(self, identity, dataset, filterexpr):
5254
solr_facets = self.resources.solr_facets(identity)
5355
resource_cfg = solr_facets.get(dataset)
5456

55-
if resource_cfg is not None and len(resource_cfg) == 1 and filterexpr is not None:
57+
if (
58+
resource_cfg is not None
59+
and len(resource_cfg) == 1
60+
and filterexpr is not None
61+
):
5662
# Column for feature ID. If unset, field from filterexpr is used
57-
self.primary_key = resource_cfg[0].get('search_id_col')
63+
self.primary_key = resource_cfg[0].get("search_id_col")
5864
# parse and validate input filter
5965
filterexpr = self._parse_filter(filterexpr)
6066
if filterexpr[0] is None:
6167
return {
62-
'error': "Invalid filter expression: " + filterexpr[1],
63-
'error_code': 400
68+
"error": "Invalid filter expression: " + filterexpr[1],
69+
"error_code": 400,
6470
}
65-
facet_column = resource_cfg[0].get('facet_column')
71+
facet_column = resource_cfg[0].get("facet_column")
6672
# Append dataset where clause for search view
6773
if facet_column:
6874
sql = " AND ".join([filterexpr[0], '"%s"=:vs' % facet_column])
6975
filterexpr[1]["vs"] = dataset
7076
filterexpr = (sql, filterexpr[1])
7177

7278
feature_collection = self._index(filterexpr, resource_cfg[0])
73-
return {'feature_collection': feature_collection}
79+
return {"feature_collection": feature_collection}
7480
else:
75-
return {'error': "Dataset not found or permission error"}
81+
return {"error": "Dataset not found or permission error"}
7682

7783
def _index(self, filterexpr, cfg):
7884
"""Find features by filter query.
7985
8086
:param (sql, params) filterexpr: A filter expression as a tuple (sql_expr, bind_params)
8187
"""
8288
db = self._get_db(cfg)
83-
table_name = cfg.get('table_name', 'search_v')
84-
geometry_column = cfg.get('geometry_column', 'geom')
89+
table_name = cfg.get("table_name", "search_v")
90+
geometry_column = cfg.get("geometry_column", "geom")
8591

8692
# build query SQL
8793

8894
# select id
89-
columns = ', '.join(['"%s"' % self.primary_key])
90-
quoted_table = '.'.join(
91-
map(lambda s: '"%s"' % s, table_name.split('.')))
95+
columns = ", ".join(['"%s"' % self.primary_key])
96+
quoted_table = ".".join(map(lambda s: '"%s"' % s, table_name.split(".")))
9297

9398
where_clauses = []
9499
params = {}
@@ -97,18 +102,23 @@ def _index(self, filterexpr, cfg):
97102
where_clauses.append(filterexpr[0])
98103
params.update(filterexpr[1])
99104

100-
where_clause = "WHERE " + " AND ".join(
101-
where_clauses) if where_clauses else ""
105+
where_clause = "WHERE " + " AND ".join(where_clauses) if where_clauses else ""
102106

103-
sql = sql_text("""
107+
sql = sql_text(
108+
"""
104109
SELECT {columns},
105110
ST_AsGeoJSON(ST_CurveToLine("{geom}")) AS json_geom,
106111
ST_Srid("{geom}") AS srid,
107112
ST_Extent("{geom}") OVER () AS bbox_
108113
FROM {table}
109114
{where_clause}
110-
""".format(columns=columns, geom=geometry_column,
111-
table=quoted_table, where_clause=where_clause))
115+
""".format(
116+
columns=columns,
117+
geom=geometry_column,
118+
table=quoted_table,
119+
where_clause=where_clause,
120+
)
121+
)
112122

113123
# connect to database and start transaction (for read-only access)
114124
conn = db.connect()
@@ -123,32 +133,36 @@ def _index(self, filterexpr, cfg):
123133
for row in result:
124134
# NOTE: feature CRS removed by marshalling
125135
features.append(self._feature_from_query(row))
126-
srid = row['srid']
127-
bbox = row['bbox_']
136+
srid = row["srid"]
137+
bbox = row["bbox_"]
128138

129139
if bbox:
130140
m = BBOX_RE.match(bbox)
131141
# xmin, ymin, xmax, ymax
132-
bbox = [float(m.group(1)), float(m.group(3)),
133-
float(m.group(5)), float(m.group(7))]
142+
bbox = [
143+
float(m.group(1)),
144+
float(m.group(3)),
145+
float(m.group(5)),
146+
float(m.group(7)),
147+
]
134148

135149
# roll back transaction and close database connection
136150
trans.rollback()
137151
conn.close()
138152

139153
return {
140-
'type': 'FeatureCollection',
141-
'crs': {
142-
'type': 'name',
143-
'properties': {
154+
"type": "FeatureCollection",
155+
"crs": {
156+
"type": "name",
157+
"properties": {
144158
# NOTE: return CRS name as EPSG:xxxx and not as OGC URN
145159
# to work with QWC2 dataset search
146-
'name': 'EPSG:%d' % srid
160+
"name": "EPSG:%d" % srid
147161
# 'name': 'urn:ogc:def:crs:EPSG::%d' % srid
148-
}
162+
},
149163
},
150-
'features': features,
151-
'bbox': bbox
164+
"features": features,
165+
"bbox": bbox,
152166
}
153167

154168
def _parse_filter(self, filterstr):
@@ -201,8 +215,8 @@ def _feature_from_query(self, row):
201215
pk = str(pk)
202216

203217
return {
204-
'type': 'Feature',
205-
'id': pk,
206-
'geometry': json.loads(row['json_geom'] or 'null'),
207-
'properties': {}
218+
"type": "Feature",
219+
"id": pk,
220+
"geometry": json.loads(row["json_geom"] or "null"),
221+
"properties": {},
208222
}

src/search_resources.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@ def _load_resources(self, config):
1717
"""
1818
# collect service resources (group by facet name)
1919
facets = {}
20-
for facet in config.resources().get('facets', []):
21-
if facet['name'] not in facets:
22-
facets[facet['name']] = []
23-
facets[facet['name']].append(facet)
20+
for facet in config.resources().get("facets", []):
21+
if facet["name"] not in facets:
22+
facets[facet["name"]] = []
23+
facets[facet["name"]].append(facet)
2424

25-
return {
26-
'facets': facets
27-
}
25+
return {"facets": facets}
2826

2927
def solr_facets(self, identity):
3028
"""Return permitted search facets.
@@ -33,13 +31,13 @@ def solr_facets(self, identity):
3331
"""
3432
# get permitted facets
3533
permitted_facets = self.permissions.resource_permissions(
36-
'solr_facets', identity
34+
"solr_facets", identity
3735
)
38-
all_facets_permitted = '*' in permitted_facets
36+
all_facets_permitted = "*" in permitted_facets
3937

4038
facets = {}
4139

42-
for facet, config in self.resources['facets'].items():
40+
for facet, config in self.resources["facets"].items():
4341
if all_facets_permitted or facet in permitted_facets:
4442
facets[facet] = config
4543

@@ -52,7 +50,7 @@ def dataproducts(self, identity):
5250
"""
5351
# get permitted dataproducts
5452
permitted_dataproducts = self.permissions.resource_permissions(
55-
'dataproducts', identity
53+
"dataproducts", identity
5654
)
5755

5856
# return unique sorted dataproducts

0 commit comments

Comments
 (0)