Skip to content

Commit e567b1c

Browse files
authored
Merge pull request #442 from pythoncanarias/issue#441
Añade nuevo filtro as_short_date, modifica as_date
2 parents fee4b73 + c609a77 commit e567b1c

7 files changed

Lines changed: 95 additions & 29 deletions

File tree

Makefile

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,36 @@
22

33
help:
44
@echo "Opciones disponibles:\n"
5-
@echo " - clean : Borrar ficheros temporales y espurios"
65
@echo " - check : Ejecutar varias comprobaciones"
6+
@echo " - clean : Borrar ficheros temporales y espurios"
7+
@echo " - migrate : Ejecuta las migraciones pendientes"
78
@echo " - run : Ejecutar el servidor en modo producción"
89
@echo " - rundev : Ejecutar el servidor en modo desarrollo"
10+
@echo " - shell : Abre una shell python con el entorno de Django cargado"
911
@echo " - static : Actualiza contenidos estáticos"
10-
@echo " - migrate : Ejecuta las migraciones pendientes"
12+
13+
check:
14+
python manage.py check
15+
flake8 --count **/*.py
1116

1217
clean:
1318
find . -type f -name "*.pyc" -delete
1419
find . -type d -name "__pycache__" -exec rm -r "{}" \;
1520
find . -type d -name ".sass-cache" -exec rm -r "{}" \;
1621

17-
check:
18-
python manage.py check
19-
flake8 --count **/*.py
20-
21-
static:
22-
python manage.py collectstatic --no-input
23-
#sass --sourcemap=none bulma/custom.scss:commons/static/commons/vendor.min.css
24-
#sass --sourcemap=none about/static/about/css/main.scss:about/static/about/custom.min.css
22+
migrate:
23+
python manage.py migrate
2524

2625
run: check static
2726
python manage.py runserver
2827

2928
rundev: static
3029
DEBUG=yes python manage.py runserver_plus
3130

32-
migrate:
33-
python manage.py migrate
31+
shell:
32+
python manage.py shell_plus
33+
34+
static:
35+
python manage.py collectstatic --no-input
36+
#sass --sourcemap=none bulma/custom.scss:commons/static/commons/vendor.min.css
37+
#sass --sourcemap=none about/static/about/css/main.scss:about/static/about/custom.min.css

apps/commons/filters.py

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import datetime
44
import os
5+
from typing import Union
56

67
from django.conf import settings
78
from markdown2 import markdown
@@ -42,18 +43,46 @@ def as_month(f, num_letters=0):
4243
return _months[n]
4344

4445

45-
def as_date(f):
46-
if not isinstance(f, datetime.date):
47-
return f
46+
def as_date(f: Union[datetime.date, datetime.datetime]) -> str:
47+
"""Fecha o timestamp en formato día/mes/año.
4848
49-
today = datetime.date.today()
50-
if f.year == today.year:
51-
return '{}/{}'.format(f.day, as_month(f, 3))
52-
else:
53-
return '{}/{}/{}'.format(f.day, as_month(f, 3), f.year)
49+
Ver también: `as_short_date`.
50+
51+
Ejemplo de uso:
52+
53+
>>> import datetime
54+
>>> print(as_date(datetime.date(1992, 1, 2)))
55+
2/ene/1992
56+
"""
57+
if isinstance(f, (datetime.date, datetime.datetime)):
58+
return f'{f.day}/{as_month(f, 3)}/{f.year}'
59+
return str(f)
60+
61+
62+
def as_short_date(f: Union[datetime.date, datetime.datetime]) -> str:
63+
"""Fecha o timestamp en formato día/mes/año, omitiendo el
64+
año si es el mismo del año actual.
65+
66+
Ver también: `as_date`.
67+
68+
Ejemplo de uso:
69+
70+
>>> import datetime
71+
>>> current_year = datetime.date.today().year
72+
>>> print(as_short_date(datetime.date(current_year, 1, 2)))
73+
2/ene
74+
>>> print(as_short_date(datetime.date(1992, 1, 2)))
75+
2/ene/1992
76+
"""
77+
if isinstance(f, (datetime.date, datetime.datetime)):
78+
today = datetime.date.today()
79+
if f.year == today.year:
80+
return f'{f.day}/{as_month(f, 3)}'
81+
return f'{f.day}/{as_month(f, 3)}/{f.year}'
82+
return str(f)
5483

5584

56-
def date_from_now(days=1):
85+
def date_from_now(days=1) -> datetime.date:
5786
today = datetime.date.today()
5887
delta = datetime.timedelta(days=days)
5988
return today + delta

apps/commons/templatetags/utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def compose2(f, g):
1414
register = template.Library()
1515

1616
register.filter('as_month', filters.as_month)
17+
register.filter('as_short_date', filters.as_short_date)
1718
register.filter('as_date', filters.as_date)
1819
register.filter('date_from_now', filters.date_from_now)
1920
register.filter('get_key', filters.get_key)

apps/commons/test_filters.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,29 @@
44

55
from . import filters
66

7+
78
# as_date
89

910

1011
def test_as_date():
11-
d = datetime.date(2016, 4, 18)
12-
assert filters.as_date(d) == '18/abr/2016'
12+
assert filters.as_date(datetime.date(2016, 4, 18)) == '18/abr/2016'
1313

1414

1515
def test_as_date_current_year():
16-
today = datetime.date.today()
17-
d = datetime.date(today.year, 4, 18)
18-
assert filters.as_date(d) == '18/abr'
16+
year = datetime.date.today().year
17+
assert filters.as_date(datetime.date(year, 4, 18)) == f'18/abr/{year}'
18+
19+
20+
# as_short_date
21+
22+
23+
def test_as_short_date_current_year():
24+
year = datetime.date.today().year
25+
assert filters.as_short_date(datetime.date(year, 4, 18)) == '18/abr'
26+
27+
28+
def test_as_short_date_other_year():
29+
assert filters.as_short_date(datetime.date(1992, 4, 18)) == '18/abr/1992'
1930

2031

2132
# as_month

apps/events/templates/events/event.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<h1 class="title is-1">{{ event.name }}</h1>
1818
<div class="subtitle is-4">
1919
<span class="event-header-date">
20-
<i class="far fa-calendar-alt"></i> {{ event.start_date|as_date }}
20+
<i class="far fa-calendar-alt"></i> {{ event.start_date|as_short_date }}
2121
</span>
2222
{% if event.venue %}
2323
<span class="event-header-venue">
@@ -127,7 +127,7 @@ <h1 class="title section-title dyn-anchor-heading">
127127
Agenda
128128
<a class="dyn-anchor-link" href="#schedule"><i class="fas fa-link"></i></a>
129129
</p>
130-
<p class="section-detail"><i class="far fa-calendar-alt"></i> {{ event.start_date|as_date }}</p>
130+
<p class="section-detail"><i class="far fa-calendar-alt"></i> {{ event.start_date|as_short_date }}</p>
131131
<a target="_blank" href="{{ event.get_google_calendar_url }}">Añadir a Google Calendar</a>
132132
{% if event.schedule_for_display and not event.closed_schedule %}
133133
<span class="tag is-warning is-medium not-closed-schedule">

apps/events/templates/events/raffle.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
<div class="closed-raffle">
5454
<span class="tag is-warning is-medium">
5555
<i class="fas fa-lock"></i>
56-
Este sorteo está cerrado! Se realizó el {{ raffle.closed_at|as_date }}
56+
Este sorteo está cerrado! Se realizó el {{ raffle.closed_at|as_short_date }}
5757
</span>
5858
<a class="view-results" href="{% url 'events:raffle_results' event.slug %}">
5959
<i class="fas fa-table"></i>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 3.2.13 on 2022-05-18 20:18
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('quotes', '0003_auto_20220510_2236'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='author',
15+
options={'ordering': ['name', 'surname'], 'verbose_name': 'Autor', 'verbose_name_plural': 'Autores'},
16+
),
17+
migrations.AlterModelOptions(
18+
name='quote',
19+
options={'verbose_name': 'Cita', 'verbose_name_plural': 'Citas'},
20+
),
21+
]

0 commit comments

Comments
 (0)