[csw-devel] SF.net SVN: gar:[21922] csw/mgar/gar/v2/lib

wahwah at users.sourceforge.net wahwah at users.sourceforge.net
Sat Sep 14 17:36:41 CEST 2013


Revision: 21922
          http://gar.svn.sourceforge.net/gar/?rev=21922&view=rev
Author:   wahwah
Date:     2013-09-14 15:36:41 +0000 (Sat, 14 Sep 2013)
Log Message:
-----------
pkgdb-web: Add a REST endpoint for recent pkgs

This can be used to pull information about recently built packages. It can be
used to embed information in websites, for example.

Modified Paths:
--------------
    csw/mgar/gar/v2/lib/python/models.py
    csw/mgar/gar/v2/lib/web/pkgdb_web.py

Modified: csw/mgar/gar/v2/lib/python/models.py
===================================================================
--- csw/mgar/gar/v2/lib/python/models.py	2013-09-14 15:36:14 UTC (rev 21921)
+++ csw/mgar/gar/v2/lib/python/models.py	2013-09-14 15:36:41 UTC (rev 21922)
@@ -528,6 +528,45 @@
   return rows
 
 
+def GetRecentlyBuiltPackages():
+  join = [
+      # sqlbuilder.INNERJOINOn(None,
+      #   Srv4FileInCatalog,
+      #   Srv4FileInCatalog.q.srv4file==Srv4FileStats.q.id),
+      # sqlbuilder.INNERJOINOn(None,
+      #   CatalogGenData,
+      #   Srv4FileStats.q.md5_sum==CatalogGenData.q.md5_sum),
+  ]
+  where = sqlbuilder.AND(
+        # Srv4FileStats.q.use_to_generate_catalogs==True,
+  )
+  select = sqlbuilder.Select(
+      [
+       'srv4_file_stats.md5_sum', # Hardcoded table name, is it portable?
+       'srv4_file_stats.catalogname',
+       # 'version_string',
+       # 'pkgname',
+       # 'basename',
+       # 'size',
+       # 'deps',
+       # 'i_deps',
+       # 'pkginfo_name',
+       # The above columns are used to generate catalogs.
+       # Additional columns can be added blow.
+       'srv4_file_stats.maintainer_id',
+       'srv4_file_stats.mtime',
+       # 'created_on',
+       # 'created_by',
+       ],
+      where=where,
+      orderBy='-mtime',
+      join=join,
+      limit=30)
+  query = sqlobject.sqlhub.processConnection.sqlrepr(select)
+  rows = sqlobject.sqlhub.processConnection.queryAll(query)
+  return rows
+
+
 def GetSqoTriad(osrel, arch, catrel):
   sqo_osrel = OsRelease.selectBy(short_name=osrel).getOne()
   sqo_arch = Architecture.selectBy(name=arch).getOne()

Modified: csw/mgar/gar/v2/lib/web/pkgdb_web.py
===================================================================
--- csw/mgar/gar/v2/lib/web/pkgdb_web.py	2013-09-14 15:36:14 UTC (rev 21921)
+++ csw/mgar/gar/v2/lib/web/pkgdb_web.py	2013-09-14 15:36:41 UTC (rev 21922)
@@ -39,6 +39,7 @@
   r'/catalognames/([^/]+)/', 'Catalogname',
 )
 urls_rest = (
+  r'/rest/svr4/recent/', 'RestSrv4List',
   r'/rest/catalogs/', 'RestCatalogList',
   r'/rest/catalogs/([^/]+)/(sparc|i386)/(SunOS[^/]+)/', 'RestCatalogDetail',
   r'/rest/catalogs/([^/]+)/(sparc|i386)/(SunOS[^/]+)/pkgname-by-filename',
@@ -515,6 +516,28 @@
       raise web.internalerror(e)
 
 
+class RestSrv4List(object):
+
+  def GET(self):
+    pkgs = models.Srv4FileStats.select().orderBy('-mtime')[:30]
+    now = datetime.datetime.now()
+    def Ago(timedelta):
+      # Not sure why there is a time difference between mysql and the datetime
+      # module.
+      timezone_diff = 1.0
+      return "%.1fh" % (timedelta.seconds / 60.0 / 60.0 - timezone_diff)
+    pkgs_ago = [(x, Ago(now - x.mtime)) for x in pkgs]
+    def PrepareForJson(pkg_ago):
+      pkg, ago = pkg_ago
+      _, pkg_dict = pkg.GetRestRepr(quick=True)
+      pkg_dict['ago'] = ago
+      pkg_dict['maintainer'] = pkg.maintainer.GetRestRepr()
+      return pkg_dict
+    response = cjson.encode([PrepareForJson(x) for x in pkgs_ago])
+    web.header('Content-Length', str(len(response)))
+    return response
+
+
 class RestCatalogList(object):
   def GET(self):
     archs = models.Architecture.select()

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