ena-upload-cli 0.7.1__tar.gz → 0.7.3__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 (110) hide show
  1. {ena-upload-cli-0.7.1/ena_upload_cli.egg-info → ena_upload_cli-0.7.3}/PKG-INFO +1 -1
  2. ena_upload_cli-0.7.3/ena_upload/_version.py +1 -0
  3. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/ena_upload.py +7 -1
  4. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000012.xml +164 -165
  5. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000013.xml +226 -167
  6. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000014.xml +208 -183
  7. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000015.xml +196 -171
  8. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000016.xml +199 -168
  9. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000017.xml +196 -171
  10. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000018.xml +203 -171
  11. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000019.xml +191 -192
  12. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000020.xml +320 -183
  13. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000021.xml +260 -182
  14. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000022.xml +288 -268
  15. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000023.xml +199 -179
  16. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000024.xml +216 -189
  17. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000025.xml +185 -186
  18. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000027.xml +183 -184
  19. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000029.xml +23 -22
  20. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000030.xml +33 -25
  21. ena_upload_cli-0.7.3/ena_upload/templates/ENA_template_samples_ERC000031.xml +1437 -0
  22. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000032.xml +13 -12
  23. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000033.xml +13 -12
  24. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000035.xml +24 -24
  25. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000036.xml +50 -51
  26. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000037.xml +204 -211
  27. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000038.xml +63 -69
  28. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000039.xml +19 -18
  29. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000040.xml +30 -28
  30. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000041.xml +44 -45
  31. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000043.xml +48 -49
  32. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000044.xml +7 -6
  33. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000047.xml +98 -104
  34. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000048.xml +128 -134
  35. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000049.xml +149 -155
  36. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000050.xml +87 -93
  37. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000051.xml +27 -27
  38. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000052.xml +41 -47
  39. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000053.xml +55 -55
  40. ena_upload_cli-0.7.3/ena_upload/templates/ENA_template_samples_ERC000055.xml +1135 -0
  41. ena_upload_cli-0.7.3/ena_upload/templates/ENA_template_samples_ERC000056.xml +1796 -0
  42. ena_upload_cli-0.7.3/ena_upload/templates/ENA_template_samples_ERC000057.xml +746 -0
  43. ena_upload_cli-0.7.3/ena_upload/templates/ENA_template_samples_ERC000058.xml +1009 -0
  44. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3/ena_upload_cli.egg-info}/PKG-INFO +1 -1
  45. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload_cli.egg-info/SOURCES.txt +4 -0
  46. ena-upload-cli-0.7.1/ena_upload/_version.py +0 -1
  47. ena-upload-cli-0.7.1/ena_upload/templates/ENA_template_samples_ERC000031.xml +0 -533
  48. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/LICENSE +0 -0
  49. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/MANIFEST.in +0 -0
  50. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/README.md +0 -0
  51. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/__init__.py +0 -0
  52. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/check_remote.py +0 -0
  53. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/__init__.py +0 -0
  54. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/characteristic.py +0 -0
  55. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/ena_experiment.py +0 -0
  56. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/ena_run.py +0 -0
  57. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/ena_sample.py +0 -0
  58. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/ena_std_lib.py +0 -0
  59. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/ena_study.py +0 -0
  60. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/ena_submission.py +0 -0
  61. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/assay_schema.json +0 -0
  62. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/comment_schema.json +0 -0
  63. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/data_schema.json +0 -0
  64. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/factor_schema.json +0 -0
  65. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/factor_value_schema.json +0 -0
  66. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/investigation_schema.json +0 -0
  67. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/material_attribute_schema.json +0 -0
  68. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/material_attribute_value_schema.json +0 -0
  69. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/material_schema.json +0 -0
  70. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/ontology_annotation_schema.json +0 -0
  71. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/ontology_source_reference_schema.json +0 -0
  72. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/organization_schema.json +0 -0
  73. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/person_schema.json +0 -0
  74. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/process_parameter_value_schema.json +0 -0
  75. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/process_schema.json +0 -0
  76. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/protocol_parameter_schema.json +0 -0
  77. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/protocol_schema.json +0 -0
  78. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/publication_schema.json +0 -0
  79. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/sample_schema.json +0 -0
  80. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/source_schema.json +0 -0
  81. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/json_schemas/study_schema.json +0 -0
  82. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/json_parsing/other_material.py +0 -0
  83. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA.project.xsd +0 -0
  84. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_FILE.xml +0 -0
  85. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_LIBRARY_SELECTION.xml +0 -0
  86. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_LIBRARY_SOURCE.xml +0 -0
  87. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_LIBRARY_STRATEGY.xml +0 -0
  88. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_PLATFORM.xml +0 -0
  89. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_experiments.xml +0 -0
  90. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_runs.xml +0 -0
  91. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000011.xml +0 -0
  92. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000028.xml +0 -0
  93. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000034.xml +0 -0
  94. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_samples_ERC000045.xml +0 -0
  95. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_studies.xml +0 -0
  96. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/ENA_template_submission.xml +0 -0
  97. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/SRA.common.xsd +0 -0
  98. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/SRA.experiment.xsd +0 -0
  99. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/SRA.run.xsd +0 -0
  100. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/SRA.sample.xsd +0 -0
  101. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/SRA.study.xsd +0 -0
  102. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload/templates/SRA.submission.xsd +0 -0
  103. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload_cli.egg-info/dependency_links.txt +0 -0
  104. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload_cli.egg-info/entry_points.txt +0 -0
  105. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload_cli.egg-info/requires.txt +0 -0
  106. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/ena_upload_cli.egg-info/top_level.txt +0 -0
  107. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/requirements.txt +0 -0
  108. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/setup.cfg +0 -0
  109. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/setup.py +0 -0
  110. {ena-upload-cli-0.7.1 → ena_upload_cli-0.7.3}/tests/test_ena_objects.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ena-upload-cli
