Skip to content

Commit 3b63c0e

Browse files
authored
Merge pull request #1 from RADYConsultores/juan-dev
First pull request with test configuration
2 parents 45a056f + 478d732 commit 3b63c0e

17 files changed

+292
-34
lines changed

.coveragerc

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[run]
2+
source = preview_image_widget
3+
omit =
4+
*/tests/*
5+
*/apps.py

.travis.yml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
language: python
2+
3+
python:
4+
- "3.6"
5+
- "3.5"
6+
- "3.4"
7+
- "2.7"
8+
9+
env:
10+
- DJANGO="django==1.11"
11+
- DJANGO="django==1.10.7"
12+
- DJANGO="django==1.9.13"
13+
- DJANGO="django==1.8.18"
14+
15+
install:
16+
- pip install -r requirements.txt
17+
- pip install flake8
18+
- pip install coveralls
19+
20+
before_script:
21+
flake8 .
22+
23+
script: coverage run --source=preview_image_widget manage.py test
24+
25+
after_success:
26+
coveralls

README.md

-3
This file was deleted.

README.rst

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
Django Preview Image Widget
2+
===========================
3+
4+
A very simple ImageField preview widget
5+
6+
|status-image| |coverage-image|
7+
8+
An application for displaying the image preview of an ImageField in a DjangoForm
9+
using html, javascript and css
10+
11+
Features:
12+
---------
13+
14+
- Tested support to Python 2.7, 3.4, 3.5, 3.6
15+
- Tested support to Django 1.8.18, 1.9.13, 1.10.7, 1.11
16+
- No database
17+
- Support Timezone with english and spanish languages
18+
19+
20+
Installation:
21+
-------------
22+
23+
You can install it with one of these options:
24+
25+
- ``easy_install django-preview-image-widget``
26+
- ``pip install django-preview-image-widget``
27+
- ``git clone https://github.com/RADYConsultores/django-preview-image-widget``
28+
29+
1. ``cd django-preview-image-widget``
30+
2. run python setup.py
31+
32+
- ``wget https://github.com/RADYConsultores/django-preview-image-widget/zipball/master``
33+
34+
1. unzip the downloaded file
35+
2. cd into django-preview-image-widget-\* directory
36+
3. run python setup.py
37+
38+
Usage:
39+
------
40+
41+
[IN PROGRESS]
42+
43+
Running the tests:
44+
------------------
45+
46+
To run the tests against configured environments:
47+
48+
1. Install tox
49+
2. Run tox
50+
51+
Dependencies:
52+
-------------
53+
54+
Bootstrap 3+
55+
56+
License:
57+
--------
58+
59+
Released under a (`MIT <LICENSE>`__) license.
60+
61+
Author and mantainers:
62+
----------------------
63+
64+
`Milton Lenis <https://github.com/MiltonLn>`__ - [email protected]
65+
66+
`Juan Diego García <https://github.com/yamijuan>`__ - [email protected]
67+
68+
Mantained by:
69+
70+
|rady-logo|
71+
72+
73+
.. |status-image| image:: https://travis-ci.org/RADYConsultores/django-preview-image-widget.svg?branch=master
74+
:target: https://travis-ci.org/RADYConsultores/django-preview-image-widget?branch=master
75+
.. |coverage-image| image:: https://coveralls.io/repos/github/RADYConsultores/django-preview-image-widget/badge.svg?branch=master
76+
:target: https://coveralls.io/github/RADYConsultores/django-preview-image-widget?branch=master
77+
.. |rady-logo| image:: http://rady.com.co/static/logo_rady.png
78+
:target: http://rady.com.co

manage.py

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env python
2+
import os
3+
import sys
4+
5+
if __name__ == "__main__":
6+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "preview_image_widget.tests.testsettings")
7+
from django.core.management import execute_from_command_line
8+
9+
execute_from_command_line(sys.argv)

preview_image_widget/__init__.py

Whitespace-only changes.

preview_image_widget/apps.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.apps import AppConfig
2+
3+
4+
class MenuAppConfig(AppConfig):
5+
name = 'preview_image_widget'
6+
label = 'preview_image_widget'
7+
verbose_name = 'Preview Image Widget'

