def handle_main(request_uri: str, relations: areas.Relations) -> yattag.doc.Doc: """Handles the main wsgi page. Also handles /osm/filter-for/* which filters for a condition.""" filter_for, refcounty = setup_main_filter_for(request_uri) doc = yattag.doc.Doc() doc.asis(webframe.get_toolbar(relations).getvalue()) doc.asis(handle_main_filters(relations, refcounty).getvalue()) table = [] table.append([ util.html_escape(_("Area")), util.html_escape(_("House number coverage")), util.html_escape(_("Existing house numbers")), util.html_escape(_("Street coverage")), util.html_escape(_("Existing streets")), util.html_escape(_("Area boundary")) ]) for relation_name in relations.get_names(): row = handle_main_relation(relations, filter_for, relation_name) if row: table.append(row) doc.asis(util.html_table_from_list(table).getvalue()) with doc.tag("p"): with doc.tag( "a", href="https://github.com/vmiklos/osm-gimmisn/tree/master/doc"): doc.text(_("Add new area")) doc.asis(webframe.get_footer().getvalue()) return doc
def handle_additional_streets(relations: areas.Relations, request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/additional-streets/ujbuda/view-[result|query].""" tokens = request_uri.split("/") relation_name = tokens[-2] action = tokens[-1] relation = relations.get_relation(relation_name) osmrelation = relation.get_config().get_osmrelation() doc = yattag.doc.Doc() doc.asis( webframe.get_toolbar(relations, "additional-streets", relation_name, osmrelation).getvalue()) if action == "view-turbo": doc.asis( wsgi_additional.additional_streets_view_turbo( relations, request_uri).getvalue()) else: # assume view-result doc.asis( wsgi_additional.additional_streets_view_result( relations, request_uri).getvalue()) date = streets_diff_last_modified(relation) doc.asis(webframe.get_footer(date).getvalue()) return doc
def handle_missing_streets(relations: areas.Relations, request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/missing-streets/ujbuda/view-[result|query].""" tokens = request_uri.split("/") relation_name = tokens[-2] action = tokens[-1] relation = relations.get_relation(relation_name) osmrelation = relation.get_config().get_osmrelation() doc = yattag.doc.Doc() doc.asis( webframe.get_toolbar(relations, "missing-streets", relation_name, osmrelation).getvalue()) if action == "view-turbo": doc.asis(missing_streets_view_turbo(relations, request_uri).getvalue()) elif action == "view-query": with doc.tag("pre"): with relation.get_files().get_ref_streets_stream("r") as sock: doc.text(sock.read()) elif action == "update-result": doc.asis(missing_streets_update(relations, relation_name).getvalue()) else: # assume view-result doc.asis( missing_streets_view_result(relations, request_uri).getvalue()) date = ref_streets_last_modified(relation) doc.asis(webframe.get_footer(date).getvalue()) return doc
def handle_stats(relations: areas.Relations, _request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/housenumber-stats/hungary/.""" doc = yattag.doc.Doc() doc.asis(webframe.get_toolbar(relations).getvalue()) prefix = util.Config.get_uri_prefix() with doc.tag("script", src=prefix + "/static/Chart.min.js"): pass with doc.tag("script", src=prefix + "/static/chartjs-plugin-datalabels.min.js"): pass with doc.tag("script", src=prefix + "/static/stats.js"): pass title_ids = [ (_("New house numbers"), "daily"), (_("All house numbers"), "dailytotal"), (_("New house numbers, monthly"), "monthly"), (_("All house numbers, monthly"), "monthlytotal"), (_("Top house number editors"), "topusers"), (_("Coverage"), "progress"), ] with doc.tag("ul"): for title, identifier in title_ids: with doc.tag("li"): with doc.tag("a", href="#_" + identifier): doc.text(title) for title, identifier in title_ids: with doc.tag("h2", id="_" + identifier): doc.text(title) with doc.tag("div", klass="canvasblock"): with doc.tag("canvas", id=identifier): pass with doc.tag("h2"): doc.text(_("Note")) with doc.tag("div"): doc.text( _("""These statistics are provided purely for interested editors, and are not intended to reflect quality of work done by any given editor in OSM. If you want to use them to motivate yourself, that's fine, but keep in mind that a bit of useful work is more meaningful than a lot of useless work.""")) doc.asis(webframe.get_footer().getvalue()) return doc
def handle_street_housenumbers(ctx: context.Context, relations: areas.Relations, request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/street-housenumbers/ormezo/view-query.""" tokens = request_uri.split("/") relation_name = tokens[-2] action = tokens[-1] relation = relations.get_relation(relation_name) osmrelation = relation.get_config().get_osmrelation() doc = yattag.doc.Doc() doc.asis( webframe.get_toolbar(ctx, relations, "street-housenumbers", relation_name, osmrelation).getvalue()) prefix = ctx.get_ini().get_uri_prefix() if action == "view-query": with doc.tag("pre"): doc.text(relation.get_osm_housenumbers_query()) elif action == "update-result": query = relation.get_osm_housenumbers_query() buf, err = overpass_query.overpass_query(ctx, query) if err: doc.asis(util.handle_overpass_error(ctx, err).getvalue()) else: relation.get_files().write_osm_housenumbers(ctx, buf) doc.text(tr("Update successful: ")) link = prefix + "/missing-housenumbers/" + relation_name + "/view-result" doc.asis( util.gen_link(link, tr("View missing house numbers")).getvalue()) else: # assume view-result if not ctx.get_file_system().path_exists( relation.get_files().get_osm_housenumbers_path()): with doc.tag("div", id="no-osm-housenumbers"): doc.text(tr("No existing house numbers")) else: with relation.get_files().get_osm_housenumbers_csv_stream( ctx) as sock: doc.asis( util.html_table_from_list( util.tsv_to_list(sock)).getvalue()) date = get_housenumbers_last_modified(relation) doc.asis(webframe.get_footer(date).getvalue()) return doc
def handle_street_housenumbers(relations: areas.Relations, request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/street-housenumbers/ormezo/view-query.""" tokens = request_uri.split("/") relation_name = tokens[-2] action = tokens[-1] relation = relations.get_relation(relation_name) osmrelation = relation.get_config().get_osmrelation() doc = yattag.doc.Doc() doc.asis( webframe.get_toolbar(relations, "street-housenumbers", relation_name, osmrelation).getvalue()) prefix = config.Config.get_uri_prefix() if action == "view-query": with doc.tag("pre"): doc.text(relation.get_osm_housenumbers_query()) elif action == "update-result": query = relation.get_osm_housenumbers_query() try: relation.get_files().write_osm_housenumbers( overpass_query.overpass_query(query)) doc.text(_("Update successful: ")) link = prefix + "/missing-housenumbers/" + relation_name + "/view-result" doc.asis( util.gen_link(link, _("View missing house numbers")).getvalue()) except urllib.error.HTTPError as http_error: doc.asis(util.handle_overpass_error(http_error).getvalue()) else: # assume view-result if not os.path.exists( relation.get_files().get_osm_housenumbers_path()): with doc.tag("div", id="no-osm-housenumbers"): doc.text(_("No existing house numbers")) else: with relation.get_files().get_osm_housenumbers_stream( mode="r") as sock: table = util.tsv_to_list(sock) doc.asis(util.html_table_from_list(table).getvalue()) date = get_housenumbers_last_modified(relation) doc.asis(webframe.get_footer(date).getvalue()) return doc
def handle_streets(ctx: context.Context, relations: areas.Relations, request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/streets/ormezo/view-query.""" tokens = request_uri.split("/") relation_name = tokens[-2] action = tokens[-1] relation = relations.get_relation(relation_name) osmrelation = relation.get_config().get_osmrelation() doc = yattag.doc.Doc() doc.asis( webframe.get_toolbar(ctx, relations, "streets", relation_name, osmrelation).getvalue()) if action == "view-query": with doc.tag("pre"): doc.text(relation.get_osm_streets_query()) elif action == "update-result": query = relation.get_osm_streets_query() buf, err = overpass_query.overpass_query(ctx, query) if err: doc.asis(util.handle_overpass_error(ctx, err).getvalue()) else: relation.get_files().write_osm_streets(ctx, buf) streets = relation.get_config().should_check_missing_streets() if streets != "only": doc.text(tr("Update successful: ")) link = ctx.get_ini().get_uri_prefix( ) + "/missing-housenumbers/" + relation_name + "/view-result" doc.asis( util.gen_link(link, tr("View missing house numbers")).getvalue()) else: doc.text(tr("Update successful.")) else: # assume view-result with relation.get_files().get_osm_streets_csv_stream(ctx) as sock: table = util.tsv_to_list(sock) doc.asis(util.html_table_from_list(table).getvalue()) doc.asis( webframe.get_footer(get_streets_last_modified(relation)).getvalue()) return doc
def handle_missing_housenumbers(ctx: context.Context, relations: areas.Relations, request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/missing-housenumbers/ormezo/view-[result|query].""" tokens = request_uri.split("/") relation_name = tokens[-2] action = tokens[-1] date = None relation = relations.get_relation(relation_name) osmrelation = relation.get_config().get_osmrelation() doc = yattag.doc.Doc() doc.asis( webframe.get_toolbar(ctx, relations, "missing-housenumbers", relation_name, osmrelation).getvalue()) if action == "view-turbo": doc.asis( missing_housenumbers_view_turbo(relations, request_uri).getvalue()) elif action == "view-query": with doc.tag("pre"): with relation.get_files().get_ref_housenumbers_stream( ctx, "rb") as sock: doc.text(util.from_bytes(sock.read())) date = get_last_modified( relation.get_files().get_ref_housenumbers_path()) elif action == "update-result": doc.asis( missing_housenumbers_update(ctx, relations, relation_name).getvalue()) else: # assume view-result doc.asis( missing_housenumbers_view_res(ctx, relations, request_uri).getvalue()) if not date: date = ref_housenumbers_last_modified(relations, relation_name) doc.asis(webframe.get_footer(date).getvalue()) return doc
def handle_additional_housenumbers(ctx: context.Context, relations: areas.Relations, request_uri: str) -> yattag.doc.Doc: """Expected request_uri: e.g. /osm/additional-housenumbers/ujbuda/view-[result|query].""" tokens = request_uri.split("/") relation_name = tokens[-2] # action would be tokens[-1] relation = relations.get_relation(relation_name) osmrelation = relation.get_config().get_osmrelation() doc = yattag.doc.Doc() doc.asis( webframe.get_toolbar(ctx, relations, "additional-housenumbers", relation_name, osmrelation).getvalue()) # assume action is view-result doc.asis( wsgi_additional.additional_housenumbers_view_result( ctx, relations, request_uri).getvalue()) date = housenumbers_diff_last_modified(relation) doc.asis(webframe.get_footer(date).getvalue()) return doc