SF.net SVN: gar:[23335] csw/mgar/gar/v2/lib/python/package_age.py

wahwah at users.sourceforge.net wahwah at users.sourceforge.net
Sat Apr 5 22:05:53 CEST 2014


Revision: 23335
          http://sourceforge.net/p/gar/code/23335
Author:   wahwah
Date:     2014-04-05 20:05:52 +0000 (Sat, 05 Apr 2014)
Log Message:
-----------
package-age: A toy program to get package ages

Talks to the REST interface, gets catalog timing data and writes it to a file.
The file is easy to import into R and analyze.

Added Paths:
-----------
    csw/mgar/gar/v2/lib/python/package_age.py

Added: csw/mgar/gar/v2/lib/python/package_age.py
===================================================================
--- csw/mgar/gar/v2/lib/python/package_age.py	                        (rev 0)
+++ csw/mgar/gar/v2/lib/python/package_age.py	2014-04-05 20:05:52 UTC (rev 23335)
@@ -0,0 +1,63 @@
+#!/opt/csw/bin/python
+
+"""Download and generate package age dataset for analysis with R.
+
+It's a toy as of 2014-04-05.
+"""
+
+import logging
+import requests
+import argparse
+import dateutil.parser
+
+from lib.python import opencsw
+
+
+class BadDateError(Exception):
+  """There was a bad date tag."""
+
+
+def main():
+  parser = argparse.ArgumentParser()
+  parser.add_argument('output', help='Output file')
+  args = parser.parse_args()
+  url = ('http://buildfarm.opencsw.org/pkgdb/rest/catalogs/'
+         'unstable/i386/SunOS5.10/timing/')
+  data = requests.get(url).json()
+  with open(args.output, 'wb') as fd:
+    fd.write('catalogname maintainer date\n')
+    bad_dates = []
+    for entry in data:
+      entry['maintainer'] = entry['maintainer'].split('@')[0]
+      parsed_fn = opencsw.ParsePackageFileName(entry['basename'])
+      dates_to_try = []
+      if 'REV' in parsed_fn['revision_info']:
+        dates_to_try.append(parsed_fn['revision_info']['REV'])
+      else:
+        logging.warning('{catalogname} did not have a REV=. '
+                        'Falling back to mtime.'.format(**entry))
+      dates_to_try.append(entry['mtime'])
+
+      for date_str in dates_to_try:
+        try:
+          date = dateutil.parser.parse(date_str)
+          break
+        except ValueError as exc:
+          logging.warning(exc)
+          logging.warning(
+              "WTF is {date} in {catalogname}? "
+              "Go home {maintainer}, you're drunk.".format(
+                catalogname=entry['catalogname'],
+                maintainer=entry['maintainer'],
+                date=date_str))
+          bad_dates.append(date_str)
+          continue
+      entry['date'] = date.strftime('%Y-%m-%d')
+      line = '{catalogname} {maintainer} {date}\n'.format(**entry)
+      fd.write(line)
+    if bad_dates:
+      logging.warning('Bad dates encountered. mtime used as fallback.')
+
+
+if __name__ == '__main__':
+  main()


Property changes on: csw/mgar/gar/v2/lib/python/package_age.py
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the devel mailing list