# Execute API of DAS analysis project Job with environment variables
## 目標
* 希望每次都可以輸入參數給 Notebook/refinery Job
* 希望可透過API的方式執行 Notebook/refinery Job
## Create Notebook
* 得到輸入參數
```python
import os
myenv1 = os.getenv('MYENV1', default='no MYENV1')
myenv2 = os.getenv('MYENV2', default='no MYENV2')
myenv3 = os.getenv('MYENV3', default='no MYENV3')
print(myenv1)
print(myenv2)
print(myenv3)
# -output-
# no MYENV1
# no MYENV2
# no MYENV3
```
* 將輸入參數轉換成dataframe格式
```python
import pandas as pd
df = pd.DataFrame({'myenv1' : [myenv1], 'myenv2' : [myenv2], 'myenv3' : [myenv3]})
df
# -output-
# myenv1 myenv2 myenv3
# no MYENV1 no MYENV2 no MYENV3
```
* 將dataframe輸出為一csv檔案, 並加入timestamp作為檔名
```python
from project_lib import Project
project = Project.access()
import datetime
now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime('%Y%m%d_%H%M%S')
project.save_data("jov_env_test_"+now+".csv", df.to_csv(),overwrite=True)
```
## Create Job
* create job

* 建立名稱

* 輸入參數

## Run job
* Run

* 執行完成

* 下次可更新參數

## 執行結果
* 執行結果,位於data asset

* 本範例將input放入欄位中

## 外部使用API來執行此Job
### 必須先在project中取得project ID 以及個人的token
```python
import os
os.environ['PROJECT_ID']
token = os.environ['USER_ACCESS_TOKEN']
```
## 前置設定
* Authentication
```python
import requests
url='https://startup.das.twcc.ai'
project_id = '<your project ID>'
token='<your token>'
headers = {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
```
* 取得job ID
```python
response = requests.get(url+"/v2/jobs?project_id="+project_id, headers=headers, verify=False).json()
response
```
{'total_rows': 1,
'results': [{'metadata': {'name': 'env_var_input',
'description': '',
'asset_id': <font color="#f00">'e72910a2-6489-4776-9e2c-0292f442c865'</font>,
'owner_id': '1000331007',
'version': 0},
'entity': {'job': {'asset_ref_type': 'notebook',
'configuration': {'env_id': 'jupconda221-48c31f29-0ffe-482f-b863-8914e4e3c4ab',
'file_ref': '',
'entrypoint': '',
'run_results': 'log_and_new_notebook',
'env_type': 'notebook',
'env_variables': ['MYENV1=I', 'MYENV2=love', 'MYENV3=NCHC']},
'last_run_initiator': 'None',
'last_run_time': '',
'last_run_status': 'None',
'last_run_status_timestamp': 0,
'future_scheduled_runs': [],
'enable_notifications': True,
'project_name': 'A+DAS',
'asset_ref': 'db54743a-093e-435d-bce3-05d307d1b303'}}}]}
## 透過外部執行Job
* 設定job ID
```python
job_run_id = response['metadata']['asset_id']
job_run_id
```
* 輸入參數設定
```python
jobrunpost = {
"job_run": {
"configuration" : {
"env_variables" : ["MYENV1=ARGS","MYENV2=from","MYENV3=TWCC"]
}
}
}
```
* call API
```python
response = requests.post(url+"/v2/jobs/"+job_id+"/runs?project_id="+project_id, headers=headers, json=jobrunpost, verify=False).json()
```
## 執行結果
* 執行完成,可在Job run detail看到log

* 最後也有產生一個檔案,內容為剛剛輸入的資料