3
- Version: 0.7.1
3
+ Version: 0.7.3
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
@@ -0,0 +1 @@
1
+ __version__ = "0.7.3"
@@ -39,6 +39,12 @@ class MyFTP_TLS(ftplib.FTP_TLS):
39
39
  conn = self.context.wrap_socket(conn,
40
40
  server_hostname=self.host,
41
41
  session=self.sock.session)
42
+ # fix reuse of ssl socket:
43
+ # https://stackoverflow.com/a/53456626/10971151 and
44
+ # https://stackoverflow.com/a/70830916/10971151
45
+ def custom_unwrap():
46
+ pass
47
+ conn.unwrap = custom_unwrap
42
48
  return conn, size
43
49
 
44
50
 
@@ -407,7 +413,7 @@ def submit_data(file_paths, password, webin_id):
407
413
 
408
414
  print("\nConnecting to ftp.webin2.ebi.ac.uk....")
409
415
  try:
410
- ftps = MyFTP_TLS(timeout=10)
416
+ ftps = MyFTP_TLS(timeout=120)
411
417
  ftps.context.set_ciphers('HIGH:!DH:!aNULL')
412
418
  ftps.connect(ftp_host, port=21)
413
419
  ftps.auth()
@@ -33,101 +33,95 @@ def mandatorytest(row, column, index):
33
33
  <DESCRIPTION>${row.sample_description}</DESCRIPTION>
34
34
  </py:if>
35
35
  <SAMPLE_ATTRIBUTES>
36
- <py:if test="mandatorytest(row, 'project name', index)">
37
- <SAMPLE_ATTRIBUTE>
38
- <TAG>project name</TAG>
39
- <VALUE>${row['project name']}</VALUE>
40
- </SAMPLE_ATTRIBUTE>
41
- </py:if>
42
- <py:if test="attributetest(row, 'experimental factor')">
36
+ <py:if test="attributetest(row, 'trophic level')">
43
37
  <SAMPLE_ATTRIBUTE>
44
- <TAG>experimental factor</TAG>
45
- <VALUE>${row['experimental factor']}</VALUE>
38
+ <TAG>trophic level</TAG>
39
+ <VALUE>${row['trophic level']}</VALUE>
46
40
  </SAMPLE_ATTRIBUTE>
47
41
  </py:if>
48
- <py:if test="attributetest(row, 'ploidy')">
42
+ <py:if test="attributetest(row, 'observed biotic relationship')">
49
43
  <SAMPLE_ATTRIBUTE>
50
- <TAG>ploidy</TAG>
51
- <VALUE>${row['ploidy']}</VALUE>
44
+ <TAG>observed biotic relationship</TAG>
45
+ <VALUE>${row['observed biotic relationship']}</VALUE>
52
46
  </SAMPLE_ATTRIBUTE>
53
47
  </py:if>
54
- <py:if test="attributetest(row, 'number of replicons')">
48
+ <py:if test="attributetest(row, 'known pathogenicity')">
55
49
  <SAMPLE_ATTRIBUTE>
56
- <TAG>number of replicons</TAG>
57
- <VALUE>${row['number of replicons']}</VALUE>
50
+ <TAG>known pathogenicity</TAG>
51
+ <VALUE>${row['known pathogenicity']}</VALUE>
58
52
  </SAMPLE_ATTRIBUTE>
59
53
  </py:if>
60
- <py:if test="attributetest(row, 'extrachromosomal elements')">
54
+ <py:if test="attributetest(row, 'relationship to oxygen')">
61
55
  <SAMPLE_ATTRIBUTE>
62
- <TAG>extrachromosomal elements</TAG>
63
- <VALUE>${row['extrachromosomal elements']}</VALUE>
56
+ <TAG>relationship to oxygen</TAG>
57
+ <VALUE>${row['relationship to oxygen']}</VALUE>
64
58
  </SAMPLE_ATTRIBUTE>
65
59
  </py:if>
66
- <py:if test="attributetest(row, 'estimated size')">
60
+ <py:if test="attributetest(row, 'propagation')">
67
61
  <SAMPLE_ATTRIBUTE>
68
- <TAG>estimated size</TAG>
69
- <VALUE>${row['estimated size']}</VALUE>
62
+ <TAG>propagation</TAG>
63
+ <VALUE>${row['propagation']}</VALUE>
70
64
  </SAMPLE_ATTRIBUTE>
71
65
  </py:if>
72
- <py:if test="attributetest(row, 'reference for biomaterial')">
66
+ <py:if test="attributetest(row, 'sample collection device')">
73
67
  <SAMPLE_ATTRIBUTE>
74
- <TAG>reference for biomaterial</TAG>
75
- <VALUE>${row['reference for biomaterial']}</VALUE>
68
+ <TAG>sample collection device</TAG>
69
+ <VALUE>${row['sample collection device']}</VALUE>
76
70
  </SAMPLE_ATTRIBUTE>
77
71
  </py:if>
78
- <py:if test="attributetest(row, 'annotation source')">
72
+ <py:if test="attributetest(row, 'sample collection method')">
79
73
  <SAMPLE_ATTRIBUTE>
80
- <TAG>annotation source</TAG>
81
- <VALUE>${row['annotation source']}</VALUE>
74
+ <TAG>sample collection method</TAG>
75
+ <VALUE>${row['sample collection method']}</VALUE>
82
76
  </SAMPLE_ATTRIBUTE>
83
77
  </py:if>
84
- <py:if test="attributetest(row, 'sample volume or weight for DNA extraction')">
78
+ <py:if test="attributetest(row, 'sample storage temperature')">
85
79
  <SAMPLE_ATTRIBUTE>
86
- <TAG>sample volume or weight for DNA extraction</TAG>
87
- <VALUE>${row['sample volume or weight for DNA extraction']}</VALUE>
88
- <UNITS>ng</UNITS>
80
+ <TAG>sample storage temperature</TAG>
81
+ <VALUE>${row['sample storage temperature']}</VALUE>
82
+ <UNITS>°C</UNITS>
89
83
  </SAMPLE_ATTRIBUTE>
90
84
  </py:if>
91
- <py:if test="attributetest(row, 'nucleic acid extraction')">
85
+ <py:if test="attributetest(row, 'sample storage location')">
92
86
  <SAMPLE_ATTRIBUTE>
