summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChangjin Lee <changjin9792@gmail.com>2024-02-12 04:28:41 +0900
committerGitHub <noreply@github.com>2024-02-12 04:28:41 +0900
commite4d1528645631a791cbd21c05748be95604753b0 (patch)
treea204dcd3cc1cdd5493ac573dc16e4b9677459a25
parent0b7d23e69f999861f0dd273b4a72cb3aff690745 (diff)
parent26e135d5a4ae1dead6dde98b32e925e452563c34 (diff)
Merge pull request #50 from noisrucer/refactor-v2
Refactor v2
-rw-r--r--.cz.toml46
-rw-r--r--.gitignore1
-rw-r--r--.python-version1
-rw-r--r--girok/README.md623
-rw-r--r--girok/__init__.py1
-rw-r--r--girok/api/auth.py133
-rw-r--r--girok/api/category.py431
-rw-r--r--girok/api/entity.py18
-rw-r--r--girok/api/task.py494
-rw-r--r--girok/api_client.py10
-rw-r--r--girok/calendar_cli/__init__.py (renamed from girok/utils/__init__.py)0
-rw-r--r--girok/calendar_cli/calendar_app.py36
-rw-r--r--girok/calendar_cli/calendar_container.py322
-rw-r--r--girok/calendar_cli/calendar_main.py111
-rw-r--r--girok/calendar_cli/entity.py7
-rw-r--r--girok/calendar_cli/sidebar.py120
-rw-r--r--girok/calendar_cli/utils.py (renamed from girok/utils/calendar.py)94
-rw-r--r--girok/commands/auth.py138
-rw-r--r--girok/commands/auth/command.py240
-rw-r--r--girok/commands/calendar.py10
-rw-r--r--girok/commands/calendar/command.py14
-rw-r--r--girok/commands/category.py79
-rw-r--r--girok/commands/category/command.py241
-rw-r--r--girok/commands/category/util.py105
-rw-r--r--girok/commands/info.py8
-rw-r--r--girok/commands/task.py613
-rw-r--r--girok/commands/task/callbacks.py112
-rw-r--r--girok/commands/task/command.py641
-rw-r--r--girok/commands/task/display.py371
-rw-r--r--girok/commands/task/entity.py94
-rw-r--r--girok/commands/task/utils.py205
-rw-r--r--girok/config.json5
-rw-r--r--girok/config.py23
-rw-r--r--girok/config/auth_handler.py55
-rw-r--r--girok/constants.py167
-rw-r--r--girok/girok.py115
-rw-r--r--girok/server/requirements.txt27
-rw-r--r--girok/server/src/category/config.py0
-rw-r--r--girok/server/src/category/constants.py3
-rw-r--r--girok/server/src/category/dependencies.py0
-rw-r--r--girok/server/src/category/enums.py0
-rw-r--r--girok/server/src/category/exceptions.py41
-rw-r--r--girok/server/src/category/models.py16
-rw-r--r--girok/server/src/category/router.py165
-rw-r--r--girok/server/src/category/schemas.py37
-rw-r--r--girok/server/src/category/service.py196
-rw-r--r--girok/server/src/category/utils.py0
-rw-r--r--girok/server/src/database.py18
-rw-r--r--girok/server/src/task/config.py0
-rw-r--r--girok/server/src/task/constants.py0
-rw-r--r--girok/server/src/task/dependencies.py0
-rw-r--r--girok/server/src/task/enums.py5
-rw-r--r--girok/server/src/task/exceptions.py19
-rw-r--r--girok/server/src/task/models.py23
-rw-r--r--girok/server/src/task/router.py199
-rw-r--r--girok/server/src/task/schemas.py123
-rw-r--r--girok/server/src/task/service.py250
-rw-r--r--girok/server/src/task/utils.py2
-rw-r--r--girok/server/src/utils.py59
-rw-r--r--girok/styles/stopwatch03.css53
-rw-r--r--girok/utils/auth.py90
-rw-r--r--girok/utils/display.py347
-rw-r--r--girok/utils/general.py57
-rw-r--r--girok/utils/json_utils.py20
-rw-r--r--girok/utils/task.py161
-rw-r--r--girok/utils/time.py44
-rw-r--r--poetry.lock1553
-rw-r--r--processreq.py9
-rw-r--r--pyproject.toml71
69 files changed, 3568 insertions, 5704 deletions
diff --git a/.cz.toml b/.cz.toml
new file mode 100644
index 0000000..09dbad0
--- /dev/null
+++ b/.cz.toml
@@ -0,0 +1,46 @@
+# ref: https://github.com/commitizen-tools/commitizen/blob/master/docs/customization.md
+
+[tool.commitizen]
+name = "cz_customize"
+
+[tool.commitizen.customize]
+message_template = "{{change_type}}: {{message}}"
+example = "๐Ÿ“ docs: create README.md"
+schema = "<type>: <body>"
+# schema_pattern = "(feature|bug fix):(\\s.*)"
+# schema_pattern = "^(?P<change_type>):\\s(?P<message>.*)?"
+bump_pattern = "^(break|new|fix|hotfix)"
+bump_map = {"break" = "MAJOR", "new" = "MINOR", "fix" = "PATCH", "hotfix" = "PATCH"}
+change_type_order = ["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"]
+# commit_parser = "^(?P<change_type>feature|bug fix):\\s(?P<message>.*)?"
+# changelog_pattern = "^(โœจ feat|๐Ÿ”ง fix)?(!)?"
+# change_type_map = {"โœจ feat" = "Feat", "๐Ÿ”ง fix" = "Fix"}
+
+[[tool.commitizen.customize.questions]]
+type = "list"
+name = "change_type"
+choices = [
+ {value = "โœจ feat", name = "โœจ feat: Work on feature-related tasks."},
+ {value = "๐Ÿ”ง fix", name = "๐Ÿ”ง fix: Fix a bug."},
+ {value = "๐Ÿ“ docs", name = "๐Ÿ“ docs: Add or update documentation."},
+ {value = "โ™ป๏ธ refact", name = "โ™ป๏ธ refact: Refactor code."},
+ {value = "๐ŸŽจ style", name = "๐ŸŽจ style: Improve structure / format of the code or apply linter."},
+ {value = "โœ… test", name = "โœ… test: Add, update, or pass tests."},
+ {value = "๐Ÿงน chore", name = "๐Ÿงน chore: Do other grunt works."},
+ {value = "โš™๏ธ setting", name = "โš™๏ธ setting: Add or update setting related tasks such as modifying dependencies, writing util scripts, etc."},
+ {value = "๐Ÿท๏ธ bump", name = "๐Ÿท๏ธ bump: Add a release / version tag."},
+ {value = "๐ŸŽ‰ init", name = "๐ŸŽ‰ init: Create a new project."},
+]
+message = "Select the type of change you are committing"
+
+[[tool.commitizen.customize.questions]]
+type = "input"
+name = "message"
+message = "Write a commit message:"
+
+[[tool.commitizen.customize.questions]]
+# type = "confirm"
+# message = "Do you want to confirm this commit?"
+type = "press_any_key_to_continue"
+name = "confirm_commit"
+message = "Press any key to confirm this commit, or ctrl+c key to cancel this commit." \ No newline at end of file
diff --git a/.gitignore b/.gitignore
index f1190bc..8ccd2cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
**/node_modules/
/.pnp
.pnp.js
+**debug_**
**/__pycache__
**/.env
diff --git a/.python-version b/.python-version
new file mode 100644
index 0000000..0a59033
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+3.9.10
diff --git a/girok/README.md b/girok/README.md
deleted file mode 100644
index fd54bc6..0000000
--- a/girok/README.md
+++ /dev/null
@@ -1,623 +0,0 @@
-<h1 align="center">โœ๏ธ Girok - The most powerful CLI task manager</h1>
-
-<h3 align="center"> Who said you cannot have a beautiful UI on terminal?</h4>
-
-<p align="center"><img src="girok/resources/girok-demo.gif"></img></center>
-
-**Girok**, which means "to record" in Korean, is a **powerful terminal-based task manager** which provides a multitude of scheduling operations that can be done in less than 10 seconds. It also supports **beautiful and responsive calendar GUI** in which you can move around with VIM key bindings.
-
-Girok is running on AWS server so you can **login from any device in the world**!
-
-Girok works fluently with `MacOS` and `Linux` users. It also works with `Windows` but some features and UIs might break.
-
-p.s) Since I launched the project a couple days ago, you might feel a little bit of lag for `showtask` operation, especially when you have many data. I'm working on optimizing the speed to enhance your experience!
-
-# ๐Ÿค– Version `0.1.11` is released now!
-
-To see the current version, enter `girok --version`.
-
-### Upgrade with `pip install girok --upgrade`
-
-# ๐Ÿ’ก Future Updates (coming soon)
-
-1. ๐Ÿ’ป ๐Ÿ“ฑ **Web** and **app** which synchronizing all data with CLI.
-2. ๐Ÿ”จ Task operations in the calendar view
-3. โฐ **Girok Slack Bot** notification feature for tasks - set an alarm in 5
- seconds!
-4. ๐Ÿ‘ช **Team workspace** where users and create group and invite other people for collaboration
-
-# ๐Ÿ“– Table of Contents
-
-- [๐Ÿš€ Installation](#-Installation)
-- [๐Ÿ”ฅ Get Started !](#-get-started)
- - [๐Ÿ™ 1. help command](#helpcommand)
- - [๐Ÿ”’ 2. Register](#register)
- - [๐Ÿ”“ 3. Login / Logout](#loginandlogout)
- - [๐Ÿ“š 4. Category commands](#categorycommands)
- - [4.1. `showcat`](#showcatcommand)
- - [4.2. `addcat`](#addcatcommand)
- - [4.3. `mvcat`](#mvcatcommand)
- - [4.4. `rmcat`](#rmcatcommand)
- - [4.5. `rncat`](#rncatcommand)
- - [๐Ÿ“• 5. Task Commands](#taskcommands)
- - [5.1. `addtask`](#addtaskcommand)
- - [5.2. `showtask`](#showtaskcommand)
- - [5.3. `done`](#donecommand)
- - [5.4. `chdate`](#chdatecommand)
- - [5.5. `chpri`](#chpricommand)
- - [5.6. `chtag`](#chtagcommand)
- - [5.8. `chname`](#chnamecommand)
- - [5.9. `showtag`](#showtagcommand)
- - [๐Ÿ“… 6. Calendar Commands](#calendarcommands)
-- [๐Ÿš’ Report Bugs](#-report-bugs)
-- [๐Ÿ˜ญ Uninstall](#-uninstall)
-- [๐Ÿ’Œ Contributions](#-contributions)
-
-# ๐Ÿš€ Installation
-
-Girok supports all operating systems including Linux, MacOS, Windows.
-
-However, it works well on Unix-based shells such as `bash`, `zsh`, `fish`, `wsl`, etc.
-
-Some shells like `powershell` might break some UIs.
-
-1. Make sure you have Python `>3.9` version installed.
-2. Enter the following in your terminal
-
-```bash
-pip install girok
-```
-
-Now you have installed `girok` on your machine. To make sure that it works, enter the following.
-
-```bash
-girok --help
-```
-
-Now, let's dive into Girok!
-
-# ๐Ÿ”ฅ Get Started
-
-## ๐Ÿ™ 1. Help command <a name="helpcommand"></a>
-
-In order to see **all the commands** of **Girok**, enter `girok --help` in your terminal.
-
-![](images/girok-help.png)
-
-In order to see the details of each command, enter the following in your terminal.
-
-```
-girok <command> --help
-```
-
-For example, if you enter
-
-```
-girok addtask --help
-```
-
-then you'll see the following help message
-
-![](images/girok-command-help.png)
-
-## ๐Ÿ”’ 2. Register <a name="register"></a>
-
-<p align="center"><img src="girok/resources/girok-register-demo.gif"></img></center>
-
-To register a new account enter the following in your terminal.
-
-```bash
-girok register
-```
-
-Enter the email address and password and check your mail inbox to get the **verification code**.
-
-Congratulations! Now let's go ahead and login to our account.
-
-## ๐Ÿ”“ 3. Login and Logout <a name="loginandlogout"></a>
-
-In order to login with your registered account, enter the following command.
-
-```bash
-girok login
-```
-
-![](images/girok-login.png)
-
-Now you're ready to use all the features.
-
-## ๐Ÿ“š 4. Category Commands <a name="categorycommands"></a>
-
-You can pre-define **categories** such as `School`, `Life` and `Career` with automatically assigned category color.
-
-Girok supports **infinite recursive subcategories**. All the subcategories will be assigned with the color of its topmost parent category.
-
-Later on, you can link tasks to these categories.
-
-### 4.1 `showcat` command <a name="showcatcommand"></a>
-
-In order to see all the categories you have created, enter the following command.
-
-By default, `No Category` category is set (later for tasks which have no category).
-
-```bash
-girok showcat
-```
-
-![](images/girok-addcat3.png)
-
-### 4.2 `addcat` command <a name="addcatcommand"></a>
-
-`addtask` command takes a single argument `category full path`.
-
-In order to add a new category, enter the following command.
-
-```bash
-girok addcat <target path>
-```
-
-The `<target path>` is the **full path including the new category name**. For example, if you want to add a **topmost category** named `Career`, then enter
-
-```bash
-girok addcat Career
-```
-
-Then, you'll see the category tree with the newly created category being highlighted.
-
-![](images/girok-addcat1.png)
-
-In order to nest a sub-category under a previously defined category, pass the **FULL PATH** starting from the topmost category delimited by `/`, ending with the new category name.
-
-For example, if you want to create a new category named `Resume` under the previously created `Career` category, enter the following command.
-
-```bash
-girok addcat Career/Resume
-```
-
-Then, you'll see `Resume` is created under `Career`.
-
-![](images/girok-addcat2.png)
-
-In this way, you can create as many categories and sub-categories as you want!
-
-### 4.3 `mvcat` command <a name="mvcatcommand"></a>
-
-Now you might want to move a category under another category.
-
-In order to move a `category A` (recursively all its sub-categories) under `category B`, enter the following command.
-
-```bash
-girok mvcat <full path of A> <full path of B>
-```
-
-For example, if you want to move the whole `Career` category under `Dev/Network` (for some weird reason), enter the following command.
-
-```bash
-girok mvcat Career Dev/Network
-```
-
-![](images/girok-addcat4.png)
-
-If you want to move a category to the `root category`, then pass `/` as the second argument. Let's move `Dev/Network/Career` back to the topmost category.
-
-```bash
-girok mvcat Dev/Network/Career /
-```
-
-![](images/girok-addcat5.png)
-
-### 4.4 `rmcat` command <a name="rmcatcommand"></a>
-
-Of course, you want to delete a category. In that case, enter the following command.
-
-```bash
-girok rmcat <full path of category>
-```
-
-Let's add a dummy category named `Dummy` under `Dev` then remove it.
-
-As you already know, enter
-
-```bash
-girok addcat Career/Dummy
-```
-
-![](images/girok-addcat6.png)
-
-Now, let's delete it with the following command.
-
-**[WARNING]** If you delete a category, **all its sub-categories and tasks will be DELETED**. I'll consider adding an option for users to preserve all the orphan tasks in the future. Please let me know in the issue if you need this feature!
-
-```bash
-girok rmcat Career/Dummy
-```
-
-Then, you'll be asked to confirm the deletion. Enter `y`.
-
-![](images/girok-rmcat1.png)
-
-### 4.5 `rncat` command <a name="rncatcommand"></a>
-
-To rename an existing category,
-
-```bash
-girok rncat <category path> <new name>
-```
-
-Great job! Now let's move on to the task commands.
-
-## ๐Ÿ“• 5. Task commands <a name="taskcommands"></a>
-
-**Girok** provides powerful task scheduling operations. You can perform different operations that would've taken a long time in other schedulers like Notion and Google Calendar in less than 10 seconds (If you get used to the commands).
-
-### 5.1 `addtask` command <a name="addtaskcommand"></a>
-
-```bash
-girok addtask <task name> [One of deadline date options] [-c | --category <category path>] [-p | --priority <priority>] [-t | --time <deadline time>] [-T | --tag <tag name>]
-```
-
-It looks quite complicated but don't worry! Let's go through some rules.
-
-#### 5.1.1 `addtask` rules
-
-1. `<task name>` (Argument / **Required**) - If the task name has no space you can omit double quotes `""`. If it does, enclose the task name by double quotes `""`
-2. `<One of date options>` (Option / **required**) - You must specify a **deadline "date"** of a task. There're many ways to add a deadline. Note that **ONLY ONE DATE OPTION** is allowed.
- - `-d <yyyy/mm/dd | mm/dd>`
- - Specify an exact date delimited by `/`. You can enter the full date in the form of `yyyy/mm/dd`. Or, you can omit the year like `mm/dd` then the deadline year will be set to the current year.
- - You don't have to enter the exact form filled with `0`s. If the month is May, then just enter `5/23` or `05/23`.
- - `-t1 ~ -t7 | --thismon ~ --thissun`
- - Sometimes, you're not aware of the exact date. If the date is some weekday of this week, you can just pass `-t{1-7}` referrting to this monday to this sunday (monday indexed as `1`).
- - For example, if the deadline is this friday, enter `girok addtask "dummy" -t5`
- - `-n1 ~ -n7 | --nextmon ~ --nextsun`
- - Similar to the above but referring to **next week**.
- - `-a <# days>`
- - Sometimes, you process the deadline in your mind like "it's due 5 days later".
- - In this case, pass the number of days a task is due after.
- - For example, if the deadline is 5 days later, enter `girok addtask "dummy" -a 5`
- - `--tdy`
- - Set the deadline to today.
- - `--tmr`
- - Set the deadline to tomorrow.
-3. `-t | --time <hh:mm>` (Option, **Optional**) - You can also set the specific deadline time.
- - You must provide the full time format in **24 hour scale** such as `07:23` or `21:59`.
-4. `-c | --category <category full path>` (Option / **Optional**) - Your tasks might belong to a specific category you have previously defined.
- - Provide the **full category path**.
- - For example, if your task belongs to `Career/Resume`, then enter `girok addtask "dummy task 1" --tmr -c Career/Resume`.
- - If you specify a category, then the task color will be automatically linked to that category's color.
- - If no category is provided, the task will belong to `No Category` category.
-5. `-p | --priority <priority (1~5)>` (Option, **Optional**) - You can set the priority of a task so that you can filter out by priority when you query your tasks.
- - For example, to set the priority of a task as `5`, enter `girok addtask "dummy task 1" -c Career/Resume -p 5`.
-6. `-T | --tag <tag name>` (Option, **Optional**) - You can set the **tag**(or type) of a task such as `assignment` and `meeting`. With tags, you can more efficiently query your tasks with different types.
- - Unlike category, tag doesn't allow nested tags and you don't have to pre-define them.
- - For example, if you want to set the tag of a task as `assignment`, enter `girok addtask "assignment 4" -c HKU/COMP3234 -d 4/24 --tag assignment`
-
-In summary, keep the following rules in mind.
-
-1. Always provide **task name** and **one of date options**.
-2. Although not required, I think it's better to provide **category** to manage your tasks more effectively.
-3. Other options are up to you!
-
-For example, the following command is a typical command that I use on everyday basis.
-
-```bash
-girok addtask "Implement tag filtering feature" -c Dev/Girok -a 3 -p 5
-```
-
-It looks quite complicated, but you'll get used to it quickly after playing out little bit.
-
-#### 5.1.2 `addtask` demonstration
-
-Now let's play around with `addtask` command.
-
-Recall our category list is
-
-![](images/girok-addtask1.png)
-
-In the demonstration, I will add several tasks and show how it works.
-
-Let's add a task named `go over resume again` whose category is `Career/Resume` and I will do it by `next thursday`. This is a quite important task, so I will assign the `priority` of `5`.
-
-```bash
-girok addtask "go over resume again" -c Career/Resume -n4 -p 5
-```
-
-![](images/girok-addtask2.png)
-
-When adding it, you will see the same category tree with tasks attached to the belonged category. (Priority is now shown by default. You can see the priority with `girok showtask` command we'll talk about very soon).
-
-Now I'll add another task named `Midterm exam` with the category `HKU/COMP3234` and the deadline is `4/18 09:30`. Hmm.. I think I have plenty of time so I will not provide the priority. However, I will assign the tag `exam`.
-
-```bash
-girok addtask "Midterm exam" -c HKU/COMP3234 -d 4/18 -t 09:30 --tag exam
-```
-
-![](images/girok-addtask3.png)
-
-In the tree view, priority and tag are not shown to avoid complexity. Don't worry! You can view all the information when we go into `girok showtask` command.
-
-Lastly, I'll add a task named `Hangout with Jason` and the appointment date is `tomorrow`. This time, I will not provide any option.
-
-```bash
-girok addtask "Hangout with Jason" --tmr
-```
-
-![](images/girok-addtask4.png)
-
-Notice that the newly added task is highlighted with green color.
-
-### 5.2 `showtask` command. <a name="showtaskcommand"></a>
-
-```bash
-girok showtask [--tree] Deadline date options] [-c | --category <category path>] [-p | --priority <priority>] [-T | --tag <tag name>]
-```
-
-Girok provides powerful commands to effectively query your schedule with many different options. You can filter tasks by category, priority, deadline, and tag.
-
-#### 5.2.1 View options
-
-You can type `girok showtask` command with no parameter. The default view of the command is **list view**.
-
-Note that I've added some more tasks to make the visualization rich.
-
-```bash
-girok showtask
-```
-
-![](images/girok-showtask1.png)
-
-By default, all tasks will be shown in a nice table format.
-
-If you want to view your tasks in a categorized manner, then provide `--tree` flag.
-
-```bash
-girok showtask --tree
-```
-
-![](images/girok-showtask2.png)
-
-#### 5.2.2 Filter by category
-
-To query tasks under a specific category, use the following command,
-
-```bash
-girok showtask -c <category path>
-```
-
-For example, to query tasks only for the `HKU` category. Enter the following command.
-
-```bash
-girok showtask -c HKU
-```
-
-or
-
-```bash
-girok showtask -c HKU --tree # tree view
-```
-
-![](images/girok-showtask5.png)
-
-#### 5.2.3 Filter by date options
-
-You can query your tasks filtering by many different date options. Notice that all the options for `showtask` command are **OPTIONAL**.
-
-1. `-e | --exact <yyyy/mm/dd | mm/dd>`
- - To view tasks due to a specific day, provide the exact date after the flag
-2. `-d | --day <# days>`
- - To view tasks due **within `n` days**, provide the number of days `n` after the flag
-3. `-w | --week <# days>`
- - To view tasks due **within `n` weeks**, provide the number of weeks `n` after the flag
-4. `-m | --month <# days>`
- - To view tasks due **within `n` months**, provide the number of months `n` after the flag
-5. `--tdy`
- - To view tasks due today.
-6. `--tmr`
- - To view tasks due within tomorrow (today && tomorrow)
-7. `--tw`, `--nw`
- - To view tasks due within this week and next week, respectively
-8. `--tm`, `--nm`
- - To view tasks due within this month and next month, respectively
-9. `-t1 ~ -t7 | --thismon ~ --thissun`
- - To view tasks due **exactly** the weekday of this week
- - Monday is indexed as `1`
-10. `-n1 ~ -n7 | --nextmon ~ --nextsun`
-
-- To view tasks due **exactly** the weekday of next week
-- Monday is indexed as `1`
-
-11. `-u | --urgent`
-
-- To view urgent tasks that are within `3 days` by default
-
-#### 5.2.4 Filter by priority
-
-```bash
-girok showtask -p <priority (1~5)>
-```
-
-To view tasks with a specific priority, provide `-p` option followed by the priority number between `1` and `5`.
-
-For example, to view tasks with priority 5, enter the following command
-
-```bash
-girok showtask -p 5
-```
-
-![](images/girok-sho