Skip to content

Commit 2e566f4

Browse files
committed
update: patch property value
1 parent ad25b9d commit 2e566f4

2 files changed

Lines changed: 62 additions & 5 deletions

File tree

other/materials_designer/workflows/valence_band_offset.ipynb

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
"os.environ[\"API_PORT\"] = \"3000\"\n",
168168
"os.environ[\"API_SECURE\"] = \"false\"\n",
169169
"os.environ[\"API_HOST\"] = \"localhost\"\n",
170-
"os.environ[\"OIDC_ACCESS_TOKEN\"] = \"KD720wTfR58_CBHZjJk2oBvOwSbqlnoPYXBJdwKV1yw\""
170+
"# os.environ[\"OIDC_ACCESS_TOKEN\"] = \"KD720wTfR58_CBHZjJk2oBvOwSbqlnoPYXBJdwKV1yw\""
171171
]
172172
},
173173
{
@@ -660,7 +660,9 @@
660660
" job_id,\n",
661661
" property_name=PropertyName.scalar.valence_band_offset.value,\n",
662662
")[0]\n",
663-
"print(f\"Valence Band Offset (VBO) value: {vbo_value['value']:.3f} eV\")\n",
663+
"workflow_vbo_value = float(vbo_value[\"value\"])\n",
664+
"display_vbo_value = workflow_vbo_value\n",
665+
"print(f\"Workflow Valence Band Offset (VBO) value: {workflow_vbo_value:.3f} eV\")\n",
664666
"\n",
665667
"avg_esp_unit_ids = {}\n",
666668
"for subworkflow in workflow[\"subworkflows\"]:\n",
@@ -685,7 +687,8 @@
685687
" unit_id=unit_id,\n",
686688
" )[0]\n",
687689
" avg_esp_results[subworkflow_name] = avg_esp_data\n",
688-
" visualize_properties(avg_esp_data, title=subworkflow_name)\n"
690+
" visualize_properties(avg_esp_data, title=subworkflow_name)\n",
691+
"\n"
689692
]
690693
},
691694
{
@@ -707,6 +710,8 @@
707710
"import matplotlib.pyplot as plt\n",
708711
"import numpy as np\n",
709712
"from scipy.stats import linregress\n",
713+
"from mat3ra.prode import PropertyName\n",
714+
"from utils.api import get_property_holder_for_job, update_property_holder_value\n",
710715
"\n",
711716
"interface_profile = avg_esp_results[\"BS + Avg ESP (Interface)\"]\n",
712717
"left_profile = avg_esp_results[\"BS + Avg ESP (interface left)\"]\n",
@@ -797,8 +802,18 @@
797802
"plt.show()\n",
798803
"\n",
799804
"if IS_POLAR:\n",
800-
" pass\n",
801-
" # we need to update the value for VBO in the results of the job\n"
805+
" display_vbo_value = polar_vbo\n",
806+
" vbo_value[\"value\"] = polar_vbo\n",
807+
" vbo_property_holder = get_property_holder_for_job(\n",
808+
" client,\n",
809+
" job_id,\n",
810+
" PropertyName.scalar.valence_band_offset.value,\n",
811+
" )\n",
812+
" update_property_holder_value(client, vbo_property_holder[\"_id\"], polar_vbo)\n",
813+
" print(f\"Persisted displayed Valence Band Offset (VBO) value: {display_vbo_value:.3f} eV\")\n",
814+
"else:\n",
815+
" print(f\"Displayed Valence Band Offset (VBO) value: {display_vbo_value:.3f} eV\")\n",
816+
"\n"
802817
]
803818
},
804819
{

utils/api.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,48 @@ def get_properties_for_job(client: APIClient, job_id: str, property_name: Option
200200
return [{**prop, "fermiEnergy": fermi_energy} for prop in properties]
201201

202202

203+
def get_property_holder_for_job(
204+
client: APIClient, job_id: str, property_name: str, unit_id: Optional[str] = None
205+
) -> dict:
206+
"""
207+
Fetch the first full property holder for a job/property pair.
208+
209+
Args:
210+
client (APIClient): API client instance.
211+
job_id (str): Job ID.
212+
property_name (str): Property name.
213+
unit_id (str, optional): Unit flowchart ID.
214+
215+
Returns:
216+
dict: Full property holder document.
217+
"""
218+
query = {
219+
"source.info.jobId": job_id,
220+
"data.name": property_name,
221+
}
222+
if unit_id:
223+
query["source.info.unitId"] = unit_id
224+
holders = client.properties.list(query=query)
225+
if not holders:
226+
raise ValueError(f"Property '{property_name}' not found for job '{job_id}'")
227+
return holders[0]
228+
229+
230+
def update_property_holder_value(client: APIClient, property_holder_id: str, value: float) -> dict:
231+
"""
232+
Update a scalar property's data.value.
233+
234+
Args:
235+
client (APIClient): API client instance.
236+
property_holder_id (str): Property holder ID.
237+
value (float): New scalar value.
238+
239+
Returns:
240+
dict: Server response payload.
241+
"""
242+
return client.properties.update(property_holder_id, {"$set": {"data.value": value}})
243+
244+
203245
def create_job(
204246
api_client: APIClient,
205247
materials: List[Union[dict, Material]],

0 commit comments

Comments
 (0)