diff --git a/src/API_client/__init__.py b/src/API_client/__init__.py deleted file mode 100644 index 6d19125..0000000 --- a/src/API_client/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .get_request import APIClient \ No newline at end of file diff --git a/src/API_client/get_request.py b/src/API_client/get_request.py deleted file mode 100644 index cf8e85b..0000000 --- a/src/API_client/get_request.py +++ /dev/null @@ -1,33 +0,0 @@ -from requests import get -from django.core.exceptions import ValidationError - - -class APIClient: - def __init__(self, api_key: str) -> None: - self.api_key = api_key - - def __get_data(self, link: str) -> dict: - raw_data = get(link) - if raw_data.status_code == 200: - data = raw_data.json() - - if data['errorMessage'] == 'Invalid API Key': raise ValidationError('Invalid API Key') - elif data['errorMessage']: raise ValidationError('id is not correct.') - - return data - raise ValidationError('Could not created. Please try again later.') - - def key_control(self) -> None: - self.__get_data(f"https://imdb-api.com/en/API/Title/{self.api_key}/tt7939766") - - def get_seasons(self, series_id: str) -> list: - data = self.__get_data(f"https://imdb-api.com/en/API/Title/{self.api_key}/{series_id}") - - if not data['tvSeriesInfo']: - raise ValidationError('This is not a TV series id') - return data['tvSeriesInfo']['seasons'] - - def get_episodes_count(self, season: int, series_id: str) -> int: - data = self.__get_data( - f"https://imdb-api.com/en/API/SeasonEpisodes/{self.api_key}/{series_id}/{season}") - return len(data['episodes']) \ No newline at end of file diff --git a/src/account/models.py b/src/account/models.py index c089ba2..fd8ad45 100644 --- a/src/account/models.py +++ b/src/account/models.py @@ -1,21 +1,10 @@ from django.db import models from django.contrib.auth.models import AbstractUser -from API_client import APIClient -from django.core.exceptions import ValidationError class User(AbstractUser): imdb_api_key = models.CharField(max_length=15, blank=False, null=False) - def clean(self) -> None: - client = APIClient(self.imdb_api_key) - client.key_control() - # raw_data = get(f"https://imdb-api.com/en/API/Title/{self.imdb_api_key}/tt0110413") - - # if raw_data.status_code == 200: data = raw_data.json() - # else: raise ValidationError('Account not created. Please try again later') - # if not data['errorMessage']: raise ValidationError(data['errorMessage']) - class Meta: db_table = 'user' verbose_name = 'User' diff --git a/src/account/templates/register.html b/src/account/templates/register.html index df8862e..f789d2c 100644 --- a/src/account/templates/register.html +++ b/src/account/templates/register.html @@ -5,6 +5,7 @@ {% block title %} Signup {% endblock title %} {% block content %} +{% include 'components/message.html' %}
+ +{% endblock content %} + diff --git a/src/series/urls.py b/src/series/urls.py index 214629c..494afb9 100644 --- a/src/series/urls.py +++ b/src/series/urls.py @@ -4,5 +4,5 @@ from series import views urlpatterns = [ path('', views.homepage_view, name='homepage'), - # path('series/create', views.homepage_view, name='homepage'), + path('series/add', views.AddSeriesView.as_view(), name='add-series'), ] \ No newline at end of file diff --git a/src/series/views/__init__.py b/src/series/views/__init__.py index 7e1c3a5..4a0c3a2 100644 --- a/src/series/views/__init__.py +++ b/src/series/views/__init__.py @@ -1 +1,2 @@ -from .homepage import homepage_view \ No newline at end of file +from .homepage import homepage_view +from .add_series import AddSeriesView \ No newline at end of file diff --git a/src/series/views/add_series.py b/src/series/views/add_series.py new file mode 100644 index 0000000..3c55c0d --- /dev/null +++ b/src/series/views/add_series.py @@ -0,0 +1,53 @@ +from django.views.generic import CreateView +from series.models import SeriesModel +from django.urls import reverse_lazy, reverse +from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib import messages +from django.shortcuts import redirect +from requests import get + + +class AddSeriesView(LoginRequiredMixin, CreateView): + login_url = reverse_lazy('login') + template_name = 'add_series.html' + model = SeriesModel + fields = ('title', 'imdb_id', 'last_season', 'last_episode', 'show') + + def get_success_url(self): + messages.success(self.request, 'Series Added') + return reverse('homepage') + + def form_valid(self, form): + series = form.save(commit=False) + series.user = self.request.user + + raw_data = get(f"https://imdb-api.com/en/API/Title/{series.user.imdb_api_key}/{series.imdb_id}") + + if raw_data.status_code != 200: + messages.info(self.request, 'TV Series no added. Please try again.') + return redirect('add-series') + data = raw_data.json() + + if data['errorMessage']: + form.add_error('imdb_id', 'ID is not correct.') + return self.form_invalid(form) + + if not data['tvSeriesInfo']: + form.add_error('imdb_id', 'This is not a TV series id.') + return self.form_invalid(form) + seasons = data['tvSeriesInfo']['seasons'] + + if str(series.last_season) not in seasons: + form.add_error('last_season', 'The season number is not correct.') + return self.form_invalid(form) + + data = get(f"https://imdb-api.com/en/API/SeasonEpisodes/{series.user.imdb_api_key}/{series.imdb_id}/{series.last_season}").json() + episodes_count = len(data['episodes']) + if series.last_episode > episodes_count: + form.add_error('last_episode', 'The episode number is not correct.') + return self.form_invalid(form) + + series.save() + form.save_m2m() + + return super().form_valid(form)