示例#1
0
 def to_representation(self, value):
     if not value:
         # don't add anything when it's not set.
         return value
     parts = urlsplit(value)
     query = QueryDict(parts.query, mutable=True)
     query.update(amo.CONTRIBUTE_UTM_PARAMS)
     return super().to_representation(
         urlunsplit((
             parts.scheme,
             parts.netloc,
             parts.path,
             query.urlencode(),
             parts.fragment,
         )))
    def update(self, request, pk=None):
        try:
            snippet = Meal.objects.get(pk=pk)
        except Meal.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)

        if request.method == 'PUT':
            calorie = 0
            if snippet.food_name == request.data['food_name'] and float(
                    request.data['calorie']) != float(0):
                calorie = request.data['calorie']
                serializer = MealSerializer(snippet, data=request.data)
            else:
                data = dict(request.data)
                # \ or float(snippet.calorie) == float(data['calorie'][0])
                if not data['calorie'] or float(
                        data['calorie'][0]) == float(0):
                    flag, val = nutritionnix_calorie_api(data['food_name'][0])
                    if flag:
                        data['calorie'][0] = val
                    else:
                        return Response(status=status.HTTP_400_BAD_REQUEST)
                calorie = data['calorie'][0]
                query_dict = QueryDict('', mutable=True)
                query_dict.update(MultiValueDict(data))
                serializer = MealSerializer(snippet, data=query_dict)

            if serializer.is_valid():
                try:
                    if request.user.is_superuser:
                        user = UserProfile.objects.get(
                            pk=snippet.user_profile.id)
                    else:
                        user = UserProfile.objects.get(pk=self.request.user.id)

                    user.curr_calorie -= float(snippet.calorie)
                    user.curr_calorie += float(calorie)
                    if user.curr_calorie < user.max_calorie:
                        user.is_limit = False
                    else:
                        user.is_limit = True
                    user.save()
                except:
                    return Response(status=status.HTTP_404_NOT_FOUND)
                serializer.save()
                return Response(serializer.data)
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
示例#3
0
    def dispatch(self, request: HttpRequest, flow_slug: str) -> HttpResponse:
        # Early check if theres an active Plan for the current session
        if SESSION_KEY_PLAN in self.request.session:
            self.plan = self.request.session[SESSION_KEY_PLAN]
            if self.plan.flow_pk != self.flow.pk.hex:
                self._logger.warning(
                    "f(exec): Found existing plan for other flow, deleteing plan",
                )
                # Existing plan is deleted from session and instance
                self.plan = None
                self.cancel()
            self._logger.debug("f(exec): Continuing existing plan")

        # Don't check session again as we've either already loaded the plan or we need to plan
        if not self.plan:
            self._logger.debug("f(exec): No active Plan found, initiating planner")
            try:
                self.plan = self._initiate_plan()
            except FlowNonApplicableException as exc:
                self._logger.warning(
                    "f(exec): Flow not applicable to current user", exc=exc
                )
                return to_stage_response(self.request, self.handle_invalid_flow(exc))
            except EmptyFlowException as exc:
                self._logger.warning("f(exec): Flow is empty", exc=exc)
                # To match behaviour with loading an empty flow plan from cache,
                # we don't show an error message here, but rather call _flow_done()
                return self._flow_done()
        # Initial flow request, check if we have an upstream query string passed in
        request.session[SESSION_KEY_GET] = QueryDict(request.GET.get("query", ""))
        # We don't save the Plan after getting the next stage
        # as it hasn't been successfully passed yet
        next_stage = self.plan.next(self.request)
        if not next_stage:
            self._logger.debug("f(exec): no more stages, flow is done.")
            return self._flow_done()
        self.current_stage = next_stage
        self._logger.debug(
            "f(exec): Current stage",
            current_stage=self.current_stage,
            flow_slug=self.flow.slug,
        )
        stage_cls = self.current_stage.type
        self.current_stage_view = stage_cls(self)
        self.current_stage_view.args = self.args
        self.current_stage_view.kwargs = self.kwargs
        self.current_stage_view.request = request
        return super().dispatch(request)
示例#4
0
    def __init__(self,
                 page_num,
                 all_count,
                 params=None,
                 per_num=10,
                 max_show=11):
        """
		:param page_num:  当前的页码数
		:param all_count: 总数据量
		:param per_num:   每页显示的数据条数
		:param max_show:  最大显示页码数
		:param self.total_page_num:  总页码数
		:param self.page_start:  起始页码数
		:param self.page_end:    终止页码数

		"""
        try:
            page_num = int(page_num)
            if page_num <= 0:
                page_num = 1
        except Exception as e:
            page_num = 1
        self.parmas = params if params else QueryDict(mutable=True)
        self.page_num = page_num
        self.all_count = all_count
        self.per_num = per_num
        total_page_num, more = divmod(all_count, per_num)
        if more:
            total_page_num += 1
        half_show = max_show // 2
        # 总页码数不足以满足最大页码数
        if total_page_num < max_show:
            page_start = 1
            page_end = total_page_num
        else:
            if page_num - half_show <= 0:
                page_start = 1
                page_end = max_show
            elif page_num + half_show > total_page_num:
                page_start = total_page_num - max_show + 1
                page_end = total_page_num
            else:
                page_start = page_num - half_show
                page_end = page_num + half_show

        self.page_start = page_start
        self.page_end = page_end
        self.total_page_num = total_page_num
示例#5
0
    def _add_nested_data(self, request: Request, data_item: dict,
                         relationships: List[Tuple[Relationship, bool]],
                         origin_lookup_field: str) -> None:
        """ Nests data retrieved from related services """
        origin_pk = data_item.get(origin_lookup_field)
        if not origin_pk:
            raise exceptions.DataMeshError(
                f'DataMeshConfigurationError: lookup_field_name "{origin_lookup_field}" '
                f'not found in response.')
        for relationship, is_forward_lookup in relationships:
            join_records = JoinRecord.objects.get_join_records(
                origin_pk, relationship, is_forward_lookup)

            # now backwards get related objects through join_records
            if join_records:
                related_objects = []

                related_model, related_record_field = datamesh_utils.prepare_lookup_kwargs(
                    is_forward_lookup, relationship, join_records[0])

                app = self._load_swagger_resource(
                    related_model.logic_module_endpoint_name)

                for join_record in join_records:

                    # remove query_params from original request
                    request._request.GET = QueryDict(mutable=True)

                    request_kwargs = {
                        'pk': (str(getattr(join_record,
                                           related_record_field))),
                        'model': related_model.endpoint.strip('/'),
                        'method': request.META['REQUEST_METHOD'].lower()
                    }

                    # create and perform a service request
                    response = self._perform_service_request(app=app,
                                                             request=request,
                                                             **request_kwargs)
                    if response.data:
                        related_objects.append(dict(response.data))
                    else:
                        logger.error(
                            f'No response data for join record (request params: {request_kwargs})'
                        )

                # aggregate
                data_item[relationship.key] = related_objects
示例#6
0
    def connect(self):
        self.accept()
        query_string = self.scope.get('query_string')
        # print(query_string)
        ssh_args = QueryDict(query_string=query_string, encoding='utf-8')

        width = int(ssh_args.get('width'))
        height = int(ssh_args.get('height'))
        port = int(ssh_args.get('port'))

        auth = ssh_args.get('auth')
        ssh_key_name = ssh_args.get('ssh_key')
        passwd = ssh_args.get('password')
        host = ssh_args.get('host')
        user = ssh_args.get('user')

        if passwd:
            passwd = base64.b64decode(passwd).decode('utf-8')
            # password = password
        else:
            passwd = None

        self.ssh = SSH(websocket=self, message=self.message)

        ssh_connect_dict = {
            'host': host,
            'user': user,
            'port': port,
            'timeout': 30,
            'pty_width': width,
            'pty_height': height,
            'password': passwd
        }

        if auth == 'key':
            ssh_key_file = os.path.join(TMP_DIR, ssh_key_name)
            with open(ssh_key_file, 'r') as fp:
                ssh_key = fp.read()

            string_io = StringIO()
            string_io.write(ssh_key)
            string_io.flush()
            string_io.seek()
            ssh_connect_dict['ssh_key'] = string_io

            os.remove(ssh_key_file)
        # print(ssh_connect_dict)
        self.ssh.connect(**ssh_connect_dict)
示例#7
0
def product_selector_ui_extra_context(view):
    extra_context = dict()

    # Captured values
    kwargs = view.kwargs
    step = int(kwargs.get('step'))

    # Post data
    data = kwargs.get('POST') or QueryDict()
    config_id = data.get('config_id')
    type_id = data.get('type_id')

    extra_context['step'] = step
    if step == 1:
        extra_context['configs'] = Config.objects.order_by('id').all()
    elif step == 2:
        extra_context['types'] = Config.objects.get(id=config_id).types()
    elif step == 3:
        config = Config.objects.get(id=config_id)
        products = config.products().filter(track_item=True, type__id=type_id)

        # Handling special cases, if there is parent product e.g. FB1, replaces with sub products
        if config_id == '5':
            fb_related_products = AbstractProduct.objects.filter(
                track_item=False, code__icontains='FB')
            products = products.exclude(
                name__icontains='FB') | fb_related_products

        # Handling special cases, replace origin seafoods parent with sub product
        if config_id == '13' and type_id == '2':
            products = config.products().filter(track_item=False,
                                                type__id=type_id)

        # Show products parent name and products name or code in select list
        if config_id in ['8', '10', '11', '12'
                         ] or config_id == '13' and type_id == '2':
            extra_context['show_parent'] = True

        # Show products parent name and code in select list
        if config_id in ['5', '6', '7', '13'] and type_id == '1':
            extra_context['show_code'] = True

        extra_context['config_id'] = int(config_id)
        extra_context['products'] = products
        extra_context['sources'] = config.source_set.all().filter(
            type__id=type_id)

    return extra_context
示例#8
0
    def delete_domain(request):
        response = BaseResponse()
        try:
            response.error = {}
            post_dict = QueryDict(request.body, encoding='utf-8')
            domain_id = post_dict.get('domain_id')

            data_from_db = repository_models.WebConfigDomains.objects.get(
                id=domain_id)
            data_from_db.delete()

        except Exception as e:
            print(Exception, e)
            response.status = False
            response.message = str(e)
        return response
示例#9
0
 def delete(self, model_obj=None, is_header=False):
     if is_header:
         return '删除'
     else:
         from django.http.request import QueryDict
         parms_dict = QueryDict(mutable=True)
         if self.request.method == 'GET':
             parms_dict['_changelistfilter'] = self.request.GET.urlencode()
         name = '{0}:{1}_{2}_delete'.format(self.site.namespace,
                                            model_obj._meta.app_label,
                                            model_obj._meta.model_name)
         url = reverse(name,
                       args=(model_obj.pk, ))  # s生成的结果同上方的edit   pk和id同样
         delete_url = '{0}?{1}'.format(url, parms_dict.urlencode())
         delete_tag = '<a href="%s">删除</a>' % delete_url
         return mark_safe(delete_tag)
示例#10
0
文件: logs.py 项目: abuve/autodeploy
    def data_update(request):
        response = BaseResponse()
        try:
            put_data = QueryDict(request.body, encoding='utf-8')
            obj_id = put_data.get('id')

            update_data = OMTOOLS_MODELS.MongodbMission.objects.get(id=obj_id)
            update_data.op_user_id = request.user.id
            update_data.status = 1
            update_data.save()

        except Exception as e:
            print(Exception, e)
            response.status = False
            response.message = str(e)
        return response
示例#11
0
def on_user_logged_out(sender, request, user, **kwargs):
    if not settings.AUTH_OPENID:
        return

    query = QueryDict('', mutable=True)
    query.update({
        'redirect_uri': settings.BASE_SITE_URL
    })

    openid_logout_url = "%s?%s" % (
        client.openid_connect_client.get_url(
            name='end_session_endpoint'),
        query.urlencode()
    )

    request.COOKIES['next'] = openid_logout_url
示例#12
0
    def delete_server_instance(request):
        response = BaseResponse()
        try:
            response.error = {}
            post_dict = QueryDict(request.body, encoding='utf-8')

            delete_instance_id = post_dict.get('instance_id')
            get_data_from_db = repository_models.AppInstances.objects.get(
                id=delete_instance_id)
            get_data_from_db.delete()

        except Exception as e:
            print(Exception, e)
            response.status = False
            response.message = str(e)
        return response
示例#13
0
    def delete_assets(request):
        response = BaseResponse()
        print('delete')
        try:
            delete_dict = QueryDict(request.body,encoding='utf-8')  ##get id_list

            id_list = delete_dict.getlist('id_list')

            print(id_list)
            models.Asset.objects.filter(ni__in=id_list).delete()
            response.message = '删除成功'
        except Exception as e:
            response.status = False
            print(e)
            response.message = str(e)
        return response
    def get(self, request, *args, **kwargs):
        page = self.get_page()

        post_data, timestamp = self.request.session.get(self.session_key,
                                                        (None, None))
        if not isinstance(post_data, str):
            post_data = ''
        form = self.get_form(page, QueryDict(post_data))

        if not form.is_valid():
            return self.error_response(page)

        form.save(commit=False)
        preview_mode = request.GET.get('mode', page.default_preview_mode)
        return page.serve_preview(page.dummy_request(request),
                                  preview_mode)
示例#15
0
    def test_view_helpers(self):
        dictionary = {'max': ['3'], 'type': ['download'], 'jurisdiction_name': ['alabama']}
        query_params = QueryDict('', mutable=True)
        query_params.update(MultiValueDict(dictionary))
        formatted_params = view_helpers.format_query(query_params, dict())
        """
        assert type is removed
        """
        assert 'type' not in formatted_params
        assert 'max' not in formatted_params

        queries = list(map(view_helpers.make_query, list(formatted_params.items())))
        assert len(queries) == 1

        first_q = queries[0]
        assert first_q.children[0][0] == 'jurisdiction__name__icontains'
示例#16
0
    def get_form(self):
        page = self.get_page()
        form_class = page.get_edit_handler().get_form_class(page._meta.model)
        parent_page = page.get_parent().specific

        if self.session_key not in self.request.session:
            # Session key not in session, returning null form
            return form_class(instance=page, parent_page=parent_page)
        post_data_dict, timestamp = self.request.session[self.session_key]

        # convert post_data_dict back into a QueryDict
        post_data = QueryDict('', mutable=True)
        for k, v in post_data_dict.items():
            post_data.setlist(k, v)

        return form_class(post_data, instance=page, parent_page=parent_page)
示例#17
0
    def render(self, context):
        request = context['request']

        # Make request.GET mutable.
        # request.GET = dict(request.GET)

        if self.var_name in request.GET:
            return ''
        else:
            mydict = {self.var_name: 1}
            qdict = QueryDict('')
            qdict = request.GET.copy()
            qdict.update(mydict)
            request.GET = qdict
            # request.GET[self.var_name] = 1
            return self.nodelist.render(context)
示例#18
0
文件: v1.py 项目: yuanyping/pro_admin
    def add_btn(self):
        """
        列表页面定制新建数据按钮
        :return: 
        """
        add_url = reverse(
            '%s:%s_%s_add' %
            (self.arya_modal.site.namespace, self.arya_modal.app_label,
             self.arya_modal.model_name))

        _change = QueryDict(mutable=True)
        _change['_change_filter'] = self.request.GET.urlencode()

        tpl = "<a class='btn btn-success' style='float:right' href='{0}?{1}'><span class='glyphicon glyphicon-share-alt' aria-hidden='true'></span> 新建数据</a>".format(
            add_url, _change.urlencode())
        return mark_safe(tpl)
示例#19
0
    def delete_server_instance(request):
        response = BaseResponse()
        try:
            response.error = {}
            post_dict = QueryDict(request.body, encoding='utf-8')

            group_id = post_dict.get('group_id')
            docker_id = post_dict.get('docker_id')

            add_to_db = repository_models.AppGroups.objects.get(id=group_id)
            add_to_db.docker.remove(CMDB_MODELS.DockerInstance.objects.get(id=docker_id))

        except Exception as e:
            response.status = False
            response.message = str(e)
        return response
    def test_create_with_file(self):
        data = {
            'page.title': 'some page',
            'source': get_sample_file(name='sample name')
        }
        qdict = QueryDict('', mutable=True)
        qdict.update(data)

        serializer = serializers.DocumentSerializer(
            data=qdict
        )
        serializer.is_valid(raise_exception=True)
        doc = serializer.save()

        self.assertTrue(models.Document.objects.filter(pk=doc.pk).exists())
        self.assertEqual(doc.page.title, 'some page')
