Skip to content

Commit 71e6260

Browse files
authored
Merge pull request #444 from pythoncanarias:issue#433
Issue#433
2 parents 4b9ad9a + 94dbebb commit 71e6260

22 files changed

Lines changed: 389 additions & 23 deletions

apps/commons/templates/header.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444
Empleo
4545
</a>
4646

47+
<a class="navbar-item {% is_active 'learn:index' %}" href="{% url 'learn:index' %}">
48+
<i class="fas fa-graduation-cap"></i>
49+
Aprende
50+
</a>
51+
4752
{% if request.user.is_authenticated %}
4853
<a class="navbar-item {% is_active 'members:homepage' %}" href="{% url 'members:profile' %}">
4954
<i class="fas fa-user-cog"></i>

apps/learn/__init__.py

Whitespace-only changes.

apps/learn/admin.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from django.contrib import admin
2+
3+
from . import models
4+
5+
6+
class LabelAdmin(admin.ModelAdmin):
7+
prepopulated_fields = {'slug': ('name',)}
8+
9+
10+
admin.site.register(models.Label, LabelAdmin)
11+
12+
13+
class ResourceAdmin(admin.ModelAdmin):
14+
prepopulated_fields = {'slug': ('name',)}
15+
list_display = ('name', 'url')
16+
filter_horizontal = ('labels',)
17+
18+
19+
admin.site.register(models.Resource, ResourceAdmin)

apps/learn/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class LearnConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'apps.learn'

apps/learn/colors.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import random
2+
import string
3+
from typing import Tuple
4+
5+
BLACK = '000000'
6+
WHITE = 'FFFFFF'
7+
8+
9+
def get_rgb_from_hex(value: str) -> Tuple[int, int, int, int]:
10+
red = int(value[:2], base=16)
11+
green = int(value[2:4], base=16)
12+
blue = int(value[4:6], base=16)
13+
alpha = int(value[6:8], base=16) if len(value) > 6 else 255
14+
return red, green, blue, alpha
15+
16+
17+
def get_luminance(red, green, blue, alpha) -> int:
18+
luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue
19+
luminance *= alpha / 255
20+
return round(luminance)
21+
22+
23+
def get_random_hex_color(include_alpha=False):
24+
size = 8 if include_alpha else 6
25+
return ''.join(
26+
random.choice(string.hexdigits.upper()) for _ in range(size)
27+
)

apps/learn/converters.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from django.core.exceptions import ObjectDoesNotExist
2+
3+
from .models import Label
4+
5+
6+
class LabelConverter:
7+
regex = '[-a-zA-Z0-9_]+'
8+
9+
def to_python(self, value: str) -> Label:
10+
try:
11+
return Label.objects.get(slug=value)
12+
except ObjectDoesNotExist as err:
13+
raise ValueError('This label does not exist!') from err
14+
15+
def to_url(self, value: Label) -> str:
16+
return value.slug
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Generated by Django 3.2.13 on 2022-06-02 18:01
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
initial = True
9+
10+
dependencies = [
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name='Label',
16+
fields=[
17+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18+
('name', models.CharField(max_length=120)),
19+
('slug', models.SlugField(max_length=120, unique=True)),
20+
],
21+
),
22+
migrations.CreateModel(
23+
name='Resource',
24+
fields=[
25+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
26+
('name', models.CharField(max_length=120)),
27+
('slug', models.SlugField(max_length=120, unique=True)),
28+
('url', models.URLField(max_length=240)),
29+
('labels', models.ManyToManyField(related_name='resources', to='learn.Label')),
30+
],
31+
),
32+
]
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-06-02 18:51
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('learn', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='label',
15+
options={'ordering': ['name']},
16+
),
17+
migrations.AlterModelOptions(
18+
name='resource',
19+
options={'ordering': ['name']},
20+
),
21+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.13 on 2022-06-22 18:39
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('learn', '0002_auto_20220602_1951'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='label',
15+
name='color',
16+
field=models.CharField(default='FF0000', max_length=8),
17+
),
18+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.13 on 2022-06-23 08:00
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('learn', '0003_label_color'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='label',
15+
name='color',
16+
field=models.CharField(default='EEBDDE', max_length=8),
17+
),
18+
]

0 commit comments

Comments
 (0)