Snippets

Created by Atri Bhattacharya last modified
# vim: set shiftwidth=4 tabstop=4 expandtab textwidth=79:

# Copyright (c) 2016, Atri Bhattacharya <badshah400@gmail.com>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
#   * Redistributions of source code must retain the above copyright notice,
#     this list of conditions, and the following disclaimer.
#   * Redistributions in binary form must reproduce the above copyright notice,
#     this list of conditions, and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#   * Neither the name of the author of this software nor the name of
#     contributors to this software may be used to endorse or promote products
#     derived from this software without specific prior written consent.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

import sys
import urllib2
import unicodedata
try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET

# Get sr# as user input
if (len(sys.argv) != 2):
	print(r'Expecting sr# for input')
	sys.exit(-1)

srid = sys.argv[1]

# Make sure srid can be converted to an int
try:
    srid_int = int(srid)
    if srid_int < 0:
        print('Invalid request id {:s}; '
              'must be a positive whole number.'.format(srid))
        sys.exit(-10)
except ValueError:
    print('Invalid request id {:s}; '
          'must be a positive whole number.'.format(srid))
    sys.exit(-10)

url  = 'https://api.opensuse.org/public/request/{:s}.xml'.format(srid)

try:
    f = urllib2.urlopen(url)
except urllib2.HTTPError, e:
    code = e.code
    if code == 404:
        print('Could not find request {0:s}.'.format(srid))
    sys.exit(-2)
except urllib2.URLError, e:
    code = e.reason
    print('Unable to fetch info for request {:s} ('
          'api.opensuse.org down?)'.format(srid))
    sys.exit(-3)

tree = ET.parse(f)
root = tree.getroot()

des  = root.find('description')

destxt = ''
if des == None or des.text == None:
    destxt = 'No description text'
else:
    destxt = des.text
    destxt = destxt.replace('\n', ' ')
    destxt = destxt.replace('\r', ' ')

    ## TRIM destxt to 75 characters
    if (len(destxt) > 75):
        destxt = destxt[:74]+'...'

act  = root.find('action')

acttype = act.get('type')

dest = act.find('target')
destprj = dest.get('project')
destpkg = dest.get('package')

state  = root.find('state').get('name')

if acttype == 'submit' or acttype == 'maintenance_incident':
    src    = act.find('source')
    srcprj = src.get('project')
    srcpkg = src.get('package')
    mess   = ('sr#{:s} [{:s} {:s}/{:s} -> {:s}/{:s}] {:s}'
              ' (State: {:s})'.format(srid, acttype, srcprj, srcpkg, destprj,
                                      destpkg, destxt, state))

elif acttype == 'delete':
    src  = ''
    srcprj = ''
    srcpkg = ''
    # Del req may be for entire projects instead of project/package
    # In these cases destprj is set to None, filter out accordingly
    if destpkg == None:
        mess = ('sr#{:s} [{:s} {:s}] {:s}'
                ' (State: {:s})'.format(srid, acttype, destprj, destxt, state))
    else:
        mess = ('sr#{:s} [{:s} {:s}/{:s}] {:s} (State: {:s})'.format(srid, acttype, 
                   destprj, destpkg, destxt, state))
        
elif acttype == 'add_role':
    src  = ''
    srcprj = ''
    srcpkg = ''

    # add_role references the person and role requested
    per = act.find('person')
    name = per.get('name')
    role = per.get('role')
    # add_role req may be for entire projects instead of project/package
    # In these cases destprj is set to None, filter out accordingly
    if destpkg == None:
        mess = ('sr#{:s} [{:s} {:s} as {:s} to {:s}] {:s}'
                ' (State: {:s})'.format(srid, acttype, name, role, 
                                        destprj, destxt, state))
    else:
        mess = ('sr#{:s} [{:s} {:s} as {:s} to {:s}/{:s}]'
                '{:s} (State: {:s})'.format(srid, acttype, name, role,
                                            destprj, destpkg, destxt, state))


print(mess + ' -- https://build.opensuse.org/request/show/{:s}'.format(srid)) 

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.