API v0
API v0
This commit is contained in:
parent
80ada1ed7f
commit
47bd9e55c5
7 changed files with 90 additions and 9 deletions
|
@ -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])
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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'),
|
||||
]
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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])
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue