Skip to content
Snippets Groups Projects
Commit db74bb58 authored by Maximilian Loch's avatar Maximilian Loch
Browse files

code corrections according to PEP

parent 3765f2c3
No related branches found
No related tags found
No related merge requests found
db_conn.cfg db_conn.cfg
__pycache__
.vscode
\ No newline at end of file
...@@ -9,7 +9,14 @@ if __name__ == '__main__': ...@@ -9,7 +9,14 @@ if __name__ == '__main__':
# datenbank mit den schuldaten # datenbank mit den schuldaten
conn_config = ConfigParser() conn_config = ConfigParser()
conn_config.read("db_conn.cfg") conn_config.read("db_conn.cfg")
conn_str = f"host={conn_config['connection']['host']} port={conn_config['connection']['port']} dbname={conn_config['connection']['dbname']} user={conn_config['connection']['user']} password={conn_config['connection']['pwd']}"
conn_str = f"""
host={conn_config['connection']['host']}
port={conn_config['connection']['port']}
dbname={conn_config['connection']['dbname']}
user={conn_config['connection']['user']}
password={conn_config['connection']['pwd']}"""
url = r"https://chat.gdi-sh.de/aregapi/" url = r"https://chat.gdi-sh.de/aregapi/"
my_db = DBTools(conn_str) my_db = DBTools(conn_str)
......
...@@ -8,7 +8,14 @@ if __name__ == '__main__': ...@@ -8,7 +8,14 @@ if __name__ == '__main__':
# datenbank mit den schuldaten # datenbank mit den schuldaten
conn_config = ConfigParser() conn_config = ConfigParser()
conn_config.read("db_conn.cfg") conn_config.read("db_conn.cfg")
conn_str = f"host={conn_config['connection']['host']} port={conn_config['connection']['port']} dbname={conn_config['connection']['dbname']} user={conn_config['connection']['user']} password={conn_config['connection']['pwd']}"
conn_str = f"""
host={conn_config['connection']['host']}
port={conn_config['connection']['port']}
dbname={conn_config['connection']['dbname']}
user={conn_config['connection']['user']}
password={conn_config['connection']['pwd']}"""
url = r"https://chat.gdi-sh.de/aregapi/" url = r"https://chat.gdi-sh.de/aregapi/"
# logfile = r"geocoder.log" # logfile = r"geocoder.log"
...@@ -32,7 +39,7 @@ if __name__ == '__main__': ...@@ -32,7 +39,7 @@ if __name__ == '__main__':
areg_response = my_api.geocode(adresse) areg_response = my_api.geocode(adresse)
if areg_response.get("uri") is not None: if areg_response.get("uri") is not None:
areg_uri = areg_response.get("uri") areg_uri = areg_response["uri"]
my_db.update_uri(str(item[0]), areg_uri) my_db.update_uri(str(item[0]), areg_uri)
numfeatures += 1 numfeatures += 1
else: else:
...@@ -43,8 +50,12 @@ if __name__ == '__main__': ...@@ -43,8 +50,12 @@ if __name__ == '__main__':
if areg_response_key[0] == "ERROR": if areg_response_key[0] == "ERROR":
errorfeatures += 1 errorfeatures += 1
# log.append(areg_response_key[0] + ": " + areg_response.get(areg_response_key[0]) + f" | betroffene schule: {adresse['hnr']}\t{adresse['stn']}\t{adresse['plz']}\t{adresse['ort']}") print(
print(areg_response_key[0] + ": " + areg_response.get(areg_response_key[0]) + f" | betroffene schule: [{item[0]}]\t{adresse['hnr']}; {adresse['stn']}; {adresse['plz']}; {adresse['ort']}") areg_response_key[0] + ": " +
areg_response[areg_response_key[0]] +
f""" | betroffene schule: [{item[0]}]\t{adresse['hnr']};
{adresse['stn']}; {adresse['plz']}; {adresse['ort']}"""
)
my_db.closecursor() my_db.closecursor()
...@@ -54,5 +65,7 @@ if __name__ == '__main__': ...@@ -54,5 +65,7 @@ if __name__ == '__main__':
# out.write(item) # out.write(item)
percentage = round((numfeatures * 100) / maxfeatures, 2) percentage = round((numfeatures * 100) / maxfeatures, 2)
print(f"\nstatistics:\n {numfeatures} from {maxfeatures} geocoded >> {percentage}%\n {missinfeatures} features with missing attributes\n {errorfeatures} features with errors\n") print(f"""\nstatistics:\n {numfeatures} from {maxfeatures} geocoded >>
{percentage}%\n {missinfeatures} features with missing attributes\n
{errorfeatures} features with errors\n""")
print("geocoding dataset finished, closing programm") print("geocoding dataset finished, closing programm")
...@@ -7,67 +7,140 @@ import json ...@@ -7,67 +7,140 @@ import json
class DBTools: class DBTools:
""" """
Tools für das arbeiten mit der Datenbank, hier sind die select Funktionen zum Tools für das arbeiten mit der Datenbank, hier sind die select Funktionen
auslesen der Daten und zum updaten der Daten mit den Adressen. zum auslesen der Daten und zum updaten der Daten mit den Adressen.
""" """
def __init__(self, data): def __init__(self, data: str) -> None:
""" """
Aufbauen der Verbindung zu der Datenbank Aufbauen der Verbindung zu der Datenbank
:param str data: Connection String mit allen Informationen für die Verbindung zur Datenbank
:param str data: Connection String mit allen Informationen für die
Verbindung zur Datenbank
""" """
self.db_connection = psycopg2.connect(data) self.db_connection = psycopg2.connect(data)
self.cursor = self.db_connection.cursor() self.cursor = self.db_connection.cursor()
def select_adress(self): def select_adress(self):
""" """
Funktion zum selektieren der Adressdaten der Schulen um diese zu geocoden und ihnen URI aus dem AREG zuzuweisen. Funktion zum selektieren der Adressdaten der Schulen um diese zu
:return: Tupel mit alten Adressdaten der Schulen geocoden und ihnen URI aus dem AREG zuzuweisen.
:returns: Tupel mit alten Adressdaten der Schulen
:rtype: tuple :rtype: tuple
""" """
self.cursor.execute("select lokaleID, adressealt_hnr, adressealt_strasse, adressealt_plz, adressealt_ort from prototyp_areg.schulen;")
select_sql = """
select
lokaleID,
adressealt_hnr,
adressealt_strasse,
adressealt_plz,
adressealt_ort
from
prototyp_areg.schulen;"""
self.cursor.execute(select_sql)
query_result = self.cursor.fetchall() query_result = self.cursor.fetchall()
return query_result return query_result
def select_uri(self): def select_uri(self):
""" """
Funktion zum selektieren der URI aus dem Datensatz um diese mit aktuellen AREG Adressen anzureichern. Funktion zum selektieren der URI aus dem Datensatz um diese mit
:return: Tupel mit den AREG URI die in der Datenbank vorhanden sind, Safeguard ist vorhanden damit keine NULL Werte kommen. aktuellen AREG Adressen anzureichern.
:return: Tupel mit den AREG URI die in der Datenbank vorhanden sind,
Safeguard ist vorhanden damit keine NULL Werte kommen.
:rtype: tuple :rtype: tuple
""" """
self.cursor.execute("select distinct(areg_uri) from prototyp_areg.schulen where areg_uri like 'https://%';")
select_sql = """
select
distinct(areg_uri)
from
prototyp_areg.schulen
where
areg_uri like 'https://%';"""
self.cursor.execute(select_sql)
query_data = self.cursor.fetchall() query_data = self.cursor.fetchall()
return query_data return query_data
def update_uri(self, param_dbid: str, param_uri: str): def update_uri(self, param_dbid: str, param_uri: str) -> None:
""" """
Funktion zum Update der Datenbank mit den URI aus dem Geocoder. Funktion zum Update der Datenbank mit den URI aus dem Geocoder.
:param str param_dbid: ID der Schule aus der Datenbank (nicht AREG URI) :param str param_dbid: ID der Schule aus der Datenbank (nicht AREG URI)
:param str param_uri: AREG URI :param str param_uri: AREG URI
""" """
self.cursor.execute("alter table prototyp_areg.schulen add column if not exists areg_uri varchar;")
self.cursor.execute(f"update prototyp_areg.schulen set areg_uri='{param_uri}' where lokaleID='{param_dbid}';")
def update_adress(self, data, param_uri): sql_alter = """
alter table
prototyp_areg.schulen
add column if not exists
areg_uri varchar;
"""
sql_update = f"""
update
prototyp_areg.schulen
set
areg_uri='{param_uri}'
where
lokaleID='{param_dbid}';
""" """
Funktion zum Update der Datenbank mit den neuen Adressdaten aus dem AREG anhand der URI.
:param dict data: GeoJSON aus der AREG API mit den aktuellen Adressdaten self.cursor.execute(sql_alter)
self.cursor.execute(sql_update)
def update_adress(self, data, param_uri: str) -> None:
"""
Funktion zum Update der Datenbank mit den neuen Adressdaten aus dem
AREG anhand der URI.
:param dict data: GeoJSON aus der AREG API mit den aktuellen
Adressdaten
:param param_uri: AREG URI zum zuordnen der Adressdaten :param param_uri: AREG URI zum zuordnen der Adressdaten
""" """
geometry = str(data['geometry']) geometry = str(data['geometry'])
geometry = geometry.replace("'", '"') geometry = geometry.replace("'", '"')
self.cursor.execute("alter table prototyp_areg.schulen add column if not exists hnr varchar, add column if not exists strasse varchar, add column if not exists plz varchar, add column if not exists ort varchar, add column if not exists geom geometry(Point, 4326);") sql_alter = """
self.cursor.execute(f"update prototyp_areg.schulen set hnr='{data['properties']['hnr']}' where areg_uri='{param_uri}'") alter table
self.cursor.execute(f"update prototyp_areg.schulen set strasse='{data['properties']['stn']}' where areg_uri='{param_uri}'") prototyp_areg.schulen
self.cursor.execute(f"update prototyp_areg.schulen set plz='{data['properties']['plz']}' where areg_uri='{param_uri}'") add column if not exists
self.cursor.execute(f"update prototyp_areg.schulen set ort='{data['properties']['ort']}' where areg_uri='{param_uri}'") hnr varchar,
self.cursor.execute(f"update prototyp_areg.schulen set geom=ST_GeomFromGeoJSON('{geometry}') where areg_uri='{param_uri}'") add column if not exists
strasse varchar,
def closecursor(self): add column if not exists
""" plz varchar,
Funktion zum Commit und Schießen der Datenbankverbindung nachdem alle Änderungen vorgenommen wurden. add column if not exists
ort varchar,
add column if not exists
geom geometry(Point, 4326);
"""
sql_update = f"""
update
prototyp_areg.schulen
set
hnr='{data['properties']['hnr']}',
strasse='{data['properties']['stn']}',
plz='{data['properties']['plz']}',
ort='{data['properties']['ort']}',
geom=ST_GeomFromGeoJSON('{geometry}')
where
areg_uri='{param_uri}';
"""
self.cursor.execute(sql_alter)
self.cursor.execute(sql_update)
def closecursor(self) -> None:
"""
Funktion zum Commit und Schießen der Datenbankverbindung nachdem alle
Änderungen vorgenommen wurden.
""" """
# schließt den cursor # schließt den cursor
self.db_connection.commit() self.db_connection.commit()
...@@ -77,22 +150,28 @@ class DBTools: ...@@ -77,22 +150,28 @@ class DBTools:
class APITools: class APITools:
""" """
Tools für das Arbeiten mit der pygeoAPI. Tools für das Arbeiten mit der pygeoAPI. Hier sind die Funktionen zum
Hier sind die Funktionen zum aufrufen des Geocoder Prozesses und zum Finden der Adresse anhand der URI aufrufen des Geocoder Prozesses und zum Finden der Adresse anhand der URI
""" """
def __init__(self, param_url): def __init__(self, param_url):
""" """
Festlegen der Base URL der API für die weitere Verwendung in den Funktionen der Klasse. Festlegen der Base URL der API für die weitere Verwendung in den
Funktionen der Klasse.
:param str param_url: Base URL der API :param str param_url: Base URL der API
""" """
self.base_url = param_url self.base_url = param_url
def geocode(self, data: dict): def geocode(self, data: dict) -> dict:
""" """
Funktion zum Aufrufen des Geocoder Prozesses in der API. Bereinigung finden nicht in dieser Funktion oder diesem Skript sondern im Geocoder statt! Funktion zum Aufrufen des Geocoder Prozesses in der API. Bereinigung
:param data: Dictionary mit den alten Adressdaten finden nicht in dieser Funktion oder diesem Skript sondern im Geocoder
:type: dict statt!
:return: Dictionary entweder mit einem "uri" Objekt oder einem "message" Objekt, wenn uri kommt ist alles gut, wenn message kommt dann ist ein fehler aufgetreten
:param dict data: Dictionary mit den alten Adressdaten
:returns: Dictionary entweder mit einem "uri" Objekt oder einem
"message" Objekt, wenn uri kommt ist alles gut, wenn message kommt
dann ist ein fehler aufgetreten
:rtype: dict :rtype: dict
""" """
url = self.base_url + r"processes/geocoder/execution" url = self.base_url + r"processes/geocoder/execution"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment