Cleanups for job_request.py
authorLingchaox Xin <lingchaox.xin@intel.com>
Mon, 8 Apr 2013 09:02:05 +0000 (17:02 +0800)
committerGerrit Code Review <gerrit2@otctools.jf.intel.com>
Thu, 11 Apr 2013 02:29:59 +0000 (19:29 -0700)
Change-Id: Ibe0fc71237b7fab75a03d0ec85d7dc59fa6901f5

job_request.py

index a511620..37c6cc3 100755 (executable)
@@ -1,7 +1,8 @@
 #!/usr/bin/env python
-from common import runner
-from common import utils
-from common.envparas import export
+
+"""The job will do corresponding operations, like create accept tag/notify tag
+owner, for SR status changed."""
+
 from common.git import Git, clone_gitproject
 from common import buildservice
 from common.gerrit import Gerrit
@@ -11,58 +12,40 @@ from common.buildservice import BuildService
 from requests.mailer import mailer
 from gbp.git.repository import GitRepositoryError
 
-import json
 import sys
 import os
 import datetime
-import codecs
 
 # set default char-set endcoding to utf-8
 reload(sys)
 sys.setdefaultencoding('utf-8')
 
-envparas = ['TRIGGER_INFO',
-            'OBS_OSCRC_PATH',
-            'OBS_API_URL',
-            'OBS_API_USERNAME',
-            'OBS_API_PASSWD',
-            'SR_ENABLE_USER',
-            'NOREPLY_EMAIL_SENDER',
-            'MAILINGLIST',
-            'BCC_MAILS',
-            'BUILD_TAG',
-            'OBS_URL',
-            'EMAIL_TEMPLATES_DIR',
-            'GIT_CACHE_DIR',
-            'GERRIT_HOSTNAME',
-            'GERRIT_USERNAME',
-            'GERRIT_SSHPORT',
-            'WORKSPACE']
-
-export(envparas, locals())
-GIT_URL = 'ssh://%s@%s:%s' % (GERRIT_USERNAME, GERRIT_HOSTNAME, GERRIT_SSHPORT)
-
 def request_url(request_id):
-    if OBS_URL:
-        return '%s/request/show/%s' %(OBS_URL, request_id)
+    """Get request url"""
+
+    if os.getenv('OBS_URL'):
+        return '%s/request/show/%s' % (os.getenv('OBS_URL'), request_id)
     else:
-        return '%s' %(request_id)
+        return '%s' % (request_id)
 
 def tag_info(prj, tag):
+    """Get git tag info"""
+
     try:
-        mygit = Git(os.path.join(GIT_CACHE_DIR, prj))
+        mygit = Git(os.path.join(os.getenv('GIT_CACHE_DIR'), prj))
         if mygit.find_tag(tag):
             return mygit.get_tag(tag)
     except GitRepositoryError, err:
         print err
 
     # clone gerrit project to local dir
-    if not clone_gitproject(prj, os.path.join(WORKSPACE, prj)):                               
+    if not clone_gitproject(prj, os.path.join(os.getenv('WORKSPACE'), prj)):
         exit(1)
-    mygit = Git(os.path.join(WORKSPACE, prj))
+    mygit = Git(os.path.join(os.getenv('WORKSPACE'), prj))
     return mygit.get_tag(tag)
 
