@@ -126,19 +126,52 @@ def __init__(self, config: dict):
126
126
127
127
self .orm = 'sqlalchemy'
128
128
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
142
175
143
176
def get_content_type (self , headers , args ):
144
177
"""
0 commit comments