JGonera has submitted this change and it was merged.

Change subject: Generate JSON files in datasources using templates
......................................................................


Generate JSON files in datasources using templates

That allows setting custom URL for data sources (output.url in
config.yaml).

Change-Id: I267961555de8608d7bb70aa74903e62d6025a7ac
---
M .gitignore
M generate.py
M mobile/config.yaml
R mobile/datagenerators/30-day-uploads.sql
R mobile/datagenerators/alltime-numbers.py
R mobile/datagenerators/cancelled-uploads.sql
R mobile/datagenerators/deleted-uploads.py
R mobile/datagenerators/error-correction.py
R mobile/datagenerators/error-uploads.sql
R mobile/datagenerators/no-cats.sql
R mobile/datagenerators/performance-rendering.sql
R mobile/datagenerators/share-attempts.sql
R mobile/datagenerators/successful-logins.sql
R mobile/datagenerators/successful-uploads.sql
R mobile/datagenerators/unique-uploaders.sql
R mobile/datagenerators/uploaders-experience.py
R mobile/datasources/30-day-uploads.json
R mobile/datasources/cancelled-uploads.json
R mobile/datasources/deleted-uploads.json
R mobile/datasources/error-uploads.json
R mobile/datasources/no-cats.json
R mobile/datasources/performance-rendering.json
R mobile/datasources/share-attempts.json
R mobile/datasources/successful-logins.json
R mobile/datasources/successful-uploads.json
R mobile/datasources/unique-uploaders.json
26 files changed, 51 insertions(+), 22 deletions(-)

Approvals:
  JGonera: Verified; Looks good to me, approved



diff --git a/.gitignore b/.gitignore
index c07d99c..51eab90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
-env/
-datafiles/
+/env/
+/datafiles/
+/datasources/
 .output
 *.swp
 *.pyc
diff --git a/generate.py b/generate.py
index 95dfe9f..7ad1600 100644
--- a/generate.py
+++ b/generate.py
@@ -82,30 +82,57 @@
         module = imp.load_source(name, file_path)
         return module.execute(self)
 
-    def execute(self):
+    def generate_datasources(self):
+        """Generates JSON files in datasources."""
+        output_path = 'datasources'
+        if not os.path.exists(output_path):
+            os.makedirs(output_path)
+
+        for key in self.config['graphs'].iterkeys():
+            filename = key + '.json'
+            print "Generating %s" % (filename)
+            template_filename = os.path.join(self.folder, 'datasources', 
filename)
+
+            if os.path.exists(template_filename):
+                output_filename = os.path.join(output_path, filename)
+
+                with io.open(template_filename, encoding='utf-8') as 
template_file:
+                    content = self.render(template_file.read())
+
+                with open(output_filename, 'wb') as output_file:
+                    output_file.write(content)
+
+    def generate_datafiles(self):
         """Generates a CSV report by executing Python code and SQL queries."""
+        output_path = self.config['output']['path']
+        if not os.path.exists(output_path):
+            os.makedirs(output_path)
+
         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(self.folder, key + '.sql')):
-                file_path = os.path.join(self.folder, key + '.sql')
+            print "Generating %s (%s)" % (value['title'], key)
+
+            # Look for the sql first, then python
+            if os.path.exists(os.path.join(self.folder, 'datagenerators', key 
+ '.sql')):
+                file_path = os.path.join(self.folder, 'datagenerators', key + 
'.sql')
                 headers, rows = self.execute_sql(file_path, db_name)
-            elif os.path.exists(os.path.join(self.folder, key + '.py')):
-                file_path = os.path.join(self.folder, key + '.py')
+            elif os.path.exists(os.path.join(self.folder, 'datagenerators', 
key + '.py')):
+                file_path = os.path.join(self.folder, 'datagenerators', key + 
'.py')
                 headers, rows = self.execute_python(key, file_path)
             else:
                 raise ValueError("Can not find SQL or Python for %s" % key)
 
-            print "Generating %s (%s)" % (value['title'], file_path)
-
-            output_path = self.config['output']['path']
             csv_filename = os.path.join(output_path, key + '.csv')
 
             with open(csv_filename, 'wb') as csv_file:
                 writer = csv.writer(csv_file)
                 writer.writerow(headers)
                 writer.writerows(rows)
