Exemplo n.º 1
0
def handle_street_housenumbers(relations: helpers.Relations, request_uri: str) -> yattag.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.asis(get_toolbar(relations, "street-housenumbers", relation_name, osmrelation).getvalue())

    if action == "view-query":
        with doc.tag("pre"):
            doc.text(relation.get_osm_housenumbers_query())
    elif action == "view-result":
        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())
    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 = "/osm/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())

    date = get_housenumbers_last_modified(relation)
    doc.asis(get_footer(date).getvalue())
    return doc
Exemplo n.º 2
0
 def test_escape(self) -> None:
     """Tests escaping."""
     sock = util.CsvIO(io.StringIO("\"h,1\"\th2\n"))
     ret = util.tsv_to_list(sock)
     self.assertEqual(len(ret), 1)
     row1 = [cell.getvalue() for cell in ret[0]]
     # Note how this is just h,1 and not "h,1".
     self.assertEqual(row1, ['h,1', 'h2'])
Exemplo n.º 3
0
 def test_happy(self) -> None:
     """Tests the happy path."""
     sock = io.StringIO("h1\th2\n\nv1\tv2\n")
     ret = util.tsv_to_list(sock)
     self.assertEqual(len(ret), 2)
     row1 = [cell.getvalue() for cell in ret[0]]
     self.assertEqual(row1, ['h1', 'h2'])
     row2 = [cell.getvalue() for cell in ret[1]]
     self.assertEqual(row2, ['v1', 'v2'])
Exemplo n.º 4
0
 def test_type(self) -> None:
     """Tests when a @type column is available."""
     stream = io.StringIO("@id\t@type\n42\tnode\n")
     ret = util.tsv_to_list(stream)
     self.assertEqual(len(ret), 2)
     row1 = [cell.getvalue() for cell in ret[0]]
     self.assertEqual(row1, ["@id", "@type"])
     row2 = [cell.getvalue() for cell in ret[1]]
     cell_a2 = '<a href="https://www.openstreetmap.org/node/42" target="_blank">42</a>'
     self.assertEqual(row2, [cell_a2, "node"])
Exemplo n.º 5
0
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
Exemplo n.º 6
0
def handle_streets(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(relations, "streets", relation_name,
                             osmrelation).getvalue())

    prefix = config.Config.get_uri_prefix()
    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()
        try:
            relation.get_files().write_osm_streets(
                overpass_query.overpass_query(query))
            streets = relation.get_config().should_check_missing_streets()
            if streets != "only":
                doc.text(_("Update successful: "))
                link = prefix + "/missing-housenumbers/" + relation_name + "/view-result"
                doc.asis(
                    util.gen_link(link,
                                  _("View missing house numbers")).getvalue())
            else:
                doc.text(_("Update successful."))
        except urllib.error.HTTPError as http_error:
            doc.asis(util.handle_overpass_error(http_error).getvalue())
    else:
        # assume view-result
        with relation.get_files().get_osm_streets_stream("r") 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