93
- <TAG>nucleic acid extraction</TAG>
94
- <VALUE>${row['nucleic acid extraction']}</VALUE>
87
+ <TAG>sample storage location</TAG>
88
+ <VALUE>${row['sample storage location']}</VALUE>
95
89
  </SAMPLE_ATTRIBUTE>
96
90
  </py:if>
97
- <py:if test="attributetest(row, 'nucleic acid amplification')">
91
+ <py:if test="attributetest(row, 'oxygenation status of sample')">
98
92
  <SAMPLE_ATTRIBUTE>
99
- <TAG>nucleic acid amplification</TAG>
100
- <VALUE>${row['nucleic acid amplification']}</VALUE>
93
+ <TAG>oxygenation status of sample</TAG>
94
+ <VALUE>${row['oxygenation status of sample']}</VALUE>
101
95
  </SAMPLE_ATTRIBUTE>
102
96
  </py:if>
103
- <py:if test="attributetest(row, 'library size')">
97
+ <py:if test="mandatorytest(row, 'project name', index)">
104
98
  <SAMPLE_ATTRIBUTE>
105
- <TAG>library size</TAG>
106
- <VALUE>${row['library size']}</VALUE>
99
+ <TAG>project name</TAG>
100
+ <VALUE>${row['project name']}</VALUE>
107
101
  </SAMPLE_ATTRIBUTE>
108
102
  </py:if>
109
- <py:if test="attributetest(row, 'library reads sequenced')">
103
+ <py:if test="attributetest(row, 'ploidy')">
110
104
  <SAMPLE_ATTRIBUTE>
111
- <TAG>library reads sequenced</TAG>
112
- <VALUE>${row['library reads sequenced']}</VALUE>
105
+ <TAG>ploidy</TAG>
106
+ <VALUE>${row['ploidy']}</VALUE>
113
107
  </SAMPLE_ATTRIBUTE>
114
108
  </py:if>
115
- <py:if test="attributetest(row, 'library construction method')">
109
+ <py:if test="attributetest(row, 'number of replicons')">
116
110
  <SAMPLE_ATTRIBUTE>
117
- <TAG>library construction method</TAG>
118
- <VALUE>${row['library construction method']}</VALUE>
111
+ <TAG>number of replicons</TAG>
112
+ <VALUE>${row['number of replicons']}</VALUE>
119
113
  </SAMPLE_ATTRIBUTE>
120
114
  </py:if>
121
- <py:if test="attributetest(row, 'library vector')">
115
+ <py:if test="attributetest(row, 'extrachromosomal elements')">
122
116
  <SAMPLE_ATTRIBUTE>
123
- <TAG>library vector</TAG>
124
- <VALUE>${row['library vector']}</VALUE>
117
+ <TAG>extrachromosomal elements</TAG>
118
+ <VALUE>${row['extrachromosomal elements']}</VALUE>
125
119
  </SAMPLE_ATTRIBUTE>
126
120
  </py:if>
127
- <py:if test="attributetest(row, 'library screening strategy')">
121
+ <py:if test="attributetest(row, 'estimated size')">
128
122
  <SAMPLE_ATTRIBUTE>
129
- <TAG>library screening strategy</TAG>
130
- <VALUE>${row['library screening strategy']}</VALUE>
123
+ <TAG>estimated size</TAG>
124
+ <VALUE>${row['estimated size']}</VALUE>
131
125
  </SAMPLE_ATTRIBUTE>
132
126
  </py:if>
133
127
  <py:if test="attributetest(row, 'target gene')">
@@ -142,36 +136,12 @@ def mandatorytest(row, column, index):
142
136
  <VALUE>${row['target subfragment']}</VALUE>
143
137
  </SAMPLE_ATTRIBUTE>
144
138
  </py:if>
145
- <py:if test="attributetest(row, 'pcr primers')">
146
- <SAMPLE_ATTRIBUTE>
147
- <TAG>pcr primers</TAG>
148
- <VALUE>${row['pcr primers']}</VALUE>
149
- </SAMPLE_ATTRIBUTE>
150
- </py:if>
151
139
  <py:if test="attributetest(row, 'multiplex identifiers')">
152
140
  <SAMPLE_ATTRIBUTE>
153
141
  <TAG>multiplex identifiers</TAG>
154
142
  <VALUE>${row['multiplex identifiers']}</VALUE>
155
143
  </SAMPLE_ATTRIBUTE>
156
144
  </py:if>
157
- <py:if test="attributetest(row, 'adapters')">
158
- <SAMPLE_ATTRIBUTE>
159
- <TAG>adapters</TAG>
160
- <VALUE>${row['adapters']}</VALUE>
161
- </SAMPLE_ATTRIBUTE>
162
- </py:if>
163
- <py:if test="attributetest(row, 'pcr conditions')">
164
- <SAMPLE_ATTRIBUTE>
165
- <TAG>pcr conditions</TAG>
166
- <VALUE>${row['pcr conditions']}</VALUE>
167
- </SAMPLE_ATTRIBUTE>
168
- </py:if>
169
- <py:if test="attributetest(row, 'sequencing method')">
170
- <SAMPLE_ATTRIBUTE>
171
- <TAG>sequencing method</TAG>
172
- <VALUE>${row['sequencing method']}</VALUE>
173
- </SAMPLE_ATTRIBUTE>
174
- </py:if>
175
145
  <py:if test="attributetest(row, 'sequence quality check')">
176
146
  <SAMPLE_ATTRIBUTE>
177
147
  <TAG>sequence quality check</TAG>
@@ -196,18 +166,6 @@ def mandatorytest(row, column, index):
196
166
  <VALUE>${row['relevant standard operating procedures']}</VALUE>
197
167
  </SAMPLE_ATTRIBUTE>
198
168
  </py:if>
199
- <py:if test="attributetest(row, 'negative control type')">
200
- <SAMPLE_ATTRIBUTE>
201
- <TAG>negative control type</TAG>
202
- <VALUE>${row['negative control type']}</VALUE>
203
- </SAMPLE_ATTRIBUTE>
204
- </py:if>
205
- <py:if test="attributetest(row, 'positive control type')">
206
- <SAMPLE_ATTRIBUTE>
207
- <TAG>positive control type</TAG>
208
- <VALUE>${row['positive control type']}</VALUE>
209
- </SAMPLE_ATTRIBUTE>
210
- </py:if>
211
169
  <py:if test="mandatorytest(row, 'collection date', index)">
212
170
  <SAMPLE_ATTRIBUTE>
213
171
  <TAG>collection date</TAG>
@@ -285,30 +243,6 @@ def mandatorytest(row, column, index):
285
243
  <VALUE>${row['ventilation type']}</VALUE>
286
244
  </SAMPLE_ATTRIBUTE>
287
245
  </py:if>
288
- <py:if test="attributetest(row, 'source material identifiers')">
289
- <SAMPLE_ATTRIBUTE>
290
- <TAG>source material identifiers</TAG>
291
- <VALUE>${row['source material identifiers']}</VALUE>
292
- </SAMPLE_ATTRIBUTE>
293
- </py:if>
294
- <py:if test="attributetest(row, 'sample material processing')">
295
- <SAMPLE_ATTRIBUTE>
296
- <TAG>sample material processing</TAG>
297
- <VALUE>${row['sample material processing']}</VALUE>
298
- </SAMPLE_ATTRIBUTE>
299
- </py:if>
300
- <py:if test="attributetest(row, 'isolation and growth condition')">
301
- <SAMPLE_ATTRIBUTE>
302
- <TAG>isolation and growth condition</TAG>
303
- <VALUE>${row['isolation and growth condition']}</VALUE>
304
- </SAMPLE_ATTRIBUTE>
305
- </py:if>
306
- <py:if test="attributetest(row, 'propagation')">
307
- <SAMPLE_ATTRIBUTE>
308
- <TAG>propagation</TAG>
309
- <VALUE>${row['propagation']}</VALUE>
310
- </SAMPLE_ATTRIBUTE>
311
- </py:if>
312
246
  <py:if test="attributetest(row, 'amount or size of sample collected')">
313
247
  <SAMPLE_ATTRIBUTE>
