Skip to content

Commit 85978f3

Browse files
committed
make Repository init simpler
1 parent 7a01cdb commit 85978f3

File tree

3 files changed

+13
-21
lines changed

3 files changed

+13
-21
lines changed

docs/repofilters.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ The same CSW `GetRecords` filter as per above then yields the following results:
5858

5959
Another example:
6060

61-
.. code-block:: text
61+
.. code-block:: yaml
6262
63-
repository:0
63+
repository:
6464
database: sqlite:///records.db
6565
filter: "pycsw:ParentIdentifier != '33'"
6666

pycsw/core/repository.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,15 @@ def connect(dbapi_connection, connection_rec):
8989
return clazz._engines[url]
9090

9191
''' Class to interact with underlying repository '''
92-
def __init__(self, database, context, app_root=None, table='records', repo_filter=None):
92+
def __init__(self, repo_object, context, app_root=None):
9393
''' Initialize repository '''
9494

9595
self.context = context
96-
self.filter = repo_filter
96+
self.filter = repo_object.get('filter')
9797
self.fts = False
98-
self.database = database
99-
self.table = table
98+
self.database = repo_object['database']
99+
self.table = repo_object['table']
100+
self.facets = repo_object.get('facets', [])
100101

101102
# Don't use relative paths, this is hack to get around
102103
# most wsgi restriction...
@@ -112,7 +113,7 @@ def __init__(self, database, context, app_root=None, table='records', repo_filte
112113

113114
self.postgis_geometry_column = None
114115

115-
schema_name, table_name = table.rpartition(".")[::2]
116+
schema_name, table_name = self.table.rpartition(".")[::2]
116117

117118
default_table_args = {
118119
"autoload": True,
@@ -465,7 +466,7 @@ def query(self, ast=None, sortby=None, typenames=None,
465466
return [total, self._get_repo_filter(query).limit(
466467
maxrecords).offset(startposition).all()]
467468

468-
def get_facets(self, facets=[], ast=None) -> dict:
469+
def get_facets(self, ast=None) -> dict:
469470
"""
470471
Gets all facets for a given query
471472
@@ -474,7 +475,7 @@ def get_facets(self, facets=[], ast=None) -> dict:
474475

475476
facets_results = {}
476477

477-
for facet in facets:
478+
for facet in self.facets:
478479
LOGGER.debug(f'Running facet for {facet}')
479480
facetq = self.session.query(self.query_mappings[facet], self.func.count(facet)).group_by(facet)
480481

@@ -506,7 +507,6 @@ def get_facets(self, facets=[], ast=None) -> dict:
506507

507508
return facets_results
508509

509-
510510
def insert(self, record, source, insert_date):
511511
''' Insert a record into the repository '''
512512

pycsw/ogc/api/records.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
from pycsw.core import log
4343
from pycsw.core.config import StaticContext
4444
from pycsw.core.metadata import parse_record
45-
from pycsw.core.pygeofilter_evaluate import to_filter
4645
from pycsw.core.util import bind_url, get_today_and_now, jsonify_links, load_custom_repo_mappings, str2bool, wkt2geom
4746
from pycsw.ogc.api.oapi import gen_oapi
4847
from pycsw.ogc.api.util import match_env_var, render_j2_template, to_json, to_rfc3339
@@ -112,8 +111,6 @@ def __init__(self, config: dict):
112111
self.limit = 10
113112
LOGGER.debug(f'limit: {self.limit}')
114113

115-
repo_filter = self.config['repository'].get('filter')
116-
117114
custom_mappings_path = self.config['repository'].get('mappings')
118115
if custom_mappings_path is not None:
119116
md_core_model = load_custom_repo_mappings(custom_mappings_path)
@@ -139,7 +136,7 @@ def __init__(self, config: dict):
139136
max_retries = self.config['repository'].get('maxretries', 5)
140137
while not connection_done and max_attempts <= max_retries:
141138
try:
142-
self.repository = rs_cls(self.context, repo_filter)
139+
self.repository = rs_cls(self.repository['repository'], self.context)
143140
LOGGER.debug('Custom repository %s loaded (%s)', rs, self.repository.dbtype)
144141
connection_done = True
145142
except Exception as err:
@@ -156,12 +153,7 @@ def __init__(self, config: dict):
156153
else:
157154
try:
158155
LOGGER.info('Loading default repository')
159-
self.repository = repository.Repository(
160-
self.config['repository']['database'],
161-
self.context,
162-
table=self.config['repository']['table'],
163-
repo_filter=repo_filter
164-
)
156+
self.repository = repository.Repository(self.config['repository'], self.context)
165157
LOGGER.debug(f'Repository loaded {self.repository.dbtype}')
166158
except Exception as err:
167159
msg = f'Could not load repository {err}'
@@ -771,7 +763,7 @@ def items(self, headers_, json_post_data, args, collection='metadata:main'):
771763

772764
if facets_requested:
773765
LOGGER.debug('Running facet query')
774-
response['facets'] = self.repository.get_facets(self.facets, ast)
766+
response['facets'] = self.repository.get_facets(ast)
775767

776768
returned = len(records)
777769

0 commit comments

Comments
 (0)