#2771 lib: use parse_task_params for taskLabel
Merged a year ago by tkopecek. Opened a year ago by tkopecek.
tkopecek/koji issue2519  into  master

file modified
+46 -88
@@ -61,6 +61,7 @@ 

  from requests.packages.urllib3.util.retry import Retry

  from six.moves import range, zip

  

+ from koji.tasks import parse_task_params

  from koji.xmlrpcplus import Fault, dumps, getparser, loads, xmlrpc_client

  from . import util

  from . import _version
@@ -3340,116 +3341,73 @@ 

  def _taskLabel(taskInfo):

      """Format taskInfo (dict) into a descriptive label."""

      method = taskInfo['method']

+     request = taskInfo['request']

      arch = taskInfo['arch']

+     params = parse_task_params(method, request)

      extra = ''

      if method in ('build', 'maven'):

-         if 'request' in taskInfo:

-             source, target = taskInfo['request'][:2]

-             if '://' in source:

-                 module_info = _module_info(source)

-             else:

-                 module_info = os.path.basename(source)

-             extra = '%s, %s' % (target, module_info)

+         src = params.get('src') or params.get('url')

+         if '://' in src:

+             module_info = _module_info(src)

+         else:

+             module_info = os.path.basename(src)

+         target = params.get('target') or params.get('build_tag')

+         extra = '%s, %s' % (target, module_info)

      elif method in ('indirectionimage',):

-         if 'request' in taskInfo:

-             if len(taskInfo['request']) == 1:

-                 module_name = taskInfo['request'][0]['name']

-                 module_version = taskInfo['request'][0]['version']

-                 module_release = taskInfo['request'][0]['release']

-                 extra = '%s, %s, %s' % (module_name, module_version, module_release)

-     elif method in ('buildSRPMFromSCM', 'buildSRPMFromCVS'):

-         if 'request' in taskInfo:

-             url = taskInfo['request'][0]

-             extra = _module_info(url)

+         module_name = params['opts']['name']

+         module_version = params['opts']['version']

+         module_release = params['opts']['release']

+         extra = '%s, %s, %s' % (module_name, module_version, module_release)

+     elif method in ('buildSRPMFromSCM'):

+         extra = _module_info(params['url'])

      elif method == 'buildArch':

-         if 'request' in taskInfo:

-             srpm, tagID, arch = taskInfo['request'][:3]

-             srpm = os.path.basename(srpm)

-             extra = '%s, %s' % (srpm, arch)

+         srpm = os.path.basename(params['pkg'])

+         arch = params['arch']

+         extra = '%s, %s' % (srpm, arch)

      elif method == 'buildMaven':

-         if 'request' in taskInfo:

-             build_tag = taskInfo['request'][1]

-             extra = build_tag['name']

+         extra = params['build_tag']['name']

      elif method == 'wrapperRPM':

-         if 'request' in taskInfo:

-             build_target = taskInfo['request'][1]

-             build = taskInfo['request'][2]

-             if build:

-                 extra = '%s, %s' % (build_target['name'], buildLabel(build))

-             else:

-                 extra = build_target['name']

+         if params['build']:

+             extra = '%s, %s' % (params['build_target']['name'], buildLabel(params['build']))

+         else:

+             extra = params['build_target']['name']

      elif method == 'winbuild':

-         if 'request' in taskInfo:

-             # vm = taskInfo['request'][0]

-             url = taskInfo['request'][1]

-             target = taskInfo['request'][2]

-             module_info = _module_info(url)

-             extra = '%s, %s' % (target, module_info)

+         module_info = _module_info(params['source_url'])

+         extra = '%s, %s' % (params['target'], module_info)

      elif method == 'vmExec':

-         if 'request' in taskInfo:

-             extra = taskInfo['request'][0]

+         extra = params['name']

      elif method == 'buildNotification':

-         if 'request' in taskInfo:

-             build = taskInfo['request'][1]

-             extra = buildLabel(build)

+         extra = buildLabel(params['build'])

      elif method in ('newRepo', 'distRepo'):

-         if 'request' in taskInfo:

-             extra = str(taskInfo['request'][0])

+         extra = str(params['tag'])

      elif method in ('tagBuild', 'tagNotification'):

          # There is no displayable information included in the request

          # for these methods

          pass

-     elif method == 'prepRepo':

-         if 'request' in taskInfo:

-             tagInfo = taskInfo['request'][0]

-             extra = tagInfo['name']

      elif method == 'createrepo':

-         if 'request' in taskInfo:

-             arch = taskInfo['request'][1]

-             extra = arch

+         extra = params['arch']

      elif method == 'createdistrepo':

-         if 'request' in taskInfo:

-             repo_id = taskInfo['request'][1]

-             arch = taskInfo['request'][2]

-             extra = '%s, %s' % (repo_id, arch)

+         extra = '%s, %s' % (params['repo_id'], params['arch'])

      elif method == 'dependantTask':

-         if 'request' in taskInfo:

-             extra = ', '.join([subtask[0] for subtask in taskInfo['request'][1]])

+         task_list = params['task_list']

+         extra = ', '.join([str(subtask[0]) for subtask in task_list])

      elif method in ('chainbuild', 'chainmaven'):

-         if 'request' in taskInfo:

-             extra = taskInfo['request'][1]

+         extra = params['target']

      elif method == 'waitrepo':

-         if 'request' in taskInfo:

-             extra = str(taskInfo['request'][0])

-             if len(taskInfo['request']) >= 3:

-                 nvrs = taskInfo['request'][2]

-                 if isinstance(nvrs, list):

-                     extra += ', ' + ', '.join(nvrs)

+         extra = str(params['tag'])

+         if isinstance(params['nvrs'], list):

+             extra += ', ' + ', '.join(params['nvrs'])

      elif method in ('livecd', 'appliance', 'image', 'livemedia'):

-         if 'request' in taskInfo:

-             stuff = taskInfo['request']

-             if method == 'image':

-                 kickstart = os.path.basename(stuff[-1]['kickstart'])

-             else:

-                 kickstart = os.path.basename(stuff[4])

-             extra = '%s, %s-%s, %s' % (stuff[3], stuff[0], stuff[1], kickstart)

+         kstart = params.get('ksfile') or params.get('inst_tree')

+         arch = params.get('arch') or params.get('arches')

+         extra = '%s, %s-%s, %s' % (arch, params['name'], params['version'], kstart)

      elif method in ('createLiveCD', 'createAppliance', 'createImage', 'createLiveMedia'):

-         if 'request' in taskInfo:

-             stuff = taskInfo['request']

-             if method == 'createImage':

-                 kickstart = os.path.basename(stuff[-1]['kickstart'])

-             else:

-                 kickstart = os.path.basename(stuff[7])

-             extra = '%s, %s-%s-%s, %s, %s' % (stuff[4]['name'], stuff[0],

-                                               stuff[1], stuff[2], kickstart, stuff[3])

-     elif method == 'restart':

-         if 'request' in taskInfo:

-             host = taskInfo['request'][0]

-             extra = host['name']

-     elif method == 'restartVerify':

-         if 'request' in taskInfo:

-             task_id, host = taskInfo['request'][:2]

-             extra = host['name']

+         kstart = params.get('ksfile') or params.get('inst_tree')

+         extra = '%s, %s-%s-%s, %s, %s' % (params['target_info']['name'],

+                                           params['name'], params['version'], params['release'],

+                                           kstart, params['arch'])

+     elif method in ('restart', 'restartVerify'):

+         extra = params['host']['name']

  

      if extra:

          return '%s (%s)' % (method, extra)

file modified
+6
@@ -276,6 +276,12 @@ 

      'saveFailedTree': [

          [['buildrootID', 'full'], None, None, (False,)],

      ],

+     'vmExec': [

+         [['name', 'task_info', 'opts'], None, None, None],

+     ],

+     'winbuild': [

+         [['name', 'source_url', 'target', 'opts'], None, None, None],

+     ],

  }

  

  

@@ -26,7 +26,8 @@ 

          time.tzset()

          self.taskinfo = {'arch': 'noarch',

                           'id': 8,

-                          'method': 'build'}

+                          'method': 'build',

