diff --git a/mapshader/core.py b/mapshader/core.py index 353fa70..a3fcc77 100644 --- a/mapshader/core.py +++ b/mapshader/core.py @@ -654,3 +654,23 @@ def render_legend(source: MapSource): geojson : string """ return json.dumps(get_legend(source)) + + +def render_services(services: list): + """ + Get the MapService dictionary representation and return as a JSON string. + + Parameters + ---------- + services : List of mapshader.service.MapService + The input datasource. + + Returns + ------- + geojson : string + """ + service_list = [] + for service in services: + service_list.append(service.to_dict()) + + return json.dumps(service_list) diff --git a/mapshader/flask_app.py b/mapshader/flask_app.py index 9f012a4..7eb6abc 100644 --- a/mapshader/flask_app.py +++ b/mapshader/flask_app.py @@ -24,6 +24,7 @@ from mapshader.core import render_map from mapshader.core import render_geojson from mapshader.core import render_legend +from mapshader.core import render_services from mapshader.services import get_services, MapService @@ -86,6 +87,11 @@ def flask_to_legend(source: MapSource): return resp +def flask_to_services(services: list): + resp = render_services(services) + return resp + + def build_previewer(service: MapService): '''Helper function for creating a simple Bokeh figure with a WMTS Tile Source. @@ -187,6 +193,7 @@ def configure_app(app: Flask, user_source_filepath=None, contains=None): partial(service_page, service=service)) app.add_url_rule('/', 'home', partial(index_page, services=services)) + app.add_url_rule('/services', 'services', partial(flask_to_services, services=services)) app.add_url_rule('/psutil', 'psutil', psutil_fetching) hello(services) @@ -214,4 +221,5 @@ def create_app(user_source_filepath=None, contains=None): if user_file: user_file = path.abspath(path.expanduser(user_file)) - app = create_app(user_file, contains=service_grep).run(host='0.0.0.0', debug=debug) + app = create_app(user_file, contains=service_grep).run( + host='0.0.0.0', debug=False) diff --git a/mapshader/services.py b/mapshader/services.py index 92cd702..d38ccc6 100644 --- a/mapshader/services.py +++ b/mapshader/services.py @@ -88,6 +88,20 @@ def service_page_name(self): """ return f'/{self.key}-{self.service_type}' + def to_dict(self): + """ + Get JSON representation of service + """ + service_dict = dict( + (key, getattr(self, key)) for key in dir(self) if "__" not in key + ) + service_dict.pop("source") + service_dict.pop("renderers") + service_dict.pop("to_dict") + service_dict['type'] = service_dict['service_type'] + service_dict.pop("service_type") + return service_dict + @property def service_url(self): raise NotImplementedError()