Ejemplo n.º 1
0
    def handle(self, *args, **options):
        request = HttpRequest()
        server_name = options.get('server_name')
        server_port = options.get('server_port')
        protocol = options.get('protocol')
        generate_consistent_urls = options.get('generate_consistent_urls')

        if not server_name or not server_port or not protocol:
            raise CommandError(
                'please provide a server_name, a server_port and a protocol')

        if server_name not in ['ona.io', 'stage.ona.io', 'localhost']:
            raise CommandError('server name provided is not valid')

        if protocol not in ['http', 'https']:
            raise CommandError('protocol provided is not valid')

        # required for generation of enketo url
        request.META['HTTP_HOST'] = '%s:%s' % (server_name, server_port)\
            if server_port != '80' else server_name

        # required for generation of enketo preview url
        request.META['SERVER_NAME'] = server_name
        request.META['SERVER_PORT'] = server_port

        resultset = MetaData.objects.filter(
            Q(data_type='enketo_url') | Q(data_type='enketo_preview_url'))

        for meta_data in resultset:
            username = meta_data.content_object.user.username
            id_string = meta_data.content_object.id_string

            data_type = meta_data.data_type
            data_value = meta_data.data_value
            xform = meta_data.content_object
            xform_pk = xform.pk

            with open('/tmp/enketo_url', 'a') as f:
                if data_type == 'enketo_url':
                    form_url = get_form_url(
                        request,
                        username=username,
                        id_string=id_string,
                        xform_pk=xform_pk,
                        generate_consistent_urls=generate_consistent_urls)
                    _enketo_url = enketo_url(form_url, id_string)
                    MetaData.enketo_url(xform, _enketo_url)
                elif data_type == 'enketo_preview_url':
                    _enketo_preview_url = get_enketo_preview_url(
                        request,
                        id_string,
                        username=username,
                        xform_pk=xform_pk,
                        generate_consistent_urls=generate_consistent_urls)
                    MetaData.enketo_preview_url(xform, _enketo_preview_url)

                f.write('%s : %s \n' % (id_string, data_value))
            self.stdout.write('%s: %s' % (data_type, meta_data.data_value))

        self.stdout.write("enketo urls update complete!!")
Ejemplo n.º 2
0
def _create_enketo_urls(request, xform):
    """
    Generate enketo urls for a form

    :param request:
    :param xform:
    :return: enketo urls
    """
    form_url = get_form_url(request,
                            xform.user.username,
                            settings.ENKETO_PROTOCOL,
                            xform_pk=xform.pk,
                            generate_consistent_urls=True)
    data = {}
    try:
        enketo_urls = get_enketo_urls(form_url, xform.id_string)
        offline_url = enketo_urls.get("offline_url")
        MetaData.enketo_url(xform, offline_url)
        data['offline_url'] = offline_url
        if 'preview_url' in enketo_urls:
            preview_url = enketo_urls.get("preview_url")
            MetaData.enketo_preview_url(xform, preview_url)
            data['preview_url'] = preview_url
        if 'single_url' in enketo_urls:
            single_url = enketo_urls.get("single_url")
            MetaData.enketo_single_submit_url(xform, single_url)
            data['single_url'] = single_url
    except ConnectionError as e:
        logging.exception("Connection Error: %s" % e)
    except EnketoError as e:
        logging.exception("Enketo Error: %s" % e.message)

    return data
Ejemplo n.º 3
0
    def get_enketo_preview_url(self, obj):
        if obj:
            _enketo_preview_url = cache.get(
                '{}{}'.format(ENKETO_PREVIEW_URL_CACHE, obj.pk))
            if _enketo_preview_url:
                return _enketo_preview_url

            try:
                metadata = MetaData.objects.get(
                    xform=obj, data_type="enketo_preview_url")
            except MetaData.DoesNotExist:
                request = self.context.get('request')
                preview_url = ""

                try:
                    preview_url = get_enketo_preview_url(request,
                                                         obj.user.username,
                                                         obj.id_string)
                    MetaData.enketo_preview_url(obj, preview_url)
                except EnketoError:
                    pass

                cache.set('{}{}'.format(ENKETO_PREVIEW_URL_CACHE, obj.pk),
                          preview_url)
                return preview_url

            _enketo_preview_url = metadata.data_value
            cache.set(
                '{}{}'.format(ENKETO_URL_CACHE, obj.pk), _enketo_preview_url)
            return _enketo_preview_url

        return None
Ejemplo n.º 4
0
    def get_enketo_preview_url(self, obj):
        if obj:
            _enketo_preview_url = cache.get('{}{}'.format(
                ENKETO_PREVIEW_URL_CACHE, obj.pk))
            if _enketo_preview_url:
                return _enketo_preview_url

            try:
                metadata = MetaData.objects.get(xform=obj,
                                                data_type="enketo_preview_url")
            except MetaData.DoesNotExist:
                request = self.context.get('request')
                preview_url = ""

                try:
                    preview_url = get_enketo_preview_url(
                        request, obj.user.username, obj.id_string)
                    MetaData.enketo_preview_url(obj, preview_url)
                except EnketoError:
                    pass

                cache.set('{}{}'.format(ENKETO_PREVIEW_URL_CACHE, obj.pk),
                          preview_url)
                return preview_url

            _enketo_preview_url = metadata.data_value
            cache.set('{}{}'.format(ENKETO_URL_CACHE, obj.pk),
                      _enketo_preview_url)
            return _enketo_preview_url

        return None
Ejemplo n.º 5
0
    def handle(self, *args, **options):
        request = HttpRequest()
        server_name = options.get('server_name')
        server_port = options.get('server_port')
        protocol = options.get('protocol')

        if not server_name or not server_port or not protocol:
            raise CommandError(
                'please provide a server_name, a server_port and a protocol')

        if server_name not in ['ona.io', 'stage.ona.io', 'localhost']:
            raise CommandError('server name provided is not valid')

        if protocol not in ['http', 'https']:
            raise CommandError('protocol provided is not valid')

        # required for generation of enketo url
        request.META['HTTP_HOST'] = '%s:%s' % (server_name, server_port)\
            if server_port != '80' else server_name

        # required for generation of enketo preview url
        request.META['SERVER_NAME'] = server_name
        request.META['SERVER_PORT'] = server_port

        resultset = MetaData.objects.filter(
            Q(data_type='enketo_url') | Q(data_type='enketo_preview_url'))
        for meta_data in resultset:
            username = meta_data.content_object.user.username
            id_string = meta_data.content_object.id_string
            data_type = meta_data.data_type
            data_value = meta_data.data_value
            xform = meta_data.content_object
            with open('/tmp/enketo_url', 'a') as f:

                if data_type == 'enketo_url':
                    form_url = get_form_url(
                        request, username, protocol=protocol,
                        xform_pk=xform.pk)
                    _enketo_url = enketo_url(form_url, id_string)
                    MetaData.enketo_url(xform, _enketo_url)
                elif data_type == 'enketo_preview_url':
                    _enketo_preview_url = get_enketo_preview_url(
                        request, username, id_string, xform_pk=xform.pk)
                    MetaData.enketo_preview_url(xform, _enketo_preview_url)
                f.write('%s : %s \n' % (id_string, data_value))

            self.stdout.write('%s: %s' % (data_type, meta_data.data_value))

        self.stdout.write("enketo urls update complete!!")
Ejemplo n.º 6
0
    def get_enketo_preview_url(self, obj):
        if obj:
            _enketo_preview_url = cache.get(
                '{}{}'.format(ENKETO_PREVIEW_URL_CACHE, obj.pk))
            if _enketo_preview_url:
                return _enketo_preview_url

            url = self._get_metadata(obj, 'enketo_preview_url')
            if url is None:
                try:
                    url = get_enketo_preview_url(
                        self.context.get('request'), obj.user.username,
                        obj.id_string)
                except:
                    return url
                else:
                    MetaData.enketo_preview_url(obj, url)

            return _set_cache(ENKETO_PREVIEW_URL_CACHE, url, obj)

        return None
Ejemplo n.º 7
0
    def get_enketo_preview_url(self, obj):
        if obj:
            _enketo_preview_url = cache.get(
                '{}{}'.format(ENKETO_PREVIEW_URL_CACHE, obj.pk))
            if _enketo_preview_url:
                return _enketo_preview_url

            url = self._get_metadata(obj, 'enketo_preview_url')
            if url is None:
                try:
                    url = get_enketo_preview_url(
                        self.context.get('request'), obj.user.username,
                        obj.id_string, xform_pk=obj.pk)
                except Exception:
                    return url
                else:
                    MetaData.enketo_preview_url(obj, url)

            return _set_cache(ENKETO_PREVIEW_URL_CACHE, url, obj)

        return None