sapiopycommons 2025.5.12a521__tar.gz → 2025.5.13a523__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.

Potentially problematic release.


This version of sapiopycommons might be problematic. Click here for more details.

Files changed (110) hide show
  1. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/PKG-INFO +1 -1
  2. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/pyproject.toml +1 -1
  3. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/tool_service_base.py +22 -14
  4. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/.gitignore +0 -0
  5. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/LICENSE +0 -0
  6. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/README.md +0 -0
  7. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/__init__.py +0 -0
  8. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/__init__.py +0 -0
  9. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.py +0 -0
  10. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.pyi +0 -0
  11. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2_grpc.py +0 -0
  12. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.py +0 -0
  13. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.pyi +0 -0
  14. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2_grpc.py +0 -0
  15. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2.py +0 -0
  16. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2.pyi +0 -0
  17. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/proto/step_output_pb2_grpc.py +0 -0
  18. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/proto/step_pb2.py +0 -0
  19. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/proto/step_pb2.pyi +0 -0
  20. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/proto/step_pb2_grpc.py +0 -0
  21. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2.py +0 -0
  22. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2.pyi +0 -0
  23. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/script/proto/script_pb2_grpc.py +0 -0
  24. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2.py +0 -0
  25. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2.pyi +0 -0
  26. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/tool/proto/entry_pb2_grpc.py +0 -0
  27. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2.py +0 -0
  28. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2.pyi +0 -0
  29. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/plan/tool/proto/tool_pb2_grpc.py +0 -0
  30. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.py +0 -0
  31. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.pyi +0 -0
  32. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2_grpc.py +0 -0
  33. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/ai/protobuf_utils.py +0 -0
  34. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/callbacks/__init__.py +0 -0
  35. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  36. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/callbacks/field_builder.py +0 -0
  37. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  38. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/chem/Molecules.py +0 -0
  39. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/chem/__init__.py +0 -0
  40. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/customreport/__init__.py +0 -0
  41. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/customreport/auto_pagers.py +0 -0
  42. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/customreport/column_builder.py +0 -0
  43. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  44. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/customreport/term_builder.py +0 -0
  45. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/datatype/__init__.py +0 -0
  46. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  47. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/datatype/data_fields.py +0 -0
  48. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/datatype/pseudo_data_types.py +0 -0
  49. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/eln/__init__.py +0 -0
  50. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/eln/experiment_handler.py +0 -0
  51. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/eln/experiment_report_util.py +0 -0
  52. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/eln/experiment_tags.py +0 -0
  53. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/eln/plate_designer.py +0 -0
  54. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/__init__.py +0 -0
  55. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  56. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/file_bridge.py +0 -0
  57. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  58. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/file_data_handler.py +0 -0
  59. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/file_util.py +0 -0
  60. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/file_validator.py +0 -0
  61. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/files/file_writer.py +0 -0
  62. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  63. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  64. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/__init__.py +0 -0
  65. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/accession_service.py +0 -0
  66. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/aliases.py +0 -0
  67. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/audit_log.py +0 -0
  68. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/custom_report_util.py +0 -0
  69. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/directive_util.py +0 -0
  70. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/exceptions.py +0 -0
  71. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/html_formatter.py +0 -0
  72. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/popup_util.py +0 -0
  73. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/sapio_links.py +0 -0
  74. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/storage_util.py +0 -0
  75. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/general/time_util.py +0 -0
  76. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  77. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  78. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/processtracking/__init__.py +0 -0
  79. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/processtracking/custom_workflow_handler.py +0 -0
  80. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  81. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  82. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/recordmodel/record_handler.py +0 -0
  83. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/rules/__init__.py +0 -0
  84. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  85. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  86. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/samples/aliquot.py +0 -0
  87. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/sftpconnect/__init__.py +0 -0
  88. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/sftpconnect/sftp_builder.py +0 -0
  89. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/webhook/__init__.py +0 -0
  90. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/webhook/webhook_context.py +0 -0
  91. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  92. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  93. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/AF-A0A009IHW8-F1-model_v4.cif +0 -0
  94. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/_do_not_add_init_py_here +0 -0
  95. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/accession_test.py +0 -0
  96. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/aliquot_test.py +0 -0
  97. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/bio_reg_test.py +0 -0
  98. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/chem_test.py +0 -0
  99. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/chem_test_curation_queue.py +0 -0
  100. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/curation_queue_test.sdf +0 -0
  101. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/data_type_models.py +0 -0
  102. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/flowcyto/101_DEN084Y5_15_E01_008_clean.fcs +0 -0
  103. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/flowcyto/101_DEN084Y5_15_E03_009_clean.fcs +0 -0
  104. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/flowcyto/101_DEN084Y5_15_E05_010_clean.fcs +0 -0
  105. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/flowcyto/8_color_ICS.wsp +0 -0
  106. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/flowcyto/COVID19_W_001_O.fcs +0 -0
  107. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/flowcyto_test.py +0 -0
  108. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/kappa.chains.fasta +0 -0
  109. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/mafft_test.py +0 -0
  110. {sapiopycommons-2025.5.12a521 → sapiopycommons-2025.5.13a523}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.5.12a521
