ena-upload-cli 0.10.0__tar.gz → 0.10.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. {ena_upload_cli-0.10.0/ena_upload_cli.egg-info → ena_upload_cli-0.10.2}/PKG-INFO +2 -2
  2. ena_upload_cli-0.10.2/ena_upload/_version.py +1 -0
  3. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA.project.xsd +16 -4
  4. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_PLATFORM.xml +5 -0
  5. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000030.xml +3 -3
  6. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000031.xml +3 -71
  7. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000038.xml +0 -4
  8. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000055.xml +0 -2
  9. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000056.xml +1 -59
  10. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000057.xml +0 -10
  11. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000058.xml +2 -26
  12. ena_upload_cli-0.10.2/ena_upload/templates/ENA_template_samples_ERC000060.xml +509 -0
  13. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/SRA.common.xsd +14 -0
  14. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2/ena_upload_cli.egg-info}/PKG-INFO +2 -2
  15. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload_cli.egg-info/SOURCES.txt +1 -0
  16. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload_cli.egg-info/requires.txt +1 -1
  17. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/requirements.txt +1 -1
  18. ena_upload_cli-0.10.0/ena_upload/_version.py +0 -1
  19. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/LICENSE +0 -0
  20. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/MANIFEST.in +0 -0
  21. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/README.md +0 -0
  22. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/__init__.py +0 -0
  23. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/check_remote.py +0 -0
  24. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/ena_upload.py +0 -0
  25. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/__init__.py +0 -0
  26. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/characteristic.py +0 -0
  27. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/ena_experiment.py +0 -0
  28. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/ena_run.py +0 -0
  29. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/ena_sample.py +0 -0
  30. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/ena_std_lib.py +0 -0
  31. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/ena_study.py +0 -0
  32. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/ena_submission.py +0 -0
  33. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/assay_schema.json +0 -0
  34. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/comment_schema.json +0 -0
  35. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/data_schema.json +0 -0
  36. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/factor_schema.json +0 -0
  37. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/factor_value_schema.json +0 -0
  38. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/investigation_schema.json +0 -0
  39. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/material_attribute_schema.json +0 -0
  40. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/material_attribute_value_schema.json +0 -0
  41. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/material_schema.json +0 -0
  42. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/ontology_annotation_schema.json +0 -0
  43. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/ontology_source_reference_schema.json +0 -0
  44. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/organization_schema.json +0 -0
  45. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/person_schema.json +0 -0
  46. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/process_parameter_value_schema.json +0 -0
  47. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/process_schema.json +0 -0
  48. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/protocol_parameter_schema.json +0 -0
  49. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/protocol_schema.json +0 -0
  50. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/publication_schema.json +0 -0
  51. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/sample_schema.json +0 -0
  52. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/source_schema.json +0 -0
  53. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/json_schemas/study_schema.json +0 -0
  54. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/json_parsing/other_material.py +0 -0
  55. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_FASTQFILE.xml +0 -0
  56. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_FILE.xml +0 -0
  57. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_LIBRARY_SELECTION.xml +0 -0
  58. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_LIBRARY_SOURCE.xml +0 -0
  59. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_LIBRARY_STRATEGY.xml +0 -0
  60. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_READ_TYPE.xml +0 -0
  61. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_experiments.xml +0 -0
  62. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_runs.xml +0 -0
  63. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000011.xml +0 -0
  64. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000012.xml +0 -0
  65. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000013.xml +0 -0
  66. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000014.xml +0 -0
  67. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000015.xml +0 -0
  68. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000016.xml +0 -0
  69. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000017.xml +0 -0
  70. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000018.xml +0 -0
  71. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000019.xml +0 -0
  72. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000020.xml +0 -0
  73. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000021.xml +0 -0
  74. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000022.xml +0 -0
  75. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000023.xml +0 -0
  76. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000024.xml +0 -0
  77. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000025.xml +0 -0
  78. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000026.xml +0 -0
  79. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000027.xml +0 -0
  80. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000028.xml +0 -0
  81. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000029.xml +0 -0
  82. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000032.xml +0 -0
  83. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000033.xml +0 -0
  84. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000034.xml +0 -0
  85. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000035.xml +0 -0
  86. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000036.xml +0 -0
  87. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000037.xml +0 -0
  88. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000039.xml +0 -0
  89. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000040.xml +0 -0
  90. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000041.xml +0 -0
  91. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000043.xml +0 -0
  92. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000044.xml +0 -0
  93. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000045.xml +0 -0
  94. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000046.xml +0 -0
  95. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000047.xml +0 -0
  96. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000048.xml +0 -0
  97. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000049.xml +0 -0
  98. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000050.xml +0 -0
  99. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000051.xml +0 -0
  100. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000052.xml +0 -0
  101. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000053.xml +0 -0
  102. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_samples_ERC000059.xml +0 -0
  103. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_studies.xml +0 -0
  104. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/ENA_template_submission.xml +0 -0
  105. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/SRA.experiment.xsd +0 -0
  106. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/SRA.run.xsd +0 -0
  107. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/SRA.sample.xsd +0 -0
  108. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/SRA.study.xsd +0 -0
  109. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload/templates/SRA.submission.xsd +0 -0
  110. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload_cli.egg-info/dependency_links.txt +0 -0
  111. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload_cli.egg-info/entry_points.txt +0 -0
  112. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/ena_upload_cli.egg-info/top_level.txt +0 -0
  113. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/setup.cfg +0 -0
  114. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/setup.py +0 -0
  115. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/tests/__init__.py +0 -0
  116. {ena_upload_cli-0.10.0 → ena_upload_cli-0.10.2}/tests/test_ena_objects.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ena-upload-cli
3
- Version: 0.10.0
3
+ Version: 0.10.2
4
4
  Summary: Command Line Interface to upload data to the European Nucleotide Archive
5
5
  Home-page: https://github.com/usegalaxy-eu/ena-upload-cli
6
6
  Author: Dilmurat Yusuf
@@ -12,7 +12,7 @@ Requires-Python: >=3.8
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: genshi==0.7.*
15
- Requires-Dist: lxml==5.3.0
15
+ Requires-Dist: lxml==6.1.0
16
16
  Requires-Dist: pandas<=3.0.0,>=2.0.3
17
17
  Requires-Dist: pyyaml==6.0.*
18
18
  Requires-Dist: requests<=3.0.0,>=2.31.0
@@ -0,0 +1 @@
1
+ __version__ = "0.10.2"
@@ -47,17 +47,29 @@
47
47
  <xs:documentation> A short name of the project. </xs:documentation>
48
48
  </xs:annotation>
49
49
  </xs:element>
50
- <xs:element minOccurs="1" name="TITLE" type="xs:string">
50
+ <xs:element minOccurs="1" name="TITLE" >
51
51
  <xs:annotation>
52
52
  <xs:documentation> A short descriptive title for the project.
53
- </xs:documentation>
53
+ </xs:documentation>
54
54
  </xs:annotation>
55
+ <xs:simpleType>
56
+ <xs:restriction base="xs:string">
57
+ <xs:minLength value="20"/>
58
+ <xs:maxLength value="250"/>
59
+ </xs:restriction>
60
+ </xs:simpleType>
55
61
  </xs:element>
56
- <xs:element minOccurs="0" name="DESCRIPTION" type="xs:string">
62
+ <xs:element minOccurs="1" name="DESCRIPTION" >
57
63
  <xs:annotation>
58
64
  <xs:documentation> A long description of the scope of the project.
59
- </xs:documentation>
65
+ </xs:documentation>
60
66
  </xs:annotation>
67
+ <xs:simpleType>
68
+ <xs:restriction base="xs:string">
69
+ <xs:minLength value="20"/>
70
+ <xs:maxLength value="4000"/>
71
+ </xs:restriction>
72
+ </xs:simpleType>
61
73
  </xs:element>
62
74
  <xs:element minOccurs="0" name="COLLABORATORS">
63
75
  <xs:complexType>
@@ -111,8 +111,13 @@
111
111
  <INSTRUMENT_MODEL py:when="row.instrument_model.lower().strip() == 'element aviti'">Element AVITI</INSTRUMENT_MODEL>
112
112
  <INSTRUMENT_MODEL py:when="row.instrument_model.lower().strip() == 'unspecified'">unspecified</INSTRUMENT_MODEL>
113
113
  </ELEMENT>
114
+ <AVITI py:when="row.platform.lower().strip() == 'aviti'" py:choose="">
115
+ <INSTRUMENT_MODEL py:when="row.instrument_model.lower().strip() == 'aviti 24'">AVITI 24</INSTRUMENT_MODEL>
116
+ <INSTRUMENT_MODEL py:when="row.instrument_model.lower().strip() == 'unspecified'">unspecified</INSTRUMENT_MODEL>
117
+ </AVITI>
114
118
  <ULTIMA py:when="row.platform.lower().strip() == 'ultima'" py:choose="">
115
119
  <INSTRUMENT_MODEL py:when="row.instrument_model.lower().strip() == 'ug 100'">UG 100</INSTRUMENT_MODEL>
120
+ <INSTRUMENT_MODEL py:when="row.instrument_model.lower().strip() == 'ug 200'">UG 200</INSTRUMENT_MODEL>
116
121
  <INSTRUMENT_MODEL py:when="row.instrument_model.lower().strip() == 'unspecified'">unspecified</INSTRUMENT_MODEL>
117
122
  </ULTIMA>
118
123
  <VELA_DIAGNOSTICS py:when="row.platform.lower().strip() == 'vela_diagnostics'" py:choose="">
@@ -33,10 +33,10 @@ def mandatorytest(row, column, index):
33
33
  <DESCRIPTION>${row.sample_description}</DESCRIPTION>
34
34
  </py:if>
35
35
  <SAMPLE_ATTRIBUTES>
36
- <py:if test="attributetest(row, 'Event Label')">
36
+ <py:if test="attributetest(row, 'event label')">
37
37
  <SAMPLE_ATTRIBUTE>
38
- <TAG>Event Label</TAG>
39
- <VALUE>${row['Event Label']}</VALUE>
38
+ <TAG>event label</TAG>
39
+ <VALUE>${row['event label']}</VALUE>
40
40
  </SAMPLE_ATTRIBUTE>
41
41
  </py:if>
42
42
  <py:if test="attributetest(row, 'Event Date/Time Start')">
@@ -440,7 +440,6 @@ def mandatorytest(row, column, index):
440
440
  <SAMPLE_ATTRIBUTE>
441
441
  <TAG>door material</TAG>
442
442
  <VALUE>${row['door material']}</VALUE>
443
- <UNITS>kg s−3</UNITS>
444
443
  </SAMPLE_ATTRIBUTE>
445
444
  </py:if>
