Skip to content

Commit 449329c

Browse files
committed
Add defaults for demo purposes
1 parent cda91ba commit 449329c

File tree

3 files changed

+126
-1
lines changed

3 files changed

+126
-1
lines changed

patchwork/steps/ManageEngine/ManageEngineStep.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,18 @@
55
)
66
from patchwork.common.tools.api_tool import APIRequestTool
77
from patchwork.step import Step
8-
from patchwork.steps.ManageEngine.typed import ManageEngineInputs, ManageEngineOutputs
8+
9+
from .demo import get_demo_defaults
10+
from .typed import ManageEngineInputs, ManageEngineOutputs
911

1012

1113
class ManageEngineStep(
1214
Step, input_class=ManageEngineInputs, output_class=ManageEngineOutputs
1315
):
1416
def __init__(self, inputs: ManageEngineInputs):
17+
# ! TODO: Remove this after demo
18+
inputs["access_token"] = get_demo_defaults().get("access_token")
19+
1520
super().__init__(inputs)
1621

1722
if not inputs.get("access_token"):
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
from datetime import datetime, timedelta
2+
from pathlib import Path
3+
from typing import Optional
4+
5+
import requests
6+
import yaml
7+
8+
from patchwork.logger import logger
9+
10+
11+
demo_defaults: Optional[dict] = None
12+
13+
14+
def get_demo_defaults() -> dict:
15+
global demo_defaults
16+
if demo_defaults is None:
17+
demo_defaults = _load_demo_defaults()
18+
19+
if not demo_defaults.get("access_token"):
20+
logger.debug("No access token found, getting a new one")
21+
get_access_token()
22+
elif (
23+
demo_defaults.get("expires_at")
24+
and datetime.now() + timedelta(minutes=5) > demo_defaults["expires_at"]
25+
):
26+
logger.debug("Token expired, refreshing")
27+
refresh_access_token()
28+
29+
return demo_defaults
30+
31+
32+
def _load_demo_defaults() -> dict:
33+
"""Loads demo defaults from the YAML file."""
34+
try:
35+
with open(Path(__file__).parent / "demo_defaults.yml", "r") as f:
36+
defaults = yaml.safe_load(f)
37+
# Convert expires_at to datetime object if it exists and is a string
38+
if isinstance(defaults.get("expires_at"), str):
39+
defaults["expires_at"] = datetime.fromisoformat(defaults["expires_at"])
40+
return defaults
41+
except FileNotFoundError:
42+
logger.warning("demo_defaults.yml not found. Returning empty dict.")
43+
return {}
44+
45+
46+
def save_demo_defaults():
47+
global demo_defaults
48+
_save_demo_defaults(demo_defaults)
49+
50+
51+
def _save_demo_defaults(data: dict):
52+
"""Saves demo defaults to the YAML file."""
53+
with open(Path(__file__).parent / "demo_defaults.yml", "w") as f:
54+
yaml.dump(data, f)
55+
56+
57+
def get_access_token():
58+
global demo_defaults
59+
if not demo_defaults or not demo_defaults.get("grant_token"):
60+
raise ValueError("grant_token is not set")
61+
62+
url = "https://accounts.zoho.com/oauth/v2/token"
63+
data = {
64+
"grant_type": "authorization_code",
65+
"code": demo_defaults["grant_token"],
66+
"client_id": demo_defaults["client_id"],
67+
"client_secret": demo_defaults["client_secret"],
68+
"redirect_uri": "https://www.zoho.com",
69+
}
70+
try:
71+
response = requests.post(url, data=data)
72+
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
73+
res_data = response.json()
74+
demo_defaults["access_token"] = res_data["access_token"]
75+
demo_defaults["expires_at"] = datetime.now() + timedelta(
76+
seconds=int(res_data["expires_in"])
77+
)
78+
demo_defaults["refresh_token"] = res_data["refresh_token"]
79+
demo_defaults["grant_token"] = None
80+
save_demo_defaults()
81+
logger.debug("Access token retrieved and demo_defaults updated")
82+
return True
83+
except requests.exceptions.RequestException as e:
84+
logger.error(f"Error getting access token: {e}")
85+
return False
86+
87+
88+
def refresh_access_token():
89+
global demo_defaults
90+
if not demo_defaults:
91+
raise ValueError("demo_defaults is not initialized")
92+
93+
url = "https://accounts.zoho.com/oauth/v2/token"
94+
data = {
95+
"grant_type": "refresh_token",
96+
"refresh_token": demo_defaults["refresh_token"],
97+
"client_id": demo_defaults["client_id"],
98+
"client_secret": demo_defaults["client_secret"],
99+
"redirect_uri": "https://www.zoho.com",
100+
}
101+
try:
102+
response = requests.post(url, data=data)
103+
response.raise_for_status()
104+
res_data = response.json()
105+
demo_defaults["access_token"] = res_data["access_token"]
106+
demo_defaults["expires_at"] = datetime.now() + timedelta(
107+
seconds=int(res_data["expires_in"])
108+
)
109+
save_demo_defaults()
110+
logger.debug("Access token refreshed and demo_defaults updated")
111+
return True
112+
except requests.exceptions.RequestException as e:
113+
logger.error(f"Error refreshing access token: {e}")
114+
return False
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
access_token: 1000.aea25f21668f7f25941b2ad7c5f6b662.1ba06be53aaf2dc1a8ddf23569b51d3b
2+
client_id: 1000.BZOK84OAU6LL168UUUXC19D9D1TYWP
3+
client_secret: 0bd251ab758c074a4016b49211c734cbad2d205cf0
4+
expires_at: 2025-03-05 18:09:43.659864
5+
grant_token: null
6+
refresh_token: 1000.29d59726eae5b800e14709baa6d90242.6066775c3a262ad3a42cc3ff9e3609a2

0 commit comments

Comments
 (0)