Skip to content

Commit 9c19fc1

Browse files
committed
abstract repository begin
1 parent dd17c58 commit 9c19fc1

File tree

1 file changed

+46
-13
lines changed

1 file changed

+46
-13
lines changed

pycsw/ogc/api/records.py

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -126,19 +126,52 @@ def __init__(self, config: dict):
126126

127127
self.orm = 'sqlalchemy'
128128
from pycsw.core import repository
129-
try:
130-
LOGGER.info('Loading default repository')
131-
self.repository = repository.Repository(
132-
self.config['repository']['database'],
133-
self.context,
134-
table=self.config['repository']['table'],
135-
repo_filter=repo_filter
136-
)
137-
LOGGER.debug(f'Repository loaded {self.repository.dbtype}')
138-
except Exception as err:
139-
msg = f'Could not load repository {err}'
140-
LOGGER.exception(msg)
141-
raise
129+
130+
if 'source' in self.config['repository']: # load custom repository
131+
rs = self.config['repository']['source']
132+
rs_modname, rs_clsname = rs.rsplit('.', 1)
133+
134+
rs_mod = __import__(rs_modname, globals(), locals(), [rs_clsname])
135+
rs_cls = getattr(rs_mod, rs_clsname)
136+
137+
print("JJJ", rs_cls)
138+
139+
try:
140+
connection_done = False
141+
max_attempts = 0
142+
max_retries = self.config['repository'].get('maxretries', 5)
143+
while not connection_done and max_attempts <= max_retries:
144+
try:
145+
self.repository = rs_cls(self.context, repo_filter)
146+
LOGGER.debug('Custom repository %s loaded (%s)', rs, self.repository.dbtype)
147+
connection_done = True
148+
except Exception as err:
149+
import traceback
150+
print(traceback.format_exc())
151+
LOGGER.debug(f'Repository not loaded retry connection {max_attempts}: {err}')
152+
max_attempts += 1
153+
except Exception as err:
154+
msg = 'Could not load custom repository %s: %s' % (rs, err)
155+
LOGGER.exception(msg)
156+
error = 1
157+
code = 'NoApplicableCode'
158+
locator = 'service'
159+
text = 'Could not initialize repository. Check server logs'
160+
161+
else:
162+
try:
163+
LOGGER.info('Loading default repository')
164+
self.repository = repository.Repository(
165+
self.config['repository']['database'],
166+
self.context,
167+
table=self.config['repository']['table'],
168+
repo_filter=repo_filter
169+
)
170+
LOGGER.debug(f'Repository loaded {self.repository.dbtype}')
171+
except Exception as err:
172+
msg = f'Could not load repository {err}'
173+
LOGGER.exception(msg)
174+
raise
142175

143176
def get_content_type(self, headers, args):
144177
"""

0 commit comments

Comments
 (0)