Refactor verification for ZanataRestService

Rather than pass verify to each function that requires it, refactor
it down the stack into __init__. Now that we have moved to using
translate.o.o which has a trusted certificate, switch the default
to True.

Add a command-line argument --no-verify to create-zanata-xml to ease
testing against translate-dev.

Change-Id: I0f2314a8e82c3b7f1c96f28408c36ea1dd786e2f
This commit is contained in:
Steve Kowalik 2015-09-10 15:52:29 +10:00
parent 01f9c7f27e
commit f1468431bf
2 changed files with 13 additions and 9 deletions

View File

@ -62,7 +62,7 @@ class IniConfig:
class ZanataRestService:
def __init__(self, zconfig, content_type='application/xml'):
def __init__(self, zconfig, content_type='application/xml', verify=True):
self.url = zconfig.url
if "charset" not in content_type:
content_type = "%s;charset=utf8" % content_type
@ -70,14 +70,16 @@ class ZanataRestService:
'Content-Type': content_type,
'X-Auth-User': zconfig.username,
'X-Auth-Token': zconfig.key}
self.verify = verify
def _construct_url(self, url_fragment):
return urljoin(self.url, url_fragment)
def query(self, url_fragment, verify=False, raise_errors=True):
def query(self, url_fragment, raise_errors=True):
request_url = self._construct_url(url_fragment)
try:
r = requests.get(request_url, verify=verify, headers=self.headers)
r = requests.get(request_url, verify=self.verify,
headers=self.headers)
except requests.exceptions.ConnectionError:
raise ValueError('Connection error')
if raise_errors and r.status_code != 200:
@ -87,10 +89,10 @@ class ZanataRestService:
raise ValueError('Did not recieve any data from %s' % request_url)
return r
def push(self, url_fragment, data, verify=False):
def push(self, url_fragment, data):
request_url = self._construct_url(url_fragment)
try:
return requests.put(request_url, verify=verify,
return requests.put(request_url, verify=self.verify,
headers=self.headers, data=json.dumps(data))
except requests.exceptions.ConnectionError:
raise ValueError('Connection error')
@ -108,8 +110,8 @@ class ProjectConfig:
xmlfile (str): path to zanata.xml to read or write
rules (list): list of two-ples with pattern and rules
"""
def __init__(self, zconfig, xmlfile, rules, **kwargs):
self.rest_service = ZanataRestService(zconfig)
def __init__(self, zconfig, xmlfile, rules, verify, **kwargs):
self.rest_service = ZanataRestService(zconfig, verify=verify)
self.xmlfile = xmlfile
self.rules = self._parse_rules(rules)
if os.path.isfile(os.path.abspath(xmlfile)):
@ -181,7 +183,7 @@ class ProjectConfig:
"""
r = self.rest_service.query(
'/rest/projects/p/%s/iterations/i/%s/config'
% (self.project, self.version), verify=verify)
% (self.project, self.version))
project_config = r.content
p = etree.XMLParser(remove_blank_text=True)
try:

View File

@ -33,6 +33,8 @@ def get_args():
'match .pot files to translations. Can be specified '
'multiple times, and if no rules are specified a '
'default will be used.')
parser.add_argument('--no-verify', action='store_false', dest='verify',
help='Do not perform HTTPS certificate verification')
parser.add_argument('-f', '--file', required=True)
return parser.parse_args()
@ -44,7 +46,7 @@ def main():
rules = args.rule or [default_rule]
try:
zc = IniConfig(os.path.expanduser('~/.config/zanata.ini'))
ProjectConfig(zc, args.file, rules, project=args.project,
ProjectConfig(zc, args.file, rules, args.verify, project=args.project,
version=args.version,
srcdir=args.srcdir, txdir=args.txdir,
excludes=args.excludes)