def filecolumn_supports_fieldfile(column, storage):
    field = models.FileField(storage=storage)
    name = "child/foo.html"
    fieldfile = FieldFile(instance=None, field=field, name=name)
    root = parse(column.render(value=fieldfile))
    assert root.tag == "a"
    assert root.attrib == {
        "class": "a exists",
        "title": name,
        "href": "/baseurl/child/foo.html"
    }
    assert root.text == "foo.html"

    # Now try a file that doesn't exist
    name = "child/does_not_exist.html"
    fieldfile = FieldFile(instance=None, field=field, name=name)
    html = column.render(value=fieldfile)
    root = parse(html)
    assert root.tag == "a"
    assert root.attrib == {
        "class": "a missing",
        "title": name,
        "href": "/baseurl/child/does_not_exist.html"
    }
    assert root.text == "does_not_exist.html"
Exemple #2
0
    def test_filecolumn_supports_fieldfile(self):
        field = models.FileField(storage=storage())
        name = "child/foo.html"

        class Table(tables.Table):
            filecolumn = column()

        table = Table([{
            "filecolumn":
            FieldFile(instance=None, field=field, name=name)
        }])
        html = table.rows[0].get_cell("filecolumn")
        root = parse(html)

        self.assertEqual(root.tag, "a")
        self.assertEqual(root.attrib, {
            "class": "a",
            "href": "/baseurl/child/foo.html"
        })
        span = root.find("span")
        self.assertEqual(span.tag, "span")
        self.assertEqual(span.text, "foo.html")

        # Now try a file that doesn't exist
        name = "child/does_not_exist.html"
        fieldfile = FieldFile(instance=None, field=field, name=name)
        root = parse(column().render(value=fieldfile, record=None))

        self.assertEqual(root.tag, "span")
        self.assertEqual(root.attrib, {"class": "span missing", "title": name})
        self.assertEqual(root.text, "does_not_exist.html")
def test_filecolumn_supports_fieldfile(column, storage):
    field = models.FileField(storage=storage)
    name = 'child/foo.html'
    fieldfile = FieldFile(instance=None, field=field, name=name)
    root = parse(column.render(value=fieldfile))
    assert root.tag == 'a'
    assert root.attrib == {
        'class': 'a exists',
        'title': name,
        'href': '/baseurl/child/foo.html'
    }
    assert root.text == 'foo.html'

    # Now try a file that doesn't exist
    name = 'child/does_not_exist.html'
    fieldfile = FieldFile(instance=None, field=field, name=name)
    html = column.render(value=fieldfile)
    root = parse(html)
    assert root.tag == 'a'
    assert root.attrib == {
        'class': 'a missing',
        'title': name,
        'href': '/baseurl/child/does_not_exist.html'
    }
    assert root.text == 'does_not_exist.html'
Exemple #4
0
    def __getattribute__(self, name):
        fallback = object.__getattribute__(self, 'fallback')
        attr = object.__getattribute__(self, name)
        opts = object.__getattribute__(self, '_meta')

        default_lang = object.__getattribute__(self, 'default_language_code')
        active_lang = get_language()

        if name not in opts.translatable_fields or default_lang == active_lang:
            return attr

        translated = object.__getattribute__(self, '_translated')

        if translated:
            if hasattr(translated, name):
                _field = self._meta.get_field(name)
                if isinstance(_field, ImageField):
                    return ImageFieldFile(
                        self, _field,
                        getattr(translated, name, attr if fallback else ''))
                elif isinstance(_field, FileField):
                    return FieldFile(
                        self, _field,
                        getattr(translated, name, attr if fallback else ''))
                else:
                    return getattr(translated, name, attr if fallback else '')

            elif hasattr(translated, '__iter__') and (active_lang in translated
                                                      or name in translated):
                try:
                    return translated.get(active_lang).get(name, '')
                except Exception as e:
                    print('exception happened in model getattribute', e)

        return attr
