Skip to content

Instantly share code, notes, and snippets.

View harshvb7's full-sized avatar

Harsh harshvb7

  • Cologne, Germany
View GitHub Profile
tests/views/test_project_detail_view.py
tests/views/.....
>> Views must ONLY test input and status code of the response. Mock the business logic to test the status code.
Ideally our views should be very SLIM and all the logic must go in services and helper functions
If we need to access some variables from request in the service, then better destructure it in the view and pass ONLY the variable in the service NEVER the request object.
In case of API view, call the service from the serializer after validating the input. Don't come back to the view with the validated input and then put the input again in the service.
tests/services/test_document_service.py
# we also index a keyword version of the field
name = Text(
analyzer=my_custom_analyzer,
fields={'keyword': es.Keyword()}
)
# and use it with facets like this
'city': TermsFacet(field='user.city.name.keyword'),
from elasticsearch_dsl import FacetedSearch, TermsFacet
class TweetSearch(FacetedSearch):
facets = {
# use bucket aggregations to define facets
'city': TermsFacet(field='user.city.name'),
}
# an example from elasticsearch-dsl docs
from elasticsearch_dsl import analyzer
html_strip = analyzer('html_strip',
tokenizer="standard",
filter=["standard", "lowercase", "stop", "snowball"],
char_filter=["html_strip"]
)
from elasticsearch_dsl import connections, UpdateByQuery
def bulk_update_docs(ids, instance, fields_changed=[]):
"""
Arguments:
ids: {list} -- list of ids of documents we want to update
instance {Model instance} -- The updated user model object
fields_changed {list} -- list of the model fields changed
"""
"""
Assume the structure of the document looks like this
{
"user": {
"first_name": "Foo",
"last_name": "Bar",
"age": "30",
"city": {
"id": 5,
for offer in basket.offer_set.published().exclude(ticket_price__state=13):
_voucher_ids = list(offer.ticket_price.ticket_vouchers_multiple.all().values_list('id', flat=True))
if (offer.ticket_price.ticket_voucher and offer.ticket_price.ticket_voucher != ticket_price) or (_voucher_ids and ticket_price.id not in _voucher_ids):
....
@harshvb7
harshvb7 / fix.py
Last active September 13, 2018 12:41
def get_reserved_tickets(self, performance=None):
Offer = apps.get_model('events', 'Offer')
Order = apps.get_model('events', 'Order')
offers = Offer.objects.published().filter(
state=1,
ticket_price=self,
)
if performance:
offers = offers.filter(performance=performance)
pending_tickets = offers.filter(basket__state=0).distinct() \

indexing the documents

from pydoc import locate
from django.conf import settings
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def __init__(self):
super(Command, self).__init__()