def skill_group(): group = SkillGroup.objects.all().distinct() if group and group.exists(): query_dict = QueryDict(mutable=True) for v in group: name = v.name data = __skill(name) query_dict.appendlist(name, data) return query_dict else: return str("Not Found.")
def make_url(to, args=(), kwargs={}, keep_params=False, params=None, append=None, request=None, include=None, exclude=None, fragment=None, absolute=False, resolve=True): '''Build an URL from a relative or absolute path, a model instance, a view name or view function. If you pass a request you can ask to keep params from it, exclude some of them or include only a subset of them. You can set parameters or append to existing one. ''' if resolve: url = resolve_url(to, *args, **kwargs) else: url = to scheme, netloc, path, query_string, o_fragment = urlparse.urlsplit(url) url = urlparse.urlunsplit((scheme, netloc, path, '', '')) fragment = fragment or o_fragment # Django < 1.6 compat, query_string is not optional url_params = QueryDict(query_string=query_string, mutable=True) if keep_params: assert request is not None, 'missing request' for key, value in request.GET.iteritems(): if exclude and key in exclude: continue if include and key not in include: continue url_params.setlist(key, request.GET.getlist(key)) if params: for key, value in params.iteritems(): if isinstance(value, (tuple, list)): url_params.setlist(key, value) else: url_params[key] = value if append: for key, value in append.iteritems(): if isinstance(value, (tuple, list)): url_params.extend({key: value}) else: url_params.appendlist(key, value) if url_params: url += '?%s' % url_params.urlencode(safe='/') if fragment: url += '#%s' % fragment if absolute: if request: url = request.build_absolute_uri(url) else: raise TypeError('make_url() absolute cannot be used without request') # URL must be ASCII, always return url.encode('ascii')
def make_url(to, args=(), kwargs={}, keep_params=False, params=None, append=None, request=None, include=None, exclude=None, fragment=None, absolute=False): '''Build an URL from a relative or absolute path, a model instance, a view name or view function. If you pass a request you can ask to keep params from it, exclude some of them or include only a subset of them. You can set parameters or append to existing one. ''' url = resolve_url(to, *args, **kwargs) scheme, netloc, path, query_string, o_fragment = urlparse.urlsplit(url) url = urlparse.urlunsplit((scheme, netloc, path, '', '')) fragment = fragment or o_fragment # Django < 1.6 compat, query_string is not optional url_params = QueryDict(query_string=query_string, mutable=True) if keep_params: assert request is not None, 'missing request' for key, value in request.GET.iteritems(): if exclude and key in exclude: continue if include and key not in include: continue url_params.setlist(key, request.GET.getlist(key)) if params: for key, value in params.iteritems(): if isinstance(value, (tuple, list)): url_params.setlist(key, value) else: url_params[key] = value if append: for key, value in append.iteritems(): if isinstance(value, (tuple, list)): url_params.extend({key: value}) else: url_params.appendlist(key, value) if url_params: url += '?%s' % url_params.urlencode(safe='/') if fragment: url += '#%s' % fragment if absolute: if request: url = request.build_absolute_uri(url) else: raise TypeError('make_url() absolute cannot be used without request') return url
def suggest_asymm_examples(): asymm = Property.objects.filter(symmetric=False) results = [] for prop in asymm: terms = ['H{}r'.format(prop.id), 'L{}l'.format(prop.id)] narrow, _ = ring_search(terms) if len(narrow) > 0: continue terms = mirror_search_terms(terms) narrow, _ = ring_search(terms) if len(narrow) > 0: continue qd = QueryDict(mutable=True) qd.appendlist('H', '{}l'.format(prop.id)) qd.appendlist('L', '{}r'.format(prop.id)) results.append((prop, '{}?{}'.format(reverse('results'), qd.urlencode()))) return results
class FilterExtractor(LuceneTreeTransformer): """Extract all of the applicable search filters from the text query to use as field queries """ def __init__(self, *args, **kwargs): self.sort_only = kwargs.pop("sort_only", False) super().__init__(*args, **kwargs) self.filters = QueryDict(mutable=True) self.sort = None self.use_hl = False def visit(self, node, parents=None): try: return super().visit(node, parents) except RemoveRootError: # if not at root, keep reraising the error until we get to the root, # then return None if parents is None: return None else: raise def visit_search_field(self, node, parents): # pylint: disable=too-many-return-statements, too-many-branches # substitute any aliases if node.name in FILTER_FIELDS: filter_name = FILTER_FIELDS[node.name] # update the node name to what it aliases to, # so that the alias will hold even if we are in sort only mode node.name = filter_name elif any(re.match(rf"^{p}$", node.name) for p in DYNAMIC_FILTER_FIELDS): filter_name = node.name else: filter_name = None # remove slugs from ID fields if filter_name in ID_FIELDS: # remove the slug if its an ID field node.expr = SlugRemover().visit(node.expr) # extract the filters if filter_name and not self.sort_only: # validate fields and do not add to filters if they fail if filter_name in NUMERIC_FIELDS and not all( NumberValidator().visit(node.expr) ): return node if filter_name in DATE_FIELDS and not all(DateValidator().visit(node.expr)): return node # no filters may have nested search fields if any(SearchFieldDetector().visit(node.expr)): return node if parents and isinstance(parents[-1], (Not, Prohibit)): filter_name = f"-{filter_name}" self.filters.appendlist(filter_name, str(node.expr)) self.prune_parents(parents) return None elif node.name in ("sort", "order"): self.sort = str(node.expr) self.prune_parents(parents) return None elif node.name == "hl": self.use_hl = str(node.expr).lower() == "true" self.prune_parents(parents) return None elif node.name == "_query_": # remove _query_ for security purposes self.prune_parents(parents) return None else: return node def prune_parents(self, parents): """If we are removing a search node, this allows us to also remove any unary parents from the tree """ # only need to worry about Boost and Unary when removing search fields # they are the only parents a search field can have which are unary if len(parents) > 1 and isinstance(parents[-1], (Boost, Unary)): self.replace_node(parents[-1], None, parents[-2]) elif len(parents) == 1 and isinstance(parents[-1], (Boost, Unary)): raise RemoveRootError