Exemple #5
0
    def _get_value(self):
        primitive_models_dict = MetaModel.get_primitive_models_dict()

        mtype = primitive_models_dict.get(self.model_id, None)

        if mtype:
            mtype = mtype.name

            if mtype == 'BooleanField':
                return bool(self.decimal_value)
            if mtype == 'CharField':
                return self.unicode_value
            if mtype == 'DateField':
                return date.fromordinal(self.decimal_value)
            if mtype == 'DateTimeField':
                epoch = datetime.utcfromtimestamp(0)
                delta = timedelta(seconds=int(self.decimal_value))
                return epoch + delta
            if mtype == 'DecimalField':
                return self.decimal_value
            if mtype == 'FileField':
                return FieldFile(default_storage.open(self.unicode_value),
                                 FileField(), self.unicode_value)
            if mtype == 'IntegerField':
                return int(self.decimal_value)

        return self.__getattr__('value')
Exemple #6
0
    def __init__(self, *args, **kwargs):
        super(OptionsForm, self).__init__(*args, **kwargs)

        self.not_options = kwargs.pop('not_options', self.not_options) or ()
        self.readonly_fields = kwargs.pop('readonly_fields',
                                          self.readonly_fields) or ()

        for key in self.get_option_fields():

            value = get_option(self._get_key(key))

            if key in self.initial and value == self.initial[key]:
                continue

            # all options has initial value
            self.initial[key] = value
            if self.initial[key] and isinstance(self.fields[key],
                                                forms.FileField):

                from django.core.files.storage import default_storage
                from django.db.models.fields.files import FieldFile
                self.initial[key] = FieldFile(
                    None,
                    type('StumbField', (object, ),
                         {'storage': default_storage}), self.initial[key])

        self.fields[REQUEST_CODE_KEY] = forms.CharField(
            widget=forms.HiddenInput, max_length=255, initial=self.get_code())
Exemple #7
0
    def test_render_nonimage(self):
        """
        ``ImageWidget`` renders the file input only, if given a non-image.

        """
        widget = ImageWidget()
        html = widget.render('fieldname', FieldFile(None, FileField(), 'something.txt'))
        self.assertHTMLEqual(html, '<input type="file" name="fieldname" />')
Exemple #8
0
 def create(self, validated_data):
     source_legend = validated_data.pop("source_legend") if "source_legend" in validated_data else None
     instance = super(RecordSerializer,self).create(validated_data)
     self.instance = instance
     if source_legend:
         instance.source_legend = FieldFile(self.instance,Record._meta.get_field("source_legend"),self.legend_file_name(source_legend))
         instance.source_legend.save(self.legend_file_name(source_legend),source_legend['content'],save=False)
     return instance
Exemple #9
0
 def test_clearable_file_widget(self):
     field = RevisionFileField()
     doc = DocumentFactory()
     file_field = FieldFile(doc, field, 'revisions/toto.pdf')
     widget = PhaseClearableFileInput()
     rendered = widget.render('toto.pdf', file_field)
     self.assertTrue('>toto.pdf<' in rendered)
     self.assertTrue('>revisions/toto.pdf<' not in rendered)
Exemple #10
0
    def update(self, instance, validated_data):
        source_legend = validated_data.pop("source_legend") if "source_legend" in validated_data else None
        if source_legend:
            if instance.source_legend:
                instance.source_legend.delete(save=False)
            instance.source_legend = FieldFile(instance,Record._meta.get_field("source_legend"),self.legend_file_name(source_legend))
            instance.source_legend.save(self.legend_file_name(source_legend),source_legend['content'],save=False)
        elif instance.source_legend:
            instance.source_legend.delete(save=False)

        return super(RecordSerializer,self).update(instance,validated_data)
Exemple #11
0
    def test_django_to_filetracker_path(self):
        storage = FiletrackerStorage(prefix='/foo', client=DummyClient())
        field = FileField(storage=storage)
        value = FieldFile(None, field, 'bar')
        self.assertEqual(django_to_filetracker_path(value), '/foo/bar')

        with self.assertRaises(ValueError):
            django_to_filetracker_path(ContentFile('whatever', name='gizmo'))

        self.assertEqual('/foo/bar', django_to_filetracker_path(
                filetracker_to_django_file('/foo/bar', storage=storage)))