314
248
  <TAG>amount or size of sample collected</TAG>
@@ -316,12 +250,6 @@ def mandatorytest(row, column, index):
316
250
  <UNITS>m3</UNITS>
317
251
  </SAMPLE_ATTRIBUTE>
318
252
  </py:if>
319
- <py:if test="attributetest(row, 'oxygenation status of sample')">
320
- <SAMPLE_ATTRIBUTE>
321
- <TAG>oxygenation status of sample</TAG>
322
- <VALUE>${row['oxygenation status of sample']}</VALUE>
323
- </SAMPLE_ATTRIBUTE>
324
- </py:if>
325
253
  <py:if test="attributetest(row, 'organism count')">
326
254
  <SAMPLE_ATTRIBUTE>
327
255
  <TAG>organism count</TAG>
@@ -332,32 +260,6 @@ def mandatorytest(row, column, index):
332
260
  <SAMPLE_ATTRIBUTE>
333
261
  <TAG>sample storage duration</TAG>
334
262
  <VALUE>${row['sample storage duration']}</VALUE>
335
- <UNITS>years</UNITS>
336
- </SAMPLE_ATTRIBUTE>
337
- </py:if>
338
- <py:if test="attributetest(row, 'sample storage temperature')">
339
- <SAMPLE_ATTRIBUTE>
340
- <TAG>sample storage temperature</TAG>
341
- <VALUE>${row['sample storage temperature']}</VALUE>
342
- <UNITS>°C</UNITS>
343
- </SAMPLE_ATTRIBUTE>
344
- </py:if>
345
- <py:if test="attributetest(row, 'sample storage location')">
346
- <SAMPLE_ATTRIBUTE>
347
- <TAG>sample storage location</TAG>
348
- <VALUE>${row['sample storage location']}</VALUE>
349
- </SAMPLE_ATTRIBUTE>
350
- </py:if>
351
- <py:if test="attributetest(row, 'sample collection device')">
352
- <SAMPLE_ATTRIBUTE>
353
- <TAG>sample collection device</TAG>
354
- <VALUE>${row['sample collection device']}</VALUE>
355
- </SAMPLE_ATTRIBUTE>
356
- </py:if>
357
- <py:if test="attributetest(row, 'sample collection method')">
358
- <SAMPLE_ATTRIBUTE>
359
- <TAG>sample collection method</TAG>
360
- <VALUE>${row['sample collection method']}</VALUE>
361
263
  </SAMPLE_ATTRIBUTE>
362
264
  </py:if>
363
265
  <py:if test="attributetest(row, 'host disease status')">
@@ -469,28 +371,34 @@ def mandatorytest(row, column, index):
469
371
  <UNITS>psu</UNITS>
470
372
  </SAMPLE_ATTRIBUTE>
471
373
  </py:if>
472
- <py:if test="attributetest(row, 'subspecific genetic lineage')">
374
+ <py:if test="attributetest(row, 'source material identifiers')">
473
375
  <SAMPLE_ATTRIBUTE>
474
- <TAG>subspecific genetic lineage</TAG>
475
- <VALUE>${row['subspecific genetic lineage']}</VALUE>
376
+ <TAG>source material identifiers</TAG>
377
+ <VALUE>${row['source material identifiers']}</VALUE>
476
378
  </SAMPLE_ATTRIBUTE>
477
379
  </py:if>
478
- <py:if test="attributetest(row, 'trophic level')">
380
+ <py:if test="attributetest(row, 'perturbation')">
479
381
  <SAMPLE_ATTRIBUTE>
480
- <TAG>trophic level</TAG>
481
- <VALUE>${row['trophic level']}</VALUE>
382
+ <TAG>perturbation</TAG>
383
+ <VALUE>${row['perturbation']}</VALUE>
482
384
  </SAMPLE_ATTRIBUTE>
483
385
  </py:if>
484
- <py:if test="attributetest(row, 'relationship to oxygen')">
386
+ <py:if test="attributetest(row, 'negative control type')">
485
387
  <SAMPLE_ATTRIBUTE>
