rowan-python 3.0.1__py3-none-any.whl → 3.0.3__py3-none-any.whl

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 (44) hide show
  1. rowan/rowan_rdkit/__init__.py +15 -0
  2. rowan/rowan_rdkit/chem_utils.py +9 -9
  3. rowan/user.py +1 -1
  4. rowan/workflows/__init__.py +1 -0
  5. rowan/workflows/admet.py +3 -0
  6. rowan/workflows/analogue_docking.py +3 -0
  7. rowan/workflows/base.py +66 -0
  8. rowan/workflows/basic_calculation.py +3 -0
  9. rowan/workflows/batch_docking.py +3 -0
  10. rowan/workflows/bde.py +3 -0
  11. rowan/workflows/conformer_search.py +3 -0
  12. rowan/workflows/descriptors.py +3 -0
  13. rowan/workflows/docking.py +3 -0
  14. rowan/workflows/double_ended_ts_search.py +3 -0
  15. rowan/workflows/electronic_properties.py +3 -0
  16. rowan/workflows/fukui.py +3 -0
  17. rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +3 -0
  18. rowan/workflows/interaction_energy_decomposition.py +3 -0
  19. rowan/workflows/ion_mobility.py +3 -0
  20. rowan/workflows/irc.py +3 -0
  21. rowan/workflows/macropka.py +3 -0
  22. rowan/workflows/membrane_permeability.py +3 -0
  23. rowan/workflows/msa.py +3 -0
  24. rowan/workflows/multistage_optimization.py +3 -0
  25. rowan/workflows/nmr.py +3 -0
  26. rowan/workflows/pka.py +3 -0
  27. rowan/workflows/pose_analysis_md.py +3 -0
  28. rowan/workflows/protein_binder_design.py +3 -0
  29. rowan/workflows/protein_cofolding.py +3 -0
  30. rowan/workflows/protein_md.py +3 -0
  31. rowan/workflows/rbfe_graph.py +3 -0
  32. rowan/workflows/redox_potential.py +3 -0
  33. rowan/workflows/relative_binding_free_energy_perturbation.py +3 -0
  34. rowan/workflows/scan.py +3 -0
  35. rowan/workflows/solubility.py +3 -0
  36. rowan/workflows/solvent_dependent_conformers.py +3 -0
  37. rowan/workflows/spin_states.py +3 -0
  38. rowan/workflows/strain.py +3 -0
  39. rowan/workflows/tautomer_search.py +3 -0
  40. {rowan_python-3.0.1.dist-info → rowan_python-3.0.3.dist-info}/METADATA +1 -1
  41. rowan_python-3.0.3.dist-info/RECORD +55 -0
  42. rowan_python-3.0.1.dist-info/RECORD +0 -55
  43. {rowan_python-3.0.1.dist-info → rowan_python-3.0.3.dist-info}/WHEEL +0 -0
  44. {rowan_python-3.0.1.dist-info → rowan_python-3.0.3.dist-info}/licenses/LICENSE +0 -0
@@ -12,3 +12,18 @@ from .chem_utils import (
12
12
  run_pka,
13
13
  run_tautomers,
14
14
  )
