Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Nov 22, 2017. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ For example, within a [Jinja2 template](http://jinja.pocoo.org/), one might do t

```jinja
{% set query = queries.posts %}
{% set posts = query.search_with_url_arguments(size=10) %}
{% set posts = query.search(size=10) %}
{%- for post in posts %}
...
{% endfor %}
Expand All @@ -416,7 +416,7 @@ Optionally takes additional keyword arguments corrosponding to the "mlt" paramet

```jinja
{% set query = queries.posts %}
{% set posts = query.search_with_url_arguments(size=10) %}
{% set posts = query.search(size=10) %}
{%- for post in posts %}
...
{% for similar in more_like_this(post) %}
Expand Down Expand Up @@ -513,10 +513,10 @@ File lookups are done on the fly and a new `Query` instance is created every tim
```python
>>> queries = QueryFinder()
>>> posts_query = queries.posts
>>> posts_results = queries.posts.search_with_url_arguments(size=10)
>>> posts_results = queries.posts.search(size=10)
```

##### `search_with_url_arguments(aggregations=None, **kwargs)`
##### `search(aggregations=None, **kwargs)`

Perform the search with the given keyword arguments, returning a [`QueryResult`](#queryresult) object.

Expand All @@ -537,7 +537,7 @@ For example, `possible_values_for('category', doc_type='posts')` would return th
```python
>>> queries = QueryFinder()
>>> posts_query = queries.posts
>>> posts_results = queries.posts.search_with_url_arguments(size=10)
>>> posts_results = queries.posts.search(size=10)
>>> for result_hit in post_results:
>>> ...
```
Expand Down Expand Up @@ -588,7 +588,7 @@ Each of the JSON object's properties would be accessible as a `QueryHit` object'
```python
>>> queries = QueryFinder()
>>> posts_query = queries.posts
>>> posts_results = queries.posts.search_with_url_arguments(size=10)
>>> posts_results = queries.posts.search(size=10)
>>> for result_hit in post_results:
>>> print result_hit.title, result_hit.author
```
Expand Down
2 changes: 1 addition & 1 deletion sheer/apis/apiv1.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def get(self, name):
query_finder = default_query_finder()
query = getattr(query_finder, name) or flask.abort(404)
request = flask.request
return query.search_with_url_arguments()
return query.search()

api.add_resource(QueryResource, '/api/v1/q/<name>.json')

Expand Down
2 changes: 1 addition & 1 deletion sheer/feeds.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def recent_feed(name):
atom_feed = AtomFeed(**feed.__dict__)
query_finder = QueryFinder()
query = getattr(query_finder, name) or flask.abort(404)
items = query.search_with_url_arguments()
items = query.search()

for item in items:
entry = Entry(item, settings)
Expand Down
24 changes: 14 additions & 10 deletions sheer/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ def __init__(self, filename=None, json_safe=False):
self.__results = None
self.json_safe = json_safe

def search_with_url_arguments(self, aggregations=None, **kwargs):
def search(self, aggregations=None, use_url_arguments=True, **kwargs):
query_file = json.loads(file(self.filename).read())
query_dict = query_file['query']

Expand All @@ -200,10 +200,17 @@ def search_with_url_arguments(self, aggregations=None, **kwargs):
request = flask.request

# Add in filters from the template.
new_multidict = request.args.copy()
new_multidict = MultiDict()
# First add the url arguments if requested
if use_url_arguments:
new_multidict = request.args.copy()
# Next add the arguments from the search() function used in the
# template
for key, value in filter_args.items():
new_multidict.add(key, value)
url_filters = filter_dsl_from_multidict(new_multidict)

filters = filter_dsl_from_multidict(new_multidict)

args_flat = request.args.to_dict(flat=True)
query_body = {}

Expand All @@ -212,7 +219,7 @@ def search_with_url_arguments(self, aggregations=None, **kwargs):
if type(aggregations) is str:
aggregations = [aggregations] # so we can treat it as a list
for fieldname in aggregations:
aggs_dsl[fieldname] = {'terms':
aggs_dsl[fieldname] = {'terms':
{'field': fieldname, 'size': 10000}}
query_body['aggs'] = aggs_dsl
else:
Expand All @@ -225,9 +232,9 @@ def search_with_url_arguments(self, aggregations=None, **kwargs):
[(k, v) for k, v in args_flat.items() if v])
query_dict.update(args_flat_filtered)
query_body['query'] = {'filtered': {'filter': {}}}
if url_filters:
if filters:
query_body['query']['filtered']['filter'][
'and'] = [f for f in url_filters]
'and'] = [f for f in filters]

if 'filters' in query_file:
if 'and' not in query_body['query']['filtered']['filter']:
Expand All @@ -244,16 +251,13 @@ def search_with_url_arguments(self, aggregations=None, **kwargs):
return QueryResults(response, pagenum)

def possible_values_for(self, field, **kwargs):
results = self.search_with_url_arguments(aggregations=[field], **kwargs)
results = self.search(aggregations=[field], **kwargs)
return results.aggregations(field)

@property
def results(self):
if self.__results:
return self.__results
else:
self.search()
return self.__results


class QueryFinder(object):
Expand Down