示例#21
0
def resolve_url(request,url_name,cid):
    """

    :param request: 请求对象
    :param url_name:  url别名
    :param cid:    客户id
    :return:
    """
    from django.http.request import QueryDict
    custom_query_dict = QueryDict(mutable=True)
    custom_query_dict['next'] = request.get_full_path()   #要跳转回的url
    next_url = custom_query_dict.urlencode()    #将得到的搜索路径url编码

    reverse_url = reverse(url_name,args=(cid,))     #编辑的url    ?next=要跳转的url
    full_path = reverse_url + '?' + next_url
    return full_path
示例#22
0
 def delete_assets(request):
     response = BaseResponse()
     try:
         delete_dict = QueryDict(request.body, encoding='utf-8')
         id_list = delete_dict.getlist('id_list')
         status = models.ReleaseTask.objects.filter(id=id_list[0]).first().release_status
         if status != 4:
             response.status = False
             response.message = '非待审核状态不能删除'
         else:
             models.ReleaseTask.objects.filter(id__in=id_list).delete()
             response.message = '删除成功'
     except Exception as e:
         response.status = True
         # response.message = str(e)
     return response
示例#23
0
    def asset_data_create(request):
        response = BaseResponse()
        try:
            asset_data = QueryDict(request.body, encoding='utf-8')
            new_asset_num = asset_num.asset_num_builder()
            asset_sn = asset_data.get('sn')
            Memory = int(asset_data.get('Memory'))
            DeviceSize = int(asset_data.get('DeviceSize'))
            cpu_count = int(asset_data.get('cpu_count'))
            if not asset_sn:
                asset_sn = new_asset_num
            if not models.Server.objects.filter(
                    ipaddress=asset_data.get('ipaddress')):
                # 创建asset obj
                asset_obj = models.Asset(
                    device_type_id=asset_data.get('device_type_id'),
                    asset_num=new_asset_num,
                    sn=asset_sn,
                    idc_id=asset_data.get('idc_id'),
                    business_unit_id=asset_data.get('business_unit_id'),
                    manage_ip=asset_data.get('manage_ip'),
                    creator_id=request.user.id,
                    memo=asset_data.get('memo'))
                asset_obj.save()
                asset_obj.tag.add(asset_data.get('tag_id'))

                # 创建server obj
                server_obj = models.Server(
                    asset_id=asset_obj.id,
                    hostname=asset_data.get('hostname'),
                    ipaddress=asset_data.get('ipaddress'),
                    Memory=Memory,
                    DeviceSize=DeviceSize,
                    cpu_count=cpu_count,
                    configuration='( %sC /%sG /%sG )' %
                    (cpu_count, Memory, DeviceSize))
                server_obj.save()
            else:
                response.status = False
                response.message = 'Ipaddress is already in system, Please check.'

        except Exception as e:
            print(Exception, e)
            response.status = False
            response.message = str(e)

        return response
 def test_forms_courses_multi_values_in_querystring(self, *_):
     """
     The fields from filter definitions should allow multiple values. The fields defined
     on the form should ignore repeated values (limit, offset and query).
     """
     form = CourseSearchForm(data=QueryDict(
         query_string=("availability=coming_soon"
                       "&availability=ongoing"
                       "&languages=fr"
                       "&languages=en"
                       "&levels=1"
                       "&levels=2"
                       "&limit=9"
                       "&limit=11"
                       "&new=new"
                       "&offset=3"
                       "&offset=17"
                       "&organizations=10"
                       "&organizations=11"
                       "&query=maths"
                       "&query=physics"
                       "&scope=objects"
                       "&scope=filters"
                       "&subjects=1"
                       "&subjects=2")))
     form.is_valid()
     self.assertTrue(form.is_valid())
     self.assertEqual(
         form.cleaned_data,
         {
             "availability": ["coming_soon", "ongoing"],
             "languages": ["fr", "en"],
             "levels": ["1", "2"],
             "levels_include": "",
             "limit": 9,
             "new": ["new"],
             "offset": 3,
             "organizations": ["10", "11"],
             "organizations_include": "",
             "persons": [],
             "persons_include": "",
             "query": "maths",
             "scope": "objects",
             "subjects": ["1", "2"],
             "subjects_include": "",
         },
     )
示例#25
0
    def __init__(self, page, all_count, params, per_num=10, max_show=11):
        try:
            self.page = int(page)
            if self.page <= 0:
                self.page = 1
        except Exception:
            self.page = 1

        # 查询条件
        self.params = params
        if not params:
            self.params = QueryDict(mutable=True)
        # 总的数据量
        all_count = all_count
        # 每页显示的数据量  10

        # 总的页码数
        total_num, more = divmod(all_count, per_num)
        if more:
            total_num += 1
        # 最大显示的页码数
        half_show = max_show // 2

        if total_num <= max_show:
            page_start = 1
            page_end = total_num
        else:
            if self.page - half_show <= 0:
                # 页码的起始值
                page_start = 1
                # 页码的终止值
                page_end = max_show
            elif self.page + half_show > total_num:
                page_end = total_num
                page_start = total_num - max_show + 1

            else:
                # 页码的起始值
                page_start = self.page - half_show
                # 页码的终止值
                page_end = self.page + half_show

        self.page_start = page_start
        self.page_end = page_end
        self.total_num = total_num
        self.start = (self.page - 1) * per_num
        self.end = self.page * per_num
示例#26
0
    def __init__(self,
                 request,
                 all_num,
                 params=None,
                 per_page=10,
                 max_item=11):
        """
        :param request: request请求对象
        :param all_num: 需要分页的数据量
        :param per_page: 每页需要展示的数据条数
        :param max_item: 显示的页码
        page:如果page为非数字需要进行异常处理,并设置其为1
        """
        try:
            page = int(request.GET.get('page', 1))
            page = 1 if page <= 0 else page
        except Exception:
            page = 1
        # 查询条件
        self.params = params
        if not self.params:
            self.params = QueryDict(mutable=True)
        # total_page: 分的总页数
        total_page, b = divmod(all_num, per_page)
        total_page = total_page + 1 if b else total_page
        # page 对超出边界的page进行限制
        page = page if page < total_page else total_page
        # end和start表示显示的起始页码, views函数需要
        self.end = page * per_page
        self.start = self.end - per_page
        half_item = max_item // 2
        # 表示页码的起始数
        self.start_page = page - half_item
        self.end_page = page + half_item
        # page表示当前页码
        self.page = page
        self.max_item = max_item
        self.total_page = total_page

        self.start_page = 1 if self.start_page <= 0 else self.start_page
        if self.end_page > self.total_page:
            self.start_page = self.total_page - self.max_item + 1
        self.end_page = self.start_page + self.max_item

        if self.start < 0:
            self.start = 1
            self.end = 1
示例#27
0
    def edit_field(self, obj=None, is_header=False):
        '''操作栏,生成'''
        if is_header:
            return '操作'
        else:
            # url 尾部的 字段
            param_url = ""
            if len(self.request.GET):
                _change = QueryDict(mutable=True)
                _change['_change_filter'] = self.request.GET.urlencode()
                param_url = "?{0}".format(_change.urlencode())

            to_user_id = obj.to_user_id
            from_user_id = obj.from_user_id
            user_info_nid = self.request.session.get('user_info').get('nid')

            tpl_edit_url = "<a style='color:red'>编辑</a>"
            if str(obj.status) != '1' and user_info_nid is to_user_id:
                # 判断 任务状态是否完成,并且 任务处理人是否是登录用户
                edit_url = reverse('{0}:{1}_{2}_change'.format(self.site.namespace, self.app_label, self.model_name),
                                   args=(obj.pk,))
                tpl_edit_url = "<a href='{0}{1}'>编辑</a>".format(edit_url, param_url)

            tpl_del_url = "<a style='color:red'>删除</a>"
            if user_info_nid is from_user_id:
                # 判断 任务分发者 是当前登录用户,才有删除的功能
                del_url = reverse('{0}:{1}_{2}_delete'.format(self.site.namespace, self.app_label, self.model_name),
                                  args=(obj.pk,))
                tpl_del_url = "<a href='{0}{1}'>删除</a>".format(del_url, param_url)

            # 每个人都有查看详细页面的功能
            detail_url = reverse('{0}:{1}_{2}_detail'.format(self.site.namespace, self.app_label, self.model_name),
                                 args=(obj.pk,))
            tpl_detail_url = "<a href='{0}{1}'>查看详细</a>".format(detail_url, param_url)

            tpl_submit_url = '<a style="color:red">进入提交</a>'
            if user_info_nid is to_user_id:
                # 判断 当前登录用户是 任务处理者时,才能有编辑能力。
                submit_url = reverse('{0}:{1}_{2}_submit'.format(self.site.namespace, self.app_label, self.model_name),
                                     args=(obj.pk,))
                tpl_submit_url = "<a href='{0}{1}'>进入提交</a>".format(submit_url, param_url)

            tpl = "{0} | {1} | {2} | {3}".format(tpl_edit_url,
                                                 tpl_del_url,
                                                 tpl_detail_url,
                                                 tpl_submit_url)
            return mark_safe(tpl)
