diff --git a/loader_3_remote_reader.py b/loader_3_remote_reader.py deleted file mode 100644 index 9299ce7..0000000 --- a/loader_3_remote_reader.py +++ /dev/null @@ -1,9 +0,0 @@ -from lib.csv_loader import CSVLoader - - -def main(): - ... - - -if __name__ == "__main__": - main() diff --git a/loader_4_remote_reader.py b/loader_4_remote_reader.py new file mode 100644 index 0000000..aa5f4e9 --- /dev/null +++ b/loader_4_remote_reader.py @@ -0,0 +1,52 @@ +import csv +from enum import IntEnum + +import requests +from lib.csv_loader import CSVLoader, CSVRow +from lib.csv_loader.csv_loader import BoolValuePair, CSVRowDefaultConfig + + +class ActionEnum(IntEnum): + INSERT = 0 + UPDATE = 1 + DELETE = 2 + + +class AssetRow(CSVRow): + asset_id: str + asset_action: ActionEnum + serial_number: str + brand_id: int + model_id: int + + +def main(): + response = requests.get( + "https://www.ekirin.com/tmp/asset-import/importer-italy-data.csv" + ) + # iterator will return lines as bytes, so help it figure out it's a string + response.encoding = "utf-8" + csv_response_iterator = response.iter_lines(decode_unicode=True) + + reader = csv.reader(csv_response_iterator, delimiter=";") + csv_loader = CSVLoader[AssetRow]( + reader=reader, + output_model_cls=AssetRow, + has_header=True, + aggregate_errors=True, + ) + + result = csv_loader.read_rows() + + "Results:" + for row in result.rows: + print(row) + + if result.has_errors(): + print("Errors:") + for error in result.errors: + print(f"Line: {error.line_number}: {error.original_error}") + + +if __name__ == "__main__": + main() diff --git a/loader_5_from_list.py b/loader_5_from_list.py new file mode 100644 index 0000000..54f670f --- /dev/null +++ b/loader_5_from_list.py @@ -0,0 +1,61 @@ +import csv +from enum import IntEnum + +import requests +from lib.csv_loader import CSVLoader, CSVRow +from lib.csv_loader.csv_loader import BoolValuePair, CSVRowDefaultConfig + + +class ActionEnum(IntEnum): + INSERT = 0 + UPDATE = 1 + DELETE = 2 + + +class AssetRow(CSVRow): + asset_id: str + asset_action: ActionEnum + serial_number: str + brand_id: int + model_id: int + + +csv_content = [ + '"asset_id";"asset_action";"serial_number";"brand_id";"model_id";"fiscal_device";"master_system_id";"uid";"data_type";"audit_id"', + '"kdHSqoiZhkeuTVBNxraN";0;619424146021142446798498081758;99;1153541;1;"SSsEStytXSjIsinUzftG";"06ce0fed-d80c-4752-8923-544da7c876b6";"CUMULATIVE";"NONE"', + '"jrHoRAenIJMUbCIPBtth";0;719320166058188715248485944107;814397;6;0;"";"";"";""', + '"tzfBwDrLbIDhWzlfHjLe";0;915703577452730298126736643045;51500;64746;0;"";"";"";""', + '"cAPRArDozeDakrTfnCPm";0;971562679443770830776578263954;6;724678;1;"MrFOJXhbwxrisNBpUzOh";"beb2380f-8852-451e-8365-87e6816292ce";"PERIOD";"ID106"', + '"tEmFxUedeCvOuKCpgmGu";0;938691817183552061187410560615;5163;4265946;0;"";"";"";""', + '"LWIMpOllWJtrJaooBaMP";0;614842602516041785255220888836;6;401143;1;"lCSFLItlCYbEhPnvIDSe";"eac6420e-7d1d-48e9-a601-13b9d6ca8f90";"CUMULATIVE";"ID102"', + '"ocRQOONQyixZasLsHyNO";0;706550829841828070469899744448;954;73;0;"";"";"";""', + '"vewYeIVZySKAUUkpieAx";0;363107851149183544404834214880;322377;2192890;1;"UfCZtXAnRIWTYJIahZKf";"87212d41-3793-4a78-9b3c-924ad6210cf5";"CUMULATIVE";"DA101"', + '"qzYCDCHvVPmdMThIMjUd";0;268178212822631478031448196246;5;86955;0;"";"";"";""', + '"ptMtXpAaKvsHTkijcrzl";0;452950079406792377275633884199;996;954395;0;"";"";"";""', + '"BZuEjftneISKQcVDEXeK";0;468342155909862741706527121608;312117372;546;0;"";"";"";"" ', +] + + +def main(): + reader = csv.reader(csv_content, delimiter=";") + csv_loader = CSVLoader[AssetRow]( + reader=reader, + output_model_cls=AssetRow, + has_header=True, + aggregate_errors=True, + ) + + result = csv_loader.read_rows() + + "Results:" + for row in result.rows: + print(row) + + if result.has_errors(): + print("Errors:") + for error in result.errors: + print(f"Line: {error.line_number}: {error.original_error}") + + +if __name__ == "__main__": + main() diff --git a/requirements.txt b/requirements.txt index 572b352..903705e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ pydantic +requests