+
+    def generate(self):
+        self.generate_datasources()
+        self.generate_datafiles()
 
 
 if __name__ == "__main__":
@@ -115,4 +142,4 @@
     args = parser.parse_args()
 
     dg = DataGenerator(**vars(args))
-    dg.execute()
+    dg.generate()
diff --git a/mobile/config.yaml b/mobile/config.yaml
index 3daa6b8..b31c8b7 100644
--- a/mobile/config.yaml
+++ b/mobile/config.yaml
@@ -20,6 +20,7 @@
         running_average: 30
 output:
     path: /a/limn-public-data/mobile/datafiles
+    url: http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles
 defaults:
     db: el
 graphs:
diff --git a/mobile/30-day-uploads.sql 
b/mobile/datagenerators/30-day-uploads.sql
similarity index 100%
rename from mobile/30-day-uploads.sql
rename to mobile/datagenerators/30-day-uploads.sql
diff --git a/mobile/alltime-numbers.py 
b/mobile/datagenerators/alltime-numbers.py
similarity index 100%
rename from mobile/alltime-numbers.py
rename to mobile/datagenerators/alltime-numbers.py
diff --git a/mobile/cancelled-uploads.sql 
b/mobile/datagenerators/cancelled-uploads.sql
similarity index 100%
rename from mobile/cancelled-uploads.sql
rename to mobile/datagenerators/cancelled-uploads.sql
diff --git a/mobile/deleted-uploads.py 
b/mobile/datagenerators/deleted-uploads.py
similarity index 100%
rename from mobile/deleted-uploads.py
rename to mobile/datagenerators/deleted-uploads.py
diff --git a/mobile/error-correction.py 
b/mobile/datagenerators/error-correction.py
similarity index 100%
rename from mobile/error-correction.py
rename to mobile/datagenerators/error-correction.py
diff --git a/mobile/error-uploads.sql b/mobile/datagenerators/error-uploads.sql
similarity index 100%
rename from mobile/error-uploads.sql
rename to mobile/datagenerators/error-uploads.sql
diff --git a/mobile/no-cats.sql b/mobile/datagenerators/no-cats.sql
similarity index 100%
rename from mobile/no-cats.sql
rename to mobile/datagenerators/no-cats.sql
diff --git a/mobile/performance-rendering.sql 
b/mobile/datagenerators/performance-rendering.sql
similarity index 100%
rename from mobile/performance-rendering.sql
rename to mobile/datagenerators/performance-rendering.sql
diff --git a/mobile/share-attempts.sql 
b/mobile/datagenerators/share-attempts.sql
similarity index 100%
rename from mobile/share-attempts.sql
rename to mobile/datagenerators/share-attempts.sql
diff --git a/mobile/successful-logins.sql 
b/mobile/datagenerators/successful-logins.sql
similarity index 100%
rename from mobile/successful-logins.sql
rename to mobile/datagenerators/successful-logins.sql
diff --git a/mobile/successful-uploads.sql 
b/mobile/datagenerators/successful-uploads.sql
similarity index 100%
rename from mobile/successful-uploads.sql
rename to mobile/datagenerators/successful-uploads.sql
diff --git a/mobile/unique-uploaders.sql 
b/mobile/datagenerators/unique-uploaders.sql
similarity index 100%
rename from mobile/unique-uploaders.sql
rename to mobile/datagenerators/unique-uploaders.sql
diff --git a/mobile/uploaders-experience.py 
b/mobile/datagenerators/uploaders-experience.py
similarity index 100%
rename from mobile/uploaders-experience.py
rename to mobile/datagenerators/uploaders-experience.py
diff --git a/datasources/30-day-uploads.json 
b/mobile/datasources/30-day-uploads.json
similarity index 87%
rename from datasources/30-day-uploads.json
rename to mobile/datasources/30-day-uploads.json
index cd3092a..22c226a 100644
--- a/datasources/30-day-uploads.json
+++ b/mobile/datasources/30-day-uploads.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/30-day-uploads.csv";,
+    "url": "{{ output.url }}/30-day-uploads.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/cancelled-uploads.json 
b/mobile/datasources/cancelled-uploads.json
similarity index 86%
rename from datasources/cancelled-uploads.json
rename to mobile/datasources/cancelled-uploads.json
index 29664f1..646676f 100644
--- a/datasources/cancelled-uploads.json
+++ b/mobile/datasources/cancelled-uploads.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/cancelled-uploads.csv";,
+    "url": "{{ output.url }}/cancelled-uploads.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/deleted-uploads.json 
b/mobile/datasources/deleted-uploads.json
similarity index 86%
rename from datasources/deleted-uploads.json
rename to mobile/datasources/deleted-uploads.json
index e1e5bfe..54e78ce 100644
--- a/datasources/deleted-uploads.json
+++ b/mobile/datasources/deleted-uploads.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/deleted-uploads.csv";,
+    "url": "{{ output.url }}/deleted-uploads.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/error-uploads.json 
b/mobile/datasources/error-uploads.json
similarity index 88%
rename from datasources/error-uploads.json
rename to mobile/datasources/error-uploads.json
index 0fa843a..4233c46 100644
--- a/datasources/error-uploads.json
+++ b/mobile/datasources/error-uploads.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/error-uploads.csv";,
+    "url": "{{ output.url }}/error-uploads.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/no-cats.json b/mobile/datasources/no-cats.json
similarity index 84%
rename from datasources/no-cats.json
rename to mobile/datasources/no-cats.json
index 3e09cee..3d3b875 100644
--- a/datasources/no-cats.json
+++ b/mobile/datasources/no-cats.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/no-cats.csv";,
+    "url": "{{ output.url }}/no-cats.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/performance-rendering.json 
b/mobile/datasources/performance-rendering.json
similarity index 85%
rename from datasources/performance-rendering.json
rename to mobile/datasources/performance-rendering.json
index 87f54a6..f624b33 100644
--- a/datasources/performance-rendering.json
+++ b/mobile/datasources/performance-rendering.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/performance-rendering.csv";,
+    "url": "{{ output.url }}/performance-rendering.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/share-attempts.json 
b/mobile/datasources/share-attempts.json
similarity index 86%
rename from datasources/share-attempts.json
rename to mobile/datasources/share-attempts.json
index d79d425..d0e16d3 100644
--- a/datasources/share-attempts.json
+++ b/mobile/datasources/share-attempts.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/share-attempts.csv";,
+    "url": "{{ output.url }}/share-attempts.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/successful-logins.json 
b/mobile/datasources/successful-logins.json
similarity index 86%
rename from datasources/successful-logins.json
rename to mobile/datasources/successful-logins.json
index d419fba..209e953 100644
--- a/datasources/successful-logins.json
+++ b/mobile/datasources/successful-logins.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/successful-logins.csv";,
+    "url": "{{ output.url }}/successful-logins.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/successful-uploads.json 
b/mobile/datasources/successful-uploads.json
similarity index 87%
rename from datasources/successful-uploads.json
rename to mobile/datasources/successful-uploads.json
index ddd0a8a..8a145e1 100644
--- a/datasources/successful-uploads.json
+++ b/mobile/datasources/successful-uploads.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/successful-uploads.csv";,
+    "url": "{{ output.url }}/successful-uploads.csv",
     "notes": "",
     "format": "csv",
     "slug": null,
diff --git a/datasources/unique-uploaders.json 
b/mobile/datasources/unique-uploaders.json
similarity index 87%
rename from datasources/unique-uploaders.json
rename to mobile/datasources/unique-uploaders.json
index a4f4d10..ea67e7c 100644
--- a/datasources/unique-uploaders.json
+++ b/mobile/datasources/unique-uploaders.json
@@ -5,7 +5,7 @@
         "step": "1d",
         "end": "2013/03/19"
     },
-    "url": 
"http://stat1001.wikimedia.org/limn-public-data/mobile/datafiles/unique-uploaders.csv";,
+    "url": "{{ output.url }}/unique-uploaders.csv",
     "notes": "",
     "format": "csv",
     "slug": null,

-- 
To view, visit https://gerrit.wikimedia.org/r/60608
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I267961555de8608d7bb70aa74903e62d6025a7ac
Gerrit-PatchSet: 5
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