|
|
- 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
-
- def remove_note(self, id):
- '''Remove note(s) with given id from note list'''
- if self._find_note(id):
- removed = []
- for index, note in enumerate(self.notes):
- if str(note.id) == str(id):
- removed.append(self.notes.pop(index))
- self._set_id()
- return removed
- return False
-
- def _set_id(self):
- '''set global last_id to highest id found in notebook'''
- id = 1
- for note in self.notes:
- if note.id > id:
- id = note.id
- global last_id
- last_id = id
-
|