Beispiel #1
0
    def get_current(cls, namespace, domain, slug, version=None, wrap=True, **kwargs):

        couch_key = cls._generate_couch_key(
            namespace=namespace,
            domain=domain,
            slug=slug,
            version=version,
            reverse=True,
            **kwargs
        )
        results = cache_core.cached_view(cls.get_db(), cls.indicator_list_view(),
            cache_expire=60*60*6,
            reduce=False,
            include_docs=False,
            descending=True,
            **couch_key
        )
        doc = results[0] if results else None
        if wrap and doc:
            try:
                doc_class = to_function(doc.get('value', "%s.%s" % (cls._class_path, cls.__name__)))
                doc_instance = doc_class.get(doc.get('id'))
                return doc_instance
            except Exception as e:
                logging.error("No matching documents found for indicator %s: %s" % (slug, e))
                return None
        return doc
Beispiel #2
0
    def get_unknown_form_name(self, xmlns, app_id=None, none_if_not_found=False):
        if app_id is not None and app_id != '_MISSING_APP_ID':
            try:
                app = get_db().get(app_id)
            except ResourceNotFound:
                # must have been a weird app id, don't fail hard
                pass
            else:
                for module in app.get('modules', []):
                    for form in module['forms']:
                        if form['xmlns'] == xmlns:
                            return form['name'].values()[0]


        key = ["xmlns", self.domain, xmlns]
        results = cache_core.cached_view(
            get_db(),
            'reports_forms/name_by_xmlns',
            reduce=False,
            startkey=key,
            endkey=key + [{}],
            limit=1,
            cache_expire=60
        )

        try:
            data = list(results)[0]
        except IndexError:
            data = None

        if data:
            return data['value']
        return None if none_if_not_found else "Name Unknown"
Beispiel #3
0
    def get_results_with_key(self, key, user_id=None, datespan=None, date_group_level=None, reduce=False):
        view_kwargs = dict()
        if datespan:
            view_kwargs.update(
                startkey=key+datespan.startdate_key_utc,
                endkey=key+datespan.enddate_key_utc+[{}]
            )
        else:
            view_kwargs.update(
                startkey=key,
                endkey=key+[{}]
            )
        if date_group_level:
            base_level = 5 if user_id else 4
            view_kwargs.update(
                group=True,
                group_level=base_level+date_group_level
            )
        else:
            view_kwargs.update(
                reduce=reduce
            )

        # Pull Data from the MVP-only DB
        from mvp_docs.models import IndicatorXForm
        db = IndicatorXForm.get_db()
        section = self.couch_view.split('/')
        couch_view = "%s_indicators/%s" % (section[0], section[1])

        return cache_core.cached_view(db, couch_view, cache_expire=60*60*6, **view_kwargs)
Beispiel #4
0
    def by_domain_and_owner(cls,
                            domain,
                            owner_id,
                            report_slug=None,
                            stale=True,
                            skip=None,
                            limit=None):
        kwargs = {}
        if stale:
            kwargs['stale'] = settings.COUCH_STALE_QUERY

        if report_slug is not None:
            key = ["name slug", domain, owner_id, report_slug]
        else:
            key = ["name", domain, owner_id]

        db = cls.get_db()
        if skip is not None:
            kwargs['skip'] = skip
        if limit is not None:
            kwargs['limit'] = limit

        result = cache_core.cached_view(db,
                                        "reportconfig/configs_by_domain",
                                        reduce=False,
                                        include_docs=True,
                                        startkey=key,
                                        endkey=key + [{}],
                                        wrapper=cls.wrap,
                                        **kwargs)
        return result
Beispiel #5
0
    def get_requests(cls, organization, domain=None, user_id=None):
        key = [organization]
        if domain:
            key.append(domain)
        if user_id:
            key.append(user_id)

        # todo - forcing invalidating on all requests while we turn these features on slowly
        results = cache_core.cached_view(
            cls.get_db(), "orgs/org_requests",
            startkey=key,
            endkey=key + [{}],
            reduce=False,
            include_docs=True,
            wrapper=cls.wrap,
        )

        #return results.all() if not user_id else results.one()

        if not user_id:
            return results
        else:
            try:
                length = len(results)
                if length == 1:
                    return results[0]
                elif length > 0:
                    raise MultipleResultsFound("OrgRequests found multiple results for %s" % key)
            except IndexError:
                return None
Beispiel #6
0
 def by_domain(cls, domain):
     return cache_core.cached_view(cls.get_db(), "groupexport/by_domain",
         key=domain,
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap,
     )
Beispiel #7
0
def get_default_monthly_consumption(domain, product_id, location_type,
                                    case_id):
    """
    Return the most specific consumption value for the passed
    parameters.
    """

    keys = [
        [domain, product_id, {}, case_id],
        [domain, product_id, location_type, None],
        [domain, product_id, None, None],
        [domain, None, None, None],
    ]

    results = cache_core.cached_view(
        DefaultConsumption.get_db(),
        'consumption/consumption_index',
        keys=keys,
        reduce=False,
        limit=1,
    )
    results = results[0] if results else None
    if results and results['value']:
        return Decimal(results['value'])
    else:
        return None
Beispiel #8
0
    def get_unknown_form_name(self, xmlns, app_id=None, none_if_not_found=False):
        if app_id is not None and app_id != '_MISSING_APP_ID':
            try:
                app = get_db().get(app_id)
            except ResourceNotFound:
                # must have been a weird app id, don't fail hard
                pass
            else:
                for module in app.get('modules', []):
                    for form in module['forms']:
                        if form['xmlns'] == xmlns:
                            return form['name'].values()[0]


        key = ["xmlns", self.domain, xmlns]
        results = cache_core.cached_view(
            get_db(),
            'reports_forms/name_by_xmlns',
            reduce=False,
            startkey=key,
            endkey=key + [{}],
            limit=1,
            cache_expire=60
        )

        try:
            data = list(results)[0]
        except IndexError:
            data = None

        if data:
            return data['value']
        return None if none_if_not_found else "Name Unknown"
Beispiel #9
0
    def by_domain_and_owner(cls, domain, owner_id, report_slug=None,
                            stale=True, skip=None, limit=None):
        kwargs = {}
        if stale:
            kwargs['stale'] = settings.COUCH_STALE_QUERY
            pass

        if report_slug is not None:
            key = ["name slug", domain, owner_id, report_slug]
        else:
            key = ["name", domain, owner_id]

        db = cls.get_db()
        if skip is not None:
            kwargs['skip'] = skip
        if limit is not None:
            kwargs['limit'] = limit

        result = cache_core.cached_view(
            db,
            "reportconfig/configs_by_domain",
            reduce=False,
            include_docs=True,
            startkey=key,
            endkey=key + [{}],
            wrapper=cls.wrap,
            **kwargs
        )
        return result
Beispiel #10
0
    def get_by_name(cls, name, strict=False):
        if not name:
            # get_by_name should never be called with name as None (or '', etc)
            # I fixed the code in such a way that if I raise a ValueError
            # all tests pass and basic pages load,
            # but in order not to break anything in the wild,
            # I'm opting to notify by email if/when this happens
            # but fall back to the previous behavior of returning None
            try:
                raise ValueError('%r is not a valid domain name' % name)
            except ValueError:
                if settings.DEBUG:
                    raise
                else:
                    notify_exception(None, '%r is not a valid domain name' % name)
                    return None
        extra_args = {'stale': settings.COUCH_STALE_QUERY} if not strict else {}

        db = cls.get_db()
        res = cache_core.cached_view(db, "domain/domains", key=name, reduce=False,
                                     include_docs=True, wrapper=cls.wrap, force_invalidate=strict,
                                     **extra_args)

        if len(res) > 0:
            result = res[0]
        else:
            result = None

        if result is None and not strict:
            # on the off chance this is a brand new domain, try with strict
            return cls.get_by_name(name, strict=True)

        return result
Beispiel #11
0
 def get_by_domain(cls, domain):
     return cache_core.cached_view(cls.get_db(),
                                   "orgs/team_by_domain",
                                   key=domain,
                                   reduce=False,
                                   include_docs=True,
                                   wrapper=cls.wrap)
Beispiel #12
0
    def _get_by_name(cls, name, strict=False):
        extra_args = {
            'stale': settings.COUCH_STALE_QUERY
        } if not strict else {}

        db = cls.get_db()
        res = cache_core.cached_view(db,
                                     "domain/domains",
                                     key=name,
                                     reduce=False,
                                     include_docs=True,
                                     wrapper=cls.wrap,
                                     force_invalidate=strict,
                                     **extra_args)

        if len(res) > 0:
            result = res[0]
        else:
            result = None

        if result is None and not strict:
            # on the off chance this is a brand new domain, try with strict
            return cls.get_by_name(name, strict=True)

        return result
Beispiel #13
0
    def get_current(cls,
                    namespace,
                    domain,
                    slug,
                    version=None,
                    wrap=True,
                    **kwargs):

        couch_key = cls._generate_couch_key(namespace=namespace,
                                            domain=domain,
                                            slug=slug,
                                            version=version,
                                            reverse=True,
                                            **kwargs)
        results = cache_core.cached_view(cls.get_db(),
                                         cls.indicator_list_view(),
                                         cache_expire=60 * 60 * 6,
                                         reduce=False,
                                         include_docs=False,
                                         descending=True,
                                         **couch_key)
        doc = results[0] if results else None
        if wrap and doc:
            try:
                doc_class = to_function(
                    doc.get('value',
                            "%s.%s" % (cls._class_path, cls.__name__)))
                doc_instance = doc_class.get(doc.get('id'))
                return doc_instance
            except Exception as e:
                logging.error(
                    "No matching documents found for indicator %s: %s" %
                    (slug, e))
                return None
        return doc
Beispiel #14
0
    def get_results_with_key(self,
                             key,
                             user_id=None,
                             datespan=None,
                             date_group_level=None,
                             reduce=False):
        view_kwargs = dict()
        if datespan:
            view_kwargs.update(startkey=key + datespan.startdate_key_utc,
                               endkey=key + datespan.enddate_key_utc + [{}])
        else:
            view_kwargs.update(startkey=key, endkey=key + [{}])
        if date_group_level:
            base_level = 5 if user_id else 4
            view_kwargs.update(group=True,
                               group_level=base_level + date_group_level)
        else:
            view_kwargs.update(reduce=reduce)

        # Pull Data from the MVP-only DB
        from mvp_docs.models import IndicatorXForm
        db = IndicatorXForm.get_db()
        section = self.couch_view.split('/')
        couch_view = "%s_indicators/%s" % (section[0], section[1])

        return cache_core.cached_view(db,
                                      couch_view,
                                      cache_expire=60 * 60 * 6,
                                      **view_kwargs)
Beispiel #15
0
 def by_domain(cls, domain):
     return cache_core.cached_view(cls.get_db(), "groupexport/by_domain",
         key=domain,
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap,
     )
Beispiel #16
0
    def get_requests(cls, organization, domain=None, user_id=None):
        key = [organization]
        if domain:
            key.append(domain)
        if user_id:
            key.append(user_id)

        # todo - forcing invalidating on all requests while we turn these features on slowly
        results = cache_core.cached_view(
            cls.get_db(),
            "orgs/org_requests",
            startkey=key,
            endkey=key + [{}],
            reduce=False,
            include_docs=True,
            wrapper=cls.wrap,
        )

        #return results.all() if not user_id else results.one()

        if not user_id:
            return results
        else:
            try:
                length = len(results)
                if length == 1:
                    return results[0]
                elif length > 0:
                    raise MultipleResultsFound(
                        "OrgRequests found multiple results for %s" % key)
            except IndexError:
                return None
Beispiel #17
0
def get_default_monthly_consumption(domain, product_id, location_type, case_id):
    """
    Return the most specific consumption value for the passed
    parameters.
    """

    keys = [
        [domain, product_id, {}, case_id],
        [domain, product_id, location_type, None],
        [domain, product_id, None, None],
        [domain, None, None, None],
    ]

    results = cache_core.cached_view(
        DefaultConsumption.get_db(),
        'consumption/consumption_index',
        keys=keys,
        reduce=False,
        limit=1,
    )
    results = results[0] if results else None
    if results and results['value']:
        return Decimal(results['value'])
    else:
        return None
Beispiel #18
0
 def for_domain(cls, domain):
     res = cache_core.cached_view(cls.get_db(),
                                  "by_domain_doc_type_date/view",
                                  key=[domain, 'OpenClinicaSettings', None],
                                  reduce=False,
                                  include_docs=True,
                                  wrapper=cls.wrap)
     return res[0] if len(res) > 0 else None
Beispiel #19
0
 def view(cls, view_name, wrapper=None, dynamic_properties=None, wrap_doc=True, classes=None, **params):
     wrapper = wrapper or cls.wrap
     if dynamic_properties is None and wrap_doc and classes is None:
         return cache_core.cached_view(cls.get_db(), view_name, wrapper, **params)
     else:
         return super(CachedCouchDocumentMixin, cls).view(
             view_name, wrapper, dynamic_properties, wrap_doc, classes, **params
         )
Beispiel #20
0
 def for_domain(cls, domain):
     res = cache_core.cached_view(
         cls.get_db(),
         "by_domain_doc_type_date/view",
         key=[domain, 'OpenClinicaSettings', None],
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap)
     return res[0] if len(res) > 0 else None
Beispiel #21
0
 def get_by_org(cls, org_name):
     return cache_core.cached_view(
         cls.get_db(), "orgs/team_by_org_and_name",
         startkey=[org_name],
         endkey=[org_name, {}],
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap,
     )
Beispiel #22
0
 def for_domain(cls, domain):
     res = cache_core.cached_view(
         cls.get_db(),
         "domain/docs",
         key=[domain, 'Dhis2Settings', None],
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap)
     return res[0] if len(res) > 0 else None
Beispiel #23
0
    def by_domain_and_owner(cls, domain, owner_id, stale=True, **kwargs):
        if stale:
            kwargs['stale'] = settings.COUCH_STALE_QUERY

        key = [domain, owner_id]
        db = cls.get_db()
        result = cache_core.cached_view(db, "reportconfig/user_notifications", reduce=False,
                                        include_docs=True, startkey=key, endkey=key + [{}],
                                        wrapper=cls.wrap, **kwargs)
        return result
Beispiel #24
0
 def get_by_org(cls, org_name):
     return cache_core.cached_view(
         cls.get_db(),
         "orgs/team_by_org_and_name",
         startkey=[org_name],
         endkey=[org_name, {}],
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap,
     )
Beispiel #25
0
 def get_by_organization(cls, organization):
     result = cache_core.cached_view(
         cls.get_db(), "domain/by_organization",
         startkey=[organization],
         endkey=[organization, {}],
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap
     )
     return result
Beispiel #26
0
    def by_domain_and_owner(cls, domain, owner_id, stale=True, **kwargs):
        if stale:
            kwargs['stale'] = settings.COUCH_STALE_QUERY

        key = [domain, owner_id]
        db = cls.get_db()
        result = cache_core.cached_view(db, "reportconfig/user_notifications", reduce=False,
                                        include_docs=True, startkey=key, endkey=key + [{}],
                                        wrapper=cls.wrap, **kwargs)
        return result
Beispiel #27
0
 def _get_view_by_key(cls, key, **kwargs):
     db = cls.get_db()
     result = cache_core.cached_view(db,
                                     "reportconfig/user_notifications",
                                     reduce=False,
                                     include_docs=True,
                                     startkey=key,
                                     endkey=key + [{}],
                                     wrapper=cls.wrap,
                                     **kwargs)
     return result
Beispiel #28
0
def get_domain_monthly_consumption_data(domain):
    """
    Get all default consumption rows for this domain.
    """
    results = cache_core.cached_view(
        DefaultConsumption.get_db(),
        'consumption/consumption_index',
        startkey=[domain],
        endkey=[domain, {}],
        reduce=False,
    )
    return results
Beispiel #29
0
def get_domain_monthly_consumption_data(domain):
    """
    Get all default consumption rows for this domain.
    """
    results = cache_core.cached_view(
        DefaultConsumption.get_db(),
        'consumption/consumption_index',
        startkey=[domain],
        endkey=[domain, {}],
        reduce=False,
    )
    return results
