bam-masterdata 0.6.0__tar.gz → 0.6.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 (138) hide show
  1. bam_masterdata-0.6.2/.github/release.yml +30 -0
  2. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/PKG-INFO +1 -1
  3. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/_version.py +2 -2
  4. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/cli/cli.py +28 -9
  5. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/cli/entities_to_excel.py +2 -2
  6. bam_masterdata-0.6.2/bam_masterdata/datamodel/vocabulary_types.py +81823 -0
  7. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/metadata/entities.py +18 -5
  8. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/openbis/get_entities.py +13 -12
  9. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata.egg-info/PKG-INFO +1 -1
  10. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata.egg-info/SOURCES.txt +2 -0
  11. bam_masterdata-0.6.2/docs/assets/drawio/uml-structure.drawio +532 -0
  12. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/conftest.py +5 -1
  13. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/metadata/test_entities.py +9 -1
  14. bam_masterdata-0.6.0/bam_masterdata/datamodel/vocabulary_types.py +0 -32238
  15. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/.coveragerc +0 -0
  16. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/.github/workflows/actions.yml +0 -0
  17. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/.github/workflows/coveralls.yml +0 -0
  18. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/.github/workflows/mkdocs-deploy.yml +0 -0
  19. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/.github/workflows/publish.yml +0 -0
  20. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/.gitignore +0 -0
  21. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/.vscode/settings.json +0 -0
  22. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/AUTHORS +0 -0
  23. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/LICENSE +0 -0
  24. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/LICENSE.datamodel +0 -0
  25. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/NOTICE +0 -0
  26. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/README.md +0 -0
  27. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/__init__.py +0 -0
  28. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/checker/__init__.py +0 -0
  29. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/checker/checker.py +0 -0
  30. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/checker/masterdata_validator.py +0 -0
  31. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/checker/source_loader.py +0 -0
  32. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/checker/validation_rules/all_validation_rules.json +0 -0
  33. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/checker/validation_rules/excel_validation_rules.json +0 -0
  34. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/checker/validation_rules/validation_rules.json +0 -0
  35. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/cli/__init__.py +0 -0
  36. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/cli/entities_to_rdf.py +0 -0
  37. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/cli/excel_to_entities.py +0 -0
  38. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/cli/fill_masterdata.py +0 -0
  39. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/datamodel/__init__.py +0 -0
  40. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/datamodel/collection_types.py +0 -0
  41. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/datamodel/dataset_types.py +0 -0
  42. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/datamodel/object_types.py +0 -0
  43. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/excel/__init__.py +0 -0
  44. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/excel/excel_to_entities.py +0 -0
  45. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/logger.py +0 -0
  46. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/metadata/__init__.py +0 -0
  47. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/metadata/_maps.py +0 -0
  48. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/metadata/definitions.py +0 -0
  49. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/metadata/entities_dict.py +0 -0
  50. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/openbis/__init__.py +0 -0
  51. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/openbis/login.py +0 -0
  52. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/parsing/__init__.py +0 -0
  53. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/parsing/parsing.py +0 -0
  54. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/utils/__init__.py +0 -0
  55. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/utils/paths.py +0 -0
  56. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata/utils/utils.py +0 -0
  57. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata.egg-info/dependency_links.txt +0 -0
  58. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata.egg-info/entry_points.txt +0 -0
  59. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata.egg-info/requires.txt +0 -0
  60. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/bam_masterdata.egg-info/top_level.txt +0 -0
  61. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/bammasterdata_blue_transparent.png +0 -0
  62. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/bammasterdata_blue_transparent_text.png +0 -0
  63. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/bammasterdata_blue_transparent_text.svg +0 -0
  64. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/bammasterdata_blue_white.png +0 -0
  65. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/bammasterdata_blue_white_text.png +0 -0
  66. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/datastore-logo-white.png +0 -0
  67. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/datastore-logo.png +0 -0
  68. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/drawio/checker-structure.drawio +0 -0
  69. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/drawio/levels_base_entities.drawio +0 -0
  70. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/drawio/masterdata-workflow.drawio +0 -0
  71. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/drawio/masterdata-workflow.drawio.png +0 -0
  72. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/drawio/parsing.drawio +0 -0
  73. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/fonts/BAMKlavika-Light.ttf +0 -0
  74. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/fonts/BAMKlavika-LightItalic.ttf +0 -0
  75. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/fonts/BAMKlavika-Medium.ttf +0 -0
  76. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/assets/fonts/BAMKlavika-MediumItalic.ttf +0 -0
  77. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/explanations/data-store.md +0 -0
  78. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/explanations/openbis.md +0 -0
  79. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/explanations/pybis.md +0 -0
  80. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/overview.md +0 -0
  81. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/collections.md +0 -0
  82. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/datasets.md +0 -0
  83. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/objects.md +0 -0
  84. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/objects_props.md +0 -0
  85. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/parent_child.md +0 -0
  86. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/projects.md +0 -0
  87. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/searches.md +0 -0
  88. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/setup.md +0 -0
  89. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/howtos/pybis/spaces.md +0 -0
  90. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/index.md +0 -0
  91. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/references/collection.md +0 -0
  92. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/references/controlled-vocabulary.md +0 -0
  93. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/references/dataset.md +0 -0
  94. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/stylesheets/extra.css +0 -0
  95. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/tutorials/create-masterdata.md +0 -0
  96. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/docs/tutorials/pybis.md +0 -0
  97. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/mkdocs.yml +0 -0
  98. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/pyproject.toml +0 -0
  99. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/scripts/install_python_dependencies.bat +0 -0
  100. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/scripts/install_python_dependencies.sh +0 -0
  101. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/scripts/pkg_size.py +0 -0
  102. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/setup.cfg +0 -0
  103. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/__init__.py +0 -0
  104. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/checker/test_source_loader.py +0 -0
  105. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/cli/test_entities_to_excel.py +0 -0
  106. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/cli/test_entities_to_rdf.py +0 -0
  107. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/datamodel_test/collection_types.py +0 -0
  108. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/datamodel_test/dataset_types.py +0 -0
  109. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/datamodel_test/object_types.py +0 -0
  110. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example01_codedoesnoteexists.xlsx +0 -0
  111. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example02_codeexists_proptype_datatypechanged.xlsx +0 -0
  112. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example03_codeexists_proptype_contvoccodechanged.xlsx +0 -0
  113. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example04_codeexists_proptype_objectcodechanged.xlsx +0 -0
  114. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example05_codeexists_proptype_warningdefschanged.xlsx +0 -0
  115. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example06_codeexists_proptype_vocobjcodemiss.xlsx +0 -0
  116. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example07_codeexists_objtype_warningdefschanged.xlsx +0 -0
  117. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example08_codeexists_objtype_assignprop_listcodeschanged_add.xlsx +0 -0
  118. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example09_codeexists_objtype_assignprop_listcodeschanged_del.xlsx +0 -0
  119. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example10_codeexists_objtype_assignprop_codedoesnotexists.xlsx +0 -0
  120. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example11_codeexists_objtype_assignprop_listcodeschanged_datatypechanged.xlsx +0 -0
  121. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example12_codeexists_objtype_assignprop_listcodeschanged_warningdefschanged.xlsx +0 -0
  122. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example13_codeexists_objtype_assignprop_coincide2objects.xlsx +0 -0
  123. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example_incoming_excel.xlsx +0 -0
  124. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example_incoming_python/collection_types.py +0 -0
  125. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example_incoming_python/dataset_types.py +0 -0
  126. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/example_incoming_python/object_types.py +0 -0
  127. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/masterdata_example.xlsx +0 -0
  128. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/masterdata_excel_output.json +0 -0
  129. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/checker/masterdata_python_output.json +0 -0
  130. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/metadata/example_vocabulary.py +0 -0
  131. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/utils/example_prop_types_1.py +0 -0
  132. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/data/utils/example_prop_types_2.py +0 -0
  133. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/excel/test_excel_to_entities.py +0 -0
  134. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/metadata/test_definitions.py +0 -0
  135. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/metadata/test_entities_dict.py +0 -0
  136. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/test_logger.py +0 -0
  137. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/utils/test_paths.py +0 -0
  138. {bam_masterdata-0.6.0 → bam_masterdata-0.6.2}/tests/utils/test_utils.py +0 -0
