This a very simple project for taking meeting minutes !
We have some basic requirements for this template :
Based on the above planned requirements we’ll need files and folders created as follows :
meeting_notes
├── angreal.toml
└── {{ name }}
├── .angreal
│ ├── init.py
│ └── task_take_notes.py
└── README.md
angreal.toml
The angreal.toml
file tells angreal what variables it needs to template and provides default values for them.
Our template will have the following variables:
name="another_meeting"
cadence="weekly"
standing_agenda="Complaints"
README.md
The README.md
is just meant to be a highlevel description of the meeting so you can remember why you’re there every week.
# {{ name }}
## Cadence
{{ cadence }}
## Standing Agenda
{{ standing_agenda }}
init.py
Optional: In this very trivial example, not much happens after the folder structure is created so the init isn’t required.
def init():
print("Initializing {{ name }} !")
return
task_take_notes.py
Angreal tasks must be a function in a python file that starts with task_
in the .angreal
folder.
import angreal
import datetime
import os
import subprocess
import tempfile
@angreal.command(name='take-notes', about='Take notes for our meeting')
@angreal.argument(name='now',long='now', takes_value=False)
def angreal_cmd(now=False):
"""
create a file for taking minutes
"""
file_name = datetime.datetime.today().strftime('%Y-%m-%d-%H-%M')
# We're going to assume that you're running on ubuntu
# which has a binary called "editor" that will launch your
# default terminal editor. If you need something else - set the environment
# variable "EDITOR" to the appropriate command
editor = os.environ.get('EDITOR','editor')
# Create our default file template using the current time as a header
(fd, path) = tempfile.mkstemp()
with open(fd, 'w') as default:
print('# {}'.format(file_name), file=default)
# We want to start writing now if we're able
if now and editor:
subprocess.call('{} {}'.format(editor,path), shell=True)
# Send the finalized contents of the temporary file to the actual file
with open(file_name+'.md', 'a') as dst:
with open(path,'r') as src:
print(src.read(),file=dst)
# Clean up behind our selves
os.unlink(path)
A brief explanation of this code:
- import angreal and other libraries
- decorate a function with the command
- we decorate the same function with an argument
The function itself:
editor
command from Ubuntu--now
argument, opens a temporary file using your editor$ angreal init docs/content/tutorials/meeting_notes
cadence? ["weekly"]
>
name? ["another_meeting"]
> Hall of the Tower
standing_agenda? ["Complaints"]
> Discussing embroidery and fine turned calves
Initializing Hall of the Tower !
$ tree 'Hall of the Tower'
Hall of the Tower
└── README.md
$ cat Hall\ of\ the\ Tower/README.md ─╯
# Hall of the Tower
## Cadence
Weekly
## Standing Agenda
Discussing embroidery and fine turned calves.
$ cd 'Hall of the Tower'
$ angreal
angreal 2.0.0-rc.1
USAGE:
angreal <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
-V, --version Print version information
SUBCOMMANDS:
help Print this message or the help of the given subcommand(s)
init Initialize an Angreal template from source.
take-notes Take notes for our meeting
take-notes
?$ angreal take-notes --help
take-notes
create a file for taking minutes
USAGE:
take-notes [OPTIONS]
OPTIONS:
-h, --help
Print help information
--now
open editor immediately
Lets take some minutes, right now
$ export EDITOR='vim'
$ angreal take-minutes --now
This will open an editor (vim if you set the EDITOR
variable) write a note.
$ ls ─╯
2023-01-19-09-19.md README.md