def create_task(name=None, exclude_arch=None, exclude_osmajor=None, version=u'1.0-1', uploader=None, owner=None, priority=u'Manual', valid=None, path=None, description=None, requires=None, runfor=None, type=None): if name is None: name = unique_name(u'/distribution/test_task_%s') if path is None: path = u'/mnt/tests/%s' % name if description is None: description = unique_name(u'description%s') if uploader is None: uploader = create_user(user_name=u'task-uploader%s' % name.replace('/', '-')) if owner is None: owner = u'*****@*****.**' % name.replace('/', '-') if valid is None: valid = True rpm = u'example%s-%s.noarch.rpm' % (name.replace('/', '-'), version) task = Task.lazy_create(name=name) task.rpm = rpm task.version = version task.uploader = uploader task.owner = owner task.priority = priority task.valid = valid task.path = path task.description = description task.avg_time = 1200 if type: for t in type: task.types.append(TaskType.lazy_create(type=t)) if exclude_arch: for arch in exclude_arch: task.excluded_arch.append( TaskExcludeArch(arch_id=Arch.by_name(arch).id)) if exclude_osmajor: for osmajor in exclude_osmajor: task.excluded_osmajor.append( TaskExcludeOSMajor(osmajor=OSMajor.lazy_create( osmajor=osmajor))) if requires: for require in requires: tp = TaskPackage.lazy_create(package=require) task.required.append(tp) if runfor: for run in runfor: task.runfor.append(TaskPackage.lazy_create(package=run)) return task
def create_task(name=None, exclude_arches=None, exclusive_arches=None, exclude_osmajors=None, exclusive_osmajors=None, version=u'1.0-1', uploader=None, owner=None, priority=u'Manual', valid=None, path=None, description=None, requires=None, runfor=None, type=None, avg_time=1200): if name is None: name = unique_name(u'/distribution/test_task_%s') if path is None: path = u'/mnt/tests/%s' % name if description is None: description = unique_name(u'description%s') if uploader is None: uploader = create_user(user_name=u'task-uploader%s' % name.replace('/', '-')) if owner is None: owner = u'*****@*****.**' % name.replace('/', '-') if valid is None: valid = True rpm = u'example%s-%s.noarch.rpm' % (name.replace('/', '-'), version) task = Task(name=name) task.rpm = rpm task.version = version task.uploader = uploader task.owner = owner task.priority = priority task.valid = valid task.path = path task.description = description task.avg_time = avg_time task.license = u'GPLv99+' if type: for t in type: task.types.append(TaskType.lazy_create(type=t)) if exclude_arches: for arch in exclude_arches: task.excluded_arches.append(Arch.by_name(arch)) if exclusive_arches: for arch in exclusive_arches: task.exclusive_arches.append(Arch.by_name(arch)) if exclude_osmajors: for osmajor in exclude_osmajors: task.excluded_osmajors.append(OSMajor.lazy_create(osmajor=osmajor)) if exclusive_osmajors: for osmajor in exclusive_osmajors: task.exclusive_osmajors.append(OSMajor.lazy_create(osmajor=osmajor)) if requires: for require in requires: tp = TaskPackage.lazy_create(package=require) task.required.append(tp) if runfor: for run in runfor: task.runfor.append(TaskPackage.lazy_create(package=run)) session.add(task) session.flush() log.debug('Created task %s', task.name) return task
def create_task(name=None, exclude_arch=None, exclude_osmajor=None, version=u'1.0-1', uploader=None, owner=None, priority=u'Manual', valid=None, path=None, description=None, requires=None, runfor=None, type=None): if name is None: name = unique_name(u'/distribution/test_task_%s') if path is None: path = u'/mnt/tests/%s' % name if description is None: description = unique_name(u'description%s') if uploader is None: uploader = create_user(user_name=u'task-uploader%s' % name.replace('/', '-')) if owner is None: owner = u'*****@*****.**' % name.replace('/', '-') if valid is None: valid = True rpm = u'example%s-%s.noarch.rpm' % (name.replace('/', '-'), version) task = Task.lazy_create(name=name) task.rpm = rpm task.version = version task.uploader = uploader task.owner = owner task.priority = priority task.valid = valid task.path = path task.description = description if type: for t in type: task.types.append(TaskType.lazy_create(type=t)) if exclude_arch: for arch in exclude_arch: task.excluded_arch.append(TaskExcludeArch(arch_id=Arch.by_name(arch).id)) if exclude_osmajor: for osmajor in exclude_osmajor: task.excluded_osmajor.append(TaskExcludeOSMajor(osmajor=OSMajor.lazy_create(osmajor=osmajor))) if requires: for require in requires: tp = TaskPackage.lazy_create(package=require) task.required.append(tp) if runfor: for run in runfor: task.runfor.append(TaskPackage.lazy_create(package=run)) return task
def filter(self, filter): """ Returns a list of tasks filtered by the given criteria. The *filter* argument must be an XML-RPC structure (dict), with any of the following keys: 'distro_name' Distro name. Include only tasks which are compatible with this distro. 'osmajor' OSVersion OSMajor, like RedHatEnterpriseLinux6. Include only tasks which are compatible with this OSMajor. 'names' Task name. Include only tasks that are named. Useful when combined with 'osmajor' or 'distro_name'. 'packages' List of package names. Include only tasks which have a Run-For entry matching any of these packages. 'types' List of task types. Include only tasks which have one or more of these types. 'valid' bool 0 or 1. Include only tasks which are valid or not. 'destructive' bool 0 or 1. Set to 0 for only non-destructive tasks. Set to 1 for only destructive tasks. The return value is an array of dicts, which are name and arches. name is the name of the matching tasks. arches is an array of arches which this task does not apply for. Call :meth:`tasks.to_dict` to fetch metadata for a particular task. .. versionchanged:: 0.9 Changed 'install_name' to 'distro_name' in the *filter* argument. """ if filter.get('distro_name'): distro = Distro.by_name(filter['distro_name']) tasks = distro.tasks() elif 'osmajor' in filter and filter['osmajor']: try: osmajor = OSMajor.by_name(filter['osmajor']) except InvalidRequestError: raise BX(_('Invalid OSMajor: %s' % filter['osmajor'])) tasks = osmajor.tasks() else: tasks = Task.query # Filter by valid task if requested if 'valid' in filter: tasks = tasks.filter(Task.valid == bool(filter['valid'])) # Filter by destructive if requested if 'destructive' in filter: tasks = tasks.filter( Task.destructive == bool(filter['destructive'])) # Filter by name if specified # /distribution/install, /distribution/reservesys if 'names' in filter and filter['names']: # if not a list, make it into a list. if isinstance(filter['names'], str): filter['names'] = [filter['names']] or_names = [] for tname in filter['names']: or_names.append(Task.name == tname) tasks = tasks.filter(or_(*or_names)) # Filter by packages if specified # apache, kernel, mysql, etc.. if 'packages' in filter and filter['packages']: # if not a list, make it into a list. if isinstance(filter['packages'], str): filter['packages'] = [filter['packages']] tasks = tasks.filter( Task.runfor.any( or_(*[ TaskPackage.package == package for package in filter['packages'] ]))) # Filter by type if specified # Tier1, Regression, KernelTier1, etc.. if 'types' in filter and filter['types']: # if not a list, make it into a list. if isinstance(filter['types'], str): filter['types'] = [filter['types']] tasks = tasks.join('types') or_types = [] for type in filter['types']: try: tasktype = TaskType.by_name(type) except InvalidRequestError, err: raise BX(_('Invalid Task Type: %s' % type)) or_types.append(TaskType.id == tasktype.id) tasks = tasks.filter(or_(*or_types))
def filter(self, filter): """ Returns a list of tasks filtered by the given criteria. The *filter* argument must be an XML-RPC structure (dict), with any of the following keys: 'distro_name' Distro name. Include only tasks which are compatible with this distro. 'osmajor' OSVersion OSMajor, like RedHatEnterpriseLinux6. Include only tasks which are compatible with this OSMajor. 'names' Task name. Include only tasks that are named. Useful when combined with 'osmajor' or 'distro_name'. 'packages' List of package names. Include only tasks which have a Run-For entry matching any of these packages. 'types' List of task types. Include only tasks which have one or more of these types. 'valid' bool 0 or 1. Include only tasks which are valid or not. 'destructive' bool 0 or 1. Set to 0 for only non-destructive tasks. Set to 1 for only destructive tasks. The return value is an array of dicts, which are name and arches. name is the name of the matching tasks. arches is an array of arches which this task does not apply for. Call :meth:`tasks.to_dict` to fetch metadata for a particular task. .. versionchanged:: 0.9 Changed 'install_name' to 'distro_name' in the *filter* argument. """ if filter.get('distro_name'): distro = Distro.by_name(filter['distro_name']) tasks = distro.tasks() elif 'osmajor' in filter and filter['osmajor']: try: osmajor = OSMajor.by_name(filter['osmajor']) except InvalidRequestError: raise BX(_('Invalid OSMajor: %s' % filter['osmajor'])) tasks = osmajor.tasks() else: tasks = Task.query # Filter by valid task if requested if 'valid' in filter: tasks = tasks.filter(Task.valid==bool(filter['valid'])) # Filter by destructive if requested if 'destructive' in filter: tasks = tasks.filter(Task.destructive==bool(filter['destructive'])) # Filter by name if specified # /distribution/install, /distribution/reservesys if 'names' in filter and filter['names']: # if not a list, make it into a list. if isinstance(filter['names'], str): filter['names'] = [filter['names']] or_names = [] for tname in filter['names']: or_names.append(Task.name==tname) tasks = tasks.filter(or_(*or_names)) # Filter by packages if specified # apache, kernel, mysql, etc.. if 'packages' in filter and filter['packages']: # if not a list, make it into a list. if isinstance(filter['packages'], str): filter['packages'] = [filter['packages']] tasks = tasks.filter(Task.runfor.any(or_( *[TaskPackage.package == package for package in filter['packages']]))) # Filter by type if specified # Tier1, Regression, KernelTier1, etc.. if 'types' in filter and filter['types']: # if not a list, make it into a list. if isinstance(filter['types'], str): filter['types'] = [filter['types']] tasks = tasks.join('types') or_types = [] for type in filter['types']: try: tasktype = TaskType.by_name(type) except InvalidRequestError, err: raise BX(_('Invalid Task Type: %s' % type)) or_types.append(TaskType.id==tasktype.id) tasks = tasks.filter(or_(*or_types))