@@ -0,0 +1,30 @@
1
+ changelog:
2
+ exclude:
3
+ authors: [github-actions, pre-commit-ci]
4
+ categories:
5
+ - title: 💥 Breaking Changes
6
+ labels: [breaking]
7
+ - title: 🎉 New Features
8
+ labels: [feature]
9
+ - title: 🛠 Enhancements
10
+ labels: [enhancement, DX, UX]
11
+ - title: 🐛 Bug Fixes
12
+ labels: [fix]
13
+ - title: 📖 Documentation
14
+ labels: [docs]
15
+ - title: 🚀 Performance
16
+ labels: [performance]
17
+ - title: 🚧 CI
18
+ labels: [ci]
19
+ - title: 💡 Refactoring
20
+ labels: [refactor]
21
+ - title: 🧪 Tests
22
+ labels: [tests]
23
+ - title: 🔒 Security Fixes
24
+ labels: [security]
25
+ - title: 🏥 Package Health
26
+ labels: [pkg]
27
+ - title: 📦 Dependencies
28
+ labels: [dependencies, outdated]
29
+ - title: 🤷‍♂️ Other Changes
30
+ labels: ['*']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bam-masterdata
3
- Version: 0.6.0
3
+ Version: 0.6.2
4
4
  Summary: The BAM Data Store utility tools and masterdata models wrapped in a Python package with a front-end web interface.
