Small refactor. Remove tabs.

This commit is contained in:
Alberto Planas 2014-06-05 16:50:31 +02:00
parent f8c7f05e6f
commit 560007734a

View File

@ -6,31 +6,39 @@
# Then try to run 'osc checker --help' to see the usage.
import socket
import os
import traceback
import re
import shutil
import subprocess
import urllib2
from xml.etree import cElementTree as ET
def _checker_parse_name(self, apiurl, project, package, revision=None, brief=False, verbose=False):
from osc.core import checkout_package
from osc.core import http_GET
from osc.core import http_POST
from osc.core import makeurl
def _checker_parse_name(self, apiurl, project, package,
revision=None, brief=False, verbose=False):
query = {'view': 'info', 'parse': 1}
if revision:
url = makeurl(apiurl, ['source', project, package], { 'view':'info', 'parse':1, 'rev':revision})
else:
url = makeurl(apiurl, ['source', project, package], { 'view':'info', 'parse':1 } )
query['rev'] = revision
url = makeurl(apiurl, ['source', project, package], query)
try:
f = http_GET(url)
except urllib2.HTTPError, err:
return None
xml = ET.parse(f)
xml = ET.parse(http_GET(url))
name = xml.find('name')
except urllib2.HTTPError, e:
print('ERROR in URL %s [%s]' % (url, e))
return None
if name is None or not name.text:
return None
return name.text
def _checker_change_review_state(self, opts, id, newstate, by_group='', by_user='', message='', supersed=None):
""" taken from osc/osc/core.py, improved:
- verbose option added,
@ -38,21 +46,24 @@ def _checker_change_review_state(self, opts, id, newstate, by_group='', by_user=
- numeric id can be int().
"""
query = {'cmd': 'changereviewstate', 'newstate': newstate}
if by_group: query['by_group'] = by_group
if by_user: query['by_user'] = by_user
if supersed: query['superseded_by'] = supersed
# if message: query['comment'] = message
u = makeurl(opts.apiurl, ['request', str(id)], query=query)
f = http_POST(u, data=message)
root = ET.parse(f).getroot()
if by_group:
query['by_group'] = by_group
if by_user:
query['by_user'] = by_user
if supersed:
query['superseded_by'] = supersed
url = makeurl(opts.apiurl, ['request', str(id)], query=query)
root = ET.parse(http_POST(url, data=message)).getroot()
return root.attrib['code']
def _checker_prepare_dir(self, dir):
olddir = os.getcwd()
os.chdir(dir)
shutil.rmtree(".osc")
os.chdir(olddir)
def _checker_add_review(self, opts, id, by_group=None, by_user=None, msg=None):
query = {'cmd': 'addreview'}
if by_group:
@ -65,7 +76,7 @@ def _checker_add_review(self, opts, id, by_group=None, by_user=None, msg=None):
url = makeurl(opts.apiurl, ['request', str(id)], query)
try:
r = http_POST(url, data=msg)
except urllib2.HTTPError, err:
except urllib2.HTTPError:
return 1
code = ET.parse(r).getroot().attrib['code']
@ -73,12 +84,15 @@ def _checker_add_review(self, opts, id, by_group=None, by_user=None, msg=None):
raise Exception(r)
return 0
def _checker_forward_to_staging(self, opts, id):
return self._checker_add_review(opts, id, by_group='factory-staging', msg="Pick Staging Project")
def _checker_add_review_team(self, opts, id):
return self._checker_add_review(opts, id, by_group='opensuse-review-team', msg="Please review sources")
def _checker_accept_request(self, opts, id, msg, diff=10000):
if diff > 12:
self._checker_add_review_team(opts, id)
@ -92,13 +106,13 @@ def _checker_accept_request(self, opts, id, msg, diff=10000):
self._checker_change_review_state(opts, id, 'accepted', by_group='factory-auto', message=msg)
print("accepted " + msg)
def _checker_one_request(self, rq, opts):
if (opts.verbose):
ET.dump(rq)
print(opts)
id = int(rq.get('id'))
act_id = 0
approved_actions = 0
actions = rq.findall('action')
if len(actions) > 1:
msg = "2 actions in one SR is not supported - https://github.com/openSUSE/osc-plugin-factory/fork_select"
@ -108,8 +122,8 @@ def _checker_one_request(self, rq, opts):
for act in actions:
act_id += 1
_type = act.get('type');
if (_type == "submit"):
_type = act.get('type')
if _type == "submit":
pkg = act.find('source').get('package')
prj = act.find('source').get('project')
rev = act.find('source').get('rev')
@ -122,7 +136,8 @@ def _checker_one_request(self, rq, opts):
e.append('no source/package in request %d, action %d' % (id, act_id))
if not prj:
e.append('no source/project in request %d, action %d' % (id, act_id))
if len(e): src.error = '; '.join(e)
if e:
src.error = '; '.join(e)
e = []
if not tpkg:
@ -142,12 +157,12 @@ def _checker_one_request(self, rq, opts):
[dprj, dpkg] = dpkg.split('/')
else:
dprj = None
if dprj and (dprj != prj or dpkg != pkg) and (not os.environ.has_key("IGNORE_DEVEL_PROJECTS")):
if dprj and (dprj != prj or dpkg != pkg) and ("IGNORE_DEVEL_PROJECTS" not in os.environ):
msg = "'%s/%s' is the devel package, submission is from '%s'" % (dprj, dpkg, prj)
self._checker_change_review_state(opts, id, 'declined', by_group='factory-auto', message=msg)
print("declined " + msg)
continue
if not dprj and not self._devel_projects.has_key(prj + "/"):
if not dprj and (prj + "/") not in self._devel_projects:
msg = "'%s' is not a valid devel project of %s - please pick one of the existent" % (prj, tprj)
self._checker_change_review_state(opts, id, 'declined', by_group='factory-auto', message=msg)
print("declined " + msg)
@ -166,7 +181,7 @@ def _checker_one_request(self, rq, opts):
os.rename(tpkg, "_old")
except urllib2.HTTPError:
print("failed to checkout %s/%s" % (tprj, tpkg))
pass
checkout_package(opts.apiurl, prj, pkg, revision=rev,
pathname=dir, server_service_files=True, expand_link=True)
os.rename(pkg, tpkg)
@ -196,7 +211,7 @@ def _checker_one_request(self, rq, opts):
continue
shutil.rmtree(dir)
msg="Check script succeeded"
msg = 'Check script succeeded'
if len(checked) and checked[-1].startswith('DIFFCOUNT'):
# this is a major break through in perl<->python communication!
diff = int(checked.pop().split(' ')[1])
@ -215,15 +230,15 @@ def _checker_one_request(self, rq, opts):
by_group='factory-auto',
message="Unchecked request type %s" % _type)
def _checker_check_devel_package(self, opts, project, package):
if not self._devel_projects.has_key(project):
if project not in self._devel_projects:
url = makeurl(opts.apiurl, ['search', 'package'], "match=[@project='%s']" % project)
f = http_GET(url)
root = ET.parse(f).getroot()
root = ET.parse(http_GET(url)).getroot()
for p in root.findall('package'):
name = p.attrib['name']
d = p.find('devel')
if d != None:
if d is not None:
dprj = d.attrib['project']
self._devel_projects["%s/%s" % (project, name)] = "%s/%s" % (dprj, d.attrib['package'])
# for new packages to check
@ -237,6 +252,7 @@ def _checker_check_devel_package(self, opts, project, package):
except KeyError:
return None
def do_check_source(self, subcmd, opts, *args):
"""${cmd_name}: checker review of submit requests.
@ -250,29 +266,23 @@ def do_check_source(self, subcmd, opts, *args):
self._devel_projects = {}
opts.verbose = False
from pprint import pprint
opts.apiurl = self.get_api_url()
tmphome = None
if len(args) and args[0] == 'skip':
for id in args[1:]:
self._checker_accept_request(opts, id, "skip review")
self._checker_accept_request(opts, id, 'skip review')
return
ids = {}
for a in args:
if (re.match('\d+', a)):
if re.match('\d+', a):
ids[a] = 1
if (not len(ids)):
where = "@by_group='factory-auto'+and+@state='new'"
url = makeurl(opts.apiurl, ['search', 'request'], "match=state/@name='review'+and+review[" + where + "]")
f = http_GET(url)
root = ET.parse(f).getroot()
root = ET.parse(http_GET(url)).getroot()
for rq in root.findall('request'):
tprj = rq.find('action/target').get('project')
self._checker_one_request(rq, opts)
else:
# we have a list, use them.
@ -282,9 +292,3 @@ def do_check_source(self, subcmd, opts, *args):
xml = ET.parse(f)
root = xml.getroot()
self._checker_one_request(root, opts)
#Local Variables:
#mode: python
#py-indent-offset: 4
#tab-width: 8
#End: