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
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: