Ejemplo n.º 1
0
    def export(params, export_dict, model_path, filterset_module, view_module,
               user_id):
        app, model = model_path.split('.')
        queryset = apps.get_model(app, model).objects.all()
        view = import_string(view_module)
        request = Request
        request.query_params = params
        queryset = SearchFilter.filter_queryset(SearchFilter(), request,
                                                queryset, view)
        queryset = import_string(filterset_module)(params, queryset).qs

        workbook = Workbook()
        worksheet = workbook.active
        worksheet.title = model
        worksheet.sheet_properties.tabColor = '0033CCCC'
        worksheet.row_dimensions[1].height = 20
        worksheet.freeze_panes = 'A2'
        for col_num, (column_title,
                      column_properties) in enumerate(export_dict.items(), 1):
            row_num = 1
            cell = worksheet.cell(row=row_num, column=col_num)
            cell.value = column_title
            worksheet.column_dimensions[get_column_letter(
                col_num)].width = column_properties[1]
            cell.alignment = Alignment(horizontal='center', vertical='center')
            cell.font = fonts.Font(b=True, color='00FFFFFF')
            cell.fill = PatternFill(bgColor='0033CCCC', fill_type="solid")
            for record in queryset:
                row_num += 1
                cell = worksheet.cell(row=row_num, column=col_num)
                cell.alignment = Alignment(vertical='top', wrap_text=True)
                cell_value = getattr(record, column_properties[0])
                if isinstance(cell_value, datetime):
                    cell_value = cell_value.replace(tzinfo=None)
                elif isinstance(cell_value, models.Model):
                    cell_value = str(cell_value)
                elif isinstance(cell_value, functools.partial):
                    cell_value = cell_value()
                cell.value = cell_value
        export_file_name = model + '_{0}.xlsx'.format(
            datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
        data = BytesIO()
        workbook.save(data)
        data = data.getvalue()

        export_url = s3bucket.save_file(export_file_name, data)
        user = DataOceanUser.objects.get(id=user_id)
        with translation.override(user.language):
            user.notify(
                gettext(
                    'Generation of .xlsx file has ended. You may download the file by address %(address)s'
                ) % {'address': export_url})
            send_export_url_file_path_message(user, export_url)
Ejemplo n.º 2
0
    def retrieve(self, request, **kwargs):
        request.last_url = request.path
        subcategory = Subcategory.objects.get(pk=kwargs['pk'])
        subcategory_info = se.CategoryDetailSerializer(
            subcategory, context={'request': request})

        qs = Post.objects.filter(subcategories=subcategory).annotate(
            average_rate=Avg('rates__rate')).order_by(
                F('average_rate').desc(nulls_first=True), '-date_created')

        queryset = SearchFilter().filter_queryset(request, qs, PostView())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return Response(
                OrderedDict([
                    ('count', self.paginator.page.paginator.count),
                    ('next', self.paginator.get_next_link()),
                    ('previous', self.paginator.get_previous_link()),
                    ('category_info', subcategory_info.data),
                    ('results', serializer.data),
                ]))

        serializer = self.get_serializer(queryset, many=True)
        return Response(
            OrderedDict([
                ('category_info', subcategory_info.data),
                ('post', serializer.data),
            ]))
Ejemplo n.º 3
0
    def contacts(self, request, pk=None):
        media_list = self.get_media_list_by_pk(request, pk)
        queryset = media_list.contacts and media_list.contacts.get_queryset()
        queryset = OrderingFilter().filter_queryset(request, queryset, self)

        # We have to create a search filter
        self.search_fields = (
            '=first_name',
            '=last_name',
            '=email',
            '=employers__name',
            '=custom_fields__value',
        )
        queryset = SearchFilter().filter_queryset(request, queryset, self)
        queryset = queryset.order_by('-created')

        page = self.paginate_queryset(queryset)
        if page is not None:
            included = []

            # Initialize included
            publications = []
            for contact in page:
                publication = []
                if contact.employers.count() > 0:
                    publication += list(contact.employers.all())
                if contact.past_employers.count() > 0:
                    publication += list(contact.past_employers.all())
                if len(publication) > 0:
                    publications += publication

            if len(publications) > 0:
                pub_serializer = PublicationSerializer(publications, many=True)
                included = pub_serializer.data

            serializer = ContactSerializer(page, many=True)
            return self.get_paginated_response(serializer.data, included)

        serializer = ContactSerializer(queryset, many=True)
        return BulkResponse(serializer.data, {}, len(serializer.data),
                            len(serializer.data))
Ejemplo n.º 4
0
class CountryLanguage(ListAPIView):
    serializer_class = CountryLanguageSerializer
    queryset = CountryLanguage.objects.all()
    SearchFilter('language')
Ejemplo n.º 5
0
class CityView(ListAPIView):
    serializer_class = CitySerializer
    queryset = City.objects.all()
    SearchFilter('name')