Skip to content

Commit 1bdfffc

Browse files
committed
refactor io_helper
1 parent 9a9b9b0 commit 1bdfffc

File tree

3 files changed

+112
-34
lines changed

3 files changed

+112
-34
lines changed

python-mip/io_helper/io_helper/io_helper.py

Lines changed: 110 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,6 @@
1818
logging.basicConfig(level=logging.INFO)
1919

2020

21-
# Get input DB information
22-
parsed_in_jdbc_url = urlparse(urlparse(os.environ['IN_JDBC_URL']).path)
23-
in_jdbc_url = parsed_in_jdbc_url.scheme + \
24-
"://" + os.environ['IN_JDBC_USER'] + ":" + os.environ['IN_JDBC_PASSWORD'] + \
25-
"@" + parsed_in_jdbc_url.netloc + parsed_in_jdbc_url.path
26-
27-
28-
# Get output DB information
29-
parsed_out_jdbc_url = urlparse(urlparse(os.environ['OUT_JDBC_URL']).path)
30-
out_jdbc_url = parsed_out_jdbc_url.scheme + \
31-
"://" + os.environ['OUT_JDBC_USER'] + ":" + os.environ['OUT_JDBC_PASSWORD'] + \
32-
"@" + parsed_out_jdbc_url.netloc + parsed_out_jdbc_url.path
33-
34-
35-
# Get variables meta-data
36-
metadata = json.loads(os.environ['PARAM_meta'])
37-
38-
# Get SQL query
39-
query = os.environ['PARAM_query']
40-
41-
# Get variables code
42-
var = os.environ['PARAM_variables']
43-
covars = list(filter(None, re.split(', |,', os.environ['PARAM_covariables']))) + \
44-
list(filter(None, re.split(', |,', os.environ['PARAM_grouping'])))
45-
46-
4721
# *********************************************************************************************************************
4822
# Public functions
4923
# *********************************************************************************************************************
@@ -53,10 +27,14 @@ def fetch_data():
5327
Get all the needed algorithm inputs (data, algorithm parameters, etc).
5428
The inputs format is described in the README file.
5529
"""
56-
engine = sqlalchemy.create_engine(in_jdbc_url)
57-
df = pandas.read_sql_query(query, engine)
30+
engine = sqlalchemy.create_engine(_get_input_jdbc_url())
31+
df = pandas.read_sql_query(_get_query(), engine)
5832
raw_data = df.to_dict('list')
5933

34+
var = _get_var()
35+
covars = _get_covars()
36+
metadata = _get_metadata()
37+
6038
data = dict()
6139
data['dependent'] = [_format_variable(var, raw_data, metadata)]
6240
data['independent'] = [_format_variable(v, raw_data, metadata) for v in covars]
@@ -75,17 +53,17 @@ def save_results(pfa, error, shape):
7553
:param error: Error message (if any)
7654
:param shape: Result shape. For example: pfa_json.
7755
"""
78-
engine = sqlalchemy.create_engine(out_jdbc_url)
56+
engine = sqlalchemy.create_engine(_get_output_jdbc_url())
7957

8058
sql = sqlalchemy.text("INSERT INTO job_result VALUES(:job_id, :node, :date, :pfa, :error, :shape, :function)")
8159
engine.execute(sql,
82-
job_id=os.environ['JOB_ID'],
83-
node=os.environ['NODE'],
60+
job_id=_get_job_id(),
61+
node=_get_node(),
8462
date=datetime.datetime.now(),
8563
pfa=pfa,
8664
error=error,
8765
shape=shape,
88-
function=os.environ['FUNCTION'])
66+
function=_get_function())
8967

9068

