Skip to content

Commit 52df616

Browse files
skills list api
ENT-4239
1 parent 433b3ef commit 52df616

File tree

11 files changed

+171
-1
lines changed

11 files changed

+171
-1
lines changed

taxonomy/api/__init__.py

Whitespace-only changes.

taxonomy/api/v1/__init__.py

Whitespace-only changes.

taxonomy/api/v1/serializers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from rest_framework import serializers
2+
from taxonomy.models import Skill
3+
4+
5+
class SkillSerializer(serializers.ModelSerializer):
6+
""" Skill Searlizer """
7+
8+
class Meta:
9+
model = Skill
10+
fields = ('name', 'description')

taxonomy/api/v1/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.urls import path
2+
from taxonomy.api.v1.views import SkillsView
3+
4+
urlpatterns = [
5+
path('api/v1/skills/', SkillsView.as_view(), name='skill_list')
6+
]

taxonomy/api/v1/views.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from rest_framework.generics import ListAPIView
2+
from rest_framework.permissions import IsAuthenticated
3+
from taxonomy.models import Skill
4+
from taxonomy.api.v1.serializers import SkillSerializer
5+
6+
7+
class SkillsView(ListAPIView):
8+
""" List view for Skills """
9+
permission_classes = [IsAuthenticated]
10+
serializer_class = SkillSerializer
11+
12+
def get_queryset(self):
13+
search = self.request.query_params.get('search')
14+
15+
queryset = Skill.objects.exclude(courseskills__is_blacklisted=True)
16+
if search:
17+
queryset = queryset.filter(name__icontains=search)
18+
19+
return queryset
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 2.2.17 on 2021-03-05 09:14
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('taxonomy', '0009_skill_description'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='skill',
15+
name='name',
16+
field=models.CharField(blank=True, db_index=True, help_text='The name of the skill.', max_length=255),
17+
),
18+
]

taxonomy/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class Skill(TimeStampedModel):
3131
name = models.CharField(
3232
max_length=255,
3333
blank=True,
34+
db_index=True,
3435
help_text=_(
3536
'The name of the skill.'
3637
)

taxonomy/urls.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@
33
Taxonomy Connector URL Configuration.
44
"""
55

6-
from django.urls import re_path
6+
from django.urls import re_path, include
77

88
from taxonomy import views
9+
from taxonomy.api.v1.urls import urlpatterns as api_v1_urlpatterns
10+
911

1012
urlpatterns = [
1113
re_path(
1214
r"^admin/taxonomy/refresh_course_skills/$", views.RefreshCourseSkills.as_view(), name="refresh_course_skills"
1315
),
1416
]
17+
18+
urlpatterns += api_v1_urlpatterns

test_settings.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ def root(*args):
3535
'django.contrib.sessions',
3636
'django.contrib.messages',
3737
'taxonomy',
38+
'rest_framework'
39+
)
40+
41+
MIDDLEWARE = (
42+
'django.contrib.sessions.middleware.SessionMiddleware',
43+
'django.middleware.locale.LocaleMiddleware',
44+
'django.middleware.common.CommonMiddleware',
45+
'django.middleware.csrf.CsrfViewMiddleware',
46+
'django.contrib.auth.middleware.AuthenticationMiddleware',
47+
'django.contrib.messages.middleware.MessageMiddleware',
48+
'django.contrib.sites.middleware.CurrentSiteMiddleware',
49+
'django.middleware.clickjacking.XFrameOptionsMiddleware',
3850
)
3951

4052
LOCALE_PATHS = [
@@ -69,3 +81,9 @@ def root(*args):
6981
CELERY_BROKER_URL = 'memory://localhost/'
7082

7183
### END CELERY
84+
85+
REST_FRAMEWORK = {
86+
'DEFAULT_AUTHENTICATION_CLASSES': (
87+
'rest_framework.authentication.SessionAuthentication',
88+
),
89+
}

test_utils/factories.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import factory
66
from faker import Factory as FakerFactory
77

8+
from django.contrib.auth.models import User
9+
810
from taxonomy.models import CourseSkills, Job, JobPostings, JobSkills, Skill
911

1012
FAKER = FakerFactory.create()
@@ -94,3 +96,20 @@ class Meta:
9496
median_posting_duration = factory.LazyAttribute(lambda x: FAKER.pyint(min_value=0, max_value=100000000))
9597
unique_postings = factory.LazyAttribute(lambda x: FAKER.pyint(min_value=0, max_value=100000000))
9698
unique_companies = factory.LazyAttribute(lambda x: FAKER.pyint(min_value=0, max_value=100000000))
99+
100+
101+
class UserFactory(factory.django.DjangoModelFactory):
102+
"""
103+
Factory for User model.
104+
"""
105+
106+
class Meta:
107+
model = User
108+
109+
email = factory.LazyAttribute(lambda x: FAKER.email())
110+
username = factory.LazyAttribute(lambda x: FAKER.user_name())
111+
first_name = factory.LazyAttribute(lambda x: FAKER.first_name())
112+
last_name = factory.LazyAttribute(lambda x: FAKER.last_name())
113+
is_superuser = False
114+
is_staff = False
115+
is_active = True

0 commit comments

Comments
 (0)