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

Reply via email to