446
445
  <py:if test="attributetest(row, 'adjacent rooms')">
@@ -460,7 +459,6 @@ def mandatorytest(row, column, index):
460
459
  <SAMPLE_ATTRIBUTE>
461
460
  <TAG>ceiling signs of water/mold</TAG>
462
461
  <VALUE>${row['ceiling signs of water/mold']}</VALUE>
463
- <UNITS>J/°C</UNITS>
464
462
  </SAMPLE_ATTRIBUTE>
465
463
  </py:if>
466
464
  <py:if test="attributetest(row, 'window status')">
@@ -474,28 +472,24 @@ def mandatorytest(row, column, index):
474
472
  <SAMPLE_ATTRIBUTE>
475
473
  <TAG>door location</TAG>
476
474
  <VALUE>${row['door location']}</VALUE>
477
- <UNITS>year</UNITS>
478
475
  </SAMPLE_ATTRIBUTE>
479
476
  </py:if>
480
477
  <py:if test="attributetest(row, 'window signs of water/mold')">
481
478
  <SAMPLE_ATTRIBUTE>
482
479
  <TAG>window signs of water/mold</TAG>
483
480
  <VALUE>${row['window signs of water/mold']}</VALUE>
484
- <UNITS>year</UNITS>
485
481
  </SAMPLE_ATTRIBUTE>
486
482
  </py:if>
487
483
  <py:if test="attributetest(row, 'window type')">
488
484
  <SAMPLE_ATTRIBUTE>
489
485
  <TAG>window type</TAG>
490
486
  <VALUE>${row['window type']}</VALUE>
491
- <UNITS>ppm</UNITS>
492
487
  </SAMPLE_ATTRIBUTE>
493
488
  </py:if>
494
489
  <py:if test="attributetest(row, 'window material')">
495
490
  <SAMPLE_ATTRIBUTE>
496
491
  <TAG>window material</TAG>
497
492
  <VALUE>${row['window material']}</VALUE>
498
- <UNITS>g/m3</UNITS>
499
493
  </SAMPLE_ATTRIBUTE>
500
494
  </py:if>
501
495
  <py:if test="attributetest(row, 'window horizontal position')">
@@ -508,7 +502,6 @@ def mandatorytest(row, column, index):
508
502
  <SAMPLE_ATTRIBUTE>
509
503
  <TAG>room condition</TAG>
510
504
  <VALUE>${row['room condition']}</VALUE>
511
- <UNITS>mm</UNITS>
512
505
  </SAMPLE_ATTRIBUTE>
513
506
  </py:if>
514
507
  <py:if test="attributetest(row, 'window area/size')">
@@ -522,7 +515,6 @@ def mandatorytest(row, column, index):
522
515
  <SAMPLE_ATTRIBUTE>
523
516
  <TAG>sampling floor</TAG>
524
517
  <VALUE>${row['sampling floor']}</VALUE>
525
- <UNITS>°C</UNITS>
526
518
  </SAMPLE_ATTRIBUTE>
527
519
  </py:if>
528
520
  <py:if test="attributetest(row, 'room count')">
@@ -535,21 +527,18 @@ def mandatorytest(row, column, index):
535
527
  <SAMPLE_ATTRIBUTE>
536
528
  <TAG>average daily occupancy</TAG>
537
529
  <VALUE>${row['average daily occupancy']}</VALUE>
538
- <UNITS>°C</UNITS>
539
530
  </SAMPLE_ATTRIBUTE>
540
531
  </py:if>
541
532
  <py:if test="attributetest(row, 'floor condition')">
542
533
  <SAMPLE_ATTRIBUTE>
543
534
  <TAG>floor condition</TAG>
544
535
  <VALUE>${row['floor condition']}</VALUE>
545
- <UNITS>°C</UNITS>
546
536
  </SAMPLE_ATTRIBUTE>
547
537
  </py:if>
548
538
  <py:if test="attributetest(row, 'door type, wood')">
549
539
  <SAMPLE_ATTRIBUTE>
550
540
  <TAG>door type, wood</TAG>
551
541
  <VALUE>${row['door type, wood']}</VALUE>
552
- <UNITS>°C</UNITS>
553
542
  </SAMPLE_ATTRIBUTE>
554
543
  </py:if>
555
544
  <py:if test="attributetest(row, 'door condition')">
@@ -580,14 +569,12 @@ def mandatorytest(row, column, index):
580
569
  <SAMPLE_ATTRIBUTE>
581
570
  <TAG>ceiling structure</TAG>
582
571
  <VALUE>${row['ceiling structure']}</VALUE>
583
- <UNITS>m</UNITS>
584
572
  </SAMPLE_ATTRIBUTE>
585
573
  </py:if>
586
574
  <py:if test="attributetest(row, 'wall texture')">
587
575
  <SAMPLE_ATTRIBUTE>
588
576
  <TAG>wall texture</TAG>
589
577
  <VALUE>${row['wall texture']}</VALUE>
590
- <UNITS>m</UNITS>
591
578
  </SAMPLE_ATTRIBUTE>
592
579
  </py:if>
593
580
  <py:if test="attributetest(row, 'floor thermal mass')">
@@ -601,77 +588,66 @@ def mandatorytest(row, column, index):
601
588
  <SAMPLE_ATTRIBUTE>
602
589
  <TAG>room air exchange rate</TAG>
603
590
  <VALUE>${row['room air exchange rate']}</VALUE>