Exemple #12
0
 def pre_save(self, model_instance, add):
     "Returns field's value just before saving."
     file = FieldFile(
         model_instance, self,
         super(FileField, self).pre_save(model_instance, add).meta_content)
     tag = super(FileField, self).pre_save(model_instance,
                                           add)  # Let's hack this
     if hasattr(tag, '_inmemoryuploadedfile') and getattr(
             tag, '_inmemoryuploadedfile'):
         file.save(file.name, tag._inmemoryuploadedfile, save=False)
     return file
Exemple #13
0
    def get_existing_data(self, raw=False):
        data = self.steps.get_existing_data()[self.index]
        fields = self.get_form_fields()
        if not raw:
            class FakeField:
                storage = self.steps.get_storage()

            for field_name, value in data.items():
                if field_name in fields and isinstance(fields[field_name],
                                                       FileField):
                    data[field_name] = FieldFile(None, FakeField, value)
        return data
Exemple #14
0
    def get_some_file(path):
        subdirs, files = field.storage.listdir(path)

        if files:
            result_file = random.choice(files)
            instance = field.storage.open("%s/%s" % (path, result_file)).file
            return FieldFile(instance, field, result_file)

        for subdir in subdirs:
            result = get_some_file("%s/%s" % (path, subdir))
            if result:
                return result
    def test_generic(self):
        field = FileField(name='test', upload_to=self.upload_to)
        fake_model = type(str('fake'), (object, ), {field.name: None})
        _file = FieldFile(field=field, instance=fake_model(), name='')
        _file._committed = False
        with open(self.archive, 'rb') as f:
            _file.save('test.zip', ContentFile(f.read()), save=False)

        self.assertEqual(
            _file.name, 'archive/da39a3ee5e6b4b0d3255bfef95601890afd80709.zip')

        _file.delete(save=False)
 def __getitem__(self, key):
     if key in self.field.thumbnails:
         if key not in self.data and 'original' in self.data:
             #generate image
             name = self.name
             base_name, base_ext = os.path.splitext(os.path.basename(name))
             try:
                 source_image = self.image()
             except IOError:
                 if self.field.no_image is not None:
                     return self.field.no_image
                 return FieldFile(self.instance, self.field, None)
             config = self.field.thumbnails[key]
             
             thumb_name = '%s-%s%s' % (base_name, key, base_ext)
             self.data[key] = self._process_thumbnail(source_image, thumb_name, config)
             self.instance.save()
         
         if key in self.data:
             return ImageFile(self.instance, self.field, self.data, key)
         if self.field.no_image is not None:
             return self.field.no_image
         return FieldFile(self.instance, self.field, None)
     raise KeyError
Exemple #17
0
    def set_alignment_file_contents(self, value):
        # cache the value
        self._alignment_file_contents = value

        # and save to permanent storage
        if not self.local_file:
            model_field = self.local_file.field  # note this works even though self.local_file is falsy
            upload_filename = model_field.generate_filename(
                self, "%d.%s" % (self.id, self.format))
            self.local_file = FieldFile(instance=self,
                                        field=model_field,
                                        name=upload_filename)
            self.save()

        # Django FieldFile open() method fails if the file doesn't exist in filesystem (even using mode 'w')
        upload_file = open(self.local_file.path, 'w')
        upload_file.write(value)
        upload_file.close()
    def test_serialize_model_instance(self, model_to_dict):
        model_to_dict.return_value = {
            'date': datetime.date(2014, 12, 31),
            'time': datetime.time(0, 0, 0),
            'decimal': Decimal(1.0),
            'str': b'str',
            'unicode': 'unicode',
            'file': FieldFile(instance=None, field=MagicMock(), name='foo')
        }

        expected_result = {
            'date': datetime.datetime(2014, 12, 31),
            'time': datetime.datetime(1, 1, 1, 0, 0, 0),
            'decimal': 1.0,
            'str': 'str',
            'unicode': 'unicode',
            'file': 'foo'
        }

        serialized_instance = utils.serialize_model_instance(None)

        self.assertDictEqual(expected_result, serialized_instance)
Exemple #19
0
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.db.models.fields.files import FieldFile
from django.views.generic import FormView
from django.views.generic.base import TemplateView
from django.contrib import messages

from .forms import ContactForm, FilesForm


# http://yuji.wordpress.com/2013/01/30/django-form-field-in-initial-data-requires-a-fieldfile-instance/
class FakeField(object):
    storage = default_storage


