예제 #1
0
파일: views.py 프로젝트: aencina/datal
def edit(request, datastream_revision_id=None):
    if request.method == 'GET':
        account_id = request.auth_manager.account_id
        credentials = request.auth_manager
        language = request.auth_manager.language
        categories = CategoryI18n.objects.filter(
            language=language,
            category__account=account_id).values('category__id', 'name')
        status_options = credentials.get_allowed_actions()
        lifecycle = DatastreamLifeCycleManager(
            user=request.user, datastream_revision_id=datastream_revision_id)
        status = lifecycle.datastream_revision.status
        dao = DataStreamDBDAO().get(
            request.user, datastream_revision_id=datastream_revision_id)
        response = DefaultDataViewEdit(
            template='datastream_edit_response.json').render(
                categories, status, status_options,
                lifecycle.datastream_revision, lifecycle.datastreami18n, dao)

        return JSONHttpResponse(response)

    elif request.method == 'POST':
        """update dataset """

        form = EditDataStreamForm(request.POST)

        if not form.is_valid():
            raise LifeCycleException('Invalid form data: %s' %
                                     str(form.errors.as_text()))

        if form.is_valid():
            lifecycle = DatastreamLifeCycleManager(
                user=request.user,
                datastream_revision_id=datastream_revision_id)

            lifecycle.edit(language=request.auth_manager.language,
                           changed_fields=form.changed_data,
                           **form.cleaned_data)

            # Signal
            datastream_changed.send_robust(
                sender='edit_view',
                id=lifecycle.datastream.id,
                rev_id=lifecycle.datastream_revision.id)

            response = dict(
                status='ok',
                datastream_revision_id=lifecycle.datastream_revision.id,
                messages=[ugettext('APP-DATASET-CREATEDSUCCESSFULLY-TEXT')],
            )

            return JSONHttpResponse(json.dumps(response))
예제 #2
0
def get_filters_json(request):
    """ List all Filters available
    :param request:
    """
    filters = VisualizationDBDAO().query_filters(
        account_id=request.user.account.id, language=request.user.language)
    return JSONHttpResponse(json.dumps(filters))
예제 #3
0
def edit(request, revision_id=None):
    if request.method == 'GET':
        visualization_rev = VisualizationDBDAO().get(
            request.auth_manager.language,
            visualization_revision_id=revision_id)
        datastream_rev = DataStreamDBDAO().get(
            request.auth_manager.language,
            datastream_revision_id=visualization_rev['datastream_revision_id'])
        return render_to_response(
            'createVisualization/index.html',
            dict(request=request,
                 datastream_revision=datastream_rev,
                 visualization_revision=visualization_rev))

    elif request.method == 'POST':
        """ save new or update dataset """
        # Formulario
        form = VisualizationForm(request.POST)
        if not form.is_valid():
            logger.info(form.errors)
            raise VisualizationSaveException('Invalid form data: %s' %
                                             str(form.errors.as_text()))

        visualization_rev = VisualizationDBDAO().get(
            request.auth_manager.language,
            visualization_revision_id=revision_id)
        response = form.save(request, visualization_rev=visualization_rev)

        # Signal
        visualization_changed.send_robust(
            sender='edit_view',
            id=visualization_rev['visualization_id'],
            rev_id=visualization_rev['visualization_revision_id'])

        return JSONHttpResponse(json.dumps(response))
예제 #4
0
def create(request):

    if request.method == 'GET':
        datastream_revision_id = request.GET.get('datastream_revision_id',
                                                 None)
        try:
            datastream_rev = DataStreamDBDAO().get(
                request.user.language,
                datastream_revision_id=datastream_revision_id,
                published=False)
        except DataStreamRevision.DoesNotExist:
            raise DataStreamNotFoundException()

        return render_to_response(
            'createVisualization/index.html',
            dict(request=request, datastream_revision=datastream_rev))

    elif request.method == 'POST':
        """ save new or update dataset """
        # Valido que llegue el ID de la revision del datastream
        datastream_rev_id = request.GET.get('datastream_revision_id', None)
        if not datastream_rev_id:
            raise Http404
        datastream_rev = DataStreamRevision.objects.get(pk=datastream_rev_id)

        # Formulario
        form = VisualizationForm(request.POST)
        if not form.is_valid():
            logger.info(form._errors)
            raise VisualizationSaveException('Invalid form data: %s' %
                                             str(form.errors.as_text()))

        response = form.save(request, datastream_rev=datastream_rev)

        return JSONHttpResponse(json.dumps(response))
