コード例 #1
0
 def _test_get_fields(self,
                      model,
                      obj=None,
                      field_names=None,
                      client=None,
                      has_error=False):
     client = client or self.__client_login()
     obj = obj or model.objects.all()[0]
     self.assertEqual(model, obj.__class__)
     module_name = get_module_name(model)
     app_label = model._meta.app_label
     field_names = field_names or model._meta.get_all_field_names()
     for field in field_names:
         if field == 'id' or field.endswith('_id'):  # id or id fk
             continue
         url = (
             '%s?app_label=%s&module_name=%s&field_name=%s&obj_id=%s&__widget_font_size=12.5px'
             '&__widget_line_height=12.5&__widget_height=19.5px&__widget_width=137.5px'
             % (reverse('inplace_get_field'), app_label, module_name, field,
                obj.pk))
         response = client.get(url)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(
             bool(
                 json.loads(response.content.decode('utf-8')).get(
                     'errors', None)), has_error)
コード例 #2
0
    def __init__(self, request, obj, field_name,
                 filters_to_show=None,
                 config=None):
        self.request = request
        self.obj = obj
        self.field_name = field_name
        self.filters_to_show = filters_to_show and filters_to_show.split('|')

        self.model = obj.__class__
        self.field_name_render = field_name  # To transmeta

        self.config = config or {}
        self.config['obj_id'] = unicode(self.obj.pk)
        self.config['field_name'] = self.field_name_render
        self.config['app_label'] = self.model._meta.app_label
        self.config['module_name'] = get_module_name(self.model)
        self.config['filters_to_show'] = filters_to_show
        self.config['can_auto_save'] = self.config.get('can_auto_save', 1)

        filters_to_edit = self.config.get('filters_to_edit', None)
        self.filters_to_edit = filters_to_edit and filters_to_edit.split('|') or []

        self.class_inplace = self.config.get('class_inplace', '')
        self.tag_name_cover = self.config.get('tag_name_cover', 'span')
        self.min_width = self.config.get('min_width', self.DEFAULT_MIN_HEIGHT)
        font_size = self.config.get('font_size', '12')
        if font_size.endswith('px'):
            self.font_size = float(font_size.replace('px', ''))
        else:
            self.font_size = 12
        loads = self.config.get('loads', None)
        self.loads = loads and loads.split(':') or []
        self.initial = {}
        self._transmeta_processing()
コード例 #3
0
    def __init__(self, request, obj, field_name,
                 filters_to_show=None,
                 config=None):
        self.request = request
        self.obj = obj
        self.field_name = field_name
        self.filters_to_show = filters_to_show and filters_to_show.split('|')

        self.model = obj.__class__
        self.field_name_render = field_name  # To transmeta

        self.config = config or {}
        self.config['obj_id'] = unicode(self.obj.pk)
        self.config['field_name'] = self.field_name_render
        self.config['app_label'] = self.model._meta.app_label
        self.config['module_name'] = get_module_name(self.model)
        self.config['filters_to_show'] = filters_to_show
        self.config['can_auto_save'] = self.config.get('can_auto_save', 1)

        filters_to_edit = self.config.get('filters_to_edit', None)
        self.filters_to_edit = filters_to_edit and filters_to_edit.split('|') or []

        self.class_inplace = self.config.get('class_inplace', '')
        self.tag_name_cover = self.config.get('tag_name_cover', 'span')
        self.min_width = self.config.get('min_width', self.DEFAULT_MIN_HEIGHT)
        font_size = self.config.get('font_size', '12')
        if font_size.endswith('px'):
            self.font_size = float(font_size.replace('px', ''))
        else:
            self.font_size = 12
        loads = self.config.get('loads', None)
        self.loads = loads and loads.split(':') or []
        self.initial = {}
        self._transmeta_processing()
コード例 #4
0
 def can_edit(cls, field):
     is_super_user = super(AdminDjangoPermEditInline, cls).can_edit(field)
     if not is_super_user:
         model = field.model
         model_edit = '%s.change_%s' % (model._meta.app_label,
                                        get_module_name(model))
         return field.request.user.has_perm(model_edit)
     return is_super_user
コード例 #5
0
 def can_edit(cls, field):
     is_super_user = super(AdminDjangoPermEditInline, cls).can_edit(field)
     if not is_super_user:
         model = field.model
         model_edit = '%s.change_%s' % (model._meta.app_label,
                                        get_module_name(model))
         return field.request.user.has_perm(model_edit)
     return is_super_user
コード例 #6
0
    def test_bad_requests(self):
        has_error = True
        client = self.__client_login()
        url_get_field = reverse('inplace_get_field')

        response = client.get(url_get_field)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         has_error)
        response = client.post(url_get_field)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         has_error)

        url_save = reverse('inplace_save')
        response = client.post(url_save)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         has_error)
        response = client.get(url_save)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         has_error)

        obj = Resource.objects.all()[0]

        data = {'app_label': obj.__class__._meta.app_label,
                'module_name': get_module_name(obj.__class__),
                'field_name': 'name',
                'value': '""',
                'obj_id': obj.pk,
                'adaptor': 'text'}
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         has_error)
        data['value'] = '"New value"'
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         not has_error)

        obj.name = ''
        obj.save()
        data['field_name'] = 'description'
        data['value'] = '"Description...."'
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         has_error)
        obj.name = 'New value'
        obj.save()
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                         not has_error)
コード例 #7
0
 def _test_get_fields(self, model, obj=None, field_names=None, client=None, has_error=False):
     client = client or self.__client_login()
     obj = obj or model.objects.all()[0]
     self.assertEqual(model, obj.__class__)
     module_name = get_module_name(model)
     app_label = model._meta.app_label
     field_names = field_names or model._meta.get_all_field_names()
     for field in field_names:
         if field == 'id' or field.endswith('_id'):  # id or id fk
             continue
         url = ('%s?app_label=%s&module_name=%s&field_name=%s&obj_id=%s&__widget_font_size=12.5px'
                '&__widget_line_height=12.5&__widget_height=19.5px&__widget_width=137.5px' %
                (reverse('inplace_get_field'),
                 app_label,
                 module_name,
                 field,
                 obj.pk))
         response = client.get(url)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                          has_error)
コード例 #8
0
 def _test_save_fields(self, model, obj=None, field_names=None, client=None, has_error=False):
     client = client or self.__client_login()
     obj = obj or model.objects.all()[0]
     self.assertEqual(model, obj.__class__)
     module_name = get_module_name(model)
     app_label = model._meta.app_label
     field_names = field_names or model._meta.get_all_field_names()
     for field_name in field_names:
         extra_data = {}
         if field_name in transmeta.get_all_translatable_fields(model):
             field = model._meta.get_field_by_name(transmeta.get_fallback_fieldname(field_name))[0]
         else:
             field = model._meta.get_field_by_name(field_name)[0]
         if field_name == 'id' or field_name.endswith('_id'):  # id or id fk
             continue
         url = reverse('inplace_save')
         value = getattr(obj, field_name)
         if isinstance(field, models.FileField):
             value = '"example1.jpg"'
             file_path = os.path.join(settings.MEDIA_ROOT, 'images',
                                      'example1.jpg')
             extra_data['attachment'] = open(file_path, 'rb')
         elif isinstance(value, datetime.datetime):
             value = '"1982-11-14 03:13:12"'
         elif isinstance(value, datetime.date):
             value = '"1982-11-14"'
         elif isinstance(value, datetime.time):
             value = '"03:13:12"'
         else:
             if hasattr(value, 'all'):
                 value = [str(obj_rel.pk) for obj_rel in value.model.objects.all()]
             elif isinstance(value, decimal.Decimal):
                 value = float(value) + 10
             elif (isinstance(value, string) and
                   isinstance(field, models.CharField) and
                   not isinstance(field, models.CommaSeparatedIntegerField) and
                   not isinstance(field, models.EmailField)):
                 if field.choices:
                     value = field.choices[0][0]
                 else:
                     value += '_save'
             elif isinstance(field, models.CommaSeparatedIntegerField):
                 value += ',44'
             elif isinstance(field, models.EmailField):
                 value = '*****@*****.**'
             elif isinstance(field, models.ForeignKey):
                 value = field.rel.to.objects.all()[0].pk
             elif isinstance(field, bool):
                 value = not value
             value = json.dumps(value)
         adaptor = get_adaptor_class(obj=obj, field_name=field_name)(None, obj, field_name).name
         data = {'app_label': app_label,
                 'module_name': module_name,
                 'field_name': field_name,
                 'value': value,
                 'obj_id': obj.pk,
                 'adaptor': adaptor}
         data.update(extra_data)
         response = client.post(url, data)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(bool(json.loads(response.content.decode('utf-8')).get('errors', None)),
                          has_error)