604
- <UNITS>year</UNITS>
605
591
  </SAMPLE_ATTRIBUTE>
606
592
  </py:if>
607
593
  <py:if test="attributetest(row, 'bathroom count')">
608
594
  <SAMPLE_ATTRIBUTE>
609
595
  <TAG>bathroom count</TAG>
610
596
  <VALUE>${row['bathroom count']}</VALUE>
611
- <UNITS>year</UNITS>
612
597
  </SAMPLE_ATTRIBUTE>
613
598
  </py:if>
614
599
  <py:if test="attributetest(row, 'shading device signs of water/mold')">
615
600
  <SAMPLE_ATTRIBUTE>
616
601
  <TAG>shading device signs of water/mold</TAG>
617
602
  <VALUE>${row['shading device signs of water/mold']}</VALUE>
618
- <UNITS>year</UNITS>
619
603
  </SAMPLE_ATTRIBUTE>
620
604
  </py:if>
621
605
  <py:if test="attributetest(row, 'window covering')">
622
606
  <SAMPLE_ATTRIBUTE>
623
607
  <TAG>window covering</TAG>
624
608
  <VALUE>${row['window covering']}</VALUE>
625
- <UNITS>year</UNITS>
626
609
  </SAMPLE_ATTRIBUTE>
627
610
  </py:if>
628
611
  <py:if test="attributetest(row, 'ceiling texture')">
629
612
  <SAMPLE_ATTRIBUTE>
630
613
  <TAG>ceiling texture</TAG>
631
614
  <VALUE>${row['ceiling texture']}</VALUE>
632
- <UNITS>year</UNITS>
633
615
  </SAMPLE_ATTRIBUTE>
634
616
  </py:if>
635
617
  <py:if test="attributetest(row, 'maximum occupancy')">
636
618
  <SAMPLE_ATTRIBUTE>
637
619
  <TAG>maximum occupancy</TAG>
638
620
  <VALUE>${row['maximum occupancy']}</VALUE>
639
- <UNITS>year</UNITS>
640
621
  </SAMPLE_ATTRIBUTE>
641
622
  </py:if>
642
623
  <py:if test="attributetest(row, 'gender of restroom')">
643
624
  <SAMPLE_ATTRIBUTE>
644
625
  <TAG>gender of restroom</TAG>
645
626
  <VALUE>${row['gender of restroom']}</VALUE>
646
- <UNITS>year</UNITS>
647
627
  </SAMPLE_ATTRIBUTE>
648
628
  </py:if>
649
629
  <py:if test="attributetest(row, 'ceiling condition')">
650
630
  <SAMPLE_ATTRIBUTE>
651
631
  <TAG>ceiling condition</TAG>
652
632
  <VALUE>${row['ceiling condition']}</VALUE>
653
- <UNITS>year</UNITS>
654
633
  </SAMPLE_ATTRIBUTE>
655
634
  </py:if>
656
635
  <py:if test="attributetest(row, 'floor structure')">
657
636
  <SAMPLE_ATTRIBUTE>
658
637
  <TAG>floor structure</TAG>
659
638
  <VALUE>${row['floor structure']}</VALUE>
660
- <UNITS>year</UNITS>
661
639
  </SAMPLE_ATTRIBUTE>
662
640
  </py:if>
663
641
  <py:if test="attributetest(row, 'rooms that share a wall with sampling room')">
664
642
  <SAMPLE_ATTRIBUTE>
665
643
  <TAG>rooms that share a wall with sampling room</TAG>
666
644
  <VALUE>${row['rooms that share a wall with sampling room']}</VALUE>
667
- <UNITS>year</UNITS>
668
645
  </SAMPLE_ATTRIBUTE>
669
646
  </py:if>
670
647
  <py:if test="attributetest(row, 'wall finish material')">
671
648
  <SAMPLE_ATTRIBUTE>
672
649
  <TAG>wall finish material</TAG>
673
650
  <VALUE>${row['wall finish material']}</VALUE>
674
- <UNITS>year</UNITS>
675
651
  </SAMPLE_ATTRIBUTE>
676
652
  </py:if>
677
653
  <py:if test="attributetest(row, 'room occupancy')">
@@ -685,28 +661,24 @@ def mandatorytest(row, column, index):
685
661
  <SAMPLE_ATTRIBUTE>
686
662
  <TAG>room location in building</TAG>
687
663
  <VALUE>${row['room location in building']}</VALUE>
688
- <UNITS>year</UNITS>
689
664
  </SAMPLE_ATTRIBUTE>
690
665
  </py:if>
691
666
  <py:if test="attributetest(row, 'floor finish material')">
692
667
  <SAMPLE_ATTRIBUTE>
693
668
  <TAG>floor finish material</TAG>
694
669
  <VALUE>${row['floor finish material']}</VALUE>
695
- <UNITS>year</UNITS>
696
670
  </SAMPLE_ATTRIBUTE>
697
671
  </py:if>
698
672
  <py:if test="attributetest(row, 'room window count')">
699
673
  <SAMPLE_ATTRIBUTE>
700
674
  <TAG>room window count</TAG>
701
675
  <VALUE>${row['room window count']}</VALUE>
702
- <UNITS>year</UNITS>
703
676
  </SAMPLE_ATTRIBUTE>
704
677
  </py:if>
705
678
  <py:if test="attributetest(row, 'sampling room id or name')">
706
679
  <SAMPLE_ATTRIBUTE>
707
680
  <TAG>sampling room id or name</TAG>
