import gzip
import json
+import mimetypes
import os
import requests
from StringIO import StringIO
if item.type == 'primary':
href = item.location.href
if href:
- return _download(url + href)
+ return _download(url + '/' + href)
raise RepoError('Get repo: {0} primary metadata failed ...'.format(url))
def _download(url):
"""Return given url's content"""
- response = requests.get(url)
-
- if response.status_code == 200:
- if response.headers['content-type'] == 'application/x-gzip':
- gzf = gzip.GzipFile(fileobj=StringIO(response.content))
- return gzf.read()
- elif response.headers['content-type'] == 'text/xml':
- return response.content
+ # a very simple judgement :)
+ if url.startswith('http') or url.startswith('https'):
+ response = requests.get(url)
+
+ if response.status_code == 200:
+ if response.headers['content-type'] == 'application/x-gzip':
+ gzf = gzip.GzipFile(fileobj=StringIO(response.content))
+ return gzf.read()
+ elif response.headers['content-type'] == 'text/xml':
+ return response.content
+ else:
+ # if url is a local path
+ _type = mimetypes.guess_type(url)
+ try:
+ if _type[0] == 'text/xml' and _type[1] == 'gzip':
+ with gzip.open(url) as gzf:
+ return gzf.read()
+ elif _type[0] == 'text/xml' and _type[1] is None:
+ with open(url, 'rb') as xml:
+ return xml.read()
+ except IOError, err:
+ print(err)
class Repo(object):