[Python-checkins] release: welcome to a world with two digit patchlevel versions

benjamin.peterson python-checkins at python.org
Mon May 11 17:15:28 CEST 2015


https://hg.python.org/release/rev/1bff57e982e6
changeset:   94:1bff57e982e6
user:        Benjamin Peterson <benjamin at python.org>
date:        Mon May 11 11:15:26 2015 -0400
summary:
  welcome to a world with two digit patchlevel versions

files:
  add-to-pydotorg.py |  20 +++++++++++++-------
  1 files changed, 13 insertions(+), 7 deletions(-)


diff --git a/add-to-pydotorg.py b/add-to-pydotorg.py
--- a/add-to-pydotorg.py
+++ b/add-to-pydotorg.py
@@ -44,6 +44,8 @@
 ftp_root = '/srv/www.python.org/ftp/python/'
 download_root = 'https://www.python.org/ftp/python/'
 
+tag_cre = re.compile(r'(\d+)(?:\.(\d+)(?:\.(\d+))?)?(?:([ab]|rc)(\d+))?$')
+
 headers = {'Authorization': 'ApiKey %s' % auth_info, 'Content-Type': 'application/json'}
 
 rx = re.compile
@@ -70,20 +72,24 @@
 
 def slug_for(release):
     return release[0] + '-' + release[2] + '-' + release[4] + \
-        ('-' + release[5:] if release[5:] else '')
+        ('-' +  release[len(base_version(release)):] if release[len(base_version(release)):] else '')
 
 def sigfile_for(release, rfile):
     return download_root + '%s/%s.asc' % (release, rfile)
 
 def md5sum_for(release, rfile):
-    return hashlib.md5(open(ftp_root + release[:5] + '/' + rfile, 'rb').read()).hexdigest()
+    return hashlib.md5(open(ftp_root + base_version(release) + '/' + rfile, 'rb').read()).hexdigest()
 
 def filesize_for(release, rfile):
-    return path.getsize(ftp_root + release[:5] + '/' + rfile)
+    return path.getsize(ftp_root + base_version(release) + '/' + rfile)
 
 def make_slug(text):
     return re.sub('[^a-zA-Z0-9_-]', '', text.replace(' ', '-'))
 
+def base_version(release):
+    m = tag_cre.match(release)
+    return ".".join(m.groups()[:3])
+
 def build_release_dict(release, reldate, is_latest, page_pk):
     """Return a dictionary with all needed fields for a Release object."""
     return dict(
@@ -107,7 +113,7 @@
         release = '/api/v1/downloads/release/%s/' % rel_pk,
         description = add_desc,
         is_source = os_pk == 3,
-        url = download_root + '%s/%s' % (release[:5], rfile),
+        url = download_root + '%s/%s' % (base_version(release), rfile),
         md5_sum = md5sum_for(release, rfile),
         filesize = filesize_for(release, rfile),
         download_button = 'tar.xz' in rfile or
@@ -115,13 +121,13 @@
                           'macosx10.6.pkg' in rfile or
                           ('.msi' in rfile and not 'amd64' in rfile),
     )
-    if os.path.exists(ftp_root + "%s/%s.asc" % (release[:5], rfile)):
-        d["gpg_signature_file"] = sigfile_for(release[:5], rfile)
+    if os.path.exists(ftp_root + "%s/%s.asc" % (base_version(release), rfile)):
+        d["gpg_signature_file"] = sigfile_for(base_version(release), rfile)
     return d
 
 def list_files(release):
     """List all of the release's download files."""
-    reldir = release[:5]
+    reldir = base_version(release)
     for rfile in os.listdir(path.join(ftp_root, reldir)):
         if not path.isfile(path.join(ftp_root, reldir, rfile)):
             continue

-- 
Repository URL: https://hg.python.org/release


More information about the Python-checkins mailing list