iCalendar file combiner, built to combine RFC 5545–compatible iCalendar data from multiple calendars and re-present it in a single calendar file for public consumption.
- Python >= 3.11
python3-venv
(forpip
andensurepip
)
This project uses pyproject.toml
to establish dependencies for its build
environment. The overall build process is described in general terms
here.
Clone the repo and create a Python venv
for the build environment:
git clone git@github.com:timparenti/calcombine.git
cd ~/calcombine
python3 -m venv .venv/ --prompt calcombine-build
Install pip
dependencies to the build environment:
source .venv/bin/activate
pip install --upgrade pip
pip install build
Install the package and its dependencies to the build environment in "editable" mode:
pip install -e .
Create a user, calcombine
, which will run calcombine in production, and establish
a Python venv
for each environment in which it will run, e.g.:
sudo adduser --disabled-password calcombine
sudo -s
python3 -m venv /opt/calcombine-test/ --prompt calcombine-test
python3 -m venv /opt/calcombine-prod/ --prompt calcombine-prod
chown -R calcombine:calcombine /opt/calcombine-test/
chown -R calcombine:calcombine /opt/calcombine-prod/
Then su
as the new user and install pip
dependencies to each environment
$ENV
:
sudo su calcombine
source /opt/$ENV/bin/activate
pip install --upgrade pip
pip install build
If not already active, activate the build environment:
cd ~/calcombine
source .venv/bin/activate
Reinstall the updated package and its dependencies to the build environment in "editable" mode:
pip install -e .
From the build directory and environment, build a wheel:
cd ~/calcombine
source .venv/bin/activate
# Bump the project version and update any other dependencies
edit pyproject.toml
python3 -m build --wheel
This creates a wheel in the dist
subdirectory. If needed, copy it to the
target environment's host.
Using the target environment's pip
, install the application from the latest
wheel created in the build environment's dist
subdirectory, e.g.:
sudo /opt/$ENV/bin/pip install ~/calcombine/dist/calcombine-x.y.z-py3-none-any.whl
where x.y.z
is the project version.
If not already active, activate the build environment:
cd ~/calcombine
source .venv/bin/activate
Run python3 -m calcombine
with the desired options.
See python3 -m calcombine --help
for options.
Using the target environment's python3
, run the application with the desired
options, e.g.:
sudo su calcombine
cd /opt/$ENV
./bin/python3 -m calcombine [options]
For production cron
, this is generally best invoked under the calcombine
user as:
cd /opt/calcombine-prod && ./bin/python3 -m calcombine [options]
or, equivalently, if an unscheduled production run is required:
sudo su calcombine -c "cd /opt/calcombine-prod && ./bin/python3 -m calcombine [options]"