예제 #5
0
def create(request):
    auth_manager = request.auth_manager
    if request.method == 'POST':
        """ save new or update dataset """
        form = CreateDataStreamForm(request.POST)

        if not form.is_valid():
            raise DatastreamSaveException('Invalid form data: %s' % str(form.errors.as_text()))

        dataset_revision = DatasetRevision.objects.get(pk=form.cleaned_data['dataset_revision_id'])

        dataview = DatastreamLifeCycleManager(user=request.user)
        dataview.create(
            dataset=dataset_revision.dataset,
            language=request.auth_manager.language,
            category_id=form.cleaned_data['category'],
            **form.cleaned_data
        )

        response = dict(
            status='ok',
            datastream_revision_id=dataview.datastream_revision.id,
            messages=[ugettext('APP-DATASET-CREATEDSUCCESSFULLY-TEXT')]
        )

        return JSONHttpResponse(json.dumps(response))

    elif request.method == 'GET':
        form = InitalizeCollectForm(request.GET)

        if form.is_valid():
            is_update = False
            is_update_selection = False
            data_set_id = form.cleaned_data['dataset_revision_id']
            datastream_id = None

            if auth_manager.is_level('level_5'):
                meta_data = Account.objects.get(pk=auth_manager.account_id).meta_data

            try:
                dataset_revision = DatasetRevision.objects.get(pk=data_set_id)
            except DatasetRevision.DoesNotExist:
                raise DatasetNotFoundException()

            end_point = dataset_revision.end_point
            type = dataset_revision.dataset.type
            impl_type = dataset_revision.impl_type
            impl_details = dataset_revision.impl_details
            bucket_name = request.bucket_name

            return render_to_response('view_manager/insertForm.html', locals())
        else:
            raise Http404
예제 #6
0
def remove(request, visualization_revision_id, type="resource"):
    """ remove resource
    :param type:
    :param visualization_revision_id:
    :param request:
    """
    lifecycle = VisualizationLifeCycleManager(
        user=request.user, visualization_revision_id=visualization_revision_id)

    if type == 'revision':
        lifecycle.remove()
        # si quedan revisiones, redirect a la ultima revision, si no quedan, redirect a la lista.
        if lifecycle.visualization.last_revision_id:
            last_revision_id = lifecycle.visualization.last_revision_id
        else:
            last_revision_id = -1

        # Send signal
        visualization_rev_removed.send_robust(sender='remove_view',
                                              id=lifecycle.visualization.id,
                                              rev_id=visualization_revision_id)

        return JSONHttpResponse(
            json.dumps({
                'status':
                True,
                'messages':
                [ugettext('APP-DELETE-VISUALIZATION-REV-ACTION-TEXT')],
                'revision_id':
                last_revision_id
            }))

    else:
        lifecycle.remove(killemall=True)

        # Send signal
        visualization_removed.send_robust(
            sender='remove_view',
            id=lifecycle.visualization.id,
            rev_id=lifecycle.visualization_revision.id)

        return HttpResponse(json.dumps({
            'status':
            True,
            'messages': [ugettext('APP-DELETE-VISUALIZATION-ACTION-TEXT')],
            'revision_id':
            -1,
        }),
                            content_type='text/plain')
예제 #7
0
def change_status(request, visualization_revision_id=None):
    """
    Change visualization status
    :param request:
    :param visualization_revision_id:
    :return: JSON Object
    """
    if visualization_revision_id:
        lifecycle = VisualizationLifeCycleManager(
            user=request.user,
            visualization_revision_id=visualization_revision_id)
        action = request.POST.get('action')
        action = 'accept' if action == 'approve' else action  # fix para poder llamar dinamicamente al metodo de lifecycle
        killemall = True if request.POST.get('killemall',
                                             False) == 'true' else False

        if action not in [
                'accept', 'reject', 'publish', 'unpublish', 'send_to_review'
        ]:
            raise NoStatusProvidedException()

        if action == 'unpublish':
            getattr(lifecycle, action)(killemall)
            # Signal
            visualization_unpublished.send_robust(
                sender='change_status_view',
                id=lifecycle.visualization.id,
                rev_id=lifecycle.visualization_revision.id)
        else:
            getattr(lifecycle, action)()

        if action == 'accept':
            title = ugettext('APP-VISUALIZATION-APPROVED-TITLE'),
            description = ugettext('APP-VISUALIZATION-APPROVED-TEXT')
        elif action == 'reject':
            title = ugettext('APP-VISUALIZATION-REJECTED-TITLE'),
            description = ugettext('APP-VISUALIZATION-REJECTED-TEXT')
        elif action == 'publish':
            title = ugettext('APP-VISUALIZATION-PUBLISHED-TITLE'),
            description = ugettext('APP-VISUALIZATION-PUBLISHED-TEXT')
        elif action == 'unpublish':
            title = ugettext('APP-VISUALIZATION-UNPUBLISH-TITLE'),
            description = ugettext('APP-VISUALIZATION-UNPUBLISH-TEXT')
        elif action == 'send_to_review':
            title = ugettext('APP-VISUALIZATION-SENDTOREVIEW-TITLE'),
            description = ugettext('APP-VISUALIZATION-SENDTOREVIEW-TEXT')

        response = dict(status='ok',
                        messages={
                            'title': title,
                            'description': description
                        })

        # Limpio un poco
        response['result'] = VisualizationDBDAO().get(
            request.user.language,
            visualization_revision_id=visualization_revision_id)
        account = request.account
        msprotocol = 'https' if account.get_preference(
            'account.microsite.https') else 'http'
        response['result'][
            'public_url'] = msprotocol + "://" + request.preferences[
                'account.domain'] + reverse(
                    'chart_manager.view',
                    urlconf='microsites.urls',
                    kwargs={
                        'id': response['result']['visualization_id'],
                        'slug': '-'
                    })
        response['result'].pop('parameters')
        response['result'].pop('tags')
        response['result'].pop('sources')
        response['result'].pop('visualization')

        return JSONHttpResponse(json.dumps(response, cls=DateTimeEncoder))
예제 #8
0
def filter(request, page=0, itemsxpage=settings.PAGINATION_RESULTS_PER_PAGE):
    """ filter resources
    :param itemsxpage:
    :param page:
    :param request:
    """
    bb_request = request.GET
    filters_param = bb_request.get('filters')
    filters_dict = dict()
    filter_name = ''
    sort_by = bb_request.get("sort_by", None)
    order = bb_request.get("order", "asc")

    if filters_param is not None and filters_param != '':
        filters = json.loads(filters_param)

        filters_dict['impl_type'] = filters.get('type')
        filters_dict['category__categoryi18n__name'] = filters.get('category')
        filters_dict['datastream__user__nick'] = filters.get('author')
        filters_dict['status'] = filters.get('status')

    if bb_request.get('page') is not None and bb_request.get('page') != '':
        page = int(bb_request.get('page'))
    if bb_request.get(
            'itemxpage') is not None and bb_request.get('itemxpage') != '':
        itemsxpage = int(bb_request.get('itemxpage'))
    if bb_request.get('q') is not None and bb_request.get('q') != '':
        filter_name = bb_request.get('q')

    if sort_by:
        if sort_by == "title":
            sort_by = "datastreami18n__title"
        elif sort_by == "dataset_title":
            sort_by = "dataset__last_revision__dataseti18n__title"
        elif sort_by == "author":
            sort_by = "datastream__user__nick"

        if order == "desc":
            sort_by = "-" + sort_by
    else:
        # no se por que setea un orden de este tipo si no
        # se envia el parametro
        sort_by = '-id'

    total_resources = request.stats['account_total_datastreams']

    resources, total_entries = DataStreamDBDAO().query(
        account_id=request.account.id,
        language=request.user.language,
        page=page,
        itemsxpage=itemsxpage,
        filters_dict=filters_dict,
        sort_by=sort_by,
        filter_name=filter_name)

    for resource in resources:
        resource['url'] = reverse('manageDataviews.view',
                                  urlconf='workspace.urls',
                                  kwargs={'revision_id': resource['id']})
        resource['dataset_url'] = reverse(
            'manageDatasets.view',
            urlconf='workspace.urls',
            kwargs={'revision_id': resource['dataset__last_revision__id']})

    data = {
        'total_entries': total_entries,
        'total_resources': total_resources,
        'resources': resources,
        'total_entries': total_entries
    }
    response = DatastreamList().render(data)

    return JSONHttpResponse(response)
