From f461df8266528fbbf1457be9aa8f7a89d651f0cc Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Wed, 1 Nov 2023 15:11:51 +0100 Subject: [PATCH] Done for now --- changedetectionio/importer.py | 15 ++- changedetectionio/store.py | 2 + .../tests/import/spreadsheet.xlsx | Bin 0 -> 29444 bytes changedetectionio/tests/test_import.py | 88 +++++++++++++++++- 4 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 changedetectionio/tests/import/spreadsheet.xlsx diff --git a/changedetectionio/importer.py b/changedetectionio/importer.py index 565c23ad1..963482de1 100644 --- a/changedetectionio/importer.py +++ b/changedetectionio/importer.py @@ -174,8 +174,15 @@ class import_xlsx_wachete(Importer): if data.get('xpath'): #@todo split by || ? extras['include_filters'] = [data.get('xpath')] - if data.get('title'): - extras['title'] = [data.get('title').strip()] + if data.get('name'): + extras['title'] = [data.get('name').strip()] + if data.get('interval (min)'): + minutes = int(data.get('interval (min)')) + hours, minutes = divmod(minutes, 60) + days, hours = divmod(hours, 24) + weeks, days = divmod(days, 7) + extras['time_between_check'] = {'weeks': weeks, 'days': days, 'hours': hours, 'minutes': minutes, 'seconds': 0} + # At minimum a URL is required. if data.get('url'): @@ -200,7 +207,7 @@ class import_xlsx_wachete(Importer): flash( - "{} Imported from Wachete .xlsx in {:.2f}s".format(len(self.new_uuids), time.time() - now)) + "{} imported from Wachete .xlsx in {:.2f}s".format(len(self.new_uuids), time.time() - now)) class import_xlsx_custom(Importer): @@ -270,4 +277,4 @@ class import_xlsx_custom(Importer): row += 1 flash( - "{} Imported from custom .xlsx in {:.2f}s".format(len(self.new_uuids), time.time() - now)) + "{} imported from custom .xlsx in {:.2f}s".format(len(self.new_uuids), time.time() - now)) diff --git a/changedetectionio/store.py b/changedetectionio/store.py index e476afae5..6306a3913 100644 --- a/changedetectionio/store.py +++ b/changedetectionio/store.py @@ -360,6 +360,8 @@ class ChangeDetectionStore: if write_to_disk_now: self.sync_to_json() + print("added ", url) + return new_uuid def visualselector_data_is_ready(self, watch_uuid): diff --git a/changedetectionio/tests/import/spreadsheet.xlsx b/changedetectionio/tests/import/spreadsheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..600847b897dd564c4af1b59632e492b6bc697d5c GIT binary patch literal 29444 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 literal 0 HcmV?d00001 diff --git a/changedetectionio/tests/test_import.py b/changedetectionio/tests/test_import.py index a044ff793..4772226c7 100644 --- a/changedetectionio/tests/test_import.py +++ b/changedetectionio/tests/test_import.py @@ -1,16 +1,19 @@ #!/usr/bin/python3 - +import io +import os import time from flask import url_for -from .util import live_server_setup +from .util import live_server_setup, wait_for_all_checks + + def test_setup(client, live_server): live_server_setup(live_server) def test_import(client, live_server): # Give the endpoint time to spin up - time.sleep(1) + wait_for_all_checks(client) res = client.post( url_for("import_page"), @@ -119,3 +122,82 @@ def test_import_distillio(client, live_server): res = client.get(url_for("form_delete", uuid="all"), follow_redirects=True) # Clear flask alerts res = client.get(url_for("index")) + +def test_import_custom_xlsx(client, live_server): + """Test can upload a excel spreadsheet and the watches are created correctly""" + + #live_server_setup(live_server) + dirname = os.path.dirname(__file__) + filename = os.path.join(dirname, 'import/spreadsheet.xlsx') + with open(filename, 'rb') as f: + + data= { + 'file_mapping': 'custom', + 'custom_xlsx[col_0]': '1', + 'custom_xlsx[col_1]': '3', + 'custom_xlsx[col_2]': '5', + 'custom_xlsx[col_3]': '4', + 'custom_xlsx[col_type_0]': 'title', + 'custom_xlsx[col_type_1]': 'url', + 'custom_xlsx[col_type_2]': 'include_filters', + 'custom_xlsx[col_type_3]': 'interval_minutes', + 'xlsx_file': (io.BytesIO(f.read()), 'spreadsheet.xlsx') + } + + res = client.post( + url_for("import_page"), + data=data, + follow_redirects=True, + ) + + assert b'2 imported from custom .xlsx' in res.data + + res = client.get( + url_for("index") + ) + + + assert b'Somesite results ABC' in res.data + assert b'City news results' in res.data + + # Just find one to check over + for uuid, watch in live_server.app.config['DATASTORE'].data['watching'].items(): + if watch.get('title') == 'Somesite results ABC': + filters = watch.get('include_filters') + assert filters[0] == '/html[1]/body[1]/div[4]/div[1]/div[1]/div[1]||//*[@id=\'content\']/div[3]/div[1]/div[1]||//*[@id=\'content\']/div[1]' + assert watch.get('time_between_check') == {'weeks': 0, 'days': 1, 'hours': 6, 'minutes': 24, 'seconds': 0} + +def test_import_watchete_xlsx(client, live_server): + """Test can upload a excel spreadsheet and the watches are created correctly""" + + #live_server_setup(live_server) + dirname = os.path.dirname(__file__) + filename = os.path.join(dirname, 'import/spreadsheet.xlsx') + with open(filename, 'rb') as f: + + data= { + 'file_mapping': 'wachete', + 'xlsx_file': (io.BytesIO(f.read()), 'spreadsheet.xlsx') + } + + res = client.post( + url_for("import_page"), + data=data, + follow_redirects=True, + ) + + assert b'2 imported from Wachete .xlsx' in res.data + + res = client.get( + url_for("index") + ) + + assert b'Somesite results ABC' in res.data + assert b'City news results' in res.data + + # Just find one to check over + for uuid, watch in live_server.app.config['DATASTORE'].data['watching'].items(): + if watch.get('title') == 'Somesite results ABC': + filters = watch.get('include_filters') + assert filters[0] == '/html[1]/body[1]/div[4]/div[1]/div[1]/div[1]||//*[@id=\'content\']/div[3]/div[1]/div[1]||//*[@id=\'content\']/div[1]' + assert watch.get('time_between_check') == {'weeks': 0, 'days': 1, 'hours': 6, 'minutes': 24, 'seconds': 0}