JGonera has submitted this change and it was merged.
Change subject: Add optional config override parameter
......................................................................
Add optional config override parameter
This helps when you run the dashboard locally and want to overwrite DB
config.
Also, use argparse and don't use global folder variable.
Change-Id: I6ca8fd97c64df02c1336978f8c30346adb863e66
---
M generate.py
1 file changed, 21 insertions(+), 16 deletions(-)
Approvals:
Yuvipanda: Looks good to me, approved
JGonera: Verified; Looks good to me, approved
diff --git a/generate.py b/generate.py
index 7aeb743..95dfe9f 100644
--- a/generate.py
+++ b/generate.py
@@ -5,6 +5,7 @@
import io
import os
import sys
+import argparse
import MySQLdb
import jinja2
@@ -14,13 +15,19 @@
class DataGenerator(object):
"""Executes queries and generates CSV reports based on YAML configs."""
- def __init__(self, folder_path):
+ def __init__(self, folder, config_override=None):
"""Reads configuration 'config.yaml' in `folder_path`."""
- self.folder_path = folder_path
- config_file_path = os.path.join(folder_path, 'config.yaml')
- with io.open(config_file_path, encoding='utf-8') as config_file:
- self.config = yaml.load(config_file)
+ self.folder = folder
+ self.config = {}
self.connections = {}
+ config_main = os.path.join(folder, 'config.yaml')
+ self.load_config(config_main)
+ if config_override:
+ self.load_config(config_override)
+
+ def load_config(self, config_path):
+ with io.open(config_path, encoding='utf-8') as config_file:
+ self.config.update(yaml.load(config_file))
def make_connection(self, name):
"""Opens a connection to a database using parameters specified in YAML
@@ -77,17 +84,15 @@
def execute(self):
"""Generates a CSV report by executing Python code and SQL queries."""
- global folder
-
for key, value in self.config['graphs'].iteritems():
# Look for the sql first, then python
db_name = value.get('db', self.config['defaults']['db'])
- if os.path.exists(os.path.join(folder, key + '.sql')):
- file_path = os.path.join(folder, key + '.sql')
+ if os.path.exists(os.path.join(self.folder, key + '.sql')):
+ file_path = os.path.join(self.folder, key + '.sql')
headers, rows = self.execute_sql(file_path, db_name)
- elif os.path.exists(os.path.join(folder, key + '.py')):
- file_path = os.path.join(folder, key + '.py')
+ elif os.path.exists(os.path.join(self.folder, key + '.py')):
+ file_path = os.path.join(self.folder, key + '.py')
headers, rows = self.execute_python(key, file_path)
else:
raise ValueError("Can not find SQL or Python for %s" % key)
@@ -104,10 +109,10 @@
if __name__ == "__main__":
- if len(sys.argv) != 2: # FIXME: argparse please
- print "Usage: generate.py <folder with config.yaml and *.sql files>"
- sys.exit(1)
+ parser = argparse.ArgumentParser(description='Generate data for the mobile
dashboard.')
+ parser.add_argument('folder', help='folder with config.yaml and *.sql
files')
+ parser.add_argument('-c', '--config-override', help='config.yaml override')
+ args = parser.parse_args()
- folder = sys.argv[1]
- dg = DataGenerator(folder)
+ dg = DataGenerator(**vars(args))
dg.execute()
--
To view, visit https://gerrit.wikimedia.org/r/58246
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I6ca8fd97c64df02c1336978f8c30346adb863e66
Gerrit-PatchSet: 3
Gerrit-Project: analytics/limn-mobile-data
Gerrit-Branch: master
Gerrit-Owner: JGonera <[email protected]>
Gerrit-Reviewer: JGonera <[email protected]>
Gerrit-Reviewer: Yuvipanda <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits