Customisations

bdns-plus is designed to “just-work” and assumes a set of sensible defaults. That said, it is also possible to configure bdns-plus to better suit your projects requirements. Configuration is achieved through the setting of environment variables, defined below.

Default Configuration Properties

When using the bdns-plus python package, the following properties are used by default:

This configuration can be represented as a single JSON object, which can be loaded dynamically and configured per project.

{
    "levels": [
        {
            "id": 90,
            "code": -10,
            "name": "Basement 10"
        },
        {
            "id": 91,
            "code": -9,
            "name": "Basement 9"
        },
        {
            "id": 92,
            "code": -8,
            "name": "Basement 8"
        },
        {
            "id": 93,
            "code": -7,
            "name": "Basement 7"
        },
        {
            "id": 94,
            "code": -6,
            "name": "Basement 6"
        },
        {
            "id": 95,
            "code": -5,
            "name": "Basement 5"
        },
        {
            "id": 96,
            "code": -4,
            "name": "Basement 4"
        },
        {
            "id": 97,
            "code": -3,
            "name": "Basement 3"
        },
        {
            "id": 98,
            "code": -2,
            "name": "Basement 2"
        },
        {
            "id": 99,
            "code": -1,
            "name": "Basement 1"
        },
        {
            "id": 0,
            "code": 0,
            "name": "Ground"
        },
        {
            "id": 1,
            "code": 1,
            "name": "Level 1"
        },
        {
            "id": 2,
            "code": 2,
            "name": "Level 2"
        },
        {
            "id": 3,
            "code": 3,
            "name": "Level 3"
        },
        {
            "id": 4,
            "code": 4,
            "name": "Level 4"
        },
        {
            "id": 5,
            "code": 5,
            "name": "Level 5"
        },
        {
            "id": 6,
            "code": 6,
            "name": "Level 6"
        },
        {
            "id": 7,
            "code": 7,
            "name": "Level 7"
        },
        {
            "id": 8,
            "code": 8,
            "name": "Level 8"
        },
        {
            "id": 9,
            "code": 9,
            "name": "Level 9"
        },
        {
            "id": 10,
            "code": 10,
            "name": "Level 10"
        },
        {
            "id": 11,
            "code": 11,
            "name": "Level 11"
        },
        {
            "id": 12,
            "code": 12,
            "name": "Level 12"
        },
        {
            "id": 13,
            "code": 13,
            "name": "Level 13"
        },
        {
            "id": 14,
            "code": 14,
            "name": "Level 14"
        },
        {
            "id": 15,
            "code": 15,
            "name": "Level 15"
        },
        {
            "id": 16,
            "code": 16,
            "name": "Level 16"
        },
        {
            "id": 17,
            "code": 17,
            "name": "Level 17"
        },
        {
            "id": 18,
            "code": 18,
            "name": "Level 18"
        },
        {
            "id": 19,
            "code": 19,
            "name": "Level 19"
        },
        {
            "id": 20,
            "code": 20,
            "name": "Level 20"
        },
        {
            "id": 21,
            "code": 21,
            "name": "Level 21"
        },
        {
            "id": 22,
            "code": 22,
            "name": "Level 22"
        },
        {
            "id": 23,
            "code": 23,
            "name": "Level 23"
        },
        {
            "id": 24,
            "code": 24,
            "name": "Level 24"
        },
        {
            "id": 25,
            "code": 25,
            "name": "Level 25"
        },
        {
            "id": 26,
            "code": 26,
            "name": "Level 26"
        },
        {
            "id": 27,
            "code": 27,
            "name": "Level 27"
        },
        {
            "id": 28,
            "code": 28,
            "name": "Level 28"
        },
        {
            "id": 29,
            "code": 29,
            "name": "Level 29"
        },
        {
            "id": 30,
            "code": 30,
            "name": "Level 30"
        },
        {
            "id": 31,
            "code": 31,
            "name": "Level 31"
        },
        {
            "id": 32,
            "code": 32,
            "name": "Level 32"
        },
        {
            "id": 33,
            "code": 33,
            "name": "Level 33"
        },
        {
            "id": 34,
            "code": 34,
            "name": "Level 34"
        },
        {
            "id": 35,
            "code": 35,
            "name": "Level 35"
        },
        {
            "id": 36,
            "code": 36,
            "name": "Level 36"
        },
        {
            "id": 37,
            "code": 37,
            "name": "Level 37"
        },
        {
            "id": 38,
            "code": 38,
            "name": "Level 38"
        },
        {
            "id": 39,
            "code": 39,
            "name": "Level 39"
        },
        {
            "id": 40,
            "code": 40,
            "name": "Level 40"
        },
        {
            "id": 41,
            "code": 41,
            "name": "Level 41"
        },
        {
            "id": 42,
            "code": 42,
            "name": "Level 42"
        },
        {
            "id": 43,
            "code": 43,
            "name": "Level 43"
        },
        {
            "id": 44,
            "code": 44,
            "name": "Level 44"
        },
        {
            "id": 45,
            "code": 45,
            "name": "Level 45"
        },
        {
            "id": 46,
            "code": 46,
            "name": "Level 46"
        },
        {
            "id": 47,
            "code": 47,
            "name": "Level 47"
        },
        {
            "id": 48,
            "code": 48,
            "name": "Level 48"
        },
        {
            "id": 49,
            "code": 49,
            "name": "Level 49"
        },
        {
            "id": 50,
            "code": 50,
            "name": "Level 50"
        },
        {
            "id": 51,
            "code": 51,
            "name": "Level 51"
        },
        {
            "id": 52,
            "code": 52,
            "name": "Level 52"
        },
        {
            "id": 53,
            "code": 53,
            "name": "Level 53"
        },
        {
            "id": 54,
            "code": 54,
            "name": "Level 54"
        },
        {
            "id": 55,
            "code": 55,
            "name": "Level 55"
        },
        {
            "id": 56,
            "code": 56,
            "name": "Level 56"
        },
        {
            "id": 57,
            "code": 57,
            "name": "Level 57"
        },
        {
            "id": 58,
            "code": 58,
            "name": "Level 58"
        },
        {
            "id": 59,
            "code": 59,
            "name": "Level 59"
        },
        {
            "id": 60,
            "code": 60,
            "name": "Level 60"
        },
        {
            "id": 61,
            "code": 61,
            "name": "Level 61"
        },
        {
            "id": 62,
            "code": 62,
            "name": "Level 62"
        },
        {
            "id": 63,
            "code": 63,
            "name": "Level 63"
        },
        {
            "id": 64,
            "code": 64,
            "name": "Level 64"
        },
        {
            "id": 65,
            "code": 65,
            "name": "Level 65"
        },
        {
            "id": 66,
            "code": 66,
            "name": "Level 66"
        },
        {
            "id": 67,
            "code": 67,
            "name": "Level 67"
        },
        {
            "id": 68,
            "code": 68,
            "name": "Level 68"
        },
        {
            "id": 69,
            "code": 69,
            "name": "Level 69"
        },
        {
            "id": 70,
            "code": 70,
            "name": "Level 70"
        },
        {
            "id": 71,
            "code": 71,
            "name": "Level 71"
        },
        {
            "id": 72,
            "code": 72,
            "name": "Level 72"
        },
        {
            "id": 73,
            "code": 73,
            "name": "Level 73"
        },
        {
            "id": 74,
            "code": 74,
            "name": "Level 74"
        },
        {
            "id": 75,
            "code": 75,
            "name": "Level 75"
        },
        {
            "id": 76,
            "code": 76,
            "name": "Level 76"
        },
        {
            "id": 77,
            "code": 77,
            "name": "Level 77"
        },
        {
            "id": 78,
            "code": 78,
            "name": "Level 78"
        },
        {
            "id": 79,
            "code": 79,
            "name": "Level 79"
        },
        {
            "id": 80,
            "code": 80,
            "name": "Level 80"
        },
        {
            "id": 81,
            "code": 81,
            "name": "Level 81"
        },
        {
            "id": 82,
            "code": 82,
            "name": "Level 82"
        },
        {
            "id": 83,
            "code": 83,
            "name": "Level 83"
        },
        {
            "id": 84,
            "code": 84,
            "name": "Level 84"
        },
        {
            "id": 85,
            "code": 85,
            "name": "Level 85"
        },
        {
            "id": 86,
            "code": 86,
            "name": "Level 86"
        },
        {
            "id": 87,
            "code": 87,
            "name": "Level 87"
        },
        {
            "id": 88,
            "code": 88,
            "name": "Level 88"
        },
        {
            "id": 89,
            "code": 89,
            "name": "Level 89"
        }
    ],
    "volumes": [
        {
            "id": 1,
            "code": 1,
            "name": "Volume 1"
        },
        {
            "id": 2,
            "code": 2,
            "name": "Volume 2"
        },
        {
            "id": 3,
            "code": 3,
            "name": "Volume 3"
        },
        {
            "id": 4,
            "code": 4,
            "name": "Volume 4"
        },
        {
            "id": 5,
            "code": 5,
            "name": "Volume 5"
        },
        {
            "id": 6,
            "code": 6,
            "name": "Volume 6"
        },
        {
            "id": 7,
            "code": 7,
            "name": "Volume 7"
        },
        {
            "id": 8,
            "code": 8,
            "name": "Volume 8"
        },
        {
            "id": 9,
            "code": 9,
            "name": "Volume 9"
        }
    ],
    "level_identifier_type": "code",
    "volume_identifier_type": "code",
    "map_volume_level": null,
    "iref_fstring": "{volume_id}{level_id}{volume_level_instance}",
    "is_default_levels": true,
    "is_default_volumes": true,
    "bdns_tag": {
        "name": "BDNS Tag",
        "description": "TagDef Definition in accordance with Building Data Naming System",
        "fields": [
            {
                "field_name": "country",
                "field_aliases": [
                    "Country"
                ],
                "allow_none": true,
                "prefix": "",
                "suffix": "-",
                "zfill": null,
                "regex": null,
                "validator": "bdns_plus.default_fields.validate_alpha2_country"
            },
            {
                "field_name": "city",
                "field_aliases": [
                    "City"
                ],
                "allow_none": true,
                "prefix": "",
                "suffix": "-",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "project",
                "field_aliases": [
                    "Project"
                ],
                "allow_none": true,
                "prefix": "",
                "suffix": "-",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "abbreviation",
                "field_aliases": [
                    "Abbreviation"
                ],
                "allow_none": false,
                "prefix": "",
                "suffix": "",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "instance_reference",
                "field_aliases": [
                    "InstanceReference"
                ],
                "allow_none": false,
                "prefix": "-",
                "suffix": "",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "instance_extra",
                "field_aliases": [
                    "InstanceExtra"
                ],
                "allow_none": true,
                "prefix": "_",
                "suffix": "",
                "zfill": null,
                "regex": null,
                "validator": null
            }
        ]
    },
    "i_tag": {
        "name": "Instance Tag",
        "description": "Default Tag Definition for indentifying a unique instance of equipment within a building. Expected to be used for adding equipment references to drawings, reports and legends. ",
        "fields": [
            {
                "field_name": "abbreviation",
                "field_aliases": [
                    "Abbreviation"
                ],
                "allow_none": false,
                "prefix": "",
                "suffix": "/",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "volume",
                "field_aliases": [
                    "Volume"
                ],
                "allow_none": false,
                "prefix": "",
                "suffix": "/",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "level",
                "field_aliases": [
                    "Level",
                    "level"
                ],
                "allow_none": false,
                "prefix": "",
                "suffix": "/",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "volume_level_instance",
                "field_aliases": [
                    "LevelInstance",
                    "level_instance"
                ],
                "allow_none": false,
                "prefix": "",
                "suffix": "/",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "instance_extra",
                "field_aliases": [
                    "InstanceExtra"
                ],
                "allow_none": true,
                "prefix": "",
                "suffix": "",
                "zfill": null,
                "regex": null,
                "validator": null
            }
        ]
    },
    "t_tag": {
        "name": "Type Tag",
        "description": "Default Tag Definition for indentifying a unique type of equipment, there is likely to be many instances of a type in the building. Expected to be used when a unique reference to every item is not required. For example, a light fitting type that may be used in many locations.",
        "fields": [
            {
                "field_name": "abbreviation",
                "field_aliases": [
                    "Abbreviation"
                ],
                "allow_none": false,
                "prefix": "",
                "suffix": "",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "type_reference",
                "field_aliases": [
                    "TypeReference",
                    "type"
                ],
                "allow_none": true,
                "prefix": "",
                "suffix": "",
                "zfill": null,
                "regex": null,
                "validator": null
            },
            {
                "field_name": "type_extra",
                "field_aliases": [
                    "TypeExtra"
                ],
                "allow_none": true,
                "prefix": "/",
                "suffix": "",
                "zfill": null,
                "regex": null,
                "validator": null
            }
        ]
    },
    "custom_tags": null,
    "is_bdns_plus_default": true,
    "drop_if_single_volume": true,
    "level_ids": [
        90,
        91,
        92,
        93,
        94,
        95,
        96,
        97,
        98,
        99,
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37,
        38,
        39,
        40,
        41,
        42,
        43,
        44,
        45,
        46,
        47,
        48,
        49,
        50,
        51,
        52,
        53,
        54,
        55,
        56,
        57,
        58,
        59,
        60,
        61,
        62,
        63,
        64,
        65,
        66,
        67,
        68,
        69,
        70,
        71,
        72,
        73,
        74,
        75,
        76,
        77,
        78,
        79,
        80,
        81,
        82,
        83,
        84,
        85,
        86,
        87,
        88,
        89
    ],
    "volume_ids": [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9
    ],
    "level_no_digits": 2,
    "volume_no_digits": 1,
    "no_levels": 100,
    "no_volumes": 9
}

Project Configuration

Tip

Refer to examples for how to use the project configuration.

It is possible to define a project custom configuration file, which can be loaded dynamically. This is set by defining the environment variable BDNS_PLUS_CONFIG to point to a JSON file or URL endpoint. It can be reloaded dynamically by calling the bdns_plus.reload_config() function.

Example of a custom configuration file: