"""
SMSES
--------
"""
from . import filters
from .client import ElasticDocumentAdapter, create_document_adapter
from .const import (
HQ_SMS_INDEX_CANONICAL_NAME,
HQ_SMS_INDEX_NAME,
HQ_SMS_SECONDARY_INDEX_NAME,
)
from .es_query import HQESQuery
from .index.settings import IndexSettingsKey
[docs]class SMSES(HQESQuery):
index = HQ_SMS_INDEX_CANONICAL_NAME
@property
def builtin_filters(self):
return [
incoming_messages,
outgoing_messages,
to_commcare_user,
to_commcare_case,
to_web_user,
to_couch_user,
to_commcare_user_or_case,
received,
direction,
processed,
processed_or_incoming_messages,
] + super(SMSES, self).builtin_filters
[docs] def user_aggregation(self):
return self.terms_aggregation('couch_recipient', 'user')
[docs]class ElasticSMS(ElasticDocumentAdapter):
settings_key = IndexSettingsKey.SMS
canonical_name = HQ_SMS_INDEX_CANONICAL_NAME
@property
def mapping(self):
from .mappings.sms_mapping import SMS_MAPPING
return SMS_MAPPING
@property
def model_cls(self):
from corehq.apps.sms.models import SMS
return SMS
sms_adapter = create_document_adapter(
ElasticSMS,
HQ_SMS_INDEX_NAME,
"sms",
secondary=HQ_SMS_SECONDARY_INDEX_NAME,
)
[docs]def incoming_messages():
return direction("i")
[docs]def outgoing_messages():
return direction("o")
[docs]def direction(direction_):
return filters.term("direction", direction_)
[docs]def processed_or_incoming_messages():
return filters.NOT(filters.AND(outgoing_messages(), processed(False)))
[docs]def processed(processed=True):
return filters.term('processed', processed)
[docs]def to_commcare_user():
return filters.term("couch_recipient_doc_type", "commcareuser")
[docs]def to_commcare_case():
return filters.term("couch_recipient_doc_type", "commcarecase")
[docs]def to_web_user():
return filters.term("couch_recipient_doc_type", "webuser")
[docs]def to_couch_user():
return filters.term("couch_recipient_doc_type", "couchuser")
[docs]def to_commcare_user_or_case():
return filters.OR(to_commcare_user(), to_commcare_case())
[docs]def received(gt=None, gte=None, lt=None, lte=None):
return filters.date_range('date', gt, gte, lt, lte)