"""! @brief Defines the low-level DAO class to handle addresses.""" ## # @file AddressDAO.py # # @brief Defines the AddressDAO class. # # @section description_addressdao Description # Defines the low-lever DAO class to handle CRUD operations on addresses. # - AddressDAO (DAO class) # # @section libraries_addressdao Libraries/Modules # - mariadb Python module # - MariaDB Connector/Python enables python programs to access MariaDB and MySQL databases, using an API which is compliant with the Python DB API 2.0 (PEP-249). # - json Python standard library # - JSON encoder and decoder. # - DbManager Local class # - Singleton class to provide for the database connection. # # @section notes_addressdao Notes # - None. # # @section todo_addressdao TODO # - None. # # @section author_addressdao Author(s) # - Created by Linuxero on 03/14/2025. # - Modified by Linuxero on 03/14/2025. # # Copyright (c) 2025 Schnaxero. All rights reserved. from .DbManager import DbManager import mariadb import json class AddressDAO: """! The AddressDAO class. Defines a low-level class utilized for DAO. Handles the address CRUD operations. """ __cur = None def __init__(self): """! The AddressDAO class initializer. """ #print(f"*** File: {__file__}, init()") self.__con = DbManager().getConnection() if self.__con: self.__cur = self.__con.cursor() def __importPlz(self): """! Utility function to import zipcodes from an external databases. """ with open("pfad zur datei", "r") as plz: postcodes = json.load(plz) country = "Deutschland" try: for i in postcodes: test =i["plz_name"].split(",") for town in test: if "u.a" in town: town = town[:-4] town = town.strip() if town: print(f"PROCESSING {i['name']} {town}") self.__cur.callproc("importLocation", (country, town, i["name"],)) except mariadb.OperationalError as e: print(f"Database Error: {e}") finally: self.__con.commit() print("FINISHED")# def __importCountry(self): """! Utility function to import countries information from an external databases. """ with open("pfad zur datei", "r") as country: countries = json.load(country) old = "" try: for i in countries["daten"]: if i[4] == "–": continue elif i[8] == "YU": continue elif i[4] == old: continue elif i[4] == "Serbien und Montenegro": continue elif i[4] == "Bosnien und Herzegowina": continue print(i[4], i[3], i[2], i[8], i[7]) self.__cur.execute("INSERT INTO country (country, countryshort, nationality, iso2, iso3) VALUES (%s, %s, %s, %s, %s)", (i[4], i[3], i[2], i[8], i[7])) old = i[4] except mariadb.OperationalError as e: print(f"Database Error: {e}") finally: self.__con.commit() print("FINISHED")# def getAddressData(self, all = True, zipcode = None): """! Loads available addresses in the program. @param all Filter to get specific addresses as a boolean. @param zipcode Specific zipcode pattern. @return Found addresses as a dictionary on success, None on failure. """ try: if self.__cur: self.__cur.callproc("getAddress", (all, zipcode,)) self.__data = self.__cur.fetchall() return self.__data else: return None except mariadb.Error as e: print(str(e))