added caches handling
authorrobin <robin@reportlab.com>
Fri, 16 Jun 2017 16:04:40 +0100
changeset 5 539b3d5f515e
parent 4 1899f4fe9c9b
child 6 2fe9dd0a6b76
added caches handling
rl_ci_tools.py
--- a/rl_ci_tools.py	Thu Jun 15 11:56:32 2017 +0100
+++ b/rl_ci_tools.py	Fri Jun 16 16:04:40 2017 +0100
@@ -67,9 +67,11 @@
         for i in self.info(u,p,kind[:-1],fn):
             self._download(u,p,kind,i[0],dst)
 
-    def info(self,u,p,kind,pat):
+    def info(self,u,p,kind,pat,subdir=''):
         #self.login(u,p)
-        url = '%s/pypi/%s-info/%s/?json=1' % (self.root,kind,pat)
+        if subdir:
+            subdir += '/'
+        url = '%s/pypi/%s-info/%s%s/?json=1' % (self.root,kind,subdir,pat)
         resp = self.session.get(url,
                 #data=dict(csrfmiddlewaretoken=self.session.cookies['csrftoken']),
                 headers = dict(Referer=self.loginurl),
@@ -85,9 +87,11 @@
             print('%s: %r --> %d rows' % (PROG, url, len(I)))
         return I
 
-    def upload(self,u,p,kind,fn):
+    def upload(self,u,p,kind,fn,subdir=''):
         self.login(u,p)
-        url = '%s/pypi/upload-%s/' % (self.root,kind)
+        if subdir:
+            subdir = '/' + subdir
+        url = '%s/pypi/upload-%s%s/' % (self.root,kind,subdir)
         files= dict(file=(os.path.basename(fn),open(fn,'rb'),'application/octet-stream'))
         resp = self.session.post(url,
                 data=dict(csrfmiddlewaretoken=self.session.cookies['csrftoken']),
@@ -102,6 +106,21 @@
             print('%s: uploaded %r to %r.' % (PROG,fn,url))
         return resp.status_code
 
+    def clear_cache(self,u,p,fn):
+        self.login(u,p)
+        url = '%s/pypi/clear-cache/%s/' % (self.root,fn)
+        resp = self.session.post(url,
+                data=dict(csrfmiddlewaretoken=self.session.cookies['csrftoken']),
+                headers = dict(Referer=self.loginurl),
+                )
+        status_code = resp.status_code
+        text = resp.text
+        if not text.endswith('OK') or status_code!=200:
+            raise ValueError('%s: clear-cache %r failed with status_code=%r!\n%r' % (PROG,url,status_code,text))
+        if verbosity:
+            print('%s: cleared cache %r.' % (PROG,fn))
+        return resp.status_code
+
     def package_version(self,u,p,pkg):
         I = self.info(u,p,'package','%s-*' % pkg)
         if not I:
@@ -211,7 +230,7 @@
                 print('status=%s' % status_code)
         elif cmd.startswith('download-'):
             kind = cmd.split('-')[1]
-            if not kind in ('resources','packages'):
+            if not kind in ('resources','packages', 'caches'):
                 raise ValueError('%s: invalid download kind: %r' % (PROG,kind))
             if dst and not os.path.isdir(dst):
                 raise ValueError('%s: %r is not a directory!' % (PROG,dst))
@@ -219,16 +238,21 @@
                 pypi.download(u,p,kind,fn,dst)
         elif cmd.endswith('-info'):
             kind = cmd.split('-')[0]
-            if not kind in ('resource','package'):
+            if not kind in ('resource','package', 'cache'):
                 raise ValueError('%s: invalid info kind: %r' % (PROG,kind))
-            tabulate([i for fn in sys.argv[2:] for i in pypi.info(u,p,kind,fn)])
+            subdir = getoption('subdir','',str) if kind=='cache' else None
+            tabulate([i for fn in sys.argv[2:] for i in pypi.info(u,p,kind,fn,subdir)])
         elif cmd.startswith('upload-'):
             kind = cmd.split('-')[1]
-            if not kind in ('resources','packages'):
+            if not kind in ('resources','packages', 'caches'):
                 raise ValueError('%s: invalid upload kind: %r' % (PROG,kind))
+            subdir = getoption('subdir','',str) if kind=='caches' else None
             for pat in sys.argv[2:]:
                 for fn in glob.glob(pat):
-                    pypi.upload(u,p,kind[:-1],fn)
+                    pypi.upload(u,p,kind[:-1],fn,subdir)
+        elif cmd=='clear-cache':
+            for fn in sys.argv[2:]:
+                pypi.clear_cache(u,p,fn)
         elif cmd=='package-version':
             tabulate([pypi.package_version(u,p,fn) for fn in sys.argv[2:]],
                     hdrs = ['Package','Version'],
@@ -236,6 +260,6 @@
                     cnvf = (str,str),
                     )
         else:
-            raise ValueError('%s: nknown command %r' % (PROG,cmd))
+            raise ValueError('%s: unknown command %r' % (PROG,cmd))
 if __name__=='__main__':
     main()