3
+ Version: 2025.5.13a523
4
4
  Summary: Official Sapio Python API Utilities Package
5
5
  Project-URL: Homepage, https://github.com/sapiosciences
6
6
  Author-email: Jonathan Steck <jsteck@sapiosciences.com>, Yechen Qiao <yqiao@sapiosciences.com>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sapiopycommons"
7
- version='2025.05.12a521'
7
+ version='2025.05.13a523'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -437,8 +437,8 @@ class ToolBase(ABC):
437
437
  """
438
438
  self.configs.append(ProtobufUtils.field_def_to_pbo(field))
439
439
 
440
- def add_boolean_config_field(self, field_name: str, display_name: str, description: str, default_value: bool) \
441
- -> None:
440
+ def add_boolean_config_field(self, field_name: str, display_name: str, description: str, default_value: bool,
441
+ optional: bool = False) -> None:
442
442
  """
443
443
  Add a boolean configuration field to the tool. This field will be used to configure the tool in the plan
444
444
  manager.
@@ -447,13 +447,14 @@ class ToolBase(ABC):
447
447
  :param display_name: The display name of the field.
448
448
  :param description: The description of the field.
449
449
  :param default_value: The default value of the field.
450
+ :param optional: If true, this field is optional. If false, this field is required.
450
451
  """
451
452
  self.configs.append(VeloxFieldDefPbo(
452
453
  data_field_type=FieldTypePbo.BOOLEAN,
453
454
  data_field_name=field_name,
454
455
  display_name=display_name,
455
456
  description=description,
456
- required=True,
457
+ required=not optional,
457
458
  editable=True,
458
459
  boolean_properties=BooleanPropertiesPbo(
459
460
  default_value=default_value
@@ -461,7 +462,8 @@ class ToolBase(ABC):
461
462
  ))
462
463
 
463
464
  def add_double_config_field(self, field_name: str, display_name: str, description: str, default_value: float,
464
- min_value: float = -10.**120, max_value: float = 10.**120, precision: int = 2) -> None:
465
+ min_value: float = -10.**120, max_value: float = 10.**120, precision: int = 2,
466
+ optional: bool = False) -> None:
465
467
  """
466
468
  Add a double configuration field to the tool. This field will be used to configure the tool in the plan
467
469
  manager.
@@ -473,13 +475,14 @@ class ToolBase(ABC):
473
475
  :param min_value: The minimum value of the field.
474
476
  :param max_value: The maximum value of the field.
475
477
  :param precision: The precision of the field.
478
+ :param optional: If true, this field is optional. If false, this field is required.
476
479
  """
477
480
  self.configs.append(VeloxFieldDefPbo(
478
481
  data_field_type=FieldTypePbo.DOUBLE,
479
482
  data_field_name=field_name,
480
483
  display_name=display_name,
481
484
  description=description,
482
- required=True,
485
+ required=not optional,
483
486
  editable=True,
484
487
  double_properties=DoublePropertiesPbo(
485
488
  default_value=default_value,
@@ -490,7 +493,8 @@ class ToolBase(ABC):
490
493
  ))
491
494
 
492
495
  def add_integer_config_field(self, field_name: str, display_name: str, description: str,
493
- default_value: int, min_value: int = -2**31, max_value: int = 2**31-1) -> None:
496
+ default_value: int, min_value: int = -2**31, max_value: int = 2**31-1,
497
+ optional: bool = False) -> None:
494
498
  """
495
499
  Add an integer configuration field to the tool. This field will be used to configure the tool in the plan
496
500
  manager.
@@ -501,13 +505,14 @@ class ToolBase(ABC):
501
505
  :param default_value: The default value of the field.
