【INFO1112】 Just a friendly reminder

Students and tutors often have great suggestions to specifications. While no major
changes will be made after release, this assignment specification may be clarified up to
Week 4, 27/08/2023 . Revised versions will be clearly marked and accompanying
announcements made to Edstem.
In this assignment, you'll be creating a basic application called "Jafr" (short for "Just a
friendly reminder"). This application helps multiple users manage their tasks and meetings
on a Unix-like OS (a popular choice of OS in industry where developers might share a
computer system or host web applications).
Jafr is Unix-friendly. This means that
1. Users interact with Jafr by typing commands in a command-line interface.
2. Jafr assumes that all the tasks and meetings are stored in text files that are otherwise
managed by users of the shared system. Users simply edit these files themselves when
they want to make changes outside of Jafr.
You will implement Jafr in Python and write a simple start up script in Bash. You will then
write I/O end to end tests for Jafr.
These specifications first describe each behaviour of Jafr. The final sections describe error
handling, how to write tests for Jafr and provide some hints.
Overview
Jafr is designed to run whenever a user opens their terminal at the beginning of their day.
Users can choose to view reminders that are relevant to the current day, or make changes.
Changes can include sharing reminders with other users.
There are two kinds of reminders: tasks and meetings.
Setup
Jafr primarily relies on two text files for each user: tasks.md and meetings.md . These text
files are placed inside a master directory of the user's choosing.
The user chooses their master directory inside a JSON file called user-settings.json
located at ~/.jafr/user-settings.json . You may consider ~/.jafr/ a 'hidden' directory,
for Jafr's internal use only.
Hint
Notice that the hidden directory .jafr/ is inside a user's home directory which can be
symbolically referred to by ~ .
You can fetch the path referred to by ~ in Python by using os.path.expanduser('~')
user-settings.json has a single key value pair storing the absolute path to the master
directory.
Sample user-settings.json :
{
"master" : "/home/dailystuff"
}
Help! What's a JSON file?
JSON is a universal file format for easy data reading and writing. There are two kinds of
data structures possible to write in JSON: objects and arrays.
Curly braces are used to define an object: a collection of name/value pairs (exactly like
a dictionary in Python). Square brackets are used to define an array: an ordered list of
values (exactly like a list in Python).
You may use Python's json library in your implementation to read JSON files. See
json.load()
Note
tasks.md and meetings.md for each user are given inside your scaffold. Assume the
user creates these themselves using their preferred text editor.
The ~/.jafr/ directory for each user is also given inside your scaffold. You do not
have to handle the case where ~/.jafr/user-settings.json is missing for any user.
Assume Jafr has some installation script that handles this, outside of the scope of your
assignment.
Text files containing reminders
The two text files inside the master directory for each user are as follows.
tasks.md
This text file contains dot pointed tasks with the following format. Dates follow DD/MM/YY, or
more precisely the C standard format %d/%m/%y (see the datetime docs ). You will only ever
have to handle dates in the years 1969 - 2068 (inclusive).
- < task description > Due: < due date > < completion status >
For example
- Complete INFO1112 A1 Due: 01/10/23 not complete
- Acquire Twitter Due: 30/10/23 complete
- Study linux namespaces Due: 30/09/23 not complete
Hint
Notice that a task must end with complete or not complete !
Moreover, the format implies that a task description should never contain the string
Due: . You do not have to handle the case where a user does this.
meetings.md
This text file contains dot pointed meetings with the following format. Times follow HH:mm,
or more precisely the C standard format %H:%M (see the datetime docs ).
- < meeting description > Scheduled: < scheduled time > < scheduled date >
For example
- Michael Mai's welcome party Scheduled: 18:00 25/08/23
- A1 marking meeting Scheduled: 09:00 01/09/23
Hint
You do not have to handle the case where a user places Scheduled: inside the
meeting description.
Further, as suggested by the links above, it will be easiest to use datetime to handle
all dates/times!
Usage
Jafr runs when jafr.py is executed by the Python interpreter. There is one command line
argument which will contain a path (absolute or relative) to a given passwd file. More on this
below.
For example
python3 jafr.py passwd
Jafr first displays relevant reminders (tasks followed by meetings), before showing a menu.
The menu contains the following.
What would you like to do?
1. Complete tasks
2. Add a new meeting.
3. Share a task.
4. Share a meeting.
5. Change Jafr's master directory.
6. Exit
A user chooses one option only.
<menu num>
This invokes the relevant behaviour, described below. If the user enters 6 , Jafr exits. After
completing a behaviour, Jafr returns to the menu.
For example
Just a friendly reminder! You have these tasks to finish today.
- Read INFO1112 A1 specs
- Fix bug 1 inside Jafr
- Study ELEC1601
These tasks need to be finished in the next three days!
- Shower by 03/08/23
- Organise paul's brithday by 03/08/23
You have the following meetings today!
- Michael Mai's welcome party at 18:00
- Resume writing workshop at 09:00
- Jafr dev meeting at 13:30
You have the following meetings scheduled over the next week!
- Barbenheimer marathon on 06/08/23 at 17:00
- Academic advice on 02/08/23 at 14:30
- ELEC1601 group meeting on 03/08/23 at 11:00
What would you like to do?
1. Complete tasks
2. Add a new meeting.
3. Share a task.
4. Share a meeting.
5. Change Jafr's master directory.
6. Exit
  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值