15
+
16
+ __all__ = [
17
+ "batch_charges",
18
+ "batch_conformers",
19
+ "batch_energy",
20
+ "batch_optimize",
21
+ "batch_pka",
22
+ "batch_tautomers",
23
+ "run_charges",
24
+ "run_conformers",
25
+ "run_energy",
26
+ "run_optimize",
27
+ "run_pka",
28
+ "run_tautomers",
29
+ ]
@@ -412,7 +412,7 @@ def run_energy(
412
412
  :param timeout: time in seconds before the Workflow times out
413
413
  :param name: name for the job
414
414
  :param folder_uuid: folder UUID
415
- :raises: MethodTooSlowError if the method is invalid
415
+ :raises MethodTooSlowError: if the method is invalid
416
416
  :returns: dictionary with the energy in Hartree and the conformer index
417
417
  """
418
418
  return asyncio.run(_single_energy(mol, method, engine, mode, timeout, name, folder_uuid))
@@ -439,7 +439,7 @@ def batch_energy(
439
439
  :param timeout: time in seconds before the Workflow times out
440
440
  :param name: name for the job
441
441
  :param folder_uuid: folder UUID
442
- :raises: MethodTooSlowError if the method is invalid
442
+ :raises MethodTooSlowError: if the method is invalid
443
443
  :returns: list of dictionaries with the energy in Hartree and the conformer index
444
444
  """
445
445
 
@@ -472,7 +472,7 @@ async def _single_energy(
472
472
  :param timeout: time in seconds before the Workflow times out
473
473
  :param name: name for the job
474
474
  :param folder_uuid: folder UUID
475
- :raises: MethodTooSlowError if the method is invalid
475
+ :raises MethodTooSlowError: if the method is invalid
476
476
  :returns: dictionary with the energy in Hartree and the conformer index
477
477
  """
478
478
  get_api_key()
@@ -552,7 +552,7 @@ def run_optimize(
552
552
  :param timeout: time in seconds before the Workflow times out
553
553
  :param name: name for the job
554
554
  :param folder_uuid: folder UUID
555
- :raises: MethodTooSlowError if the method is invalid
555
+ :raises MethodTooSlowError: if the method is invalid
556
556
  :returns: dictionary with the optimized conformer(s) and optional list of energies per conformer
557
557
  """
558
558
  return asyncio.run(
@@ -583,7 +583,7 @@ def batch_optimize(
583
583
  :param timeout: time in seconds before the Workflow times out
584
584
  :param name: name for the job
585
585
  :param folder_uuid: folder UUID
586
- :raises: MethodTooSlowError if the Method is invalid
586
+ :raises MethodTooSlowError: if the method is invalid
587
587
  :returns: dictionaries with optimized conformer(s) and optional list of energies per conformer
588
588
  """
589
589
 
@@ -619,7 +619,7 @@ async def _single_optimize(
619
619
  :param timeout: time in seconds before the Workflow times out
620
620
  :param name: name for the job
621
621
  :param folder_uuid: folder UUID
622
- :raises: MethodTooSlowError if the method is invalid
622
+ :raises MethodTooSlowError: if the method is invalid
623
623
  :returns: dictionary with the optimized conformer(s) and optional list of energies per conformer
624
624
  """
625
625
  get_api_key()
@@ -897,7 +897,7 @@ def run_charges(
897
897
  :param timeout: timeout in seconds
898
898
  :param name: name of the job
899
899
  :param folder_uuid: folder UUID
900
- :raises: MethodTooSlowError if the method is invalid
900
+ :raises MethodTooSlowError: if the method is invalid
901
901
  :returns: dictionary with the charges and the conformer index
902
902
  """
903
903
  return asyncio.run(_single_charges(mol, method, engine, mode, timeout, name, folder_uuid))
@@ -924,7 +924,7 @@ def batch_charges(
924
924
  :param timeout: timeout in seconds
925
925
  :param name: name of the job
926
926
  :param folder_uuid: folder UUID
927
- :raises: MethodTooSlowError if the method is invalid
927
+ :raises MethodTooSlowError: if the method is invalid
928
928
  :returns: list of dictionaries with the charges and the conformer index
929
929
  """
930
930
 
@@ -958,7 +958,7 @@ async def _single_charges(
958
958
  :param timeout: timeout in seconds
959
959
  :param name: name of the job
960
960
  :param folder_uuid: folder UUID
961
- :raises: MethodTooSlowError if the method is invalid
961
+ :raises MethodTooSlowError: if the method is invalid
962
962
  :returns: dictionary with the charges and the conformer index
963
963
  """
964
964
  get_api_key()
rowan/user.py CHANGED
@@ -78,7 +78,7 @@ class User(BaseModel):
78
78
  weekly_credits: float | None = None
79
79
  credits: float | None = None
80
80
  billing_name: str | None = None
81
- billing_address: str | None = None
81
+ billing_address: str | dict | None = None
82
82
  credit_balance_warning: float | None = None
83
83
  organization: Organization | None = None
84
84
  organization_role: OrganizationRole | None = None
@@ -23,6 +23,7 @@ from .analogue_docking import (
23
23
  )
24
24
  from .base import (
25
25
  RESULT_REGISTRY,
26
+ DispatchInfo,
26
27
  Solvent,
27
28
  Workflow,
28
29
  WorkflowError,
rowan/workflows/admet.py CHANGED
@@ -32,6 +32,7 @@ def submit_admet_workflow(
32
32
  folder: Folder | None = None,
33
33
  max_credits: int | None = None,
34
34
  webhook_url: str | None = None,
35
+ is_draft: bool = False,
35
36
  ) -> Workflow:
36
37
  """
37
38
  Submits an ADMET workflow to predict drug-likeness properties.
@@ -45,6 +46,7 @@ def submit_admet_workflow(
45
46
  :param folder: Folder object to store the workflow in.
46
47
  :param max_credits: Maximum number of credits to use for the workflow.
47
48
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
49
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
48
50
  :returns: Workflow object representing the submitted workflow.
49
51
  :raises ValueError: If the molecule has no SMILES associated with it.
50
52
  :raises requests.HTTPError: if the request to the API fails.
@@ -64,6 +66,7 @@ def submit_admet_workflow(
64
66
  "folder_uuid": folder_uuid,
65
67
  "max_credits": max_credits,
66
68
  "webhook_url": webhook_url,
69
+ "is_draft": is_draft,
67
70
  }
68
71
 
69
72
  with api_client() as client:
@@ -167,6 +167,7 @@ def submit_analogue_docking_workflow(
167
167
  folder: Folder | None = None,
168
168
  max_credits: int | None = None,
169
169
  webhook_url: str | None = None,
170
+ is_draft: bool = False,
170
171
  ) -> Workflow:
171
172
  """
172
173
  Submits an analogue-docking workflow to the API.
@@ -182,6 +183,7 @@ def submit_analogue_docking_workflow(
182
183
  :param folder: Folder object to store the workflow in.
183
184
  :param max_credits: Maximum number of credits to use for the workflow.
184
185
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
186
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
185
187
  :returns: Workflow object representing the submitted analogue-docking workflow.
186
188
  :raises requests.HTTPError: if the request to the API fails.
187
189
  """
@@ -215,6 +217,7 @@ def submit_analogue_docking_workflow(
215
217
  "folder_uuid": folder_uuid,
216
218
  "max_credits": max_credits,
217
219
  "webhook_url": webhook_url,
220
+ "is_draft": is_draft,
218
221
  }
219
222
 
220
223
  with api_client() as client:
rowan/workflows/base.py CHANGED
@@ -49,6 +49,20 @@ def parse_messages(raw_messages: list[stjames.Message] | None) -> list[Message]:
49
49
  return [Message(title=m.title, body=m.body, type=m.type) for m in raw_messages]
50
50
 
51
51
 
52
+ @dataclass(frozen=True, slots=True)
53
+ class DispatchInfo:
54
+ """Estimated dispatch information for a workflow.
55
+
56
+ :param to_be_dispatched: whether workflow will be queued (vs starting immediately).
57
+ :param compute_hardware: hardware type (CPU, H200, A100, etc.).
58
+ :param estimated_runtime_minutes: estimated runtime in minutes, or None if unknown.
59
+ """
60
+
61
+ to_be_dispatched: bool | None
62
+ compute_hardware: str | None
63
+ estimated_runtime_minutes: float | None
64
+
65
+
52
66
  class WorkflowError(Exception):
53
67
  """Raised when a workflow fails or is stopped."""
54
68
 
@@ -312,6 +326,11 @@ Workflow: {self.name}
312
326
  :returns: WorkflowResult subclass with typed access to results.
313
327
  :raises WorkflowError: If the workflow failed or was stopped.
314
328
  """
329
+ if self.status == stjames.Status.DRAFT:
330
+ raise WorkflowError(
331
+ f"Cannot get result of draft workflow '{self.name}'. Call submit_draft() first."
332
+ )
333
+
315
334
  if wait:
316
335
  while not self.done():
317
336
  time.sleep(poll_interval)
@@ -411,6 +430,50 @@ Workflow: {self.name}
411
430
  response = client.delete(f"/workflow/{self.uuid}/delete_workflow_data")
412
431
  response.raise_for_status()
413
432
 
433
+ def dispatch_info(self) -> DispatchInfo:
434
+ """Fetch estimated dispatch information for this workflow.
435
+
436
+ :returns: estimated time, hardware, and queue info.
437
+ :raises HTTPError: if the API request fails.
438
+ """
439
+ if self.data is None:
440
+ self.fetch_latest(in_place=True)
441
+ payload = {"workflow_type": self.workflow_type, "workflow_data": self.data}
442
+ with api_client() as client:
443
+ response = client.post("/workflow/dispatch_information", json=payload)
444
+ response.raise_for_status()
445
+ raw = response.json()
446
+ time_est = raw.get("time_estimate_min")
447
+ if isinstance(time_est, dict):
448
+ time_est = time_est.get("average")
449
+ info = DispatchInfo(
450
+ to_be_dispatched=raw.get("to_be_dispatched"),
451
+ compute_hardware=raw.get("compute_hardware"),
452
+ estimated_runtime_minutes=time_est,
453
+ )
454
+ if info.estimated_runtime_minutes is None:
455
+ logger.info(
456
+ "Runtime estimation not available for workflow type '%s'.",
457
+ self.workflow_type,
458
+ )
459
+ return info
460
+
461
+ def submit_draft(self) -> Self:
462
+ """Submit a draft workflow for execution.
463
+
464
+ :returns: updated workflow instance.
465
+ :raises WorkflowError: if workflow is not in DRAFT status.
466
+ :raises HTTPError: if the API request fails.
467
+ """
468
+ if self.status != stjames.Status.DRAFT:
469
+ raise WorkflowError(
470
+ f"Cannot submit draft: workflow status is {self.status.name}, not DRAFT"
471
+ )
472
+ with api_client() as client:
473
+ response = client.post(f"/workflow/{self.uuid}/submit_draft")
474
+ response.raise_for_status()
475
+ return self.fetch_latest(in_place=True)
476
+
414
477
  def download_msa_files(
415
478
  self, msa_format: stjames.MSAFormat, path: Path | str | None = None
416
479
  ) -> None:
@@ -552,6 +615,7 @@ def submit_workflow(
552
615
  folder_uuid: str | Folder | None = None,
553
616
  max_credits: int | None = None,
554
617
  webhook_url: str | None = None,
618
+ is_draft: bool = False,
555
619
  ) -> Workflow:
556
620
  """
557
621
  Submits a workflow to the API.
@@ -564,6 +628,7 @@ def submit_workflow(
564
628
  :param folder_uuid: UUID of the folder to store the workflow in, or a Folder object.
565
629
  :param max_credits: Maximum number of credits to use for the workflow.
566
630
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
631
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
567
632
  :returns: Workflow object representing the submitted workflow.
568
633
  :raises ValueError: If neither `initial_smiles` nor a valid `initial_molecule` is provided.
569
634
  :raises HTTPError: If the API request fails.
@@ -582,6 +647,7 @@ def submit_workflow(
582
647
  "workflow_data": workflow_data,
583
648
  "max_credits": max_credits,
584
649
  "webhook_url": webhook_url,
650
+ "is_draft": is_draft,
585
651
  }
586
652
 
587
653
  if initial_smiles is not None:
@@ -165,6 +165,7 @@ def submit_basic_calculation_workflow(
165
165
  folder: Folder | None = None,
166
166
  max_credits: int | None = None,
167
167
  webhook_url: str | None = None,
168
+ is_draft: bool = False,
168
169
  ) -> Workflow:
169
170
  """
170
171
  Submit a basic-calculation workflow to the API.
@@ -189,6 +190,7 @@ def submit_basic_calculation_workflow(
189
190
  :param folder: Folder to place the workflow in.
190
191
  :param max_credits: Maximum credits to use.
191
192
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
193
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
192
194
  :returns: Submitted workflow.
193
195
  :raises requests.HTTPError: if the API request fails.
194
196
  :raises ValueError: if preset is combined with method/engine/basis_set/corrections.
@@ -255,6 +257,7 @@ def submit_basic_calculation_workflow(
255
257
  "folder_uuid": folder_uuid,
256
258
  "max_credits": max_credits,
257
259
  "webhook_url": webhook_url,
260
+ "is_draft": is_draft,
258
261
  }
259
262
 
260
263
  with api_client() as client:
@@ -45,6 +45,7 @@ def submit_batch_docking_workflow(
45
45
  folder: Folder | None = None,
46
46
  max_credits: int | None = None,
47
47
  webhook_url: str | None = None,
48
+ is_draft: bool = False,
48
49
  ) -> Workflow:
49
50
  """
50
51
  Submits a batch-docking workflow to the API.
@@ -60,6 +61,7 @@ def submit_batch_docking_workflow(
60
61
  :param folder: Folder object to store the workflow in.
61
62
  :param max_credits: Maximum number of credits to use.
62
63
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
64
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
63
65
  :returns: Workflow object representing the submitted workflow.
64
66
  :raises requests.HTTPError: if the request to the API fails.
65
67
  """
@@ -88,6 +90,7 @@ def submit_batch_docking_workflow(
88
90
  "folder_uuid": folder_uuid,
89
91
  "max_credits": max_credits,
90
92
  "webhook_url": webhook_url,
93
+ "is_draft": is_draft,
91
94
  }
92
95
 
93
96
  with api_client() as client:
rowan/workflows/bde.py CHANGED
@@ -65,6 +65,7 @@ def submit_bde_workflow(
65
65
  folder: Folder | None = None,
66
66
  max_credits: int | None = None,
67
67
  webhook_url: str | None = None,
68
+ is_draft: bool = False,
68
69
  ) -> Workflow:
69
70
  """
70
71
  Submits a Bond-Dissociation Energy (BDE) workflow to the API.
@@ -79,6 +80,7 @@ def submit_bde_workflow(
79
80
  :param folder: Folder object to store the workflow in.
80
81
  :param max_credits: Maximum number of credits to use for the workflow.
81
82
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
83
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
82
84
  :returns: Workflow object representing the submitted workflow.
83
85
  :raises requests.HTTPError: if the request to the API fails.
84
86
  """
@@ -104,6 +106,7 @@ def submit_bde_workflow(
104
106
  "folder_uuid": folder_uuid,
105
107
  "max_credits": max_credits,
106
108
  "webhook_url": webhook_url,
109
+ "is_draft": is_draft,
107
110
  }
108
111
 
109
112
  with api_client() as client:
@@ -125,6 +125,7 @@ def submit_conformer_search_workflow(
125
125
  folder: Folder | None = None,
126
126
  max_credits: int | None = None,
127
127
  webhook_url: str | None = None,
128
+ is_draft: bool = False,
128
129
  ) -> Workflow:
129
130
  """
130
131
  Submits a conformer-search workflow to the API.
@@ -145,6 +146,7 @@ def submit_conformer_search_workflow(
145
146
  :param folder: Folder object to store the workflow in.
146
147
  :param max_credits: Maximum number of credits to use for the workflow.
147
148
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
149
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
148
150
  :returns: Workflow object representing the submitted workflow.
149
151
  :raises requests.HTTPError: if the request to the API fails.
150
152
  """
@@ -194,6 +196,7 @@ def submit_conformer_search_workflow(
194
196
  "folder_uuid": folder_uuid,
195
197
  "max_credits": max_credits,
196
198
  "webhook_url": webhook_url,
199
+ "is_draft": is_draft,
197
200
  }
198
201
 
199
202
  with api_client() as client:
@@ -34,6 +34,7 @@ def submit_descriptors_workflow(
34
34
  folder: Folder | None = None,
35
35
  max_credits: int | None = None,
36
36
  webhook_url: str | None = None,
37
+ is_draft: bool = False,
37
38
  ) -> Workflow:
38
39
  """
39
40
  Submits a descriptors workflow to the API.
@@ -44,6 +45,7 @@ def submit_descriptors_workflow(
44
45
  :param folder: Folder object to store the workflow in.
45
46
  :param max_credits: Maximum number of credits to use for the workflow.
46
47
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
48
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
47
49
  :returns: Workflow object representing the submitted workflow.
48
50
  :raises requests.HTTPError: if the request to the API fails.
49
51
  """
@@ -61,6 +63,7 @@ def submit_descriptors_workflow(
61
63
  "folder_uuid": folder_uuid,
62
64
  "max_credits": max_credits,
63
65
  "webhook_url": webhook_url,
66
+ "is_draft": is_draft,
64
67
  }
65
68
 
66
69
  with api_client() as client:
@@ -145,6 +145,7 @@ def submit_docking_workflow(
145
145
  folder: Folder | None = None,
146
146
  max_credits: int | None = None,
147
147
  webhook_url: str | None = None,
148
+ is_draft: bool = False,
148
149
  ) -> Workflow:
149
150
  """
150
151
  Submits a docking workflow to the API.
@@ -163,6 +164,7 @@ def submit_docking_workflow(
163
164
  :param folder: Folder object to store the workflow in.
164
165
  :param max_credits: Maximum number of credits to use for the workflow.
165
166
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
167
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
166
168
  :returns: Workflow object representing the submitted docking workflow.
167
169
  :raises requests.HTTPError: if the request to the API fails.
168
170
  """
@@ -199,6 +201,7 @@ def submit_docking_workflow(
199
201
  "folder_uuid": folder_uuid,
200
202
  "max_credits": max_credits,
201
203
  "webhook_url": webhook_url,
204
+ "is_draft": is_draft,
202
205
  }
203
206
 
204
207
  with api_client() as client:
@@ -153,6 +153,7 @@ def submit_double_ended_ts_search_workflow(
153
153
  folder: Folder | None = None,
154
154
  max_credits: int | None = None,
155
155
  webhook_url: str | None = None,
156
+ is_draft: bool = False,
156
157
  ) -> Workflow:
157
158
  """
158
159
  Submits a double-ended transition state search workflow to the API.
@@ -168,6 +169,7 @@ def submit_double_ended_ts_search_workflow(
168
169
  :param folder: Folder object to store the workflow in.
169
170
  :param max_credits: Maximum number of credits to use for the workflow.
170
171
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
172
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
171
173
  :returns: Workflow object representing the submitted workflow.
172
174
  """
173
175
  if folder and folder_uuid:
@@ -194,6 +196,7 @@ def submit_double_ended_ts_search_workflow(
194
196
  "folder_uuid": folder_uuid,
195
197
  "max_credits": max_credits,
196
198
  "webhook_url": webhook_url,
199
+ "is_draft": is_draft,
197
200
  }
198
201
 
199
202
  with api_client() as client:
@@ -135,6 +135,7 @@ def submit_electronic_properties_workflow(
135
135
  folder: Folder | None = None,
136
136
  max_credits: int | None = None,
137
137
  webhook_url: str | None = None,
138
+ is_draft: bool = False,
138
139
  ) -> Workflow:
139
140
  """
140
141
  Submits an electronic-properties workflow to the API.
@@ -152,6 +153,7 @@ def submit_electronic_properties_workflow(
152
153
  :param folder: Folder object to store the workflow in.
153
154
  :param max_credits: Maximum number of credits to use for the workflow.
154
155
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
156
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
155
157
  :returns: Workflow object representing the submitted workflow.
156
158
  :raises requests.HTTPError: if the request to the API fails.
157
159
  """
@@ -183,6 +185,7 @@ def submit_electronic_properties_workflow(
183
185
  "folder_uuid": folder_uuid,
184
186
  "max_credits": max_credits,
185
187
  "webhook_url": webhook_url,
188
+ "is_draft": is_draft,
186
189
  }
187
190
 
188
191
  with api_client() as client:
rowan/workflows/fukui.py CHANGED
@@ -49,6 +49,7 @@ def submit_fukui_workflow(
49
49
  folder: Folder | None = None,
50
50
  max_credits: int | None = None,
51
51
  webhook_url: str | None = None,
52
+ is_draft: bool = False,
52
53
  ) -> Workflow:
53
54
  """
54
55
  Submits a Fukui workflow to the API.
@@ -71,6 +72,7 @@ def submit_fukui_workflow(
71
72
  :param folder: Folder object to store the workflow in.
72
73
  :param max_credits: Maximum number of credits to use for the workflow.
73
74
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
75
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
74
76
  :returns: Workflow object representing the submitted workflow.
75
77
  :raises ValueError: If the solvent model is incompatible with the chosen method.
76
78
  :raises requests.HTTPError: if the request to the API fails.
@@ -114,6 +116,7 @@ def submit_fukui_workflow(
114
116
  "folder_uuid": folder_uuid,
115
117
  "max_credits": max_credits,
116
118
  "webhook_url": webhook_url,
119
+ "is_draft": is_draft,
117
120
  }
118
121
 
119
122
  with api_client() as client:
@@ -92,6 +92,7 @@ def submit_hydrogen_bond_donor_acceptor_strength_workflow(
92
92
  folder: Folder | None = None,
93
93
  max_credits: int | None = None,
94
94
  webhook_url: str | None = None,
95
+ is_draft: bool = False,
95
96
  ) -> Workflow:
96
97
  """
97
98
  Submits a hydrogen-bond donor/acceptor-strength workflow to the API.
@@ -104,6 +105,7 @@ def submit_hydrogen_bond_donor_acceptor_strength_workflow(
104
105
  :param folder: Folder object to store the workflow in.
105
106
  :param max_credits: Maximum number of credits to use for the workflow.
106
107
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
108
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
107
109
  :returns: Workflow object representing the submitted workflow.
108
110
  :raises requests.HTTPError: if the request to the API fails.
109
111
  """
@@ -127,6 +129,7 @@ def submit_hydrogen_bond_donor_acceptor_strength_workflow(
127
129
  "folder_uuid": folder_uuid,
128
130
  "max_credits": max_credits,
129
131
  "webhook_url": webhook_url,
132
+ "is_draft": is_draft,
130
133
  }
131
134
 
132
135
  with api_client() as client:
@@ -94,6 +94,7 @@ def submit_interaction_energy_decomposition_workflow(
94
94
  folder: Folder | None = None,
95
95
  max_credits: int | None = None,
96
96
  webhook_url: str | None = None,
97
+ is_draft: bool = False,
97
98
  ) -> Workflow:
98
99
  """
99
100
  Submits an interaction energy decomposition (SAPT0) workflow to the API.
@@ -111,6 +112,7 @@ def submit_interaction_energy_decomposition_workflow(
111
112
  :param folder: Folder object to store the workflow in.
112
113
  :param max_credits: Maximum number of credits to use for the workflow.
113
114
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
115
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
114
116
  :returns: Workflow object representing the submitted workflow.
115
117
  :raises ValueError: If both folder and folder_uuid are provided, or if fragment 1
116
118
  contains atoms covalently bonded to atoms outside fragment 1.
@@ -144,6 +146,7 @@ def submit_interaction_energy_decomposition_workflow(
144
146
  "folder_uuid": folder_uuid,
145
147
  "max_credits": max_credits,
146
148
  "webhook_url": webhook_url,
149
+ "is_draft": is_draft,
147
150
  }
148
151
 
149
152
  with api_client() as client:
@@ -51,6 +51,7 @@ def submit_ion_mobility_workflow(
51
51
  folder: Folder | None = None,
52
52
  max_credits: int | None = None,
53
53
  webhook_url: str | None = None,
54
+ is_draft: bool = False,
54
55
  ) -> Workflow:
55
56
  """
56
57
  Submits an ion-mobility workflow to the API.
@@ -66,6 +67,7 @@ def submit_ion_mobility_workflow(
66
67
  :param folder: Folder object to store the workflow in.
67
68
  :param max_credits: Maximum number of credits to use for the workflow.
68
69
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
70
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
69
71
  :returns: Workflow object representing the submitted workflow.
70
72
  :raises requests.HTTPError: if the request to the API fails.
71
73
  """
@@ -91,6 +93,7 @@ def submit_ion_mobility_workflow(
91
93
  "folder_uuid": folder_uuid,
92
94
  "max_credits": max_credits,
93
95
  "webhook_url": webhook_url,
96
+ "is_draft": is_draft,
94
97
  }
95
98
 
96
99
  with api_client() as client:
rowan/workflows/irc.py CHANGED
@@ -145,6 +145,7 @@ def submit_irc_workflow(
145
145
  folder: Folder | None = None,
146
146
  max_credits: int | None = None,
147
147
  webhook_url: str | None = None,
148
+ is_draft: bool = False,
148
149
  ) -> Workflow:
149
150
  """
150
151
  Submits an Intrinsic Reaction Coordinate (IRC) workflow to the API.
@@ -160,6 +161,7 @@ def submit_irc_workflow(
160
161
  :param folder: Folder object to store the workflow in.
161
162
  :param max_credits: Maximum number of credits to use for the workflow.
162
163
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
164
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
163
165
  :returns: Workflow object representing the submitted IRC workflow.
164
166
  :raises requests.HTTPError: if the request to the API fails.
165
167
  """
@@ -195,6 +197,7 @@ def submit_irc_workflow(
195
197
  "folder_uuid": folder_uuid,
196
198
  "max_credits": max_credits,
197
199
  "webhook_url": webhook_url,
200
+ "is_draft": is_draft,
198
201
  }
199
202
 
200
203
  with api_client() as client:
@@ -111,6 +111,7 @@ def submit_macropka_workflow(
111
111
  folder: Folder | None = None,
112
112
  max_credits: int | None = None,
113
113
  webhook_url: str | None = None,
114
+ is_draft: bool = False,
114
115
  ) -> Workflow:
115
116
  """
116
117
  Submits a macropKa workflow to the API.
@@ -130,6 +131,7 @@ def submit_macropka_workflow(
130
131
  :param folder: Folder object to store the workflow in.
131
132
  :param max_credits: Maximum number of credits to use for the workflow.
132
133
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
134
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
133
135
  :returns: Workflow object representing the submitted workflow.
134
136
  :raises ValueError: If the molecule has no SMILES associated with it.
135
137
  :raises requests.HTTPError: if the request to the API fails.
@@ -157,6 +159,7 @@ def submit_macropka_workflow(
157
159
  "folder_uuid": folder_uuid,
158
160
  "max_credits": max_credits,
159
161
  "webhook_url": webhook_url,
162
+ "is_draft": is_draft,
160
163
  }
161
164
 
162
165
  with api_client() as client:
@@ -70,6 +70,7 @@ def submit_membrane_permeability_workflow(
70
70
  folder: Folder | None = None,
71
71
  max_credits: int | None = None,
72
72
  webhook_url: str | None = None,
73
+ is_draft: bool = False,
73
74
  ) -> Workflow:
74
75
  """
75
76
  Submits a membrane-permeability workflow to the API.
@@ -81,6 +82,7 @@ def submit_membrane_permeability_workflow(
81
82
  :param folder: Folder object to store the workflow in.
82
83
  :param max_credits: Maximum number of credits to use for the workflow.
83
84
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
85
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
84
86
  :returns: Workflow object representing the submitted workflow.
85
87
  :raises requests.HTTPError: if the request to the API fails.
86
88
  """
@@ -94,6 +96,7 @@ def submit_membrane_permeability_workflow(
94
96
  "folder_uuid": folder_uuid,
95
97
  "max_credits": max_credits,
96
98
  "webhook_url": webhook_url,
99
+ "is_draft": is_draft,
97
100
  }
98
101
 
99
102
  match method:
rowan/workflows/msa.py CHANGED
@@ -78,6 +78,7 @@ def submit_msa_workflow(
78
78
  folder: Folder | None = None,
79
79
  max_credits: int | None = None,
80
80
  webhook_url: str | None = None,
81
+ is_draft: bool = False,
81
82
  ) -> Workflow:
82
83
  """
83
84
  Submits a Multiple Sequence Alignment (MSA) workflow to the API.
@@ -90,6 +91,7 @@ def submit_msa_workflow(
90
91
  :param folder: Folder object to store the workflow in.
91
92
  :param max_credits: Maximum number of credits to use for the workflow.
92
93
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
94
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
93
95
  :returns: Workflow object representing the submitted MSA workflow.
94
96
  :raises HTTPError: If the API request fails.
95
97
  """
@@ -127,6 +129,7 @@ def submit_msa_workflow(
127
129
  "folder_uuid": folder_uuid,
128
130
  "max_credits": max_credits,
129
131
  "webhook_url": webhook_url,
132
+ "is_draft": is_draft,
130
133
  }
131
134
 
132
135
  with api_client() as client:
@@ -126,6 +126,7 @@ def submit_multistage_optimization_workflow(
126
126
  folder: Folder | None = None,
127
127
  max_credits: int | None = None,
128
128
  webhook_url: str | None = None,
129
+ is_draft: bool = False,
129
130
  ) -> Workflow:
130
131
  """
131
132
  Submits a multistage-optimization workflow to the API.
@@ -141,6 +142,7 @@ def submit_multistage_optimization_workflow(
141
142
  :param folder: Folder object to store the workflow in.
142
143
  :param max_credits: Maximum number of credits to use for the workflow.
143
144
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
145
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
144
146
  :returns: Workflow object representing the submitted workflow.
145
147
  :raises requests.HTTPError: if the request to the API fails.
146
148
  """
@@ -167,6 +169,7 @@ def submit_multistage_optimization_workflow(
167
169
  "folder_uuid": folder_uuid,
168
170
  "max_credits": max_credits,
169
171
  "webhook_url": webhook_url,
172
+ "is_draft": is_draft,
170
173
  }
171
174
 
172
175
  with api_client() as client:
rowan/workflows/nmr.py CHANGED
@@ -106,6 +106,7 @@ def submit_nmr_workflow(
106
106
  folder: Folder | None = None,
107
107
  max_credits: int | None = None,
108
108
  webhook_url: str | None = None,
109
+ is_draft: bool = False,
109
110
  ) -> Workflow:
110
111
  """
111
112
  Submits a Nuclear Magnetic Resonance (NMR) prediction workflow to the API.
@@ -119,6 +120,7 @@ def submit_nmr_workflow(
119
120
  :param folder: Folder object to store the workflow in.
120
121
  :param max_credits: Maximum number of credits to use for the workflow.
121
122
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
123
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
122
124
  :returns: Workflow object representing the submitted workflow.
123
125
  :raises requests.HTTPError: if the request to the API fails.
124
126
  """
@@ -146,6 +148,7 @@ def submit_nmr_workflow(
146
148
  "folder_uuid": folder_uuid,
147
149
  "max_credits": max_credits,
148
150
  "webhook_url": webhook_url,
151
+ "is_draft": is_draft,
149
152
  }
150
153
 
151
154
  with api_client() as client:
rowan/workflows/pka.py CHANGED
@@ -128,6 +128,7 @@ def submit_pka_workflow(
128
128
  folder: Folder | None = None,
129
129
  max_credits: int | None = None,
130
130
  webhook_url: str | None = None,
131
+ is_draft: bool = False,
131
132
  ) -> Workflow:
132
133
  """
133
134
  Submits a pKa workflow to the API.
@@ -145,6 +146,7 @@ def submit_pka_workflow(
145
146
  :param folder: Folder object to store the workflow in.
146
147
  :param max_credits: Maximum number of credits to use for the workflow.
147
148
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
149
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
148
150
  :returns: Workflow object representing the submitted workflow.
149
151
  :raises ValueError: If method and input type don't match.
150
152
  :raises requests.HTTPError: if the request to the API fails.
@@ -195,6 +197,7 @@ def submit_pka_workflow(
195
197
  "folder_uuid": folder_uuid,
196
198
  "max_credits": max_credits,
197
199
  "webhook_url": webhook_url,
200
+ "is_draft": is_draft,
198
201
  }
199
202
 
200
203
  with api_client() as client:
@@ -165,6 +165,7 @@ def submit_pose_analysis_md_workflow(
165
165
  folder: Folder | None = None,
166
166
  max_credits: int | None = None,
167
167
  webhook_url: str | None = None,
168
+ is_draft: bool = False,
168
169
  ) -> Workflow:
169
170
  """
170
171
  Submits a Pose-Analysis Molecular Dynamics (MD) workflow to the API.
@@ -195,6 +196,7 @@ def submit_pose_analysis_md_workflow(
195
196
  :param folder: Folder object to store the workflow in.
196
197
  :param max_credits: Maximum number of credits to use for the workflow.
197
198
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
199
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
198
200
  :returns: Workflow object representing the submitted workflow.
199
201
  :raises requests.HTTPError: if the request to the API fails.
200
202
  """
@@ -236,6 +238,7 @@ def submit_pose_analysis_md_workflow(
236
238
  "folder_uuid": folder_uuid,
237
239
  "max_credits": max_credits,
238
240
  "webhook_url": webhook_url,
241
+ "is_draft": is_draft,
239
242
  }
240
243
 
241
244
  with api_client() as client:
@@ -148,6 +148,7 @@ def submit_protein_binder_design_workflow(
148
148
  folder: Folder | None = None,
149
149
  max_credits: int | None = None,
150
150
  webhook_url: str | None = None,
151
+ is_draft: bool = False,
151
152
  ) -> Workflow:
152
153
  """
153
154
  Submits a protein-binder-design workflow to the API.
@@ -165,6 +166,7 @@ def submit_protein_binder_design_workflow(
165
166
  :param folder: Folder object to store the workflow in.
166
167
  :param max_credits: Maximum number of credits to use for the workflow.
167
168
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
169
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
168
170
  :returns: Workflow object representing the submitted workflow.
169
171
  :raises ValueError: If protocol is not a valid BinderProtocol.
170
172
  :raises requests.HTTPError: if the request to the API fails.
@@ -196,6 +198,7 @@ def submit_protein_binder_design_workflow(
196
198
  "folder_uuid": folder_uuid,
197
199
  "max_credits": max_credits,
198
200
  "webhook_url": webhook_url,
201
+ "is_draft": is_draft,
199
202
  }
200
203
 
201
204
  with api_client() as client:
@@ -252,6 +252,7 @@ def submit_protein_cofolding_workflow(
252
252
  folder: Folder | None = None,
253
253
  max_credits: int | None = None,
254
254
  webhook_url: str | None = None,
255
+ is_draft: bool = False,
255
256
  ) -> Workflow:
256
257
  """
257
258
  Submits a protein-cofolding workflow to the API.
@@ -276,6 +277,7 @@ def submit_protein_cofolding_workflow(
276
277
  :param folder: Folder object to store the workflow in.
277
278
  :param max_credits: Maximum number of credits to use for the workflow.
278
279
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
280
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
279
281
  :returns: Workflow object representing the submitted workflow.
280
282
  :raises ValueError: If no protein, DNA, or RNA sequences are provided.
281
283
  :raises requests.HTTPError: if the request to the API fails.
@@ -317,6 +319,7 @@ def submit_protein_cofolding_workflow(
317
319
  "folder_uuid": folder_uuid,
318
320
  "max_credits": max_credits,
319
321
  "webhook_url": webhook_url,
322
+ "is_draft": is_draft,
320
323
  }
321
324
 
322
325
  with api_client() as client:
@@ -112,6 +112,7 @@ def submit_protein_md_workflow(
112
112
  folder: Folder | None = None,
113
113
  max_credits: int | None = None,
114
114
  webhook_url: str | None = None,
115
+ is_draft: bool = False,
115
116
  ) -> Workflow:
116
117
  """
117
118
  Submits a Protein Molecular Dynamics (MD) workflow to the API.
@@ -138,6 +139,7 @@ def submit_protein_md_workflow(
138
139
  :param folder: Folder object to store the workflow in.
139
140
  :param max_credits: Maximum number of credits to use for the workflow.
140
141
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
142
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
141
143
  :returns: Workflow object representing the submitted workflow.
142
144
  :raises requests.HTTPError: if the request to the API fails.
143
145
  """
@@ -174,6 +176,7 @@ def submit_protein_md_workflow(
174
176
  "folder_uuid": folder_uuid,
175
177
  "max_credits": max_credits,
176
178
  "webhook_url": webhook_url,
179
+ "is_draft": is_draft,
177
180
  }
178
181
 
179
182
  with api_client() as client:
@@ -98,6 +98,7 @@ def submit_relative_binding_free_energy_graph_workflow(
98
98
  folder: Folder | None = None,
99
99
  max_credits: int | None = None,
100
100
  webhook_url: str | None = None,
101
+ is_draft: bool = False,
101
102
  ) -> Workflow:
102
103
  """
103
104
  Submits an RBFE graph construction workflow to the API.
@@ -117,6 +118,7 @@ def submit_relative_binding_free_energy_graph_workflow(
117
118
  :param folder: Folder object to store the workflow in.
118
119
  :param max_credits: Maximum number of credits to use for the workflow.
119
120
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
121
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
120
122
  :returns: Workflow object representing the submitted workflow.
121
123
  :raises ValueError: If both folder and folder_uuid are provided.
122
124
  :raises requests.HTTPError: if the request to the API fails.
@@ -144,6 +146,7 @@ def submit_relative_binding_free_energy_graph_workflow(
144
146
  "folder_uuid": folder_uuid,
145
147
  "max_credits": max_credits,
146
148
  "webhook_url": webhook_url,
149
+ "is_draft": is_draft,
147
150
  }
148
151
 
149
152
  with api_client() as client:
@@ -98,6 +98,7 @@ def submit_redox_potential_workflow(
98
98
  folder: Folder | None = None,
99
99
  max_credits: int | None = None,
100
100
  webhook_url: str | None = None,
101
+ is_draft: bool = False,
101
102
  ) -> Workflow:
102
103
  """
103
104
  Submits a redox-potential workflow to the API.
@@ -111,6 +112,7 @@ def submit_redox_potential_workflow(
111
112
  :param folder: Folder object to store the workflow in.
112
113
  :param max_credits: Maximum number of credits to use for the workflow.
113
114
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
115
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
114
116
  :returns: Workflow object representing the submitted workflow.
115
117
  :raises requests.HTTPError: if the request to the API fails.
116
118
  """
@@ -135,6 +137,7 @@ def submit_redox_potential_workflow(
135
137
  "folder_uuid": folder_uuid,
136
138
  "max_credits": max_credits,
137
139
  "webhook_url": webhook_url,
140
+ "is_draft": is_draft,
138
141
  }
139
142
 
140
143
  with api_client() as client:
@@ -217,6 +217,7 @@ def submit_relative_binding_free_energy_perturbation_workflow(
217
217
  folder: Folder | None = None,
218
218
  max_credits: int | None = None,
219
219
  webhook_url: str | None = None,
220
+ is_draft: bool = False,
220
221
  ) -> Workflow:
221
222
  """
222
223
  Submits a relative binding free energy perturbation (RBFE) workflow to the API.
@@ -257,6 +258,7 @@ def submit_relative_binding_free_energy_perturbation_workflow(
257
258
  :param folder: Folder object to store the workflow in.
258
259
  :param max_credits: Maximum number of credits to use for the workflow.
259
260
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
261
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
260
262
  :returns: Workflow object representing the submitted workflow.
261
263
  :raises ValueError: If graph_result has no graph or both folder and folder_uuid are provided.
262
264
  :raises requests.HTTPError: if the request to the API fails.
@@ -314,6 +316,7 @@ def submit_relative_binding_free_energy_perturbation_workflow(
314
316
  "folder_uuid": folder_uuid,
315
317
  "max_credits": max_credits,
316
318
  "webhook_url": webhook_url,
319
+ "is_draft": is_draft,
317
320
  }
318
321
 
319
322
  with api_client() as client:
rowan/workflows/scan.py CHANGED
@@ -101,6 +101,7 @@ def submit_scan_workflow(
101
101
  folder: Folder | None = None,
102
102
  max_credits: int | None = None,
103
103
  webhook_url: str | None = None,
104
+ is_draft: bool = False,
104
105
  ) -> Workflow:
105
106
  """
106
107
  Submits a scan workflow to the API.
@@ -115,6 +116,7 @@ def submit_scan_workflow(
115
116
  :param folder: Folder object to store the workflow in.
116
117
  :param max_credits: Maximum number of credits to use for the workflow.
117
118
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
119
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
118
120
  :returns: Workflow object representing the submitted workflow.
119
121
  :raises requests.HTTPError: if the request to the API fails.
120
122
  """
@@ -151,6 +153,7 @@ def submit_scan_workflow(
151
153
  "folder_uuid": folder_uuid,
152
154
  "max_credits": max_credits,
153
155
  "webhook_url": webhook_url,
156
+ "is_draft": is_draft,
154
157
  }
155
158
 
156
159
  with api_client() as client:
@@ -148,6 +148,7 @@ def submit_solubility_workflow(
148
148
  folder: Folder | None = None,
149
149
  max_credits: int | None = None,
150
150
  webhook_url: str | None = None,
151
+ is_draft: bool = False,
151
152
  ) -> Workflow:
152
153
  """
153
154
  Submits a solubility workflow to the API.
@@ -170,6 +171,7 @@ def submit_solubility_workflow(
170
171
  :param folder: Folder object to store the workflow in.
171
172
  :param max_credits: Maximum number of credits to use for the workflow.
172
173
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
174
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
173
175
  :returns: Workflow object representing the submitted workflow.
174
176
  :raises ValueError: If the molecule has no SMILES, or solvents/temperatures are
175
177
  incompatible with the method.
@@ -223,6 +225,7 @@ def submit_solubility_workflow(
223
225
  "folder_uuid": folder_uuid,
224
226
  "max_credits": max_credits,
225
227
  "webhook_url": webhook_url,
228
+ "is_draft": is_draft,
226
229
  }
227
230
 
228
231
  with api_client() as client:
@@ -113,6 +113,7 @@ def submit_solvent_dependent_conformers_workflow(
113
113
  folder: Folder | None = None,
114
114
  max_credits: int | None = None,
115
115
  webhook_url: str | None = None,
116
+ is_draft: bool = False,
116
117
  ) -> Workflow:
117
118
  """
118
119
  Submits a solvent-dependent conformers workflow to the API.
@@ -135,6 +136,7 @@ def submit_solvent_dependent_conformers_workflow(
135
136
  :param folder: Folder object to store the workflow in.
136
137
  :param max_credits: Maximum number of credits to use for the workflow.
137
138
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
139
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
138
140
  :returns: Workflow object representing the submitted workflow.
139
141
  :raises ValueError: If both folder and folder_uuid are provided.
140
142
  :raises requests.HTTPError: If the request to the API fails.
@@ -170,6 +172,7 @@ def submit_solvent_dependent_conformers_workflow(
170
172
  "folder_uuid": folder_uuid,
171
173
  "max_credits": max_credits,
172
174
  "webhook_url": webhook_url,
175
+ "is_draft": is_draft,
173
176
  }
174
177
 
175
178
  with api_client() as client:
@@ -138,6 +138,7 @@ def submit_spin_states_workflow(
138
138
  folder: Folder | None = None,
139
139
  max_credits: int | None = None,
140
140
  webhook_url: str | None = None,
141
+ is_draft: bool = False,
141
142
  ) -> Workflow:
142
143
  """
143
144
  Submits a spin-states workflow to the API.
@@ -154,6 +155,7 @@ def submit_spin_states_workflow(
154
155
  :param folder: Folder object to store the workflow in.
155
156
  :param max_credits: Maximum number of credits to use for the workflow.
156
157
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
158
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
157
159
  :returns: Workflow object representing the submitted workflow.
158
160
  :raises ValueError: If any multiplicity is incompatible with the molecule.
159
161
  :raises requests.HTTPError: If the request to the API fails.
@@ -185,6 +187,7 @@ def submit_spin_states_workflow(
185
187
  "folder_uuid": folder_uuid,
186
188
  "max_credits": max_credits,
187
189
  "webhook_url": webhook_url,
190
+ "is_draft": is_draft,
188
191
  }
189
192
 
190
193
  with api_client() as client:
rowan/workflows/strain.py CHANGED
@@ -118,6 +118,7 @@ def submit_strain_workflow(
118
118
  folder: Folder | None = None,
119
119
  max_credits: int | None = None,
120
120
  webhook_url: str | None = None,
121
+ is_draft: bool = False,
121
122
  ) -> Workflow:
122
123
  """
123
124
  Submits a strain workflow to the API.
@@ -133,6 +134,7 @@ def submit_strain_workflow(
133
134
  :param folder: Folder object to store the workflow in.
134
135
  :param max_credits: Maximum number of credits to use for the workflow.
135
136
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
137
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
136
138
  :returns: Workflow object representing the submitted workflow.
137
139
  :raises requests.HTTPError: If the request to the API fails.
138
140
  """
@@ -157,6 +159,7 @@ def submit_strain_workflow(
157
159
  "folder_uuid": folder_uuid,
158
160
  "max_credits": max_credits,
159
161
  "webhook_url": webhook_url,
162
+ "is_draft": is_draft,
160
163
  }
161
164
 
162
165
  with api_client() as client:
@@ -110,6 +110,7 @@ def submit_tautomer_search_workflow(
110
110
  folder: Folder | None = None,
111
111
  max_credits: int | None = None,
112
112
  webhook_url: str | None = None,
113
+ is_draft: bool = False,
113
114
  ) -> Workflow:
114
115
  """
115
116
  Submits a tautomer-search workflow to the API.
@@ -121,6 +122,7 @@ def submit_tautomer_search_workflow(
121
122
  :param folder: Folder object to store the workflow in.
122
123
  :param max_credits: Maximum number of credits to use for the workflow.
123
124
  :param webhook_url: URL that Rowan will POST to when the workflow completes.
125
+ :param is_draft: If True, submit the workflow as a draft without starting execution.
124
126
  :returns: Workflow object representing the submitted workflow.
125
127
  :raises requests.HTTPError: If the request to the API fails.
126
128
  """
@@ -143,6 +145,7 @@ def submit_tautomer_search_workflow(
143
145
  "folder_uuid": folder_uuid,
144
146
  "max_credits": max_credits,
145
147
  "webhook_url": webhook_url,
148
+ "is_draft": is_draft,
146
149
  }
147
150
 
148
151
  with api_client() as client:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 3.0.1
3
+ Version: 3.0.3
4
4
  Summary: Rowan Python Library
5
5
  Project-URL: Homepage, https://github.com/rowansci/rowan-client
6
6
  Project-URL: Bug Tracker, https://github.com/rowansci/rowan-client/issues
@@ -0,0 +1,55 @@
1
+ rowan/__init__.py,sha256=HicTprRVZq9Ah2SB-_hLdJ-NBXrCq_AqKWn5rDSPwfc,640
2
+ rowan/calculation.py,sha256=lZZ52DxPsuJWCTzFZXjhauHK6dV0KCUwzoxtmoxSY48,3442
3
+ rowan/config.py,sha256=3cVKHUNzkIPnN2bvx7l5sia7Zc5poXS8lKOJlowXyLA,21088
4
+ rowan/constants.py,sha256=emCH4m9OL2Hm5E-6mJGM_FgzrK_JrZT-FiKJ6pMNQ4Y,84
5
+ rowan/folder.py,sha256=NkimVeHho9nwRXeS87U1tivEVL-1gL2Vqfz1fJ6XpNQ,9222
6
+ rowan/molecule.py,sha256=3jXyE94wH_TPZ8ld-OLa6Q09ij1BV-clBWUqPS_GR7Y,9119
7
+ rowan/project.py,sha256=Wy3VvhwIMIumAZD2s7hPk8jj4bAPHMDNvsqU23RRqFo,4598
8
+ rowan/protein.py,sha256=Ma2tBFF52Rb-ME5vZy5M5juMlmphQVQRL0Q1EBvBeZg,14761
9
+ rowan/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ rowan/types.py,sha256=rCAnUlCsemyBK9Bbus0pL-THoqNqJIQHaMoDferIfFU,471
11
+ rowan/user.py,sha256=Tnwz1-u_92ACt1xATQegtMj3FcosFsAG4m-4YuAkiyg,5955
12
+ rowan/utils.py,sha256=c1s6Ze-OqLtfvrD23OV60otskejmj-CD88nNf8_nFcw,3636
13
+ rowan/rowan_rdkit/__init__.py,sha256=EATX2VRzywzKxqkpCUMTf7RNQLkWsfi5VcCNDW6EIiw,503
14
+ rowan/rowan_rdkit/chem_utils.py,sha256=ZWdLziT59Qr5JzjvV789CAyRq0m5JIawsOP4RxUbQQA,35529
15
+ rowan/workflows/__init__.py,sha256=o2fN6V10mWt82QPr1UlbkyHzc2vtoIbkoiFZF2PgYow,4257
16
+ rowan/workflows/admet.py,sha256=0_wIwXXLfHF-3kgGx_1EM1ljjaYHLeEijJ-GbMYxpL8,2904
17
+ rowan/workflows/analogue_docking.py,sha256=PIvNtVq1C65GpBORMJW4D4KJUxGo6RfZWCfUqkM1zVI,8626
18
+ rowan/workflows/base.py,sha256=eLGyzTc9NpXBGC-FRjsaUwKP6RluWrz0ipDZ4jDY_jc,30103
19
+ rowan/workflows/basic_calculation.py,sha256=VnOQjnuZE8j-rYbMB66p74d7M-8Eap0xAMzK68ZqJ24,9847
20
+ rowan/workflows/batch_docking.py,sha256=u_4hH7OeWkIbXqEm4uWTc3p0u9mpnR8EWqWCw7sVya4,3581
21
+ rowan/workflows/bde.py,sha256=cM8UNBYycwLE5yJeh8DEtX6mW6hghsM6XKEFkbd7Q8g,5551
22
+ rowan/workflows/conformer_search.py,sha256=_uCfGFsUTDyxDc55XTsvMSjs800LyfzBRa4_-9Pjp4g,7690
23
+ rowan/workflows/constants.py,sha256=el8jWE9gnGTLNWn5_n_V0H362vIRneOqgy7BOQ8CScg,575
24
+ rowan/workflows/descriptors.py,sha256=AXdfqOwtMf2gHkO1qyZsCKFmX2QpLXTwTDfm7hnMNxQ,2464
25
+ rowan/workflows/docking.py,sha256=wmE7QJu1uDHBDynTT1XesXXAZtpB6xLjZUKsHOQyCcU,7386
26
+ rowan/workflows/double_ended_ts_search.py,sha256=abBblMkshhbzq5UTwIf-ovNFxY8Ltp2O-bGu_plkI58,7806
27
+ rowan/workflows/electronic_properties.py,sha256=AVVtpIIO82GRETHbemCLI8tqM7QHmr7XrGbrQ_YB5w4,7108
28
+ rowan/workflows/fukui.py,sha256=wLimH3QmorSpvkovRPlI91VuxHG4J91F2EcLYqg3eP0,5112
29
+ rowan/workflows/hydrogen_bond_donor_acceptor_strength.py,sha256=WWiEK_GlumIEgTTOaqw-Y5gPDkRkaePWcIjTdIocrPc,4916
30
+ rowan/workflows/interaction_energy_decomposition.py,sha256=Kjwkb-pviFSFIIZNjMb9i8nAkdKrbjFftmG_lkYtE40,6120
31
+ rowan/workflows/ion_mobility.py,sha256=r6wm5jJXgRtmMrP1nZQTfwG7IA1dFcGQi-_dv9TpCUc,3693
32
+ rowan/workflows/irc.py,sha256=BH6s0rJEQ3G5yN5mOOSGfiZCf-i6YZNUgtK2-m-gmdo,7491
33
+ rowan/workflows/macropka.py,sha256=YkXoPiyou6nAoBheES0endsqNdi_kclwlIscTljNuKI,5723
34
+ rowan/workflows/membrane_permeability.py,sha256=oIDmB8qF_K_Kesv7o_FiljAk4dpptEeOjoxtMvl1gSw,4612
35
+ rowan/workflows/msa.py,sha256=V3B1SyWPR8MT306hh9W-T9JTpi_E-XgAIeF9yRQZ7tI,5075
36
+ rowan/workflows/multistage_optimization.py,sha256=HFVx8mnHxG97pDYyL6eOhNGmESqTxaKNgUdwrFpFUJ0,6456
37
+ rowan/workflows/nmr.py,sha256=hergJdsiawKj7iV-jHxDOS03n_EnZcaCIt_ZTl34-JY,5183
38
+ rowan/workflows/pka.py,sha256=tTZnXaZwGOsgF0Vln4NcHGEAXMvf1afY7Ll7Wa8uHHw,7481
39
+ rowan/workflows/pose_analysis_md.py,sha256=UvotLhWv0_VAkKteZboOutDry7l-Zt1K6_SBx3EXqgM,9530
40
+ rowan/workflows/protein_binder_design.py,sha256=J-9NSbRLdHb6JQRhY_vq43HlHCDCiQqrkOZUCAF-2dk,8604
41
+ rowan/workflows/protein_cofolding.py,sha256=1R29XjAVjWHyelGG-mylP2GIamZbLCQKaaaFsCAnYgI,13012
42
+ rowan/workflows/protein_md.py,sha256=_n0IdmTQsunbP1geF-wUjXNMKNYV-ngmAPEMJlj0dkI,7021
43
+ rowan/workflows/rbfe_graph.py,sha256=PLqzBRkxD7tPdBViYJZjgaCP8aA2UXKc9dD4odx5XUo,5788
44
+ rowan/workflows/redox_potential.py,sha256=lg2Djev58oOmBmI4l3eIaGKafkNXMhwo17K2G7kQvjY,5319
45
+ rowan/workflows/relative_binding_free_energy_perturbation.py,sha256=uxC3Rr63U6GjNa9u2Hurahu48l4rYEz5RQX4hV0D250,13456
46
+ rowan/workflows/scan.py,sha256=KQm58utOxs6qIpX1Jv3usoUpkVHeLw4mKCs8RTUkRhk,5696
47
+ rowan/workflows/solubility.py,sha256=9-zHEHkf4AgGNDCE3x1S-6wTgwxVm4ihRmh0kwLvPFs,8594
48
+ rowan/workflows/solvent_dependent_conformers.py,sha256=ovvnhCE4xlkpdhccLHEq7oBJRI2-rHmZ-7_ewGECerM,7020
49
+ rowan/workflows/spin_states.py,sha256=GZgBJPO6_ds9el4b7wbigIZ5213Z9DwXhokczJ5NDhs,7122
50
+ rowan/workflows/strain.py,sha256=nR3n0Nl7HT7s5fRzIC9aViYN41KoYdteEs6fPgyvu0M,5893
51
+ rowan/workflows/tautomer_search.py,sha256=eJMfmR30rywf0-4K-jnv_iqXxObEuX4zHnqoD4l3JRg,5082
52
+ rowan_python-3.0.3.dist-info/METADATA,sha256=-75hDhIKwDt98GlCIHYLw5-Rlfoc3ffMay2EdStyQUQ,1600
53
+ rowan_python-3.0.3.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
54
+ rowan_python-3.0.3.dist-info/licenses/LICENSE,sha256=i05z7xEhyrg6f8j0lR3XYjShnF-MJGFQ-DnpsZ8yiVI,1084
55
+ rowan_python-3.0.3.dist-info/RECORD,,
@@ -1,55 +0,0 @@
1
- rowan/__init__.py,sha256=HicTprRVZq9Ah2SB-_hLdJ-NBXrCq_AqKWn5rDSPwfc,640
2
- rowan/calculation.py,sha256=lZZ52DxPsuJWCTzFZXjhauHK6dV0KCUwzoxtmoxSY48,3442
3
- rowan/config.py,sha256=3cVKHUNzkIPnN2bvx7l5sia7Zc5poXS8lKOJlowXyLA,21088
4
- rowan/constants.py,sha256=emCH4m9OL2Hm5E-6mJGM_FgzrK_JrZT-FiKJ6pMNQ4Y,84
5
- rowan/folder.py,sha256=NkimVeHho9nwRXeS87U1tivEVL-1gL2Vqfz1fJ6XpNQ,9222
6
- rowan/molecule.py,sha256=3jXyE94wH_TPZ8ld-OLa6Q09ij1BV-clBWUqPS_GR7Y,9119
7
- rowan/project.py,sha256=Wy3VvhwIMIumAZD2s7hPk8jj4bAPHMDNvsqU23RRqFo,4598
8
- rowan/protein.py,sha256=Ma2tBFF52Rb-ME5vZy5M5juMlmphQVQRL0Q1EBvBeZg,14761
9
- rowan/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- rowan/types.py,sha256=rCAnUlCsemyBK9Bbus0pL-THoqNqJIQHaMoDferIfFU,471
11
- rowan/user.py,sha256=5hqwt5h2MwZqD-rRYVixpzNYs9gSWmVzXrfwMfZAtlk,5948
12
- rowan/utils.py,sha256=c1s6Ze-OqLtfvrD23OV60otskejmj-CD88nNf8_nFcw,3636
13
- rowan/rowan_rdkit/__init__.py,sha256=9ikKIV0d4XGEXSQoJqJ--2yH-mpblJYR54FTqanXyg8,246
14
- rowan/rowan_rdkit/chem_utils.py,sha256=ACtpQM8J107NtfZp-CI123OEnWh-hp81kOFmT08aS18,35529
15
- rowan/workflows/__init__.py,sha256=1Cv4e2Nv8GBbCUI_YFtdCYtBFLLIRaOFH6phiqX3GS4,4239
16
- rowan/workflows/admet.py,sha256=57NP-wXe5gwEt9C6sfOsdU1v_srnO0UWcAVLf2VpbNs,2757
17
- rowan/workflows/analogue_docking.py,sha256=DG5sx7tPpLnOKX7QtZfN_578N089znW10dkG1sM9Ji0,8479
18
- rowan/workflows/base.py,sha256=FWtUbuHAkmktPYAlLx3DboG1pkiAlDMGWIRxHHW8tmE,27491
19
- rowan/workflows/basic_calculation.py,sha256=YOQRZ4vOYwKjgHsCtDoEY2_vzF_EeUDckORghiJouCU,9700
20
- rowan/workflows/batch_docking.py,sha256=DKBsmCEKhd6n1gJ3dox0Ch4OYX0aeZ5WkNfT7YLVwYE,3434
21
- rowan/workflows/bde.py,sha256=B0yvWlaJSlMRE-5bxnEHS38qdHxuDhoV8bCI8z7p1Qg,5404
22
- rowan/workflows/conformer_search.py,sha256=n-wUsNL3PwyFSs4dpbYe0qnyUtO2yslugV3x8PoRwj0,7543
23
- rowan/workflows/constants.py,sha256=el8jWE9gnGTLNWn5_n_V0H362vIRneOqgy7BOQ8CScg,575
24
- rowan/workflows/descriptors.py,sha256=MFxnOtcCsHb5bYLY2avhMQrFJ2SFqiE0_jvtfR_6BMM,2317
25
- rowan/workflows/docking.py,sha256=ozfx4e3FglSsaNrgKQAdNUGYIIgcZhtzGsnfRS63_N4,7239
26
- rowan/workflows/double_ended_ts_search.py,sha256=DHQUSRxQAU1kw0vvcS598eL0IgTLE0Z3MOxqLG4auMw,7659
27
- rowan/workflows/electronic_properties.py,sha256=teIaLMp-JloXB-noCcVIwE_PHm38DDyplMCfZrneWpI,6961
28
- rowan/workflows/fukui.py,sha256=LCbv6fzLO-26C7jwIOmYFv0lZV6SwZFs3u3_pxNPWE8,4965
29
- rowan/workflows/hydrogen_bond_donor_acceptor_strength.py,sha256=UUVY3tMLchJh2X7sAKf--lIgdU8Zow0lvrdAbgHW_QY,4769
30
- rowan/workflows/interaction_energy_decomposition.py,sha256=V-jQyiavMbIykLup_ppHZKoUNz0P8agDv8PDs7PVIUA,5973
31
- rowan/workflows/ion_mobility.py,sha256=FPLwxuOvAPifN4Z3A74Tm6Ph-nn31qAJ-T-_xuXotaA,3546
32
- rowan/workflows/irc.py,sha256=lufoeLdE_su-R-5Ia72hE0WX1pJQhKWcefmH-VfhaGM,7344
33
- rowan/workflows/macropka.py,sha256=3UCHnWPKvQhffgKs2hgk7fGXcIlrfnpFBjYvUlUeen0,5576
34
- rowan/workflows/membrane_permeability.py,sha256=KfM3vrYFAXmK_fYBz3gAPGGcIjYipWAaaXM56QgkkDY,4465
35
- rowan/workflows/msa.py,sha256=rFlgmIXYzusJZ2nE1cNRrNmj8AuTDQg089wSFYrrbLE,4928
36
- rowan/workflows/multistage_optimization.py,sha256=QY5bQoWH6k31yae6XUirWIBCcqyY__m3D2MWvjjd9TQ,6309
37
- rowan/workflows/nmr.py,sha256=eQEFn2ddK_eTo-cPnXcot21DJGaiD8TsBxwZiC5mC58,5036
38
- rowan/workflows/pka.py,sha256=JljFXnyG3N-20sNLrWYwHsKuwPHCz9u8HftzsWkCwyY,7334
39
- rowan/workflows/pose_analysis_md.py,sha256=O1sgaQW2Zjyvh5KfLV6psg5hlQH6pb1fX8AywQn0s1E,9383
40
- rowan/workflows/protein_binder_design.py,sha256=1LAM47qkkfK4sCqin68OGJ-YcMVvfG3CkqJ3NGYSN3Q,8457
41
- rowan/workflows/protein_cofolding.py,sha256=B4AKasQLTH7PmSPXAng34AhHepZRDB1rVTSR3RSrXLA,12865
42
- rowan/workflows/protein_md.py,sha256=j_mbGqGIdogvDM6IbODTX-HCOM4loAJ_5e3qimrxY_0,6874
43
- rowan/workflows/rbfe_graph.py,sha256=dVPi68ddUIUAo4jOMWsJ5SfH_veVLUXtrWU1ROwGG5I,5641
44
- rowan/workflows/redox_potential.py,sha256=nJhhwAi4AhkLKQAJkzBk3PUI3RaYF3BX4TY8tYngwM0,5172
45
- rowan/workflows/relative_binding_free_energy_perturbation.py,sha256=uZAI1CTIWjcZSSys7pjDUiFwd4uWmSO6ASwsmLJPfoI,13309
46
- rowan/workflows/scan.py,sha256=JMFzNQ6u0oKLnejg8vLG2GHgYztpQNbVmMHBuueTpIs,5549
47
- rowan/workflows/solubility.py,sha256=d4Ub_75ExLMnnMNseXQrG0MhBMGyWuSjHAU4mFspZZ0,8447
48
- rowan/workflows/solvent_dependent_conformers.py,sha256=4Bd3lzIlgDRKVKV73Kr6ScewY1MSXHrCu0IM0tDRzIo,6873
49
- rowan/workflows/spin_states.py,sha256=gsK6J5JCHbJxA_5GsRLa8CFxqqS63FjJXYBXqxQweAg,6975
50
- rowan/workflows/strain.py,sha256=RcV4V2qoW0GyWJydgLBsHL8yYob2xSoMfyGOpgVd1t8,5746
51
- rowan/workflows/tautomer_search.py,sha256=Gqlc3W4TvY0EJfdAxSh1_o-o9bjPL4v5SAZZCmqrdTI,4935
52
- rowan_python-3.0.1.dist-info/METADATA,sha256=O9-YUTTRHr7ZJZZ6Q4x73hIS26GUPfm_UzEH_Adq0Lk,1600
53
- rowan_python-3.0.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
54
- rowan_python-3.0.1.dist-info/licenses/LICENSE,sha256=i05z7xEhyrg6f8j0lR3XYjShnF-MJGFQ-DnpsZ8yiVI,1084
55
- rowan_python-3.0.1.dist-info/RECORD,,