708
681
  <VALUE>${row['sampling room id or name']}</VALUE>
709
- <UNITS>year</UNITS>
710
682
  </SAMPLE_ATTRIBUTE>
711
683
  </py:if>
712
684
  <py:if test="attributetest(row, 'height carpet fiber mat')">
@@ -727,28 +699,24 @@ def mandatorytest(row, column, index):
727
699
  <SAMPLE_ATTRIBUTE>
728
700
  <TAG>heating system delivery method</TAG>
729
701
  <VALUE>${row['heating system delivery method']}</VALUE>
730
- <UNITS>m2</UNITS>
731
702
  </SAMPLE_ATTRIBUTE>
732
703
  </py:if>
733
704
  <py:if test="attributetest(row, 'room sampling position')">
734
705
  <SAMPLE_ATTRIBUTE>
735
706
  <TAG>room sampling position</TAG>
736
707
  <VALUE>${row['room sampling position']}</VALUE>
737
- <UNITS>m2</UNITS>
738
708
  </SAMPLE_ATTRIBUTE>
739
709
  </py:if>
740
710
  <py:if test="attributetest(row, 'room moisture damage or mold history')">
741
711
  <SAMPLE_ATTRIBUTE>
742
712
  <TAG>room moisture damage or mold history</TAG>
743
713
  <VALUE>${row['room moisture damage or mold history']}</VALUE>
744
- <UNITS>°C</UNITS>
745
714
  </SAMPLE_ATTRIBUTE>
746
715
  </py:if>
747
716
  <py:if test="attributetest(row, 'door signs of water/mold')">
748
717
  <SAMPLE_ATTRIBUTE>
749
718
  <TAG>door signs of water/mold</TAG>
750
719
  <VALUE>${row['door signs of water/mold']}</VALUE>
751
- <UNITS>minute</UNITS>
752
720
  </SAMPLE_ATTRIBUTE>
753
721
  </py:if>
754
722
  <py:if test="attributetest(row, 'room net area')">
@@ -769,21 +737,18 @@ def mandatorytest(row, column, index):
769
737
  <SAMPLE_ATTRIBUTE>
770
738
  <TAG>rooms that share a door with sampling room</TAG>
771
739
  <VALUE>${row['rooms that share a door with sampling room']}</VALUE>
772
- <UNITS>year</UNITS>
773
740
  </SAMPLE_ATTRIBUTE>
774
741
  </py:if>
775
742
  <py:if test="attributetest(row, 'orientations of exterior window')">
776
743
  <SAMPLE_ATTRIBUTE>
777
744
  <TAG>orientations of exterior window</TAG>
778
745
  <VALUE>${row['orientations of exterior window']}</VALUE>
779
- <UNITS>year</UNITS>
780
746
  </SAMPLE_ATTRIBUTE>
781
747
  </py:if>
782
748
  <py:if test="attributetest(row, 'wall location')">
783
749
  <SAMPLE_ATTRIBUTE>
784
750
  <TAG>wall location</TAG>
785
751
  <VALUE>${row['wall location']}</VALUE>
786
- <UNITS>°C</UNITS>
787
752
  </SAMPLE_ATTRIBUTE>
788
753
  </py:if>
789
754
  <py:if test="attributetest(row, 'room volume')">
@@ -797,105 +762,90 @@ def mandatorytest(row, column, index):
797
762
  <SAMPLE_ATTRIBUTE>
798
763
  <TAG>door type, composite</TAG>
799
764
  <VALUE>${row['door type, composite']}</VALUE>
800
- <UNITS>m2</UNITS>
801
765
  </SAMPLE_ATTRIBUTE>
802
766
  </py:if>
803
767
  <py:if test="attributetest(row, 'bedroom count')">
804
768
  <SAMPLE_ATTRIBUTE>
805
769
  <TAG>bedroom count</TAG>
806
770
  <VALUE>${row['bedroom count']}</VALUE>
807
- <UNITS>m2</UNITS>
808
771
  </SAMPLE_ATTRIBUTE>
809
772
  </py:if>
810
773
  <py:if test="attributetest(row, 'wall construction type')">
811
774
  <SAMPLE_ATTRIBUTE>
812
775
  <TAG>wall construction type</TAG>
813
776
  <VALUE>${row['wall construction type']}</VALUE>
814
- <UNITS>m2</UNITS>
815
777
  </SAMPLE_ATTRIBUTE>
816
778
  </py:if>
817
779
  <py:if test="attributetest(row, 'wall signs of water/mold')">
818
780
  <SAMPLE_ATTRIBUTE>
819
781
  <TAG>wall signs of water/mold</TAG>
820
782
  <VALUE>${row['wall signs of water/mold']}</VALUE>
821
- <UNITS>m2</UNITS>
822
783
  </SAMPLE_ATTRIBUTE>
823
784
  </py:if>
824
785
  <py:if test="attributetest(row, 'window condition')">
825
786
  <SAMPLE_ATTRIBUTE>
826
787
  <TAG>window condition</TAG>
827
788
  <VALUE>${row['window condition']}</VALUE>
828
- <UNITS>m2</UNITS>
829
789
  </SAMPLE_ATTRIBUTE>
830
790
  </py:if>
831
791
  <py:if test="attributetest(row, 'escalator count')">
832
792
  <SAMPLE_ATTRIBUTE>
833
793
  <TAG>escalator count</TAG>
834
794
  <VALUE>${row['escalator count']}</VALUE>