Beispiel #30
0
    def get_by_name(cls, name, strict=False):
        extra_args = {'stale': settings.COUCH_STALE_QUERY} if not strict else {}
        results = cache_core.cached_view(cls.get_db(), "orgs/by_name", key=name, reduce=False,
                                         include_docs=True, wrapper=cls.wrap, **extra_args)

        length = len(results)
        if length > 1:
            raise MultipleResultsFound("Error, Organization.get_by_name returned more than 1 result for %s" % name)
        elif length == 1:
            return list(results)[0]
        else:
            return None
Beispiel #31
0
    def get_results_with_key(self, key, user_id=None, datespan=None, date_group_level=None, reduce=False):
        view_kwargs = dict()
        if datespan:
            view_kwargs.update(startkey=key + datespan.startdate_key_utc, endkey=key + datespan.enddate_key_utc + [{}])
        else:
            view_kwargs.update(startkey=key, endkey=key + [{}])
        if date_group_level:
            base_level = 5 if user_id else 4
            view_kwargs.update(group=True, group_level=base_level + date_group_level)
        else:
            view_kwargs.update(reduce=reduce)

        return cache_core.cached_view(self.get_db(), self.couch_view, cache_expire=60 * 60 * 6, **view_kwargs)
 def handle(self, report_slug, *args, **options):
     kwargs = {'stale': settings.COUCH_STALE_QUERY}
     key = ["name slug"]
     result = cache_core.cached_view(ReportConfig.get_db(),
                                     "reportconfig/configs_by_domain",
                                     reduce=False,
                                     include_docs=False,
                                     startkey=key,
                                     endkey=key + [{}],
                                     **kwargs)
     for report_config in result:
         domain, owner_id, slug = report_config['key'][1:4]
         if slug == report_slug:
             print("%s, %s, %s" % (domain, owner_id, slug))
Beispiel #33
0
 def get_by_organization(cls, organization):
     result = cache_core.cached_view(cls.get_db(),
                                     "domain/by_organization",
                                     startkey=[organization],
                                     endkey=[organization, {}],
                                     reduce=False,
                                     include_docs=True,
                                     wrapper=cls.wrap)
     from corehq.apps.accounting.utils import domain_has_privilege
     from corehq import privileges
     result = filter(
         lambda x: domain_has_privilege(x.name, privileges.
                                        CROSS_PROJECT_REPORTS), result)
     return result
Beispiel #34
0
 def get_by_organization(cls, organization):
     result = cache_core.cached_view(
         cls.get_db(), "domain/by_organization",
         startkey=[organization],
         endkey=[organization, {}],
         reduce=False,
         include_docs=True,
         wrapper=cls.wrap
     )
     from corehq.apps.accounting.utils import domain_has_privilege
     result = filter(
         lambda x: domain_has_privilege(x.name, privileges.CROSS_PROJECT_REPORTS),
         result
     )
     return result
 def handle(self, report_slug, *args, **options):
     kwargs = {'stale': settings.COUCH_STALE_QUERY}
     key = ["name slug"]
     result = cache_core.cached_view(
         ReportConfig.get_db(),
         "reportconfig/configs_by_domain",
         reduce=False, include_docs=False,
         startkey=key, endkey=key + [{}],
         **kwargs)
     for report_config in result:
         domain, owner_id, slug = report_config['key'][1:4]
         if slug == report_slug:
             print("%s, %s, %s" % (
                 domain, owner_id, slug
             ))
Beispiel #36
0
def get_default_consumption(domain, product_id, location_type, case_id):
    keys = [
        [domain, product_id, {}, case_id],
        [domain, product_id, location_type, None],
        [domain, product_id, None, None],
        [domain, None, None, None],
    ]

    results = cache_core.cached_view(DefaultConsumption.get_db(), 'consumption/consumption_index',
        keys=keys, reduce=False, limit=1, descending=True,
    )
    results = results[0] if results else None
    if results and results['value']:
        return Decimal(float(results['value']) / DAYS_IN_MONTH)
    else:
        return None