-def OBS_Git_data(event_fields):
+def obs_git_data(event_fields):
+    """Put obs and git data into a dict"""
 
     obs_fields_mapping = {'author': 'OBS_REQ_AUTHOR',
                           'comment': 'OBS_REQ_COMMENT',
@@ -107,11 +90,11 @@ def OBS_Git_data(event_fields):
             entry = {}
             for line in section.split('\n'):
                 try:
-                    key, value = line.split(':',1)
+                    key, value = line.split(':', 1)
                     entry[mapping[key.strip()]] = value.strip()
                 except:
                     print '-------------------------------------'
-                    print 'key:value  %s' %(line)
+                    print 'key:value  %s' % line
                     # FIXME: here is just a temp solution
                     print 'FATAL: no tag in submit description'
             if 'GIT_PROJECT' in entry.keys() and 'GIT_TAG' in entry.keys():
@@ -119,7 +102,7 @@ def OBS_Git_data(event_fields):
                 entry.update(tag)
             else:
                 print '-------------------------------------'
-                print "FATAL ERROR: Invalid rquest info: the request might be created by manual "
+                print "FATAL ERROR: Invalid rquest info: the request might be created by manual"
                 print '-------------------------------------'
                 exit(0)
             desp_list.append(entry)
@@ -139,19 +122,21 @@ def OBS_Git_data(event_fields):
     # Database records
     print '########################################'
     import pprint
-    pp=pprint.PrettyPrinter(indent=4)
-    print pp.pprint(ret_data)
+    ppt = pprint.PrettyPrinter(indent=4)
+    print ppt.pprint(ret_data)
     return ret_data
 
 def delete_package(prj, pkg):
     """delete source package when sr end"""
 
-    bs = BuildService(os.getenv('OBS_API_URL'),
+    _bs = BuildService(os.getenv('OBS_API_URL'),
                       os.getenv('OBS_API_USERNAME'),
                       os.getenv('OBS_API_PASSWD'))
-    bs.delete_package(prj, pkg)
+    _bs.delete_package(prj, pkg)
 
 def request_accepted(data, gerrit, gitprj):
+    """Do lots of things when request accepted"""
+
     print '====request accepted===================================='
 
     message = 'The SR (Submit Request) has been accepted to OBS %s project.\n' \
@@ -161,7 +146,7 @@ def request_accepted(data, gerrit, gitprj):
     '- Git project: %s\n' \
     '- Tag:%s\n' \
     '- Commit: %s\n' \
-    '- Request URL:%s' %data['OBS_REQ_PRJ'],
+    '- Request URL:%s' % (data['OBS_REQ_PRJ'],
                           data['OBS_REQ_PKG'],
                           data["OBS_REQ_SENDER"],
                           data["OBS_REQ_COMMENT"],
@@ -194,11 +179,12 @@ def request_accepted(data, gerrit, gitprj):
 
     gitprj.create_tag(accepted_tag, message, data['commitid'])
 
-    args = []
     gitprj.push('ssh://%s@%s:%s/%s' %(gerrit.username, gerrit.host, gerrit.port, data['GIT_PROJECT']),
                 'refs/tags/%s' %(accepted_tag))
 
-def request_rejected(data, gerrit, gitprj):
+def request_rejected(data, gerrit):
+    """When request rejected, give msg to gerrit and delete remote package"""
+
     print '====request rejected===================================='
 
     message = 'The SR (Submit Request) has been *rejected* to OBS %s project.\n' \
@@ -207,7 +193,7 @@ def request_rejected(data, gerrit, gitprj):
     '- Git project: %s\n' \
     '- Tag:%s\n' \
     '- Commit: %s\n' \
-    '- Request URL:%s' %data['OBS_REQ_PRJ'],
+    '- Request URL:%s' % (data['OBS_REQ_PRJ'],
                           data["OBS_REQ_SENDER"],
                           data["OBS_REQ_COMMENT"],
                           data['GIT_PROJECT'],
@@ -221,12 +207,16 @@ def request_rejected(data, gerrit, gitprj):
     delete_package(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
 
 def request_revoked(data):
+    """When request revoked, delete the remote package"""
+
     print '====request revoked===================================='
 
     # delete obs source package
     delete_package(data['OBS_REQ_PRJ_SRC'], data['OBS_REQ_PKG_SRC'])
 
-def request_created(data, gerrit, gitprj):
+def request_created(data):
+    """Print request created information"""
+
     print '====request created===================================='
 
     message = 'A SR (Submit Request) has been trigger to submit the commit to OBS %s project.\n' \
@@ -235,7 +225,7 @@ def request_created(data, gerrit, gitprj):
     '- Git project: %s\n' \
     '- Tag:%s\n' \
     '- Commit: %s\n' \
-    '- Request URL:%s' %data['OBS_REQ_PRJ'],
+    '- Request URL:%s' % (data['OBS_REQ_PRJ'],
                           data["GIT_AUTHOR_EMAIL"],
                           data["message"],
                           data['GIT_PROJECT'],
@@ -243,53 +233,68 @@ def request_created(data, gerrit, gitprj):
                           data['GIT_COMMIT_SUBJ'],
                           request_url(data['OBS_REQ_ID']))
 
-    print '#########NOTE: post to gerrit is disabled###############################'
+    print '#########NOTE: post to gerrit is disabled###########################'
     #gerrit.review(commit = data['commitid'], message = message)
     print message
     print '########################################'
 
 
 def notify_submiter(event_fields, data):
+    """Notify submiter obs events"""
+
     print '====Notify the tag owner===================================='
 
     status = {}
 
-    bs = buildservice.BuildService(OBS_API_URL, OBS_API_USERNAME, OBS_API_PASSWD)
+    _bs = buildservice.BuildService(os.getenv('OBS_API_URL'), \
+            os.getenv('OBS_API_USERNAME'), os.getenv('OBS_API_PASSWD'))
 
     # email notification to mailing list
-    data.update({'noreply_sender' : NOREPLY_EMAIL_SENDER,
-                'mailinglist' : MAILINGLIST.split(','),
-                'bccs' : BCC_MAILS.split(',')})
-    status = mailer(event_fields, bs, data, SR_ENABLE_USER, EMAIL_TEMPLATES_DIR)
+    data.update({'noreply_sender' : os.getenv('NOREPLY_EMAIL_SENDER'),
+                'mailinglist' : os.getenv('MAILINGLIST', '').split(','),
+                'bccs' : os.getenv('BCC_MAILS', '').split(',')})
+    status = mailer(event_fields, _bs, data, os.getenv('SR_ENABLE_USER'),
+            os.getenv('EMAIL_TEMPLATES_DIR'))
     print status
     if status:
-        prepare_mail("%s.env" %(BUILD_TAG), status['subject'], status['body'], NOREPLY_EMAIL_SENDER, status['To'], status['Cc'])
+        prepare_mail("%s.env" % (os.getenv('BUILD_TAG')), status['subject'], \
+                status['body'], os.getenv('NOREPLY_EMAIL_SENDER'), \
+                status['To'], status['Cc'])
+
+def main():
+    """The main body"""
+
+    event_fields = trigger_info(os.getenv('TRIGGER_INFO'))
+
+    if not event_fields:
+        print 'Invalid OBS event'
+        return -1
 
-event_fields = trigger_info(TRIGGER_INFO)
+    data = obs_git_data(event_fields)
 
-if not event_fields:
-    print 'Invalid OBS event'
-    sys.exit(-1)
+    notify_submiter(event_fields, data)
 
-data = OBS_Git_data(event_fields)
+    gerrit = Gerrit(os.getenv('GERRIT_HOSTNAME'), os.getenv('GERRIT_USERNAME'),
+            os.getenv('GERRIT_SSHPORT'))
 
-notify_submiter(event_fields, data)
+    gitprj = Git('%s/%s' % (os.getenv('GIT_CACHE_DIR'), data['GIT_PROJECT']))
 
-gerrit = Gerrit(GERRIT_HOSTNAME, GERRIT_USERNAME, GERRIT_SSHPORT)
+    if event_fields['type'] == 'OBS_SRCSRV_REQUEST_STATECHANGE':
+        if event_fields['state'] == 'declined':
+            request_rejected(data, gerrit)
+        elif event_fields['state'] == 'revoked':
+            request_revoked(data)
+        trigger_next('reviewrepo_cleanup', data)
 
-gitprj = Git('%s/%s' %(GIT_CACHE_DIR, data['GIT_PROJECT']))
+    elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_CREATE':
+        request_created(data)
+        trigger_next('pre_release_image', data)
 
-if event_fields['type'] == 'OBS_SRCSRV_REQUEST_STATECHANGE':
-    if event_fields['state'] == 'declined':
-        request_rejected(data, gerrit, gitprj)
-    elif event_fields['state'] == 'revoked':
-        request_revoked(data)
-    trigger_next('reviewrepo_cleanup', data)
+    elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_ACCEPTED':
+        request_accepted(data, gerrit, gitprj)
+        trigger_next('reviewrepo_cleanup', data)
 
-elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_CREATE':
-    request_created(data, gerrit, gitprj)
-    trigger_next('pre_release_image', data)
+    return 0
 
-elif event_fields['type'] == 'OBS_SRCSRV_REQUEST_ACCEPTED':
-    request_accepted(data, gerrit, gitprj)
-    trigger_next('reviewrepo_cleanup', data)
+if __name__ == '__main__':
+    sys.exit(main())