Index: sitescripts/extensions/bin/updateDownloadLinks.py |
=================================================================== |
--- a/sitescripts/extensions/bin/updateDownloadLinks.py |
+++ b/sitescripts/extensions/bin/updateDownloadLinks.py |
@@ -18,17 +18,17 @@ |
""" |
Update the list of extenstions |
============================== |
This script generates a list of extensions and saves these with download links |
and version information |
""" |
-import os, urllib, urlparse, subprocess, time |
+import os, re, urllib, urllib2, urlparse, subprocess, time |
import xml.dom.minidom as dom |
from ConfigParser import SafeConfigParser |
from StringIO import StringIO |
from sitescripts.utils import get_config, get_template |
from sitescripts.extensions.utils import compareVersions, Configuration |
from buildtools.packagerGecko import KNOWN_APPS |
def urlencode(value): |
@@ -72,16 +72,36 @@ def getGoogleDownloadLink(galleryID): |
document = dom.parseString(contents) |
updateTags = document.getElementsByTagName('updatecheck') |
updateTag = updateTags[0] if len(updateTags) > 0 else None |
if updateTag and updateTag.hasAttribute('codebase') and updateTag.hasAttribute('version'): |
return (updateTag.getAttribute('codebase'), updateTag.getAttribute('version')) |
else: |
return (None, None) |
+def getOperaDownloadLink(galleryID): |
+ """ |
+ gets download link for an Opera add-on from the Opera Addons site |
+ """ |
+ class HeadRequest(urllib2.Request): |
+ def get_method(self): |
+ return "HEAD" |
+ |
+ url = 'https://addons.opera.com/extensions/download/%s/' % urlencode(galleryID) |
+ response = urllib2.urlopen(HeadRequest(url)) |
+ content_disposition = response.info().dict.get('content-disposition', None) |
+ if content_disposition != None: |
+ match = re.search(r'filename=\S+-([\d.]+)-\d+\.oex$', content_disposition) |
+ else: |
+ match = None; |
+ if match: |
+ return (url, match.group(1)) |
+ else: |
+ return (None, None) |
+ |
def getLocalLink(repo): |
""" |
gets the link for the newest download of an add-on in the local downloads |
repository |
""" |
dir = repo.downloadsDirectory |
url = repo.downloadsURL |
@@ -104,16 +124,18 @@ def getDownloadLink(repo): |
gets the download link to the most current version of an extension |
""" |
galleryURL = None |
galleryVersion = None |
if repo.type == "gecko" and repo.galleryID: |
(galleryURL, galleryVersion) = getMozillaDownloadLink(repo.galleryID) |
elif repo.type == "chrome" and repo.galleryID: |
(galleryURL, galleryVersion) = getGoogleDownloadLink(repo.galleryID) |
+ elif repo.type == "opera" and repo.galleryID: |
+ (galleryURL, galleryVersion) = getOperaDownloadLink(repo.galleryID) |
(downloadsURL, downloadsVersion) = getLocalLink(repo) |
if galleryVersion == None or (downloadsVersion != None and |
compareVersions(galleryVersion, downloadsVersion) < 0): |
return (downloadsURL, downloadsVersion) |
else: |
return (galleryURL, galleryVersion) |