From 4e6d2a803f7e27425769b4930f1548482c0ea168 Mon Sep 17 00:00:00 2001 From: jhill4 Date: Thu, 18 Feb 2021 23:12:20 -0500 Subject: [PATCH 1/3] Almost done --- main.py | 102 +++++++++++----------------------------- templates/viewNote.html | 10 ++-- 2 files changed, 32 insertions(+), 80 deletions(-) diff --git a/main.py b/main.py index ab8f316..63a0c2b 100644 --- a/main.py +++ b/main.py @@ -4,29 +4,24 @@ from os import path as os_path, mkdir as os_mkdir, remove as os_remove from datetime import datetime import sys, getopt - +import boto3 +from botocore.config import Config +import pprint app = Flask("Champagne") Markdown(app) -noteList = [] - -noteDir = "notes" - -# create note directory if it doesn't exist -if not os_path.exists(noteDir): - os_mkdir(noteDir) -noteListFileName = os_path.join(noteDir, "notes.pkl") -# check for existing file with note metadata -if os_path.exists(noteListFileName): - with open(noteListFileName, 'rb') as notesFile: - noteList = pickle.load(notesFile) +dynamodb = boto3.client('dynamodb', config=Config(region_name='us-east-1')) +pp = pprint.PrettyPrinter(indent=4) @app.route("/") def home(): - return render_template("home.html", notes=noteList) + scan = dynamodb.scan(TableName='NotesApp') + allNotes = scan['Items'] + + return render_template("home.html", NotesApp=allNotes) @app.route("/addNote") def addNote(): @@ -34,53 +29,39 @@ def addNote(): @app.route("/createNote", methods=["post"]) def createNote(): - # get next note id - if len(noteList): - idList = [ int(i['id']) for i in noteList ] - noteId = str(max(idList)+1) - else: - noteId = "1" - - noteFileName = os_path.join(noteDir, noteId+".pkl") + noteId = 1 + scan = dynamodb.scan(TableName='NotesApp')['Items'] + for i in scan: + noteId = noteId + 1 + noteId = str(noteId) lastModifiedDate = datetime.now() lastModifiedDate = lastModifiedDate.strftime("%d-%b-%Y %H:%M:%S") noteTitle = request.form['noteTitle'] noteMessage = request.form['noteMessage'] - note = {'id': noteId, 'title': noteTitle, 'lastModifiedDate': lastModifiedDate, 'message': noteMessage} + dynamodb.put_item(TableName='NotesApp', Item={'noteid': {'S' : noteId},'noteTitle': {'S': noteTitle}, 'lastModifiedDate': {'S': lastModifiedDate}, 'message': {'S': noteMessage}}) + - # save the note - with open(noteFileName, 'wb') as noteFile: - pickle.dump(note, noteFile) - - # add metadata to list of notes for display on home page - noteList.append({'id': noteId, 'title': noteTitle, 'lastModifiedDate': lastModifiedDate}) - - # save changes to the file containing the list of note metadata - with open(noteListFileName, 'wb') as notesFile: - pickle.dump(noteList, notesFile) return redirect(url_for('viewNote', noteId=noteId)) @app.route("/viewNote/") def viewNote(noteId): noteId = str(noteId) - noteFileName = os_path.join(noteDir, noteId+".pkl") - with open(noteFileName, 'rb') as noteFile: - note = pickle.load(noteFile) + note = dynamodb.get_item(TableName='NotesApp', Key = {'noteid': {'S': noteId}})['Item'] + pp.pprint(note) return render_template("viewNote.html", note=note, submitAction="/saveNote") - @app.route("/editNote/") def editNote(noteId): noteId = str(noteId) - noteFileName = os_path.join(noteDir, noteId+".pkl") - with open(noteFileName, 'rb') as noteFile: - note = pickle.load(noteFile) + note = dynamodb.get_item(TableName='NotesApp', Key = {'noteid': {'S': noteId}}) + note = note['Item'] cancelUrl = url_for('viewNote', noteId=noteId) + return render_template("noteForm.html", headerLabel="Edit Note", note=note, submitAction="/saveNote", cancelUrl=cancelUrl) @app.route("/saveNote", methods=["post"]) @@ -92,43 +73,14 @@ def saveNote(): noteTitle = request.form['noteTitle'] noteMessage = request.form['noteMessage'] - noteFileName = os_path.join(noteDir, noteId+".pkl") - - note = {'id': noteId, 'title': noteTitle, 'lastModifiedDate': lastModifiedDate, 'message': noteMessage} - - # save the note - with open(noteFileName, 'wb') as noteFile: - pickle.dump(note, noteFile) - - # remove the old version of the note from the list of note metadata and add the new version - global noteList - newNoteList = [ i for i in noteList if not (i['id'] == noteId) ] - noteList = newNoteList - - # add metadata to list of notes for display on home page - noteList.append({'id': noteId, 'title': noteTitle, 'lastModifiedDate': lastModifiedDate}) - - # save changes to the file containing the list of note metadata - with open(noteListFileName, 'wb') as notesFile: - pickle.dump(noteList, notesFile) - + dynamodb.put_item(TableName='NotesApp', Item={'noteid': {'S' : noteId},'noteTitle': {'S': noteTitle}, 'lastModifiedDate': {'S': lastModifiedDate}, 'message': {'S': noteMessage}}) + return redirect(url_for('viewNote', noteId=noteId)) @app.route("/deleteNote/") def deleteNote(noteId): - # delete the note file - noteFileName = os_path.join(noteDir, noteId+".pkl") - os_remove(noteFileName) - - # remove the note from the list of note metadata - global noteList - newNoteList = [ i for i in noteList if not (i['id'] == noteId) ] - noteList = newNoteList - - # save changes to the file containing the list of note metadata - with open(noteListFileName, 'wb') as notesFile: - pickle.dump(noteList, notesFile) - + noteId = str(noteId) + note = dynamodb.delete_item(TableName='NotesApp', Key = {'noteid': {'S': noteId}}) return redirect("/") if __name__ == "__main__": @@ -137,10 +89,10 @@ def deleteNote(noteId): try: opts, args = getopt.getopt(sys.argv[1:], "h:p:", ["debug"]) except getopt.GetoptError: - print('usage: main.py [-h 0.0.0.0] [-p 5000] [--debug]') + print('usage: main.py [-h 0.0.0.0] [-p 4996] [--debug]') sys.exit(2) - port = "5000" + port = "4996" host = "0.0.0.0" print(opts) for opt, arg in opts: diff --git a/templates/viewNote.html b/templates/viewNote.html index 7f13e6c..69d6932 100644 --- a/templates/viewNote.html +++ b/templates/viewNote.html @@ -2,8 +2,8 @@ {% block header %}
-

