Конзолна система за бележки
Създаване на проста система за организиране на ежедневно съдържание с конзолен интерфейс, която може да се разширява до безкрайност.
- Основната цел е да се добавят, търсят и категориризат прости обекти съдържание.
- В ядрото на системата трябва да има три типа обекти: бележка, TODO.
- Бележката е просто текст.
- TODO-то е текст, който има дата на започване, дата на завършване и флаг дали е бил завършен.
- Всеки обект може да има прозволен брой етикети.
- Всеки обект има действия. Бележката има добавяне, редактиране, изтриване. TODO-то има добавяне, редактиране, изтриване, отбелязване като завършено.
- Трябва да може да се търси по тип обект и произволни негови атрибути. Например, трябва да мога да намеря всички TODO-та, които започват днес. Или всички обекти, които съдържат думата python вътре. Или всички етикети на бележки.
- Трябва да мога да получа помощ за синтаксиса на търсене. Трябва да ввключва типовете обекти, техните атрибути и позволените им стойности.
- Системата трябва да поддържа разширения. Разширение е един {{{.py}}} файл, се зарежда автоматично, ако бъде поставен на подходящото място и може да добавя и променя функциите на системата.
- Заедно със системата трябва да се напишат три разширения:
- Предмети
- Добавя нов тип обект: ''предмет''
- Всеки предмет е текст, който има местонахождение и притежател. Идеално да знаете къде ви е диска с Dirty Dancing и на кого сте дали учебника по Дисретна математика.
- Предметите трябва да са пълноправен тип обект. Да може да се търси я тях, да се показват в помощта за търсене. Потребителят не трябва да знае, че идват от разширение.
- Реална дата на завършване
- Добавя още един атрибут на обекта TODO: ''дата на завършване''
- Датата трябва да се поставя автоматично, когато потребителят отбележи TODO-то като завършено.
- Седмица
- Навсякъде в интерфейса, където има етикет на име: ''week'' или ''седмица'', етикета трябва да се показва с като <<<''име на етикет''>>> (с три знака по-малко/по-голямо от всяка страна). Другите етикети трябва да си се показват по старому.
- Предмети
- Подсказка. Има два основни начина да реализирате разширяване на
функционалността.
- С наследяване на класове от ядрото и реализиране на специални методи в разширението.
- С добавяне на actions и filters в кода.
- Всеки action ни дава възможност да закачим наш код при определено действие.
- Всеки filter ни дава възможност да закачим наш код, който може да промени някаква стойност от ядрото на приложението.