preview_image_widget/static/plugins/simple_image_widget/simple_image_widget.css preview_image_widget/static/plugins/preview_image_widget/preview_image_widget.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
display: block;
1919
padding-top:10px;
2020
}
21-
input[simple_image_widget] {
21+
input[preview_image_widget] {
2222
position: absolute;
2323
visibility: hidden;
2424
width: 0;

preview_image_widget/static/plugins/simple_image_widget/simple_image_widget.js preview_image_widget/static/plugins/preview_image_widget/preview_image_widget.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ $(document).on('mouseleave', '#preview', function(e) {
88

99
$(document).on('click', '#file-select', function(e) {
1010
e.preventDefault();
11-
$("[simple_image_widget]").click();
11+
$("[preview_image_widget]").click();
1212
});
1313

14-
$(document).on('change', '[simple_image_widget]', function(e) {
14+
$(document).on('change', '[preview_image_widget]', function(e) {
1515
var file = (this.files[0].name).toString();
1616
var reader = new FileReader();
1717

@@ -20,13 +20,13 @@ $(document).on('change', '[simple_image_widget]', function(e) {
2020

2121
reader.onload = function (e) {
2222
$('#preview img').attr('src', e.target.result);
23-
}
23+
};
2424

2525
reader.readAsDataURL(this.files[0]);
2626
});
2727

2828
$(document).ready(function(){
29-
var $ImageWidget = $("[simple_image_widget]");
29+
var $ImageWidget = $("[preview_image_widget]");
3030
var preview = $ImageWidget.attr("data-preview");
3131
if(typeof preview != "undefined"){
3232
var img = preview;

preview_image_widget/tests/__init__.py

Whitespace-only changes.
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# coding: utf-8
2+
3+
import django
4+
from django.conf import settings
5+
from django.test import TestCase
6+
7+
from preview_image_widget.tests.utils import render_django110, render_django111
8+
from preview_image_widget.widgets import PreviewImageWidget
9+
10+
11+
class TestSimpleImageWidget(TestCase):
12+
def setUp(self):
13+
super(TestSimpleImageWidget, self).setUp()
14+
self.widget = PreviewImageWidget()
15+
self.image = 'static/img/no-user.png'
16+
self.preview_url = settings.MEDIA_URL + self.image
17+
self.args = {
18+
'name': 'image',
19+
'value': self.image,
20+
'attrs': {
21+
'preview_image_widget': 1,
22+
'data-preview': self.preview_url
23+
}
24+
}
25+
if django.VERSION >= (1, 11, 0):
26+
self.render_method = render_django111
27+
self.args.update({
28+
'widget': self.widget
29+
})
30+
else:
31+
self.render_method = render_django110
32+
33+
def tearDown(self):
34+
super(TestSimpleImageWidget, self).tearDown()
35+
del self.widget
36+
37+
def test_widget(self):
38+
"""
39+
Tests the widget render
40+
"""
41+
html_expected = self.render_method(**self.args)
42+
self.assertEqual(self.widget.render('image', self.image), html_expected)
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
DATABASES = {
2+
'default': {
3+
'ENGINE': 'django.db.backends.sqlite3',
4+
'NAME': ':memory:',
5+
},
6+
}
7+
SECRET_KEY = "r4dy"
8+
9+
INSTALLED_APPS = [
10+
'preview_image_widget'
11+
]
12+
13+
MIDDLEWARE_CLASSES = []

preview_image_widget/tests/utils.py

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from django.forms.utils import flatatt
2+
from django.utils.html import format_html
3+
from django.utils.safestring import mark_safe
4+
5+
try:
6+
from django.forms.renderers import get_default_renderer
7+
except ImportError:
8+
def get_default_renderer():
9+
return None
10+
11+
12+
def render_django111(**kwargs):
13+
"""
14+
Renders the widget using the django >= 1.11 way
15+
:param kwargs: key word arguments with the test data
16+
:return: rendered widget
17+
"""
18+
widget = kwargs.pop("widget")
19+
renderer = get_default_renderer()
20+
context = widget.get_context(kwargs['name'], kwargs['value'], kwargs['attrs'])
21+
return mark_safe(renderer.render('django/forms/widgets/input.html', context))
22+
23+
24+
def render_django110(**kwargs):
25+
"""
26+
Renders the widget using the django <= 1.10 way
27+
:param kwargs: key word arguments with the test data
28+
:return: rendered widget
29+
"""
30+
final_attrs = {'type': 'file', 'name': kwargs['name']}
31+
final_attrs.update(kwargs['attrs'])
32+
html_expected = format_html('<input{} />', flatatt(final_attrs))
33+
return html_expected

preview_image_widget/widgets.py

+13-26
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,33 @@
22
from django.forms import FileInput
33

44

5-
class SimpleImageWidget(FileInput):
5+
class PreviewImageWidget(FileInput):
66
"""
7-
Autor: Milton Lenis
8-
Fecha: Abril 2 2017
9-
Widget para archivos de tipo imágen para mejorar un poco la apariencia visual de manera sencilla.
7+
Widget for displaying a image-preview in file fields.
108
"""
9+
1110
def __init__(self, *args, **kwargs):
1211
"""
13-
Autor: Milton Lenis
14-
Fecha: Abril 2 2017
15-
Método constructor para agregar el atributo 'simple_image_widget' al campo y poder activarlo desde javascript
16-
:param args: Argumentos de la función
17-
:param kwargs: Keyword arguments de la función
12+
Adds a 'preview_image_widget' attr for the input
1813
"""
1914
kwargs['attrs'] = {
20-
'simple_image_widget': 1
15+
'preview_image_widget': 1
2116
}
22-
super(SimpleImageWidget, self).__init__(*args, **kwargs)
17+
super(PreviewImageWidget, self).__init__(*args, **kwargs)
2318

2419
def render(self, name, value, attrs=None):
2520
"""
26-
Autor: Milton Lenis
27-
Fecha: Abril 2 2017
28-
Se sobrecarga el método render para agregar la imágen a la vista previa al editar en caso de que tenga un valor
29-
almacenado
30-
:param name:
31-
:param value:
32-
:param attrs:
33-
:return:
21+
Adds the previous value of the file to an attr, if there is any, for preview.
3422
"""
3523
if value:
3624
preview = {"data-preview": settings.MEDIA_URL + str(value)}
37-
if attrs:
38-
attrs.update(preview)
39-
else:
40-
attrs = preview
41-
return super(SimpleImageWidget, self).render(name, value, attrs=attrs)
25+
if not attrs:
26+
attrs = {}
27+
attrs.update(preview)
28+
return super(PreviewImageWidget, self).render(name, value, attrs=attrs)
4229

4330
class Media:
4431
css = {
45-
'all': ('plugins/simple_image_widget/simple_image_widget.css',)
32+
'all': ('plugins/preview_image_widget/preview_image_widget.css',)
4633
}
47-
js = ('plugins/simple_image_widget/simple_image_widget.js',)
34+
js = ('plugins/preview_image_widget/preview_image_widget.js',)

requirements.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
django >= 1.9+
2+
coverage

setup.cfg

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[flake8]
2+
max-line-length = 122
3+
4+
[metadata]
5+
description-file = README.rst

tox.ini

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
[tox]
2+
skipsdist = True
3+
envlist =
4+
py27-django18,
5+
py27-django19,
6+
py27-django110,
7+
py27-django111,
8+
py35-django18,
9+
py35-django19,
10+
py35-django110,
11+
py35-django111
12+
13+
[testenv]
14+
commands=coverage run --source=preview_image_widget manage.py test
15+
16+
[testenv:py27-django18]
17+
basepython = python2.7
18+
deps = Django==1.8.*
19+
coverage
20+
21+
[testenv:py27-django19]
22+
basepython = python2.7
23+
deps = Django==1.9.*
24+
coverage
25+
26+
[testenv:py27-django110]
27+
basepython = python2.7
28+
deps = Django==1.10.*
29+
coverage
30+
31+
[testenv:py27-django111]
32+
basepython = python2.7
33+
deps = Django==1.11.*
34+
coverage
35+
36+
[testenv:py35-django18]
37+
basepython = python3.5
38+
deps = Django==1.8.*
39+
coverage
40+
41+
[testenv:py35-django19]
42+
basepython = python3.5
43+
deps = Django==1.9.*
44+
coverage
45+
46+
[testenv:py35-django110]
47+
basepython = python3.5
48+
deps = Django==1.10.*
49+
coverage
50+
51+
[testenv:py35-django111]
52+
basepython = python3.5
53+
deps = Django==1.11.*
54+
coverage

0 commit comments

Comments
 (0)