diff --git a/README.md b/README.md index f72631d..548774e 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ Further optional arguments: exclude centers --center-exclude-regex CENTER_EXCLUDE_REGEX exclude centers by regex +--additional-center "name;city;link", -ac "name;city;link + Add additional centers or doctors e.g. "Corona Impfzentren - Berlin;Berlin;/institut/berlin/ciz-berlin-berlin" --include-neighbor-city, -n include neighboring cities --start-date START_DATE diff --git a/doctoshotgun.py b/doctoshotgun.py index 488a462..053406c 100755 --- a/doctoshotgun.py +++ b/doctoshotgun.py @@ -264,7 +264,7 @@ def do_login(self, code): return True - def find_centers(self, where, motives=None): + def find_centers(self, where, motives=None, additional_centers=None): if motives is None: motives = self.vaccine_motives.keys() for city in where: @@ -300,6 +300,17 @@ def find_centers(self, where, motives=None): except KeyError: pass + if additional_centers: + for additional_center in additional_centers: + splitted = additional_center.split(';') + if len(splitted) == 3: + yield { + "name_with_title": splitted[0], #"Corona Impfzentren - Berlin", + "city": splitted[1], #"Berlin", + "url": splitted[2], #"/institut/berlin/ciz-berlin-berlin" + } + + def get_patients(self): self.master_patient.go() @@ -618,6 +629,8 @@ def main(self, cli_args=None): action='append', help='exclude centers') parser.add_argument('--center-exclude-regex', action='append', help='exclude centers by regex') + parser.add_argument('--additional-center', '-ac', + action='append', help='Add additional centers or doctors: "name;city;link" e.g. "Corona Impfzentren - Berlin;Berlin;/institut/berlin/ciz-berlin-berlin"') parser.add_argument( '--include-neighbor-city', '-n', action='store_true', help='include neighboring cities') parser.add_argument('--start-date', type=str, default=None, @@ -756,7 +769,7 @@ def main(self, cli_args=None): while True: log_ts() try: - for center in docto.find_centers(cities, motives): + for center in docto.find_centers(cities, motives, args.additional_center): if args.center: if center['name_with_title'] not in args.center: logging.debug("Skipping center '%s'" % diff --git a/test_browser.py b/test_browser.py index 63e7aa2..64f27be 100644 --- a/test_browser.py +++ b/test_browser.py @@ -114,6 +114,38 @@ def test_find_centers_de_returns_502_should_fail(tmp_path): pass +@responses.activate +def test_find_centers_de_should_return_additional_centers(tmp_path): + docto = DoctolibDE("roger.phillibert@gmail.com", + "1234", responses_dirname=tmp_path) + docto.BASEURL = "https://127.0.0.1" + + responses.add( + responses.GET, + "https://127.0.0.1/impfung-covid-19-corona/K%C3%B6ln?ref_visit_motive_ids%5B%5D=6768&ref_visit_motive_ids%5B%5D=6769&ref_visit_motive_ids%5B%5D=6936&ref_visit_motive_ids%5B%5D=6937&ref_visit_motive_ids%5B%5D=7978&ref_visit_motive_ids%5B%5D=7109&ref_visit_motive_ids%5B%5D=7110", + status=200, + body="{}" + ) + + additional_centers = [ + 'Corona Impfzentren - Köln;Köln;/institut/koeln/ciz-koeln-koeln', + 'Dr. Dre;Köln;/allgemeinmedizin/koeln/dr-dre' + ] + + centers = 0 + for result in docto.find_centers(["Köln"], None, additional_centers): + splitted = additional_centers[centers].split(';') + + assert result['name_with_title'] == splitted[0] + assert result['city'] == splitted[1] + assert result['url'] == splitted[2] + + centers += 1 + + assert centers == len(additional_centers) + assert len(responses.calls) == 1 + + @responses.activate def test_book_slots_should_succeed(tmp_path): """