コード例 #9
0
 def _test_save_fields(self,
                       model,
                       obj=None,
                       field_names=None,
                       client=None,
                       has_error=False):
     client = client or self.__client_login()
     obj = obj or model.objects.all()[0]
     self.assertEqual(model, obj.__class__)
     module_name = get_module_name(model)
     app_label = model._meta.app_label
     field_names = field_names or model._meta.get_all_field_names()
     for field_name in field_names:
         extra_data = {}
         if field_name in transmeta.get_all_translatable_fields(model):
             field = model._meta.get_field_by_name(
                 transmeta.get_fallback_fieldname(field_name))[0]
         else:
             field = model._meta.get_field_by_name(field_name)[0]
         if field_name == 'id' or field_name.endswith('_id'):  # id or id fk
             continue
         url = reverse('inplace_save')
         value = getattr(obj, field_name)
         if isinstance(field, models.FileField):
             value = '"example1.jpg"'
             file_path = os.path.join(settings.MEDIA_ROOT, 'images',
                                      'example1.jpg')
             extra_data['attachment'] = open(file_path, 'rb')
         elif isinstance(value, datetime.datetime):
             value = '"1982-11-14 03:13:12"'
         elif isinstance(value, datetime.date):
             value = '"1982-11-14"'
         elif isinstance(value, datetime.time):
             value = '"03:13:12"'
         else:
             if hasattr(value, 'all'):
                 value = [
                     str(obj_rel.pk)
                     for obj_rel in value.model.objects.all()
                 ]
             elif isinstance(value, decimal.Decimal):
                 value = float(value) + 10
             elif (isinstance(value, string)
                   and isinstance(field, models.CharField) and
                   not isinstance(field, models.CommaSeparatedIntegerField)
                   and not isinstance(field, models.EmailField)):
                 if field.choices:
                     value = field.choices[0][0]
                 else:
                     value += '_save'
             elif isinstance(field, models.CommaSeparatedIntegerField):
                 value += ',44'
             elif isinstance(field, models.EmailField):
                 value = '*****@*****.**'
             elif isinstance(field, models.ForeignKey):
                 value = field.rel.to.objects.all()[0].pk
             elif isinstance(field, bool):
                 value = not value
             value = json.dumps(value)
         adaptor = get_adaptor_class(obj=obj,
                                     field_name=field_name)(None, obj,
                                                            field_name).name
         data = {
             'app_label': app_label,
             'module_name': module_name,
             'field_name': field_name,
             'value': value,
             'obj_id': obj.pk,
             'adaptor': adaptor
         }
         data.update(extra_data)
         response = client.post(url, data)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(
             bool(
                 json.loads(response.content.decode('utf-8')).get(
                     'errors', None)), has_error)
コード例 #10
0
    def test_bad_requests(self):
        has_error = True
        client = self.__client_login()
        url_get_field = reverse('inplace_get_field')

        response = client.get(url_get_field)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), has_error)
        response = client.post(url_get_field)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), has_error)

        url_save = reverse('inplace_save')
        response = client.post(url_save)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), has_error)
        response = client.get(url_save)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), has_error)

        obj = Resource.objects.all()[0]

        data = {
            'app_label': obj.__class__._meta.app_label,
            'module_name': get_module_name(obj.__class__),
            'field_name': 'name',
            'value': '""',
            'obj_id': obj.pk,
            'adaptor': 'text'
        }
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), has_error)
        data['value'] = '"New value"'
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), not has_error)

        obj.name = ''
        obj.save()
        data['field_name'] = 'description'
        data['value'] = '"Description...."'
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), has_error)
        obj.name = 'New value'
        obj.save()
        response = client.post(url_save, data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            bool(
                json.loads(response.content.decode('utf-8')).get(
                    'errors', None)), not has_error)