예제 #9
0
def create(request):
    auth_manager = request.auth_manager
    if request.method == 'POST':
        """ save new or update dataset """
        form = CreateDataStreamForm(request.POST)

        if not form.is_valid():
            raise DatastreamSaveException(form)

        dataset_revision = DatasetRevision.objects.get(
            pk=form.cleaned_data['dataset_revision_id'])

        dataview = DatastreamLifeCycleManager(user=request.user)
        dataview.create(dataset=dataset_revision.dataset,
                        language=request.auth_manager.language,
                        category_id=form.cleaned_data['category'],
                        **form.cleaned_data)

        response = dict(
            status='ok',
            datastream_revision_id=dataview.datastream_revision.id,
            messages=[ugettext('APP-DATASET-CREATEDSUCCESSFULLY-TEXT')])

        return JSONHttpResponse(json.dumps(response))

    elif request.method == 'GET':
        form = InitalizeCollectForm(request.GET)

        if form.is_valid():
            is_update = False
            is_update_selection = False
            data_set_id = form.cleaned_data['dataset_revision_id']
            datastream_id = None

            if auth_manager.is_level('level_5'):
                meta_data = Account.objects.get(
                    pk=auth_manager.account_id).meta_data

            try:
                dataset_revision = DatasetRevision.objects.get(pk=data_set_id)
            except DatasetRevision.DoesNotExist:
                raise DatasetNotFoundException()

            end_point = dataset_revision.end_point
            type = dataset_revision.dataset.type
            impl_type = dataset_revision.impl_type
            impl_details = dataset_revision.impl_details
            bucket_name = request.bucket_name

            categoriesQuery = CategoryI18n.objects\
                                .filter(language=request.auth_manager.language,
                                        category__account=request.auth_manager.account_id)\
                                .values('category__id', 'name')
            categories = [[category['category__id'], category['name']]
                          for category in categoriesQuery]
            preferences = auth_manager.get_account().get_preferences()
            try:
                default_category = int(preferences['account.default.category'])
            except:
                default_category = categories[0][0]
            # Agregar categoria por defecto
            categories = map(lambda x: x + [int(x[0]) == default_category],
                             categories)

            sources = [source for source in dataset_revision.get_sources()]
            tags = [tag for tag in dataset_revision.get_tags()]

            return render_to_response('createDataview/index.html', locals())
        else:
            raise Http404
예제 #10
0
def edit(request, datastream_revision_id=None):
    lifecycle = DatastreamLifeCycleManager(
        user=request.user, datastream_revision_id=datastream_revision_id)
    dao = DataStreamDBDAO().get(request.user,
                                datastream_revision_id=datastream_revision_id)
    auth_manager = request.auth_manager

    if request.method == 'GET':
        is_update = True
        is_update_selection = True
        dataset_revision = Dataset.objects.get(
            id=dao['dataset_id']).last_revision
        datastream_id = None

        if auth_manager.is_level('level_5'):
            meta_data = Account.objects.get(
                pk=auth_manager.account_id).meta_data

        end_point = dataset_revision.end_point
        type = dataset_revision.dataset.type
        impl_type = dataset_revision.impl_type
        impl_details = dataset_revision.impl_details
        bucket_name = request.bucket_name

        categoriesQuery = CategoryI18n.objects\
                            .filter(language=request.auth_manager.language,
                                    category__account=request.auth_manager.account_id)\
                            .values('category__id', 'name')
        categories = [[category['category__id'], category['name']]
                      for category in categoriesQuery]
        preferences = auth_manager.get_account().get_preferences()
        try:
            default_category = int(preferences['account.default.category'])
        except:
            default_category = categories[0][0]
        # Agregar categoria por defecto
        categories = map(lambda x: x + [int(x[0]) == default_category],
                         categories)

        sources = [source for source in dataset_revision.get_sources()]
        tags = [tag for tag in dataset_revision.get_tags()]

        return render_to_response('createDataview/index.html', locals())

    elif request.method == 'POST':
        """update dataset """

        form = EditDataStreamForm(request.POST)

        if not form.is_valid():
            raise DatastreamSaveException(form)

        if form.is_valid():
            lifecycle = DatastreamLifeCycleManager(
                user=request.user,
                datastream_revision_id=datastream_revision_id)

            lifecycle.edit(language=request.auth_manager.language,
                           changed_fields=form.changed_data,
                           **form.cleaned_data)

            # Signal
            datastream_changed.send_robust(
                sender='edit_view',
                id=lifecycle.datastream.id,
                rev_id=lifecycle.datastream_revision.id)

            response = dict(
                status='ok',
                datastream_revision_id=lifecycle.datastream_revision.id,
                messages=[ugettext('APP-DATASET-CREATEDSUCCESSFULLY-TEXT')],
            )

            return JSONHttpResponse(json.dumps(response))