Beispiel #37
0
def set_report_announcements_for_user(request, couch_user):
    key = ["type", ReportAnnouncement.__name__]
    now = datetime.utcnow()

    db = ReportAnnouncement.get_db()
    data = cache_core.cached_view(db, "announcements/all_announcements", reduce=False,
                                 startkey=key + [now.strftime("%Y-%m-%dT%H:00")], endkey=key + [{}],
                                 )

    announce_ids = [a['id'] for a in data if a['id'] not in couch_user.announcements_seen]
    for announcement_id in announce_ids:
        try:
            announcement = ReportAnnouncement.get(announcement_id)
            if announcement.show_to_new_users or (announcement.date_created > couch_user.created_on):
                messages.info(request, announcement.as_html)
        except Exception as e:
            logging.error("Could not fetch Report Announcement: %s" % e)
Beispiel #38
0
def set_report_announcements_for_user(request, couch_user):
    key = ["type", ReportAnnouncement.__name__]
    now = datetime.utcnow()

    db = ReportAnnouncement.get_db()
    data = cache_core.cached_view(db, "announcements/all_announcements", reduce=False,
                                 startkey=key + [now.strftime("%Y-%m-%dT%H:00")], endkey=key + [{}],
                                 )

    announce_ids = [a['id'] for a in data if a['id'] not in couch_user.announcements_seen]
    for announcement_id in announce_ids:
        try:
            announcement = ReportAnnouncement.get(announcement_id)
            if announcement.show_to_new_users or (announcement.date_created > couch_user.created_on):
                messages.info(request, announcement.as_html)
        except Exception as e:
            logging.error("Could not fetch Report Announcement: %s" % e)
Beispiel #39
0
    def _get_by_name(cls, name, strict=False):
        extra_args = {'stale': settings.COUCH_STALE_QUERY} if not strict else {}

        db = cls.get_db()
        res = cache_core.cached_view(db, "domain/domains", key=name, reduce=False,
                                     include_docs=True, wrapper=cls.wrap, force_invalidate=strict,
                                     **extra_args)

        if len(res) > 0:
            result = res[0]
        else:
            result = None

        if result is None and not strict:
            # on the off chance this is a brand new domain, try with strict
            return cls.get_by_name(name, strict=True)

        return result
Beispiel #40
0
 def active_for_user(user, is_active=True):
     if isinstance(user, AnonymousUser):
         return []
     from corehq.apps.users.models import CouchUser
     if isinstance(user, CouchUser):
         couch_user = user
     else:
         couch_user = CouchUser.from_django_user(user)
     if couch_user:
         domain_names = couch_user.get_domains()
         return cache_core.cached_view(Domain.get_db(), "domain/by_status",
                                       keys=[[is_active, d] for d in domain_names],
                                       reduce=False,
                                       include_docs=True,
                                       wrapper=Domain.wrap
         )
     else:
         return []
Beispiel #41
0
 def active_for_user(user, is_active=True):
     if isinstance(user, AnonymousUser):
         return []
     from corehq.apps.users.models import CouchUser
     if isinstance(user, CouchUser):
         couch_user = user
     else:
         couch_user = CouchUser.from_django_user(user)
     if couch_user:
         domain_names = couch_user.get_domains()
         return cache_core.cached_view(Domain.get_db(),
                                       "domain/by_status",
                                       keys=[[is_active, d]
                                             for d in domain_names],
                                       reduce=False,
                                       include_docs=True,
                                       wrapper=Domain.wrap)
     else:
         return []
Beispiel #42
0
    def by_domain_and_owner(cls,
                            domain,
                            owner_id,
                            report_slug=None,
                            stale=True,
                            skip=None,
                            limit=None,
                            include_shared=False):
        kwargs = {}
        if stale:
            kwargs['stale'] = settings.COUCH_STALE_QUERY

        if report_slug is not None:
            key = ["name slug", domain, owner_id, report_slug]
        else:
            key = ["name", domain, owner_id]

        db = cls.get_db()
        if skip is not None:
            kwargs['skip'] = skip
        if limit is not None:
            kwargs['limit'] = limit

        configs = cache_core.cached_view(db,
                                         "reportconfig/configs_by_domain",
                                         reduce=False,
                                         include_docs=True,
                                         startkey=key,
                                         endkey=key + [{}],
                                         wrapper=cls.wrap,
                                         **kwargs)

        if include_shared:
            user_configs_ids = [c._id for c in configs]
            shared_configs = [
                c for c in cls.shared_on_domain(domain)
                if c._id not in user_configs_ids
            ]
            configs = configs + shared_configs

        return configs
Beispiel #43
0
def get_default_consumption(domain, product_id, location_type, case_id):
    keys = [
        [domain, product_id, {}, case_id],
        [domain, product_id, location_type, None],
        [domain, product_id, None, None],
        [domain, None, None, None],
    ]

    results = cache_core.cached_view(
        DefaultConsumption.get_db(),
        'consumption/consumption_index',
        keys=keys,
        reduce=False,
        limit=1,
        descending=True,
    )
    results = results[0] if results else None
    if results and results['value']:
        return Decimal(results['value'])
    else:
        return None
Beispiel #44
0
    def get_by_name(cls, name, strict=False):
        extra_args = {
            'stale': settings.COUCH_STALE_QUERY
        } if not strict else {}
        results = cache_core.cached_view(cls.get_db(),
                                         "orgs/by_name",
                                         key=name,
                                         reduce=False,
                                         include_docs=True,
                                         wrapper=cls.wrap,
                                         **extra_args)

        length = len(results)
        if length > 1:
            raise MultipleResultsFound(
                "Error, Organization.get_by_name returned more than 1 result for %s"
                % name)
        elif length == 1:
            return list(results)[0]
        else:
            return None
Beispiel #45
0
    def get_unknown_form_name(self, xmlns, app_id=None, none_if_not_found=False):
        key = ["xmlns", self.domain, xmlns]
        if app_id is not None:
            key[0] = "xmlns app"
            key.append(app_id)

        results = cache_core.cached_view(get_db(),
                                         'reports_forms/name_by_xmlns',
                                         reduce=False,
                                         startkey=key,
                                         endkey=key + [{}],
                                         limit=1,
                                         cache_expire=60)

        try:
            data = list(results)[0]
        except IndexError:
            data = None

        if data:
            return data['value']
        return None if none_if_not_found else "Name Unknown"
Beispiel #46
0
    def get_notification(cls, username):
        notifications = cache_core.cached_view(
            cls.get_db(),
            "announcements/notifications",
            reduce=False,
            startkey=[cls._doc_type, username],
            endkey=[cls._doc_type, username, {}],
            include_docs=True,
            wrapper=cls.wrap)

        try:
            if len(notifications) > 1:
                raise MultipleResultsFound("Multiple results found for announcements.get_notification")
            notification = notifications[0]
        except IndexError:
            notification = None

        if not notification:
            notification = cls(user=username)
            notification.save()

        return notification
Beispiel #47
0
    def get_notification(cls, username):
        notifications = cache_core.cached_view(
            cls.get_db(),
            "announcements/notifications",
            reduce=False,
            startkey=[cls._doc_type, username],
            endkey=[cls._doc_type, username, {}],
            include_docs=True,
            wrapper=cls.wrap)

        try:
            if len(notifications) > 1:
                for dup_notification in notifications[1:]:  # delete the duplicates
                    dup_notification.base_doc += DELETED_SUFFIX
                    dup_notification.save()
            notification = notifications[0]
        except IndexError:
            notification = None

        if not notification:
            notification = cls(user=username)
            notification.save()

        return notification
Beispiel #48
0
    def get_results_with_key(self, key, user_id=None, datespan=None, date_group_level=None, reduce=False):
        view_kwargs = dict()
        if datespan:
            view_kwargs.update(
                startkey=key+datespan.startdate_key_utc,
                endkey=key+datespan.enddate_key_utc+[{}]
            )
        else:
            view_kwargs.update(
                startkey=key,
                endkey=key+[{}]
            )
        if date_group_level:
            base_level = 5 if user_id else 4
            view_kwargs.update(
                group=True,
                group_level=base_level+date_group_level
            )
        else:
            view_kwargs.update(
                reduce=reduce
            )

        return cache_core.cached_view(self.get_db(), self.couch_view, cache_expire=60*60*6, **view_kwargs)
Beispiel #49
0
 def get_by_domain(cls, domain):
     return cache_core.cached_view(cls.get_db(), "orgs/team_by_domain", key=domain, reduce=False,
                                   include_docs=True, wrapper=cls.wrap)