示例#28
0
 def test_forms_courses_single_values_in_querystring(self, *_):
     """
     The fields from filter definitions should be normalized as lists. The fields defined
     on the form should be single values (limit, offset and query)
     """
     form = CourseSearchForm(data=QueryDict(
         query_string=("availability=coming_soon"
                       "&facet_sorting=count"
                       "&languages=fr"
                       "&levels=1"
                       "&limit=9"
                       "&new=new"
                       "&offset=3"
                       "&organizations=10"
                       "&query=maths"
                       "&scope=objects"
                       "&subjects=1")))
     self.assertTrue(form.is_valid())
     self.assertEqual(
         form.cleaned_data,
         {
             "availability": ["coming_soon"],
             "facet_sorting": "count",
             "languages": ["fr"],
             "levels": ["1"],
             "levels_aggs": [],
             "levels_children_aggs": "",
             "licences": [],
             "licences_aggs": [],
             "licences_children_aggs": "",
             "limit": 9,
             "new": ["new"],
             "offset": 3,
             "organizations": ["10"],
             "organizations_aggs": [],
             "organizations_children_aggs": "",
             "persons": [],
             "persons_aggs": [],
             "persons_children_aggs": "",
             "query": "maths",
             "pace": [],
             "scope": "objects",
             "subjects": ["1"],
             "subjects_aggs": [],
             "subjects_children_aggs": "",
         },
     )
示例#29
0
 def test_indexers_courses_build_es_query_search_all_courses(self):
     """
     Happy path: build a query that does not filter the courses at all
     """
     # Build a request stub
     request = SimpleNamespace(
         query_params=QueryDict(query_string="limit=2&offset=10")
     )
     self.assertEqual(
         CoursesIndexer.build_es_query(request),
         (
             2,
             10,
             {"match_all": {}},
             {
                 "all_courses": {
                     "global": {},
                     "aggregations": {
                         "language@en": {
                             "filter": {
                                 "bool": {"must": [{"term": {"language": "en"}}]}
                             }
                         },
                         "language@fr": {
                             "filter": {
                                 "bool": {"must": [{"term": {"language": "fr"}}]}
                             }
                         },
                         "organizations": {
                             "filter": {"bool": {"must": []}},
                             "aggregations": {
                                 "organizations": {
                                     "terms": {"field": "organizations"}
                                 }
                             },
                         },
                         "subjects": {
                             "filter": {"bool": {"must": []}},
                             "aggregations": {
                                 "subjects": {"terms": {"field": "subjects"}}
                             },
                         },
                     },
                 }
             },
         ),
     )
示例#30
0
 def format_filter(self, obj):
     qd = QueryDict(mutable=True)
     filter_fields = self.filter.keys()
     for field_name in filter_fields:
         try:
             # check if serializer method passed in
             serializer_method = getattr(self.parent, self.filter[field_name])
         except AttributeError:
             value = self.lookup_attribute(obj, self.filter[field_name])
         else:
             value = serializer_method(obj)
         if not value:
             continue
         qd.update({'[{}]'.format(field_name): value})
     if not qd.keys():
         return None
     return qd.urlencode(safe=['[', ']'])