+                          'request': ['src', 'target', 'opts']}

          self.buildinfo = {'build_id': 1,

                            'id': 1,

                            'name': 'test-build',
@@ -60,7 +61,7 @@ 

  State: COMPLETE

  Built by: kojiadmin

  Volume: DEFAULT

- Task: 8 build (noarch)

+ Task: 8 build (target, src)

  Finished: Thu, 04 Mar 2021 14:45:40 UTC

  Tags: 

  """

@@ -190,7 +190,8 @@ 

                  'method': 'createrepo',

                  'parent': 3,

                  'priority': 14,

-                 'arch': 'noarch'

+                 'arch': 'noarch',

+                 'request': ['tag'],

              },

              {

                  'children':
@@ -203,7 +204,8 @@ 

                          'method': 'createrepo',

                          'parent': 3,

                          'priority': 14,

-                         'arch': 'noarch'

+                         'arch': 'noarch',

+                         'request': ['repo_id', 'noarch', 'oldrepo'],

                      },

                  ],

                  'id': 3,
@@ -212,13 +214,14 @@ 

                  'method': 'newRepo',

                  'priority': 15,

                  'arch': 'noarch',

+                 'request': ['tag'],

              }

          ]

  

          header = \

              "ID       Pri  Owner                State    Arch       Name\n"

          task_output = \

-             "3        15   kojiadmin            FREE     noarch     newRepo (noarch)\n" + \

+             "3        15   kojiadmin            FREE     noarch     newRepo (tag)\n" + \

              "5        14   kojiadmin            FREE     noarch      +createrepo (noarch)\n"

  

          expected = self.format_error_message(

@@ -121,7 +121,7 @@ 

                      'id': 1,

                      'method': 'wrapperRPM',

                      'arch': 'x86_64',

-                     'request': [1, {'name': target}, self.build_templ]

+                     'request': [1, {'name': target}, self.build_templ, 'task', 'opts']

                    },

                    {'wrapRPM-test': True}]

          expect = ["Spec File URL: %s" % params[0]]

@@ -0,0 +1,167 @@ 

+ import unittest

+ 

+ import koji

+ 

+ class TestTaskLabel(unittest.TestCase):

+     def test_all(self):

+         url = 'https+git://git.server/path/module#branch'

+         module = '/path/module:branch'

+         build = {'name': 'n', 'version': 'v', 'release': 'r', 'epoch': None}

+         nvr = 'n-v-r'

+         test_data = [

+             ['randomdata', 'malformed task'],

+             [{}, 'malformed task'],

+             [None, 'malformed task'],

+             [

+                 {'method': 'build', 'arch': 'x86_64',

+                  'request': [url, 'target', 'opts'],

+                 }, 'build (target, %s)' % module

+             ],

+             [

+                 {'method': 'build', 'arch': 'x86_64',

+                  'request': ['n-v-r.src.rpm', 'target', 'opts']

+                 }, 'build (target, n-v-r.src.rpm)'

+             ],

+             [

+                 {'method': 'maven', 'arch': 'x86_64',

+                  'request': ['https+git://git.server/path/module#branch', 'target', 'opts'],

+                 }, 'maven (target, %s)' % module

+             ],

+             [

+                 {'method': 'maven', 'arch': 'x86_64',

+                  'request': ['n-v-r.jar', 'target', 'opts'],

+                 }, 'maven (target, n-v-r.jar)'

+             ],

+             [

+                 {'method': 'indirectionimage', 'arch': 'x86_64',

+                  'request': [build],

+                 }, 'indirectionimage (n, v, r)'

+             ],

+             [

+                 {'method': 'buildSRPMFromSCM', 'arch': 'x86_64',

+                  'request': [url, 'build_tag', 'opts']

+                 }, 'buildSRPMFromSCM (%s)' % module

+             ],

+             [

+                 {'method': 'buildArch', 'arch': 'x86_64',

+                  'request': ['pkg', 'root', 'arch', True, 'opts'],

+                 }, 'buildArch (pkg, arch)'

+             ],

+             [

+                 {'method': 'buildMaven', 'arch': 'x86_64',

+                  'request': [url, {'name': 'build_tag', 'id': 123}, {}],

+                 }, 'buildMaven (build_tag)',

+             ],

+             [

+                 {'method': 'wrapperRPM', 'arch': 'x86_64',

+                  'request': [url, {'name': 'target'}, build, 'task']

+                 }, 'wrapperRPM (target, n-v-r)',

+             ],

+             # winbuild, vmExec (not in legacy signatures)

+             [

+                 {'method': 'buildNotification', 'arch': 'x86_64',

+                  'request': ['rpts', build, 'target', 'weburl']

+                 }, 'buildNotification (n-v-r)'

+             ],

+             [

+                 {'method': 'newRepo', 'arch': 'x86_64',

+                  'request': ['tag', 123, 'src']

+                 }, 'newRepo (tag)'

+             ],

+             [

+                 {'method': 'distRepo', 'arch': 'x86_64',

+                  'request': ['tag', 123, 'keys', 'task_opts']

+                 }, 'distRepo (tag)'

+             ],

+             [

+                 {'method': 'tagBuild', 'arch': 'x86_64',

+                  'request': ['tag', 123, True, 'from', True],

+                 }, 'tagBuild (x86_64)'

+             ],

+             [

+                 {'method': 'tagNotification', 'arch': 'x86_64',

+                  'request': ['rcpts', True, 'tag', 'from', build, 'user'],

+                 }, 'tagNotification (x86_64)'

+             ],

+             [

+                 {'method': 'createrepo', 'arch': 'x86_64',

+                  'request': ['repo_id', 'arch', 'oldrepo']

+                 }, 'createrepo (arch)'

+             ],

+             [

+                 {'method': 'createdistrepo', 'arch': 'x86_64',

+                  'request': ['tag', 'repo_id', 'arch', 'keys', 'opts']

+                 }, 'createdistrepo (repo_id, arch)'

+             ],

+             [

+                 {'method': 'dependantTask', 'arch': 'x86_64',

+                  'request': ['wait_list', [[1], [2]]],

+                 }, 'dependantTask (1, 2)'

+             ],

+             [

+                 {'method': 'chainbuild', 'arch': 'x86_64',

+                  'request': ['srcs', 'target', 'opts'],

+                 }, 'chainbuild (target)'

+             ],

+             [

+                 {'method': 'chainmaven', 'arch': 'x86_64',

+                  'request': ['srcs', 'target', 'opts'],

+                 }, 'chainmaven (target)'

+             ],

+             [

+                 {'method': 'waitrepo', 'arch': 'x86_64',

+                  'request': ['tag', 'newer', ['nvr1', 'nvr2']]

+                 }, 'waitrepo (tag, nvr1, nvr2)'

+             ],

+             [

+                 {'method': 'appliance', 'arch': 'x86_64',

+                  'request': ['name', 'version', 'arch', 'target', 'ksfile', 'opts'],

+                 }, 'appliance (arch, name-version, ksfile)',

+             ],

+             [

+                 {'method': 'livecd', 'arch': 'x86_64',

+                  'request': ['name', 'version', 'arch', 'target', 'ksfile', 'opts'],

+                 }, 'livecd (arch, name-version, ksfile)',

+             ],

+             [

+                 {'method': 'image', 'arch': 'x86_64',

+                  'request': ['name', 'version', 'arches', 'target', 'inst_tree', 'opts'],

+                 }, 'image (arches, name-version, inst_tree)',

+             ],

+             [

+                 {'method': 'livemedia', 'arch': 'x86_64',

+                  'request': ['name', 'version', 'arches', 'target', 'ksfile', 'opts'],

+                 }, 'livemedia (arches, name-version, ksfile)',

+             ],

+             [

+                 {'method': 'createLiveCD', 'arch': 'x86_64',

+                  'request': ['name', 'version', 'release', 'arch', {'name': 'target'}, 'build_tag',

+                              'repo_info', 'ksfile', 'opts'],

+                 }, 'createLiveCD (target, name-version-release, ksfile, arch)',

+             ],

+             [

+                 {'method': 'restart', 'arch': 'noarch',

+                  'request': [{'name': 'hostname'}],

+                 }, 'restart (hostname)'

+             ],

+             [

+                 {'method': 'restartVerify', 'arch': 'noarch',

+                  'request': [123, {'name': 'hostname'}],

+                 }, 'restartVerify (hostname)'

+             ],

+             [

+                 {'method': 'vmExec', 'arch': 'x86_64',

+                  'request': ['name', 'task_info', 'opts'],

+                  }, 'vmExec (name)'

+             ],

+             [

+                 {'method': 'winbuild', 'arch': 'x86_64',

+                  'request': ['name', 'source_url', 'target', 'opts'],

+                  }, 'winbuild (target, :source_url)'

+             ],

+ 

+         ]

+ 

+         for input, output in test_data:

+             result = koji.taskLabel(input)

+             self.assertEqual(result, output)

taskInfo['request'] might not exist in some case, eg: the call in BuildNotificationTask

yep, it looks it is broken - is some older PR which I've forgotten to update. I've to revisit it first (even tests are failing now).

rebased onto c465200740f7b297f2319f62db69d77d6e2972e8

a year ago

1 new commit added

  • fix tests
a year ago

rebased onto c935850

a year ago

fixed - mainly tests and windows tasks. Btw, BuildNotification also has request.

pretty please pagure-ci rebuild

a year ago

Metadata Update from @tkopecek:
- Pull-request tagged with: testing-ready

a year ago

Metadata Update from @mfilip:
- Pull-request tagged with: testing-done

a year ago

Commit 880826b fixes this pull-request

Pull-Request has been merged by tkopecek

a year ago