fieldfile = FieldFile(None, FakeField, 'dummy.txt')


class HomePageView(TemplateView):
    template_name = 'demo/home.html'

    def get_context_data(self, **kwargs):
        context = super(HomePageView, self).get_context_data(**kwargs)
        messages.info(self.request, 'This is a demo of a message.')
        return context


class DefaultFormView(FormView):
    template_name = 'demo/form.html'
    form_class = ContactForm
def add_attachment(request, wiki_url):

    (article, path, err) = fetch_from_url(request, wiki_url)
    if err:
        return err

    perm_err = check_permissions(request,
                                 article,
                                 check_write=True,
                                 check_locked=True)
    if perm_err:
        return perm_err

    if not WIKI_ALLOW_ATTACHMENTS or (not WIKI_ALLOW_ANON_ATTACHMENTS
                                      and request.user.is_anonymous()):
        return HttpResponseForbidden()

    if request.method == 'POST':
        if request.FILES.__contains__('attachment'):
            attachment = ArticleAttachment()
            if not request.user.is_anonymous():
                attachment.uploaded_by = request.user
            attachment.article = article

            file = request.FILES['attachment']
            file_rel_path = get_attachment_filepath(attachment, file.name)
            chunk_size = request.upload_handlers[0].chunk_size

            filefield = FieldFile(attachment, attachment.file, file_rel_path)
            attachment.file = filefield

            file_path = WIKI_ATTACHMENTS_ROOT + attachment.file.name

            if not request.POST.__contains__('overwrite') and os.path.exists(
                    file_path):
                c = Context({
                    'overwrite_warning': True,
                    'wiki_article': article,
                    'filename': file.name
                })
                t = loader.get_template('simplewiki_updateprogressbar.html')
                return HttpResponse(t.render(c))

            if file.size > WIKI_ATTACHMENTS_MAX:
                c = Context({
                    'too_big': True,
                    'max_size': WIKI_ATTACHMENTS_MAX,
                    'wiki_article': article,
                    'file': file
                })
                t = loader.get_template('simplewiki_updateprogressbar.html')
                return HttpResponse(t.render(c))

            def get_extension(fname):
                return attachment.file.name.split('.')[-2]
            if WIKI_ATTACHMENTS_ALLOWED_EXTENSIONS and not \
               get_extension(attachment.file.name) in WIKI_ATTACHMENTS_ALLOWED_EXTENSIONS:
                c = Context({
                    'extension_err': True,
                    'extensions': WIKI_ATTACHMENTS_ALLOWED_EXTENSIONS,
                    'wiki_article': article,
                    'file': file
                })
                t = loader.get_template('simplewiki_updateprogressbar.html')
                return HttpResponse(t.render(c))

            # Remove existing attachments
            # TODO: Move this until AFTER having removed file.
            # Current problem is that Django's FileField delete() method
            # automatically deletes files
            for a in article.attachments():
                if file_rel_path == a.file.name:
                    a.delete()

            def receive_file():
                destination = open(file_path, 'wb+')
                size = file.size
                cnt = 0
                c = Context({
                    'started': True,
                })
                t = loader.get_template('simplewiki_updateprogressbar.html')
                yield t.render(c)
                for chunk in file.chunks():
                    cnt += 1
                    destination.write(chunk)
                    c = Context({
                        'progress_width': (cnt * chunk_size) / size,
                        'wiki_article': article,
                    })
                    t = loader.get_template(
                        'simplewiki_updateprogressbar.html')
                    yield t.render(c)
                c = Context({
                    'finished': True,
                    'wiki_article': article,
                })
                t = loader.get_template('simplewiki_updateprogressbar.html')
                destination.close()
                attachment.save()
                yield t.render(c)

            return HttpResponse(receive_file())

    return HttpResponse('')
Exemple #21
0
 def setUp(self):
     self.f = create_image()
     ff = FieldFile(None, RasterStore._meta.get_field('image'),
                    os.path.basename(self.f.name))
     self.data = {'image': ff}
 def setUp(self):
     name = self.f.name.replace('%s/' % default_storage.location, '')
     ff = FieldFile(None, RasterStore._meta.get_field('image'), name)
     self.data = {'image': ff}
