From a09f24811300a70219033e80f49a28fadae4a6d8 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Tue, 31 Aug 2021 18:05:59 +0200 Subject: [PATCH] Refactor habit list collection in repetition migration --- loop/repetitions.py | 65 +++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 38 deletions(-) diff --git a/loop/repetitions.py b/loop/repetitions.py index c7c06f6..83f12c2 100644 --- a/loop/repetitions.py +++ b/loop/repetitions.py @@ -4,7 +4,7 @@ import re def migrate(db, habitlist, events): c = db.cursor() - habits = simple_habits_list(c, habitlist) + habits = habit_list_add_ids(c, habitlist) repetitions = get_all_repetitions(habits, events) for rep in repetitions: add_to_database( @@ -34,6 +34,23 @@ def get_all_repetitions(habits, events): return repetitions +def extract_tags(text, tagmarker="#"): + """Return lists of tuples of all event tags found in text. + Parameters: + text (str): The text to search through. + tagmarker (str): Optional character marking beginning of tag, defaults to '#'. + Returns: + tags (list): List of tuples in the form [('tag', '3'), ('anothertag', '')]. + """ + string_tags = re.findall(rf"{tagmarker}(\w+)(?:\((\d+)\))?", text) + tags_with_int_counters = [] + for tag in string_tags: + tags_with_int_counters.append((tag[0], None if tag[1] == "" else int(tag[1]))) + return tags_with_int_counters + + +# does not do: +# non-range habits but still #habit(3) number included, adding multiple? def tags_to_repetitions(habit, tags, timestamp): """Return a list of all repetitions generated from the tags and habits passed in. Parameters: @@ -56,43 +73,21 @@ def tags_to_repetitions(habit, tags, timestamp): return reps -def extract_tags(text, tagmarker="#"): - """Return lists of tuples of all event tags found in text. - Parameters: - text (str): The text to search through. - tagmarker (str): Optional character marking beginning of tag, defaults to '#'. - Returns: - tags (list): List of tuples in the form [('tag', '3'), ('anothertag', '')]. - """ - string_tags = re.findall(rf"{tagmarker}(\w+)(?:\((\d+)\))?", text) - tags_with_int_counters = [] - for tag in string_tags: - tags_with_int_counters.append((tag[0], None if tag[1] == "" else int(tag[1]))) - return tags_with_int_counters - - # TODO possibly just get rid of this entirely -def simple_habits_list(c, habitlist): - """Return simplified collection of habits, only carrying name, tag, id. +def habit_list_add_ids(c, habitlist): + """Return the collection of habits with their sqlite id added. Parameters: c (sqlite.db.cursor): SQL cursor of database to query. habitlist (list): Full habit collection to return a simplified view of. Returns: - habitlist (list): Simple habitlist, habit name, tag, and id. - Copy of original, changes do not affect original. + habitlist (list): The full habit collection passed in unchanged, + except for an id added to each habit corresponding + to their id in sqlite database and Loop repetitions. """ - simple = [] - for h in habitlist: - simple.append( - { - "name": h["name"], - "description": h["description"], - "id": fetch_habit_id(c, h["uuid"]), - } - ) - if "type" in h: - simple[-1]["type"] = h["type"] - return simple + with_id = habitlist.copy() + for h in with_id: + h["id"] = fetch_habit_id(c, h["uuid"]) + return with_id def fetch_habit_id(c, uuid): @@ -109,12 +104,6 @@ def fetch_habit_id(c, uuid): return id[0] -# does not do: -# ranges in habits (should check for habit being range, then taking #habit(3) number into account) -# also, range trackers: multiply value by 1,000 -# non-range habits but still #habit(3) number included, adding multiple? - - def add_to_database(cursor, habit_id, timestamp, value=2): try: cursor.execute(