835
- <UNITS>m2</UNITS>
836
795
  </SAMPLE_ATTRIBUTE>
837
796
  </py:if>
838
797
  <py:if test="attributetest(row, 'cooling system identifier')">
839
798
  <SAMPLE_ATTRIBUTE>
840
799
  <TAG>cooling system identifier</TAG>
841
800
  <VALUE>${row['cooling system identifier']}</VALUE>
842
- <UNITS>°C</UNITS>
843
801
  </SAMPLE_ATTRIBUTE>
844
802
  </py:if>
845
803
  <py:if test="attributetest(row, 'quadrant position')">
846
804
  <SAMPLE_ATTRIBUTE>
847
805
  <TAG>quadrant position</TAG>
848
806
  <VALUE>${row['quadrant position']}</VALUE>
849
- <UNITS>°C</UNITS>
850
807
  </SAMPLE_ATTRIBUTE>
851
808
  </py:if>
852
809
  <py:if test="attributetest(row, 'number of pets')">
853
810
  <SAMPLE_ATTRIBUTE>
854
811
  <TAG>number of pets</TAG>
855
812
  <VALUE>${row['number of pets']}</VALUE>
856
- <UNITS>°C</UNITS>
857
813
  </SAMPLE_ATTRIBUTE>
858
814
  </py:if>
859
815
  <py:if test="attributetest(row, 'window vertical position')">
860
816
  <SAMPLE_ATTRIBUTE>
861
817
  <TAG>window vertical position</TAG>
862
818
  <VALUE>${row['window vertical position']}</VALUE>
863
- <UNITS>°C</UNITS>
864
819
  </SAMPLE_ATTRIBUTE>
865
820
  </py:if>
866
821
  <py:if test="attributetest(row, 'fireplace type')">
867
822
  <SAMPLE_ATTRIBUTE>
868
823
  <TAG>fireplace type</TAG>
869
824
  <VALUE>${row['fireplace type']}</VALUE>
870
- <UNITS>°C</UNITS>
871
825
  </SAMPLE_ATTRIBUTE>
872
826
  </py:if>
873
827
  <py:if test="attributetest(row, 'heating delivery locations')">
874
828
  <SAMPLE_ATTRIBUTE>
875
829
  <TAG>heating delivery locations</TAG>
876
830
  <VALUE>${row['heating delivery locations']}</VALUE>
877
- <UNITS>°C</UNITS>
878
831
  </SAMPLE_ATTRIBUTE>
879
832
  </py:if>
880
833
  <py:if test="attributetest(row, 'ceiling finish material')">
881
834
  <SAMPLE_ATTRIBUTE>
882
835
  <TAG>ceiling finish material</TAG>
883
836
  <VALUE>${row['ceiling finish material']}</VALUE>
884
- <UNITS>°C</UNITS>
885
837
  </SAMPLE_ATTRIBUTE>
886
838
  </py:if>
887
839
  <py:if test="attributetest(row, 'door type')">
888
840
  <SAMPLE_ATTRIBUTE>
889
841
  <TAG>door type</TAG>
890
842
  <VALUE>${row['door type']}</VALUE>
891
- <UNITS>°C</UNITS>
892
843
  </SAMPLE_ATTRIBUTE>
893
844
  </py:if>
894
845
  <py:if test="attributetest(row, 'number of houseplants')">
895
846
  <SAMPLE_ATTRIBUTE>
896
847
  <TAG>number of houseplants</TAG>
897
848
  <VALUE>${row['number of houseplants']}</VALUE>
898
- <UNITS>°C</UNITS>
899
849
  </SAMPLE_ATTRIBUTE>
900
850
  </py:if>
901
851
  <py:if test="attributetest(row, 'floor age')">
@@ -909,7 +859,6 @@ def mandatorytest(row, column, index):
909
859
  <SAMPLE_ATTRIBUTE>
910
860
  <TAG>rooms connected by a doorway</TAG>
911
861
  <VALUE>${row['rooms connected by a doorway']}</VALUE>
912
- <UNITS>year</UNITS>
913
862
  </SAMPLE_ATTRIBUTE>
914
863
  </py:if>
915
864
  <py:if test="attributetest(row, 'specifications')">
@@ -929,7 +878,6 @@ def mandatorytest(row, column, index):
929
878
  <SAMPLE_ATTRIBUTE>
930
879
  <TAG>window open frequency</TAG>
931
880
  <VALUE>${row['window open frequency']}</VALUE>
932
- <UNITS>m</UNITS>
933
881
  </SAMPLE_ATTRIBUTE>
934
882
  </py:if>
935
883
  <py:if test="attributetest(row, 'room dimensions')">
@@ -958,7 +906,7 @@ def mandatorytest(row, column, index):
958
906
  <VALUE>${row['sample size sorting method']}</VALUE>
959
907
  </SAMPLE_ATTRIBUTE>
960
908
  </py:if>
961
- <py:if test="mandatorytest(row, 'organism count', index)">
909
+ <py:if test="attributetest(row, 'organism count')">
962
910
  <SAMPLE_ATTRIBUTE>
963
911
  <TAG>organism count</TAG>
964
912
  <VALUE>${row['organism count']}</VALUE>
@@ -974,7 +922,6 @@ def mandatorytest(row, column, index):
974
922
  <SAMPLE_ATTRIBUTE>
975
923
  <TAG>handidness</TAG>
976
924
  <VALUE>${row['handidness']}</VALUE>