486
- <TAG>relationship to oxygen</TAG>
487
- <VALUE>${row['relationship to oxygen']}</VALUE>
388
+ <TAG>negative control type</TAG>
389
+ <VALUE>${row['negative control type']}</VALUE>
488
390
  </SAMPLE_ATTRIBUTE>
489
391
  </py:if>
490
- <py:if test="attributetest(row, 'known pathogenicity')">
392
+ <py:if test="attributetest(row, 'positive control type')">
491
393
  <SAMPLE_ATTRIBUTE>
492
- <TAG>known pathogenicity</TAG>
493
- <VALUE>${row['known pathogenicity']}</VALUE>
394
+ <TAG>positive control type</TAG>
395
+ <VALUE>${row['positive control type']}</VALUE>
396
+ </SAMPLE_ATTRIBUTE>
397
+ </py:if>
398
+ <py:if test="attributetest(row, 'experimental factor')">
399
+ <SAMPLE_ATTRIBUTE>
400
+ <TAG>experimental factor</TAG>
401
+ <VALUE>${row['experimental factor']}</VALUE>
494
402
  </SAMPLE_ATTRIBUTE>
495
403
  </py:if>
496
404
  <py:if test="attributetest(row, 'encoded traits')">
@@ -499,22 +407,113 @@ def mandatorytest(row, column, index):
499
407
  <VALUE>${row['encoded traits']}</VALUE>
500
408
  </SAMPLE_ATTRIBUTE>
501
409
  </py:if>
502
- <py:if test="attributetest(row, 'observed biotic relationship')">
410
+ <py:if test="attributetest(row, 'subspecific genetic lineage')">
503
411
  <SAMPLE_ATTRIBUTE>
504
- <TAG>observed biotic relationship</TAG>
505
- <VALUE>${row['observed biotic relationship']}</VALUE>
412
+ <TAG>subspecific genetic lineage</TAG>
413
+ <VALUE>${row['subspecific genetic lineage']}</VALUE>
506
414
  </SAMPLE_ATTRIBUTE>
507
415
  </py:if>
508
- <py:if test="attributetest(row, 'chemical administration')">
416
+ <py:if test="attributetest(row, 'taxonomic classification')">
509
417
  <SAMPLE_ATTRIBUTE>
510
- <TAG>chemical administration</TAG>
511
- <VALUE>${row['chemical administration']}</VALUE>
418
+ <TAG>taxonomic classification</TAG>
419
+ <VALUE>${row['taxonomic classification']}</VALUE>
512
420
  </SAMPLE_ATTRIBUTE>
513
421
  </py:if>
514
- <py:if test="attributetest(row, 'perturbation')">
422
+ <py:if test="attributetest(row, 'isolation and growth condition')">
515
423
  <SAMPLE_ATTRIBUTE>
