def __init__(self, db, request): ''' Builds choices according to user selection. ''' self.db = db super(OsComponentFilterForm, self).__init__() self.fields['os_release'].populate_choices(all_distros_with_all_releases(db)) self.fields['os_release'].widget.attrs['onchange'] = ( 'Dajaxice.pyfaf.hub.services.components(Dajax.process' ',{"os_release":this.value,"associate":"*","component_field":"component"})') # Set initial value for operating system release. if 'os_release' in request: self.fields['os_release'].try_to_select(request['os_release']) # Find all components distro, release = split_distro_release(self.fields['os_release'].initial) self.os_release_id = distro_release_id(db, distro, release) self.fields['component'].populate_choices(components_list(db, [self.os_release_id] if self.os_release_id != -1 else [])) if 'component' in request: self.fields['component'].try_to_select(request['component'])
def get_component_selection(self): ''' Returns list of IDs of selected components. Empty list means all components (no component filtering). ''' components = self.fields['component'].get_selection() associates = self.fields['associate'].get_selection() if len(components) == 0 and associates: components = [component[0] for component in components_list(self.db, [self.os_release_id] if self.os_release_id != -1 else [], associates)] return components
def components(request, os_release, associate, component_field): dajax = Dajax() db = pyfaf.storage.getDatabase() os_releases = [] os_release_id = distro_release_id(db, *split_distro_release(os_release)) if os_release_id != -1: os_releases.append(os_release_id) out = "<option value='*'>All Components</option>" for component in unique(components_list(db, os_releases, None if '*' == associate else [int(associate)]), lambda x: x[1]): out += "<option value='%s'>%s</option>\n" % (slugify(component[1]), component[1]) dajax.assign('#id_%s' % (component_field), 'innerHTML', out) return dajax.json()