import datetime
|
|
|
|
# Store the next available id for all new notes
|
|
last_id = 0
|
|
|
|
class Note:
|
|
'''Represent a note in the notebook. Match against a
|
|
string in searches and store tags for each note.'''
|
|
|
|
def __init__(self, memo, tags=''):
|
|
'''initialize a note with memo and optional
|
|
space-separated tags. Automatically set the note's
|
|
creation date and a unique id.'''
|
|
self.memo = memo
|
|
self.tags = tags
|
|
self.creation_date = datetime.date.today()
|
|
global last_id
|
|
last_id += 1
|
|
self.id = last_id
|
|
|
|
def match(self, filter):
|
|
'''Determine if this note matches the filter
|
|
text. Return True if it matches, False otherwise.
|
|
Search is case sensitive and matches both text and
|
|
tags.'''
|
|
return filter in self.memo or filter in self.tags
|
|
|
|
|
|
class Notebook:
|
|
'''Represent a collection of notes that can be tagged,
|
|
modified, and searched.'''
|
|
|
|
def __init__(self):
|
|
'''Initialize a notebook with an empty list.'''
|
|
self.notes = []
|
|
|
|
def new_note(self, memo, tags=''):
|
|
'''Create a new note and add it to the list.'''
|
|
self.notes.append(Note(memo, tags))
|
|
|
|
def modify_memo(self, note_id, memo):
|
|
'''Find the note with the given id and change its
|
|
memo to the given value.'''
|
|
note = self._find_note(note_id)
|
|
if note:
|
|
note.memo = memo
|
|
return True
|
|
return False
|
|
|
|
def modify_tags(self, note_id, tags):
|
|
'''Find the note with the given id and change its tags
|
|
to the given value.'''
|
|
note = self._find_note(note_id)
|
|
if note:
|
|
note.tags = tags
|
|
return True
|
|
return False
|
|
|
|
def search(self, filter):
|
|
'''Find all notes that match the given filter string.'''
|
|
return [note for note in self.notes if note.match(filter)]
|
|
|
|
def _find_note(self, note_id):
|
|
'''Locate the note with the given id.'''
|
|
for note in self.notes:
|
|
if str(note.id) == str(note_id):
|
|
return note
|
|
return None
|
|
|