977
- <UNITS>year</UNITS>
978
925
  </SAMPLE_ATTRIBUTE>
979
926
  </py:if>
980
927
  <py:if test="mandatorytest(row, 'geographic location (country and/or sea)', index)">
@@ -1016,7 +963,7 @@ def mandatorytest(row, column, index):
1016
963
  <UNITS>%</UNITS>
1017
964
  </SAMPLE_ATTRIBUTE>
1018
965
  </py:if>
1019
- <py:if test="mandatorytest(row, 'air temperature', index)">
966
+ <py:if test="attributetest(row, 'air temperature')">
1020
967
  <SAMPLE_ATTRIBUTE>
1021
968
  <TAG>air temperature</TAG>
1022
969
  <VALUE>${row['air temperature']}</VALUE>
@@ -1067,7 +1014,6 @@ def mandatorytest(row, column, index):
1067
1014
  <SAMPLE_ATTRIBUTE>
1068
1015
  <TAG>number of residents</TAG>
1069
1016
  <VALUE>${row['number of residents']}</VALUE>
1070
- <UNITS>m</UNITS>
1071
1017
  </SAMPLE_ATTRIBUTE>
1072
1018
  </py:if>
1073
1019
  <py:if test="attributetest(row, 'average dew point')">
@@ -1084,7 +1030,7 @@ def mandatorytest(row, column, index):
1084
1030
  <UNITS>year</UNITS>
1085
1031
  </SAMPLE_ATTRIBUTE>
1086
1032
  </py:if>
1087
- <py:if test="mandatorytest(row, 'carbon dioxide', index)">
1033
+ <py:if test="attributetest(row, 'carbon dioxide')">
1088
1034
  <SAMPLE_ATTRIBUTE>
1089
1035
  <TAG>carbon dioxide</TAG>
1090
1036
  <VALUE>${row['carbon dioxide']}</VALUE>
@@ -1101,7 +1047,6 @@ def mandatorytest(row, column, index):
1101
1047
  <SAMPLE_ATTRIBUTE>
1102
1048
  <TAG>seasonal use</TAG>
1103
1049
  <VALUE>${row['seasonal use']}</VALUE>
1104
- <UNITS>year</UNITS>
1105
1050
  </SAMPLE_ATTRIBUTE>
1106
1051
  </py:if>
1107
1052
  <py:if test="attributetest(row, 'season')">
@@ -1265,7 +1210,6 @@ def mandatorytest(row, column, index):
1265
1210
  <SAMPLE_ATTRIBUTE>
1266
1211
  <TAG>sampling day weather</TAG>
1267
1212
  <VALUE>${row['sampling day weather']}</VALUE>
1268
- <UNITS>g/m3</UNITS>
1269
1213
  </SAMPLE_ATTRIBUTE>
1270
1214
  </py:if>
1271
1215
  <py:if test="attributetest(row, 'amount of light')">
@@ -1279,7 +1223,6 @@ def mandatorytest(row, column, index):
1279
1223
  <SAMPLE_ATTRIBUTE>
1280
1224
  <TAG>train line</TAG>
1281
1225
  <VALUE>${row['train line']}</VALUE>
1282
- <UNITS>°C</UNITS>
1283
1226
  </SAMPLE_ATTRIBUTE>
1284
1227
  </py:if>
1285
1228
  <py:if test="attributetest(row, 'outside relative humidity')">
@@ -1318,49 +1261,42 @@ def mandatorytest(row, column, index):
1318
1261
  <SAMPLE_ATTRIBUTE>
1319
1262
  <TAG>built structure type</TAG>
1320
1263
  <VALUE>${row['built structure type']}</VALUE>
1321
- <UNITS>m</UNITS>
1322
1264
  </SAMPLE_ATTRIBUTE>
1323
1265
  </py:if>
1324
1266
  <py:if test="attributetest(row, 'exterior door count')">
1325
1267
  <SAMPLE_ATTRIBUTE>
1326
1268
  <TAG>exterior door count</TAG>
1327
1269
  <VALUE>${row['exterior door count']}</VALUE>
1328
- <UNITS>°C</UNITS>
1329
1270
  </SAMPLE_ATTRIBUTE>
1330
1271
  </py:if>
1331
1272
  <py:if test="attributetest(row, 'design, construction, and operation documents')">
1332
1273
  <SAMPLE_ATTRIBUTE>
1333
1274
  <TAG>design, construction, and operation documents</TAG>
1334
1275
  <VALUE>${row['design, construction, and operation documents']}</VALUE>
1335
- <UNITS>year</UNITS>
1336
1276
  </SAMPLE_ATTRIBUTE>
1337
1277
  </py:if>
1338
1278
  <py:if test="attributetest(row, 'shading device condition')">
1339
1279
  <SAMPLE_ATTRIBUTE>
1340
1280
  <TAG>shading device condition</TAG>
1341
1281
  <VALUE>${row['shading device condition']}</VALUE>
1342
- <UNITS>year</UNITS>
1343
1282
  </SAMPLE_ATTRIBUTE>
1344
1283
  </py:if>
1345
1284
  <py:if test="attributetest(row, 'occupancy documentation')">
1346
1285
  <SAMPLE_ATTRIBUTE>
1347
1286
  <TAG>occupancy documentation</TAG>
1348
1287
  <VALUE>${row['occupancy documentation']}</VALUE>
1349
- <UNITS>year</UNITS>
1350
1288
  </SAMPLE_ATTRIBUTE>
