예제 #1
0
파일: util.py 프로젝트: soitun/commcare-hq
def get_report_config_or_not_found(domain, config_id):
    from corehq.apps.userreports.models import ReportConfiguration
    try:
        doc = ReportConfiguration.get_db().get(config_id)
        config = wrap_report_config_by_type(doc)
    except (ResourceNotFound, KeyError, ReportConfigurationNotFoundError):
        raise DocumentNotFound()

    if config.domain != domain:
        raise DocumentNotFound()

    return config
예제 #2
0
    def by_id(cls, config_id, domain=None):
        """
        Returns a ReportConfiguration object, NOT StaticReportConfigurations.

        :param domain: Optionally specify domain name to validate access.
                       Raises ``DocumentNotFound`` if domains don't match.
        """
        mapping = cls.by_id_mapping()
        if config_id not in mapping:
            mapping = cls.by_id_mapping(rebuild=True)

        metadata = mapping.get(config_id, None)
        if not metadata:
            raise BadSpecError(
                _('The report configuration referenced by this report could '
                  'not be found.'))

        config = cls._get_from_metadata(metadata)
        if domain and config.domain != domain:
            raise DocumentNotFound(
                "Document {} of class {} not in domain {}!".format(
                    config_id,
                    config.__class__.__name__,
                    domain,
                ))
        return config
예제 #3
0
 def report_class_by_domain_and_id(cls, domain, config_id):
     try:
         report_domain, wrapped = cls.by_id_mapping()[config_id]
     except KeyError:
         raise BadSpecError(
             _('The report configuration referenced by this report could not be found.')
         )
     if report_domain != domain:
         raise DocumentNotFound("Document {} of class {} not in domain {}!".format(
             config_id,
             ReportConfiguration.__class__.__name__,
             domain,
         ))
     return wrapped.custom_configurable_report
예제 #4
0
    def by_id(cls, config_id, domain):
        """Returns a ReportConfiguration object, NOT StaticReportConfigurations.
        """
        try:
            report_domain, wrapped = cls.by_id_mapping()[config_id]
        except KeyError:
            raise BadSpecError(_('The report configuration referenced by this report could '
                                 'not be found: %(report_id)s') % {'report_id': config_id})

        if domain and report_domain != domain:
            raise DocumentNotFound("Document {} of class {} not in domain {}!".format(
                config_id,
                ReportConfiguration.__class__.__name__,
                domain,
            ))
        return cls._get_report_config(wrapped, report_domain)