Exemple #23
0
from django.contrib import messages
from django.core.files.storage import default_storage
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.db.models.fields.files import FieldFile
from django.views.generic import FormView
from django.views.generic.base import TemplateView

from .forms import ContactForm, ContactFormSet, FilesForm


# http://yuji.wordpress.com/2013/01/30/django-form-field-in-initial-data-requires-a-fieldfile-instance/
class FakeField(object):
    storage = default_storage


fieldfile = FieldFile(None, FakeField, "dummy.txt")


class HomePageView(TemplateView):
    template_name = "app/home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        messages.info(self.request, "hello http://example.com")
        return context


class GetParametersMixin:
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["layout"] = self.request.GET.get("layout", None)
Exemple #24
0
    def test_select_model(self, mock_fetchmany, mock_execute):
        expected_field_names = [
            '"TEST_DHP_COMPLEXMODEL"."BIG_INTEGER_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."BINARY_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."BOOLEAN_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."CHAR_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."DATE_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."DATE_TIME_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."DECIMAL_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."DURATION_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."EMAIL_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."FILE_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."FILE_PATH_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."FLOAT_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."IMAGE_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."INTEGER_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."GENERIC_IP_ADDRESS_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."NULL_BOOLEAN_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."POSITIVE_INTEGER_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."POSITIVE_SMALL_INTEGER_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."SLUG_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."SMALL_INTEGER_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."TEXT_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."TIME_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."URL_FIELD"',
            '"TEST_DHP_COMPLEXMODEL"."UUID_FIELD"',
        ]
        expected_statements = [
            call(
                'SELECT "TEST_DHP_COMPLEXMODEL"."ID", %(field_names)s FROM "TEST_DHP_COMPLEXMODEL"'
                % {
                    'field_names': ', '.join(expected_field_names),
                }, ()),
        ]
        mock_fetchmany.side_effect = [
            [
                tuple(self.valid_db_values),
            ],
        ]

        objects = list(
            ComplexModel.objects.all())  # trigger database query with list()
        self.assertEqual(len(objects), 1)
        self.assertEqual(objects[0].id, 1234)
        self.assertEqual(objects[0].big_integer_field, 9223372036854775807)
        self.assertEqual(objects[0].binary_field, b'foobar')
        self.assertEqual(objects[0].boolean_field, False)
        self.assertEqual(objects[0].char_field, 'foobar')
        self.assertEqual(objects[0].date_field, datetime.date(2017, 1, 1))
        self.assertEqual(objects[0].date_time_field,
                         datetime.datetime(2017, 1, 1, 13, 45, 21))
        self.assertEqual(objects[0].decimal_field, 123.45)
        self.assertEqual(objects[0].duration_field,
                         datetime.timedelta(0, 1234, 567890))
        self.assertEqual(objects[0].email_field, '*****@*****.**')
        self.assertEqual(
            objects[0].file_field,
            FieldFile(objects[0], objects[0].file_field, 'uploads/foobar.txt'))
        self.assertEqual(objects[0].file_path_field, 'uploads/barbaz.txt')
        self.assertEqual(objects[0].float_field, 12.34567)
        self.assertEqual(objects[0].image_field, 'uploads/image.png')
        self.assertEqual(objects[0].integer_field, -2147483648)
        self.assertEqual(objects[0].generic_ip_address_field, '192.0.2.30')
        self.assertEqual(objects[0].null_boolean_field, None)
        self.assertEqual(objects[0].positive_integer_field, 2147483647)
        self.assertEqual(objects[0].positive_small_integer_field, 32767)
        self.assertEqual(objects[0].slug_field, 'something-foobar-1234')
        self.assertEqual(objects[0].small_integer_field, -32768)
        self.assertEqual(objects[0].text_field, 'some long text')
        self.assertEqual(objects[0].time_field, datetime.time(13, 45, 21))
        self.assertEqual(objects[0].url_field, 'https://foo.bar.com/baz/')
        self.assertEqual(objects[0].uuid_field,
                         uuid.UUID('12345678-12345678-12345678-12345678'))

        self.assertSequenceEqual(mock_execute.call_args_list,
                                 expected_statements)