[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