Skip to content
1962 Roman Catholic Missal for the Traditional Latin Mass
Python HTML JavaScript CSS Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Missal 1962

1962 Roman Catholic Missal for the Traditional Latin Mass.

The application consists of Python/Flask API, serving calendar and propers for a given day, and Bootstrap UI consuming and presenting the data. The application utilizes data files from Divinum Officium, which is linked through a git submodule.


  • Calculates the calendar for given liturgical year
  • Shows Proprium Missae for a given date
  • Shows Proprium Missae for a given observance

At the moment the only supported vernacular language is Polish, but since the data for many other languages is available in Divinum Officium, it will be relatively easy to support them. Volunteers are welcome to contribute.

Running the application

API mode



Clone the repository using --recursive switch to also fetch divinum-officium as a submodule - it's used to display propers.

Once cloned, go to the project's dir and call pipenv install --dev to install a dedicated virtualenv with required dependencies. Then pipenv shell to activate the environment.


By default the application is using lru_cache to cache responses from missal1962.controller functions (which are used by missal1962.api to fetch the data).

To disable caching one need to set environment variable MISSAL_NO_CACHE to True

Run the development API:

$ python missal1962/

and navigate to

API endpoints:

  • GET / serve the static files
  • GET /calendar/{year} get calendar for the whole year in format YYYY, e.g. "2018"
  • GET /date/{date} get proper for given date in format YYYY-MM-DD, e.g. "2018-05-03"
  • GET /proper/{proper_id} get proper for given observance by ID, regardless of its place in the calendar; ID can be found in response from /calendar endpoint, e.g. "sancti:12-24" for Nativity Vigil or "tempora:Adv4-0" for fourth Advent Sunday


Docker setup spins up the application in the API mode. It copies only the necessary files from Divinum Officium to keep the image light and serves the application using Gunicorn.

$ docker build -t missal1962 .
$ docker run -d -p 8000:8000 missal1962

and navigate to

Static mode

The application can also work without the API. In such a case it utilizes a limited set of generated data files.

To run in this mode:

  • In index.html change js config link from js/conf-api.js to js/conf-static.js.
  • Navigate to static directory and serve the content using any http server, for example:
$ cd missal1962/static
$ python -m http.server 8080

and navigate to

Command line (CLI)

Calculate the calendar

# current year
$ python missal1962/ calendar

# selected year
$ python missal1962/ calendar 2020

Show Proprium Missae for given date

$ python missal1962/ date 2018-05-03

Show Proprium Missae for given observance

Observance ID can be obtained from calendar's output

# Second Sunday of Advent
$ python missal1962/ proper tempora:Adv2-0

# The Seven Dolors of the Blessed Virgin Mary
$ python missal1962/ proper sancti:09-15

Dev info

kalendar.factory.MissalFactory#create instantiates and builds kalendar.models.Calendar object.

kalendar.models.Calendar internally keeps the data in an ordered dict where a key is a object, and the value is an instance of kalendar.models.Day class.

Each kalendar.models.Day contains three list properties, tempora, celebration and commemoration, each one containing kalendar.models.Observance objects, representing given observance. tempora refers to the liturgical time, such as "The first Friday after Pentecost", celebration holds kalendar.models.Observances that are actually celebrated in given day, such as "Assumption of Mary". commemoration contains objects representing observances that should be commemorated with the main celebration.

Each kalendar.models.Day has method get_proper, which calculates the actual readings in vernacular and Latin for given calendar day.

Each kalendar.models.Observance has method get_proper, which returns the readings for the given observance (regardless of its place in the calendar).

You can’t perform that action at this time.