Refactor habit list collection in repetition migration
This commit is contained in:
parent
189d1bb8af
commit
a09f248113
1 changed files with 27 additions and 38 deletions
|
@ -4,7 +4,7 @@ import re
|
||||||
|
|
||||||
def migrate(db, habitlist, events):
|
def migrate(db, habitlist, events):
|
||||||
c = db.cursor()
|
c = db.cursor()
|
||||||
habits = simple_habits_list(c, habitlist)
|
habits = habit_list_add_ids(c, habitlist)
|
||||||
repetitions = get_all_repetitions(habits, events)
|
repetitions = get_all_repetitions(habits, events)
|
||||||
for rep in repetitions:
|
for rep in repetitions:
|
||||||
add_to_database(
|
add_to_database(
|
||||||
|
@ -34,6 +34,23 @@ def get_all_repetitions(habits, events):
|
||||||
return repetitions
|
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):
|
def tags_to_repetitions(habit, tags, timestamp):
|
||||||
"""Return a list of all repetitions generated from the tags and habits passed in.
|
"""Return a list of all repetitions generated from the tags and habits passed in.
|
||||||
Parameters:
|
Parameters:
|
||||||
|
@ -56,43 +73,21 @@ def tags_to_repetitions(habit, tags, timestamp):
|
||||||
return reps
|
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
|
# TODO possibly just get rid of this entirely
|
||||||
def simple_habits_list(c, habitlist):
|
def habit_list_add_ids(c, habitlist):
|
||||||
"""Return simplified collection of habits, only carrying name, tag, id.
|
"""Return the collection of habits with their sqlite id added.
|
||||||
Parameters:
|
Parameters:
|
||||||
c (sqlite.db.cursor): SQL cursor of database to query.
|
c (sqlite.db.cursor): SQL cursor of database to query.
|
||||||
habitlist (list): Full habit collection to return a simplified view of.
|
habitlist (list): Full habit collection to return a simplified view of.
|
||||||
Returns:
|
Returns:
|
||||||
habitlist (list): Simple habitlist, habit name, tag, and id.
|
habitlist (list): The full habit collection passed in unchanged,
|
||||||
Copy of original, changes do not affect original.
|
except for an id added to each habit corresponding
|
||||||
|
to their id in sqlite database and Loop repetitions.
|
||||||
"""
|
"""
|
||||||
simple = []
|
with_id = habitlist.copy()
|
||||||
for h in habitlist:
|
for h in with_id:
|
||||||
simple.append(
|
h["id"] = fetch_habit_id(c, h["uuid"])
|
||||||
{
|
return with_id
|
||||||
"name": h["name"],
|
|
||||||
"description": h["description"],
|
|
||||||
"id": fetch_habit_id(c, h["uuid"]),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
if "type" in h:
|
|
||||||
simple[-1]["type"] = h["type"]
|
|
||||||
return simple
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_habit_id(c, uuid):
|
def fetch_habit_id(c, uuid):
|
||||||
|
@ -109,12 +104,6 @@ def fetch_habit_id(c, uuid):
|
||||||
return id[0]
|
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):
|
def add_to_database(cursor, habit_id, timestamp, value=2):
|
||||||
try:
|
try:
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
|
|
Loading…
Reference in a new issue