API v0
This commit is contained in:
Your Name 2022-02-20 19:09:23 -05:00
parent 80ada1ed7f
commit 47bd9e55c5
7 changed files with 90 additions and 9 deletions

View file

@ -63,6 +63,21 @@ class Book(Entity):
def __str__(self):
return self.title
def get_json(self):
r = {
'subtitle': self.subtitle,
'original_title': self.orig_title,
'author': self.author,
'translator': self.translator,
'publisher': self.pub_house,
'publish_year': self.pub_year,
'publish_month': self.pub_month,
'language': self.language,
'isbn': self.isbn,
}
r.update(super().get_json())
return r
def get_absolute_url(self):
return reverse("books:retrieve", args=[self.id])

View file

@ -59,6 +59,18 @@ class Entity(models.Model):
def get_absolute_url(self):
raise NotImplementedError("Subclass should implement this method")
def get_json(self):
return {
'title': self.title,
'brief': self.brief,
'rating': self.rating,
'url': settings.APP_WEBSITE + self.get_absolute_url(),
'cover_url': settings.APP_WEBSITE + self.cover.url,
'top_tags': self.tags[:5],
'category_name': self.verbose_category_name,
'other_info': self.other_info,
}
def save(self, *args, **kwargs):
""" update rating and strip source url scheme & querystring before save to db """
if self.rating_number and self.rating_total_score:

View file

@ -6,5 +6,6 @@ urlpatterns = [
path('', home),
path('home/', home, name='home'),
path('search/', search, name='search'),
path('search.json/', search, name='search.json'),
path('external_search/', external_search, name='external_search'),
]

View file

@ -25,6 +25,7 @@ from common.searcher import ExternalSources
from management.models import Announcement
from django.conf import settings
from common.index import Indexer
from django.http import JsonResponse
logger = logging.getLogger(__name__)
@ -68,17 +69,23 @@ def search(request):
"items": None,
}
)
url_validator = URLValidator()
try:
url_validator(keywords)
# validation success
return jump_or_scrape(request, keywords)
except ValidationError as e:
pass
#
if request.user.is_authenticated:
url_validator = URLValidator()
try:
url_validator(keywords)
# validation success
return jump_or_scrape(request, keywords)
except ValidationError as e:
pass
result = Indexer.search(keywords, page=page_number, category=category, tag=tag)
for item in result.items:
item.tag_list = item.all_tag_list[:TAG_NUMBER_ON_LIST]
if request.path.endswith('.json/'):
return JsonResponse({
'num_pages': result.num_pages,
'items':list(map(lambda i:i.get_json(), result.items))
})
return render(
request,
"common/search_result.html",

View file

@ -75,6 +75,18 @@ class Game(Entity):
def __str__(self):
return self.title
def get_json(self):
r = {
'developer': self.developer,
'other_title': self.other_title,
'publisher': self.publisher,
'release_date': self.release_date,
'platform': self.platform,
'genre': self.genre,
}
r.update(super().get_json())
return r
def get_absolute_url(self):
return reverse("games:retrieve", args=[self.id])

View file

@ -170,6 +170,22 @@ class Movie(Entity):
else:
return self.title
def get_json(self):
r = {
'other_title': self.other_title,
'original_title': self.orig_title,
'director': self.director,
'playwright': self.playwright,
'actor': self.actor,
'release_year': self.year,
'genre': self.genre,
'language': self.language,
'season': self.season,
'duration': self.duration,
'imdb_code': self.imdb_code,
}
r.update(super().get_json())
return r
def get_absolute_url(self):
return reverse("movies:retrieve", args=[self.id])
@ -177,7 +193,6 @@ class Movie(Entity):
def get_tags_manager(self):
return self.movie_tags
def get_genre_display(self):
translated_genre = []
for g in self.genre:

View file

@ -48,6 +48,16 @@ class Album(Entity):
def __str__(self):
return self.title
def get_json(self):
r = {
'artist': self.artist,
'release_date': self.release_date,
'genre': self.genre,
'publisher': self.company,
}
r.update(super().get_json())
return r
def get_embed_link(self):
if self.source_site == SourceSiteEnum.SPOTIFY.value:
return self.source_url.replace("open.spotify.com/", "open.spotify.com/embed/")
@ -95,6 +105,15 @@ class Song(Entity):
def __str__(self):
return self.title
def get_json(self):
r = {
'artist': self.artist,
'release_date': self.release_date,
'genre': self.genre,
}
r.update(super().get_json())
return r
def get_embed_link(self):
return self.source_url.replace("open.spotify.com/", "open.spotify.com/embed/") if self.source_site == SourceSiteEnum.SPOTIFY.value else None