{{ note['title'] }}

- (last modified: {{ note['lastModifiedDate'] }}) +

{{ note['title']['S'] }}

+ (last modified: {{ note['notedate']['S'] }})
{% endblock %} @@ -11,15 +11,15 @@

{{ note['title'] }}

Message
- {{ note['message']|markdown }} + {{ note['content']['S']|markdown }}
From 5b6fcd1f9f4a21139a96fdbd31374684dcef27d5 Mon Sep 17 00:00:00 2001 From: jhill4 Date: Thu, 18 Feb 2021 23:16:02 -0500 Subject: [PATCH 2/3] screenshot of db uploaded --- Screenshot.PNG | Bin 0 -> 38390 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Screenshot.PNG diff --git a/Screenshot.PNG b/Screenshot.PNG new file mode 100644 index 0000000000000000000000000000000000000000..268eb268e5d5bca5aa79792ec4666f29c172ec77 GIT binary patch literal 38390 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 literal 0 HcmV?d00001 From 056bdd90f2d899795da1f27ebd43cf4ca94596d3 Mon Sep 17 00:00:00 2001 From: jhill4 Date: Thu, 18 Feb 2021 23:18:49 -0500 Subject: [PATCH 3/3] Update comment --- main.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main.py b/main.py index 63a0c2b..c84415d 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,10 @@ import boto3 from botocore.config import Config import pprint + +#Ran into some last minute problems with get_item in view note that i could not figure out so code breaks +#after creating a note. I think delete note works but edit would have the same issue with get_item + app = Flask("Champagne") Markdown(app)