516
- <TAG>perturbation</TAG>
517
- <VALUE>${row['perturbation']}</VALUE>
424
+ <TAG>isolation and growth condition</TAG>
425
+ <VALUE>${row['isolation and growth condition']}</VALUE>
426
+ </SAMPLE_ATTRIBUTE>
427
+ </py:if>
428
+ <py:if test="attributetest(row, 'annotation source')">
429
+ <SAMPLE_ATTRIBUTE>
430
+ <TAG>annotation source</TAG>
431
+ <VALUE>${row['annotation source']}</VALUE>
432
+ </SAMPLE_ATTRIBUTE>
433
+ </py:if>
434
+ <py:if test="attributetest(row, 'reference for biomaterial')">
435
+ <SAMPLE_ATTRIBUTE>
436
+ <TAG>reference for biomaterial</TAG>
437
+ <VALUE>${row['reference for biomaterial']}</VALUE>
438
+ </SAMPLE_ATTRIBUTE>
439
+ </py:if>
440
+ <py:if test="attributetest(row, 'sample material processing')">
441
+ <SAMPLE_ATTRIBUTE>
442
+ <TAG>sample material processing</TAG>
443
+ <VALUE>${row['sample material processing']}</VALUE>
444
+ </SAMPLE_ATTRIBUTE>
445
+ </py:if>
446
+ <py:if test="attributetest(row, 'sample volume or weight for DNA extraction')">
447
+ <SAMPLE_ATTRIBUTE>
448
+ <TAG>sample volume or weight for DNA extraction</TAG>
449
+ <VALUE>${row['sample volume or weight for DNA extraction']}</VALUE>
450
+ <UNITS>ng</UNITS>
451
+ </SAMPLE_ATTRIBUTE>
452
+ </py:if>
453
+ <py:if test="attributetest(row, 'nucleic acid extraction')">
454
+ <SAMPLE_ATTRIBUTE>
455
+ <TAG>nucleic acid extraction</TAG>
456
+ <VALUE>${row['nucleic acid extraction']}</VALUE>
457
+ </SAMPLE_ATTRIBUTE>
458
+ </py:if>
459
+ <py:if test="attributetest(row, 'nucleic acid amplification')">
460
+ <SAMPLE_ATTRIBUTE>
461
+ <TAG>nucleic acid amplification</TAG>
462
+ <VALUE>${row['nucleic acid amplification']}</VALUE>
463
+ </SAMPLE_ATTRIBUTE>
464
+ </py:if>
465
+ <py:if test="attributetest(row, 'library size')">
466
+ <SAMPLE_ATTRIBUTE>
467
+ <TAG>library size</TAG>
468
+ <VALUE>${row['library size']}</VALUE>
469
+ </SAMPLE_ATTRIBUTE>
470
+ </py:if>
471
+ <py:if test="attributetest(row, 'library reads sequenced')">
472
+ <SAMPLE_ATTRIBUTE>
473
+ <TAG>library reads sequenced</TAG>
474
+ <VALUE>${row['library reads sequenced']}</VALUE>
475
+ </SAMPLE_ATTRIBUTE>
476
+ </py:if>
477
+ <py:if test="attributetest(row, 'library construction method')">
478
+ <SAMPLE_ATTRIBUTE>
479
+ <TAG>library construction method</TAG>
480
+ <VALUE>${row['library construction method']}</VALUE>
481
+ </SAMPLE_ATTRIBUTE>
482
+ </py:if>
483
+ <py:if test="attributetest(row, 'library vector')">
484
+ <SAMPLE_ATTRIBUTE>
485
+ <TAG>library vector</TAG>
486
+ <VALUE>${row['library vector']}</VALUE>
487
+ </SAMPLE_ATTRIBUTE>
488
+ </py:if>
489
+ <py:if test="attributetest(row, 'library screening strategy')">
490
+ <SAMPLE_ATTRIBUTE>
491
+ <TAG>library screening strategy</TAG>
492
+ <VALUE>${row['library screening strategy']}</VALUE>
493
+ </SAMPLE_ATTRIBUTE>
494
+ </py:if>
495
+ <py:if test="attributetest(row, 'pcr conditions')">
496
+ <SAMPLE_ATTRIBUTE>
497
+ <TAG>pcr conditions</TAG>
498
+ <VALUE>${row['pcr conditions']}</VALUE>
499
+ </SAMPLE_ATTRIBUTE>
500
+ </py:if>
501
+ <py:if test="attributetest(row, 'pcr primers')">
502
+ <SAMPLE_ATTRIBUTE>
503
+ <TAG>pcr primers</TAG>
504
+ <VALUE>${row['pcr primers']}</VALUE>
505
+ </SAMPLE_ATTRIBUTE>
506
+ </py:if>
507
+ <py:if test="attributetest(row, 'adapters')">
508
+ <SAMPLE_ATTRIBUTE>
509
+ <TAG>adapters</TAG>
510
+ <VALUE>${row['adapters']}</VALUE>
511
+ </SAMPLE_ATTRIBUTE>
512
+ </py:if>
513
+ <py:if test="attributetest(row, 'chemical administration')">
514
+ <SAMPLE_ATTRIBUTE>
515
+ <TAG>chemical administration</TAG>
516
+ <VALUE>${row['chemical administration']}</VALUE>
518
517
  </SAMPLE_ATTRIBUTE>
519
518
  </py:if>
520
519
  <SAMPLE_ATTRIBUTE>