Site Configuration¶
Location¶
Each site should have a datatig.json or datatig.yaml file at it’s root. This contains configuration for that site.
The schema of each file is the same.
We recommend using datatig.yaml - it is easier to edit, and you can have comments.
General¶
title - A string. The title of the whole site.
description - A string. A description for the whole site.
A YAML example:
title: Test register
description: The data for a test
Types¶
We need to know information about the types of data - think of types like a table in a database.
The types key is an array of type information.
Every type has the following options available:
id - every type needs a unique ID.
directory - the directory to look in for data files for this type. Relative to the root of the git repository.
fields - a list of field information. See section below for more.
list_fields - a list of field id’s to show in the static site web interface.
json_schema - a path to a JSON Schema file for this type. Relative to the root of the git repository.
pretty_json_indent - When writing back JSON files, how many spaces to ident by. Defaults to 4.
default_format - When creating new records, what is the default format? ‘json’, ‘md’ or ‘yaml’. Defaults to ‘yaml’.
markdown_body_is_field - When reading or writing markdown files, the body of the markdown file is put into a key with this name. Defaults to body. Set to — (3 dashes) to turn this off and make sure no default is used.
record_id_mode - When creating an id for a file, whether to include any directories it may be in too. Can be directory_and_filename or filename_only. Defaults to directory_and_filename.
A YAML example:
types:
- id: lists
directory: lists
list_fields:
- code
- title_en
json_schema: schema/list-schema.json
pretty_json_indent: 2
default_format: json
Fields¶
Every field needs to be defined. Every field type has these options:
id - every field needs a unique ID within that type.
key - the path in the data to find this value. Note paths are allowed, not just keys. If not set, the value of id will be used.
title - a title for this field. If not set, the value of id will be used.
description - a description for this field.
type - a type for this field. Defaults to string.
required - Defaults to False.
Some field types have extra options. See below for details.
A YAML example:
types:
- id: lists
fields:
- id: code
key: code
title: Code
- id: title_en
key: name/en
title: Name (EN)
- id: url
key: url
title: URL
type: url
- id: description_en
key: description/en
title: Description (EN)
multiline: True
Field Type string¶
The type string has the following extra options:
multiline: Defaults to false. Whether new lines are allowed in values
min_length and max_length: Defaults to not set. Min or Max length of string allowed.
Field Type url¶
There are no extra configuration options.
Field Type date¶
The type date has the following extra option:
timezone: Defaults to UTC. Set to a location string like Europe/Berlin
Field Type datetime¶
The type datetime has the following extra options:
timezone: Defaults to UTC. Set to a location string like Europe/Berlin
timezone_field: The id of another field on the record that says what time zone to use. That field should be of type timezone and should be defined before this field.
Field Type boolean¶
There are no extra configuration options.
Field Type integer¶
There are no extra configuration options.
Field Type markdown¶
There are no extra configuration options.
Field Type list-strings¶
The type list-strings has the following extra options:
unique_items: Boolean. If true, every value in the list must be unique.
string_min_length and string_max_length: Defaults to not set. Min or Max length of the strings allowed.
Field Type list-dictionaries¶
As well as list-dictionaries, a type of list-dicts can be used for short.
The type list-dictionaries has the following extra options:
fields: A list of fields to be found in the dictionary items. Definition is the same as above, but list types are not allowed. (So you can’t have a list in a list.)
unique_items: Boolean. If true, every value in the list must be unique.
Field Type enum¶
There must be an extra option choices which is a list with at least one item, it’s items being one off:
A string
A dict with a value key. Optionally, this dict can have a title key.
Field Type timezone¶
There are no extra configuration options.
Git Host¶
You can specify information about where this git repository is hosted.
Currently the only hosts supported are:
In a githost object, specify the following keys:
url - the URL of the repository. This should not contain the hostname but just the organisation and repository. eg org-id/register.
primary_branch - the name of the default or primary branch. Defaults to main.
directory - if the datatig files are not in the root of the repository, specify where they are here.
A YAML example:
githost:
url: org-id/register
primary_branch: main
directory: src
Calendars¶
More about Calendars.
You can define multiple calendars. Each calendar should have an id. Each calendar can have multiple sources of data, and each source of data should define which type to look in and which fields in the data to map to fields in the calendar.
In a calendars object, specify the id of the calendar then an object to configure it. Each object should have:
datas: a list of data sounces; see below.
timezone: Defaults to UTC. Set to a location string like Europe/Berlin. Ideally also set the same timezone on the start and end fields you will be using.
Each item in the datas list can have the following keys.
type (required) - The id of the type to get data from.
start (optional, defaults to start) - the field name to use to look up the start date of the event.
end (optional, defaults to end) - the field name to use to look up the end date of the event.
summary (optional, defaults to summary) - the field name to use to look up the summary title of the event.
id (optional, defaults to {{type_id}}_{{record_id}}@example.com) - the template to use to create an id for each event.
Field names given should not be of one of the list types.
ids of each event should be defined to be unique in each calendar, and the following place holders can be used:
{{record_id}} - the id of the record
{{type_id}} - the id of the type
A YAML example:
calendars:
main:
timezone: Europe/Berlin
datas:
- type: events
summary: title
deadlines:
timezone: Europe/Berlin
datas:
- type: events
summary: title
start: submission_deadline
end: submission_deadline
id: "deadline_ID@example.com"
This defines 2 calendars, one with the id main and one with the id deadlines.
Given an data item like:
title: Python Conference
start: 2024-07-01T10:00:00
end: 2024-07-01T11:00:00
submission_deadline: 2024-01-05
You can see that the same data item creates an event on the main calendar with the start and end dates, but also creates a different event on the deadlines calendar at the date of the deadline for the conference.