From 2bc387a0bc9d461470a8abc20f013b691b6b7494 Mon Sep 17 00:00:00 2001 From: Gus Thomas Date: Sun, 21 Apr 2024 22:43:00 -0400 Subject: [PATCH 1/6] fix: API docs for searching by date --- API.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/API.md b/API.md index aa22ada..ce869a5 100644 --- a/API.md +++ b/API.md @@ -101,6 +101,8 @@ body: `'query'` (required): string representing the string to search for in the 'search_field' `'return_fields'` (required): list of strings representing aspects of the notes you want returned back to you - must be in ('modified_date', 'title', 'created_date', 'tag') + `'start'` (option): start date for range to search by date within + `'end'` (option): end date for range to search by date within ## Additional Feature 2: Search by title Run this with `'search_field': 'title'` From a2587a56472f222f10df08085da1bfbf01f396f0 Mon Sep 17 00:00:00 2001 From: Gus Thomas Date: Sun, 21 Apr 2024 22:48:31 -0400 Subject: [PATCH 2/6] add: search date range --- app.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/app.py b/app.py index 91d3cff..63c2100 100644 --- a/app.py +++ b/app.py @@ -293,15 +293,32 @@ def search_notes(): FROM notes WHERE notes.content == '{query}' """ + # modified_date looks like 'YYYY-MM-DD' if search_field == 'modified_date': - start = datetime.strptime(query, '%Y-%m-%d') + start_query = payload.get('start') + end_query = payload.get('end') + start = datetime.strptime(start_query, '%Y-%m-%d') + end = datetime.strptime(end_query, '%Y-%m-%d') + # Construct SQL query + sql_query = f""" + SELECT {select_fields_string} FROM notes + WHERE modified_date >= '{start.strftime('%Y-%m-%d')}' AND modified_date <= '{end.strftime('%Y-%m-%d')}' + """ + # created_date looks like 'YYYY-MM-DD' + if search_field == 'created_date': + start_query = payload.get('start') + end_query = payload.get('end') + start = datetime.strptime(start_query, '%Y-%m-%d') + end = datetime.strptime(end_query, '%Y-%m-%d') + start = datetime.strptime(query, '%Y-%m-%d') # Construct SQL query sql_query = f""" SELECT {select_fields_string} FROM notes - WHERE created_date == '{start.strftime('%Y-%m-%d')}' + WHERE created_date >= '{start.strftime('%Y-%m-%d')}' AND created_date <= '{end.strftime('%Y-%m-%d')} """ + # title if search_field == 'title': sql_query = f""" @@ -309,14 +326,6 @@ def search_notes(): FROM notes WHERE notes.title == '{query}' """ - # created_date looks like 'YYYY-MM-DD' - if search_field == 'created_date': - start = datetime.strptime(query, '%Y-%m-%d') - # Construct SQL query - sql_query = f""" - SELECT {select_fields_string} FROM notes - WHERE created_date >= '{start.strftime('%Y-%m-%d')}' - """ # tag (super hard ?) if search_field == 'tag': From 38b274d373fd1a22025d8589cfa960482fa1249f Mon Sep 17 00:00:00 2001 From: Gus Thomas Date: Sun, 21 Apr 2024 22:53:17 -0400 Subject: [PATCH 3/6] refactor: apiCalls to support new search payload signature --- apiCalls.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apiCalls.py b/apiCalls.py index cb1dbe3..d19f9ad 100644 --- a/apiCalls.py +++ b/apiCalls.py @@ -17,10 +17,15 @@ def listNotes(listBy): url = "http://127.0.0.1:5000/notes/list" return requests.get(url,headers=header, json={'list_field': listBy}) -def searchNotes(field, searchQuery, returnField): +def searchNotes(field, searchQuery, returnField, start=None, stop=None): #by content, title, tags, date url = "http://127.0.0.1:5000/notes/search" - return requests.get(url,headers=header, json={'search_field': field, 'query': searchQuery, 'return_fields': returnField}) + # conditional check on whether to pass start and stop + if field in set('modified_date', 'createNote'): + json = {'search_field': field, 'query': searchQuery, 'return_fields': returnField, 'start': start, 'stop': stop} + else: + json = {'search_field': field, 'query': searchQuery, 'return_fields': returnField} + return requests.get(url,headers=header, json=json) From b431b0b7c728ff8b87df80d53a4636a07a09ee0f Mon Sep 17 00:00:00 2001 From: Gus Thomas Date: Sun, 21 Apr 2024 23:00:47 -0400 Subject: [PATCH 4/6] add: two prompts for search by date --- frontend.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/frontend.py b/frontend.py index 935bfa6..058fea7 100644 --- a/frontend.py +++ b/frontend.py @@ -321,11 +321,15 @@ def runtime(state): #created_date case 132: lineBreak(columns, getConfig(4)) - printColor("Enter date created to search.",getConfig(2)) + printColor("Enter the beginning of the date range to search by.",getConfig(2)) lineBreak(columns, getConfig(4)) - search_by = input(": ") + start = input(": ") + lineBreak(columns, getConfig(4)) + printColor("Enter the end of the date range to search by.",getConfig(2)) + lineBreak(columns, getConfig(4)) + end = input(": ") desired_response = ['title','content','modified_date','created_date'] - api_response = apiCalls.searchNotes('created_date', search_by, desired_response) + api_response = apiCalls.searchNotes('created_date', "", desired_response, start, end) entries = translation(api_response.content) entries = entries.replace(r'\n', '\n') print(entries) @@ -333,11 +337,15 @@ def runtime(state): #modified_date case 133: lineBreak(columns, getConfig(4)) - printColor("Enter date modified to search.",getConfig(2)) + printColor("Enter the beginning of the date range to search by.",getConfig(2)) lineBreak(columns, getConfig(4)) - search_by = input(": ") + start = input(": ") + lineBreak(columns, getConfig(4)) + printColor("Enter the end of the date range to search by.",getConfig(2)) + lineBreak(columns, getConfig(4)) + end = input(": ") desired_response = ['title','content','modified_date','created_date'] - api_response = apiCalls.searchNotes('modified_date', search_by, desired_response) + api_response = apiCalls.searchNotes('modified_date', "", desired_response, start, end) entries = translation(api_response.content) entries = entries.replace(r'\n', '\n') print(entries) From c55a127af068dd64a150ab21f55aeca38466563f Mon Sep 17 00:00:00 2001 From: Gus Thomas Date: Sun, 21 Apr 2024 23:07:48 -0400 Subject: [PATCH 5/6] oops, typo --- apiCalls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apiCalls.py b/apiCalls.py index d19f9ad..f0e0045 100644 --- a/apiCalls.py +++ b/apiCalls.py @@ -21,7 +21,7 @@ def searchNotes(field, searchQuery, returnField, start=None, stop=None): #by content, title, tags, date url = "http://127.0.0.1:5000/notes/search" # conditional check on whether to pass start and stop - if field in set('modified_date', 'createNote'): + if field in set('modified_date', 'created_date'): json = {'search_field': field, 'query': searchQuery, 'return_fields': returnField, 'start': start, 'stop': stop} else: json = {'search_field': field, 'query': searchQuery, 'return_fields': returnField} From 130a45ef5d60fdd8e7ba8bdbb33dac665bb098d0 Mon Sep 17 00:00:00 2001 From: Augustus Thomas <33500951+augustus-thomas@users.noreply.github.com> Date: Wed, 24 Apr 2024 11:33:57 -0400 Subject: [PATCH 6/6] Add: Search range this resolves Chris' desire for a default end as today and default start as sometime in the distant past --- apiCalls.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apiCalls.py b/apiCalls.py index f0e0045..82ef710 100644 --- a/apiCalls.py +++ b/apiCalls.py @@ -1,4 +1,5 @@ import requests +from datetime import date # Http integration managment # generic verion of a http request, formats to request well. @@ -17,7 +18,7 @@ def listNotes(listBy): url = "http://127.0.0.1:5000/notes/list" return requests.get(url,headers=header, json={'list_field': listBy}) -def searchNotes(field, searchQuery, returnField, start=None, stop=None): +def searchNotes(field, searchQuery, returnField, start='1970-01-01', stop=today.strftime("%Y-%m-%d")): #by content, title, tags, date url = "http://127.0.0.1:5000/notes/search" # conditional check on whether to pass start and stop @@ -81,4 +82,4 @@ def mainTest(): searchBy = ['title','content'] r = searchNotes('title', 'title1', searchBy) - print(r.content) \ No newline at end of file + print(r.content)