5
5
  Author-email: BAM Data Store <datastore@bam.de>
6
6
  Maintainer-email: "Jose M. Pizarro" <jose.pizarro-blanco@bam.de>
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.6.0'
21
- __version_tuple__ = version_tuple = (0, 6, 0)
20
+ __version__ = version = '0.6.2'
21
+ __version_tuple__ = version_tuple = (0, 6, 2)
@@ -59,6 +59,7 @@ def cli():
59
59
  @click.option(
60
60
  "--export-dir",
61
61
  type=str,
62
+ default="./bam_masterdata/datamodel",
62
63
  required=False,
63
64
  help="The directory where the Masterdata will be exported to.",
64
65
  )
@@ -619,18 +620,26 @@ def run_parser(
619
620
  f"Space {openbis.username} does not exist in openBIS. Please create it first."
620
621
  )
621
622
  return
622
- project = space.new_project(
623
- code=project_name,
624
- description="New project created via automated parsing with `bam_masterdata`.",
625
- )
623
+ if project_name.upper() in [p.code for p in space.get_projects()]:
624
+ project = space.get_project(project_name)
625
+ else:
626
+ project = space.new_project(
627
+ code=project_name,
628
+ description="New project created via automated parsing with `bam_masterdata`.",
629
+ )
626
630
  project.save()
627
631
 
628
632
  # Create a new pybis `COLLECTION` to store the generated objects
629
- collection_openbis = openbis.new_collection(
630
- code=collection_name,
631
- type="COLLECTION",
632
- project=project,
633
- )
633
+ if collection_name.upper() in [c.code for c in project.get_collections()]:
634
+ collection_openbis = space.get_collection(
635
+ f"/{openbis.username}/{project_name}/{collection_name}".upper()
636
+ )
637
+ else:
638
+ collection_openbis = openbis.new_collection(
639
+ code=collection_name,
640
+ type="COLLECTION",
641
+ project=project,
642
+ )
634
643
  collection_openbis.save()
635
644
 
636
645
  # Create a bam_masterdata CollectionType instance for storing parsed results
@@ -658,11 +667,21 @@ def run_parser(
658
667
  props=obj_props,
659
668
  )
660
669
  object_openbis.save()
670
+
661
671
  # save local and openbis IDs to map parent-child relationships
662
672
  openbis_id_map[object_id] = object_openbis.identifier
663
673
  click.echo(
664
674
  f"Object {obj_props.get('$name')} stored in openBIS collection {collection_name}."
665
675
  )
676
+ for _, files in files_parser.items():
677
+ # Upload the file to openBIS
678
+ dataset = openbis.new_dataset(
679
+ type="RAW_DATA",
680
+ files=files,
681
+ collection=collection_openbis,
682
+ )
683
+ dataset.save()
684
+ click.echo(f"Files uploaded to openBIS collection {collection_name}.")
666
685
 
667
686
  # Map parent-child relationships
668
687
  for parent_id, child_id in collection.relationships.values():
@@ -52,7 +52,7 @@ def entities_to_excel(
52
52
  worksheet.append(header_values)
53
53
 
54
54
  # Properties assignment for ObjectType, DatasetType, and CollectionType
55
- if obj_instance.cls_name in ["ObjectType", "DatasetType", "CollectionType"]:
55
+ if obj_instance.base_name in ["ObjectType", "DatasetType", "CollectionType"]:
56
56
  if not obj_instance.properties:
57
57
  continue
58
58
  worksheet.append(
@@ -68,7 +68,7 @@ def entities_to_excel(
68
68
  row.append(val)
69
69
  worksheet.append(row)
70
70
  # Terms assignment for VocabularyType
71
- elif obj_instance.cls_name == "VocabularyType":
71
+ elif obj_instance.base_name == "VocabularyType":
72
72
  if not obj_instance.terms:
73
73
  continue
74
74
  worksheet.append(list(obj_instance.terms[0].excel_headers_map.values()))