502
506
  :param min_value: The minimum value of the field.
503
507
  :param max_value: The maximum value of the field.
508
+ :param optional: If true, this field is optional. If false, this field is required.
504
509
  """
505
510
  self.configs.append(VeloxFieldDefPbo(
506
511
  data_field_type=FieldTypePbo.INTEGER,
507
512
  data_field_name=field_name,
508
513
  display_name=display_name,
509
514
  description=description,
510
- required=True,
515
+ required=not optional,
511
516
  editable=True,
512
517
  integer_properties=IntegerPropertiesPbo(
513
518
  default_value=default_value,
@@ -517,7 +522,7 @@ class ToolBase(ABC):
517
522
  ))
518
523
 
519
524
  def add_string_config_field(self, field_name: str, display_name: str, description: str,
520
- default_value: str, max_length: int = 1000) -> None:
525
+ default_value: str, max_length: int = 1000, optional: bool = False) -> None:
521
526
  """
522
527
  Add a string configuration field to the tool. This field will be used to configure the tool in the plan
523
528
  manager.
@@ -527,13 +532,14 @@ class ToolBase(ABC):
527
532
  :param description: The description of the field.
528
533
  :param default_value: The default value of the field.
529
534
  :param max_length: The maximum length of the field.
535
+ :param optional: If true, this field is optional. If false, this field is required.
530
536
  """
531
537
  self.configs.append(VeloxFieldDefPbo(
532
538
  data_field_type=FieldTypePbo.STRING,
533
539
  data_field_name=field_name,
534
540
  display_name=display_name,
535
541
  description=description,
536
- required=True,
542
+ required=not optional,
537
543
  editable=True,
538
544
  string_properties=StringPropertiesPbo(
539
545
  default_value=default_value,
@@ -542,7 +548,7 @@ class ToolBase(ABC):
542
548
  ))
543
549
 
544
550
  def add_list_config_field(self, field_name: str, display_name: str, description: str, default_value: str,
545
- allowed_values: list[str], direct_edit: bool = False) -> None:
551
+ allowed_values: list[str], direct_edit: bool = False, optional: bool = False) -> None:
546
552
  """
547
553
  Add a list configuration field to the tool. This field will be used to configure the tool in the plan
548
554
  manager.
@@ -554,13 +560,14 @@ class ToolBase(ABC):
554
560
  :param allowed_values: The list of allowed values for the field.
555
561
  :param direct_edit: If true, the user can enter a value that is not in the list of allowed values. If false,
556
562
  the user can only select from the list of allowed values.
563
+ :param optional: If true, this field is optional. If false, this field is required.
557
564
  """
558
565
  self.configs.append(VeloxFieldDefPbo(
559
566
  data_field_type=FieldTypePbo.SELECTION,
560
567
  data_field_name=field_name,
561
568
  display_name=display_name,
562
569
  description=description,
563
- required=True,
570
+ required=not optional,
564
571
  editable=True,
565
572
  selection_properties=SelectionPropertiesPbo(
566
573
  default_value=default_value,
@@ -570,8 +577,8 @@ class ToolBase(ABC):
570
577
  ))
571
578
 
572
579
  def add_multi_list_config_field(self, field_name: str, display_name: str, description: str,
573
- default_value: list[str], allowed_values: list[str], direct_edit: bool = False) \
574
- -> None:
580
+ default_value: list[str], allowed_values: list[str], direct_edit: bool = False,
581
+ optional: bool = False) -> None:
575
582
  """
576
583
  Add a multi-select list configuration field to the tool. This field will be used to configure the tool in the
577
584
  plan manager.
@@ -583,13 +590,14 @@ class ToolBase(ABC):
583
590
  :param allowed_values: The list of allowed values for the field.
584
591
  :param direct_edit: If true, the user can enter a value that is not in the list of allowed values. If false,
585
592
  the user can only select from the list of allowed values.
593
+ :param optional: If true, this field is optional. If false, this field is required.
586
594
  """
587
595
  self.configs.append(VeloxFieldDefPbo(
588
596
  data_field_type=FieldTypePbo.SELECTION,
589
597
  data_field_name=field_name,
590
598
  display_name=display_name,
591
599
  description=description,
592
- required=True,
600
+ required=not optional,
593
601
  editable=True,
594
602
  selection_properties=SelectionPropertiesPbo(
595
603
  default_value=",".join(default_value),