1351
1289
  </py:if>
1352
1290
  <py:if test="attributetest(row, 'floor count')">
1353
1291
  <SAMPLE_ATTRIBUTE>
1354
1292
  <TAG>floor count</TAG>
1355
1293
  <VALUE>${row['floor count']}</VALUE>
1356
- <UNITS>year</UNITS>
1357
1294
  </SAMPLE_ATTRIBUTE>
1358
1295
  </py:if>
1359
1296
  <py:if test="attributetest(row, 'shading device material')">
1360
1297
  <SAMPLE_ATTRIBUTE>
1361
1298
  <TAG>shading device material</TAG>
1362
1299
  <VALUE>${row['shading device material']}</VALUE>
1363
- <UNITS>year</UNITS>
1364
1300
  </SAMPLE_ATTRIBUTE>
1365
1301
  </py:if>
1366
1302
  <py:if test="attributetest(row, 'built structure age')">
@@ -1374,14 +1310,12 @@ def mandatorytest(row, column, index):
1374
1310
  <SAMPLE_ATTRIBUTE>
1375
1311
  <TAG>hallway/corridor count</TAG>
1376
1312
  <VALUE>${row['hallway/corridor count']}</VALUE>
1377
- <UNITS>g/m3</UNITS>
1378
1313
  </SAMPLE_ATTRIBUTE>
1379
1314
  </py:if>
1380
1315
  <py:if test="attributetest(row, 'architectural structure')">
1381
1316
  <SAMPLE_ATTRIBUTE>
1382
1317
  <TAG>architectural structure</TAG>
1383
1318
  <VALUE>${row['architectural structure']}</VALUE>
1384
- <UNITS>m2</UNITS>
1385
1319
  </SAMPLE_ATTRIBUTE>
1386
1320
  </py:if>
1387
1321
  <py:if test="attributetest(row, 'shading device type')">
@@ -1395,14 +1329,12 @@ def mandatorytest(row, column, index):
1395
1329
  <SAMPLE_ATTRIBUTE>
1396
1330
  <TAG>shading device location</TAG>
1397
1331
  <VALUE>${row['shading device location']}</VALUE>
1398
- <UNITS>°C</UNITS>
1399
1332
  </SAMPLE_ATTRIBUTE>
1400
1333
  </py:if>
1401
1334
  <py:if test="attributetest(row, 'drawings')">
1402
1335
  <SAMPLE_ATTRIBUTE>
1403
1336
  <TAG>drawings</TAG>
1404
1337
  <VALUE>${row['drawings']}</VALUE>
1405
- <UNITS>year</UNITS>
1406
1338
  </SAMPLE_ATTRIBUTE>
1407
1339
  </py:if>
1408
1340
  <py:if test="attributetest(row, 'address')">
@@ -83,21 +83,18 @@ def mandatorytest(row, column, index):
83
83
  <SAMPLE_ATTRIBUTE>
84
84
  <TAG>shell length</TAG>
85
85
  <VALUE>${row['shell length']}</VALUE>
86
- <UNITS>g</UNITS>
87
86
  </SAMPLE_ATTRIBUTE>
88
87
  </py:if>
89
88
  <py:if test="mandatorytest(row, 'shell width', index)">
90
89
  <SAMPLE_ATTRIBUTE>
91
90
  <TAG>shell width</TAG>
92
91
  <VALUE>${row['shell width']}</VALUE>
93
- <UNITS>g</UNITS>
94
92
  </SAMPLE_ATTRIBUTE>
95
93
  </py:if>
96
94
  <py:if test="attributetest(row, 'shell markings')">
97
95
  <SAMPLE_ATTRIBUTE>
98
96
  <TAG>shell markings</TAG>
99
97
  <VALUE>${row['shell markings']}</VALUE>
100
- <UNITS>g</UNITS>
101
98
  </SAMPLE_ATTRIBUTE>
102
99
  </py:if>
103
100
  <py:if test="attributetest(row, 'sample health state')">
@@ -190,7 +187,6 @@ def mandatorytest(row, column, index):
190
187
  <SAMPLE_ATTRIBUTE>
191
188
  <TAG>toxin burden</TAG>
192
189
  <VALUE>${row['toxin burden']}</VALUE>
193
- <UNITS>mg</UNITS>
194
190
  </SAMPLE_ATTRIBUTE>
195
191
  </py:if>
196
192
  <py:if test="mandatorytest(row, 'geographic location (country and/or sea)', index)">
@@ -234,7 +234,6 @@ def mandatorytest(row, column, index):
234
234
  <SAMPLE_ATTRIBUTE>
235
235
  <TAG>food production characteristics</TAG>
236
236
  <VALUE>${row['food production characteristics']}</VALUE>
237
- <UNITS>°C</UNITS>
238
237
  </SAMPLE_ATTRIBUTE>
239
238
  </py:if>
240
239
  <py:if test="attributetest(row, 'fertilizer administration date')">
@@ -911,7 +910,6 @@ def mandatorytest(row, column, index):
911
910
  <SAMPLE_ATTRIBUTE>
912
911
  <TAG>lot number</TAG>
913
912
  <VALUE>${row['lot number']}</VALUE>
914
- <UNITS>%</UNITS>
915
913
  </SAMPLE_ATTRIBUTE>
916
914
  </py:if>
917
915
  <py:if test="attributetest(row, 'single cell or viral particle lysis approach')">