9169
# *********************************************************************************************************************
@@ -118,3 +96,103 @@ def _get_type(var_code, vars_meta):
11896
logging.warning("Cannot read meta-data for variable %s !", var_code)
11997
type_info['name'] = 'unknown'
12098
return type_info
99+
100+
101+
def _get_input_jdbc_url():
102+
try:
103+
raw_url = os.environ['IN_JDBC_URL']
104+
except KeyError:
105+
logging.warning("Cannot read input JDBC URL from environment variable IN_JDBC_URL")
106+
raw_url = ""
107+
try:
108+
user = os.environ['IN_JDBC_USER']
109+
except KeyError:
110+
logging.warning("Cannot read input JDBC user from environment variable IN_JDBC_USER")
111+
user = ""
112+
try:
113+
passwd = os.environ['IN_JDBC_PASSWORD']
114+
except KeyError:
115+
logging.warning("Cannot read input JDBC password from environment variable IN_JDBC_PASSWORD")
116+
passwd = ""
117+
parsed_in_jdbc_url = urlparse(urlparse(raw_url).path)
118+
scheme = parsed_in_jdbc_url.scheme
119+
netloc = parsed_in_jdbc_url.netloc
120+
path = parsed_in_jdbc_url.path
121+
return scheme + "://" + user + ":" + passwd + "@" + netloc + path
122+
123+
124+
def _get_output_jdbc_url():
125+
try:
126+
raw_url = os.environ['OUT_JDBC_URL']
127+
except KeyError:
128+
logging.warning("Cannot read input JDBC URL from environment variable OUT_JDBC_URL")
129+
raw_url = ""
130+
try:
131+
user = os.environ['OUT_JDBC_USER']
132+
except KeyError:
133+
logging.warning("Cannot read input JDBC user from environment variable OUT_JDBC_USER")
134+
user = ""
135+
try:
136+
passwd = os.environ['OUT_JDBC_PASSWORD']
137+
except KeyError:
138+
logging.warning("Cannot read input JDBC password from environment variable OUT_JDBC_PASSWORD")
139+
passwd = ""
140+
parsed_in_jdbc_url = urlparse(urlparse(raw_url).path)
141+
scheme = parsed_in_jdbc_url.scheme
142+
netloc = parsed_in_jdbc_url.netloc
143+
path = parsed_in_jdbc_url.path
144+
return scheme + "://" + user + ":" + passwd + "@" + netloc + path
145+
146+
147+
def _get_metadata():
148+
try:
149+
return json.loads(os.environ['PARAM_meta'])
150+
except KeyError:
151+
logging.warning("Cannot read metadata from environment variable PARAM_meta")
152+
153+
154+
def _get_query():
155+
try:
156+
return os.environ['PARAM_query']
157+
except KeyError:
158+
logging.warning("Cannot read SQL query from environment variable PARAM_query")
159+
160+
161+
def _get_var():
162+
try:
163+
return os.environ['PARAM_variables']
164+
except KeyError:
165+
logging.warning("Cannot read dependent variables from environment variable PARAM_variables")
166+
167+
168+
def _get_covars():
169+
try:
170+
covars = os.environ['PARAM_covariables']
171+
except KeyError:
172+
covars = ""
173+
try:
174+
gvars = os.environ['PARAM_grouping']
175+
except KeyError:
176+
gvars = ""
177+
return list(filter(None, re.split(', |,', covars))) + list(filter(None, re.split(', |,', gvars)))
178+
179+
180+
def _get_job_id():
181+
try:
182+
return os.environ['JOB_ID']
183+
except KeyError:
184+
logging.warning("Cannot read job ID from environment variable JOB_ID")
185+
186+
187+
def _get_node():
188+
try:
189+
return os.environ['NODE']
190+
except KeyError:
191+
logging.warning("Cannot read node from environment variable NODE")
192+
193+
194+
def _get_function():
195+
try:
196+
return os.environ['FUNCTION']
197+
except KeyError:
198+
logging.warning("Cannot read function from environment variable FUNCTION")

python-mip/io_helper/setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[metadata]
2-
version = 0.2.1
2+
version = 0.2.2
33
long_description = file: README.rst

python-mip/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
io_helper
1+
io_helper==0.2.2

0 commit comments

Comments
 (0)