Example #1
0
    def create_series(self, form):
        """Set the creator_id of the newly created series to the user that's 
        currently logged in and also fills in the title and description fields
        """

        series = Series(title=form.cleaned_data['title'], description=form.cleaned_data['description'],
                        creator_id=self.request.user.id, site_id=self.kwargs['website_id'])
        series.save()
        return series
Example #2
0
    def test_save(self):
        series = Series(name="Some Series")
        series.save()
        self.assertIsNotNone(series.id)
        self.assertEquals("some-series", series.slug)

        series = Series(name="Deep Space")
        series.save()
        self.assertIsNotNone(series.id)
        self.assertEquals("deep-space", series.slug)
Example #3
0
    def create_series(self, form):
        """Set the creator_id of the newly created series to the user that's 
        currently logged in and also fills in the title and description fields
        """

        series = Series(title=form.cleaned_data['title'],
                        description=form.cleaned_data['description'],
                        creator_id=self.request.user.id,
                        site_id=self.kwargs['website_id'])
        series.save()
        return series
Example #4
0
    def mutate_and_get_payload(cls, root, info, **input):
        # проверяет токен
        token = input.get('token', None)
        if token != '******************':
            return "Invalid token"

        series = Series(title=input.get('title'),
                        description=input.get('description'),
                        image=input.get('image'),
                        rating=input.get('rating', 0),
                        show_counter=input.get('show_counter', 0),
                        date_create=input.get('date_create', 0),
                        date_update=datetime.datetime.utcnow())
        if input.get('pk'):
            series.pk = input.get('pk')
        series.save()

        return AddSeries(series=series)
Example #5
0
    def save(self):
        name = self.validated_data['name']
        alt_id = self.validated_data['alt_id']
        publisher = self.validated_data['publisher']
        imprint = self.validated_data['imprint']
        genre = self.validated_data['genre']
        years = self.validated_data['years']
        is_one_shot = self.validated_data['is_one_shot']
        is_mini_series = self.validated_data['is_mini_series']
        mini_series_limit = self.validated_data['mini_series_limit']
        series = Series(alt_id=alt_id,
                        name=name,
                        publisher=publisher,
                        imprint=imprint,
                        genre=genre,
                        years=years,
                        is_one_shot=is_one_shot,
                        is_mini_series=is_mini_series,
                        mini_series_limit=mini_series_limit)
        series.save()

        return series
Example #6
0
def post_create(request):
    form = PostForm()
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.score += 1  # self upvote
            post.save()

            # request.user.upvoted.add(post)

            # Add tags
            tags = request.POST.get('tags')
            if tags:
                tags = tags.split(",")
                for tag in tags:
                    title = tag.strip()
                    slug = slugify(title)
                    # Get tag by slug. Create tag if it doesn't exist.
                    try:
                        tag = Tag.objects.get(slug=slug)
                    except:
                        tag = Tag.objects.create(title=tag)
                    post.tags.add(tag)

            # Add category
            category = request.POST.get('post_category')
            if category:
                category = Category.objects.get(slug=category)
                post.category = category

            # Add series
            series = request.GET.get('series')
            if series == "new":
                # If I'm being sent from a post that doesn't have series
                # (by clicking "Add Chapter")
                # I create series
                first_chapter = Post.objects.get(slug=request.GET.get('post'))
                series_title = first_chapter.body.splitlines()[0][:100]
                series = Series(slug=first_chapter.slug, title=series_title)
                series.save()
                # Add the original post to it
                first_chapter.series = series
                first_chapter.save()
                # Add the post I've just created to it
                post.series = series
            elif series:
                series = Series.objects.get(pk=series)
                post.series = series

            post.save()

            wordcount = len(re.findall(r'\w+', post.body))
            update_wordcount(wordcount, post.author)
            # post.hubs.add(*form.cleaned_data['tags'])
            # hubs = post.hubs.all()

            return HttpResponseRedirect('/post/' + post.slug + '/edit')

    else:
        form = PostForm()
        categories = Category.objects.all()

        today = time.strftime("%Y-%m-%d")
        if today in request.user.calendar:
            wordcount = eval(request.user.calendar)[today]
        else:
            wordcount = 0

        return render(request, 'posts/edit.html', {
            'form': form,
            'wordcount': wordcount,
            'categories': categories
        })
Example #7
0
def import_from_litres(hour=23, minutes=59):
    image_template = 'https://partnersdnld.litres.ru/static/bookimages/{0}/{1}/{2}/{3}.bin.dir/{3}.cover.{4}'
    d = datetime.date.today()
    api = LitresApi(secret_key='D7psdo2s*Xjsoq3WdsoSWWvoo', partner_id='YABK')
    lazy_books = api.get_fresh_book(
        start_date=datetime.datetime(d.year, d.month, d.day - 1, 0, 0),
        end_date=datetime.datetime(d.year, d.month, d.day - 1, hour, minutes))

    for lazy_book in lazy_books:
        if lazy_book.get('@lang') == 'ru':
            litres_id = lazy_book.get('@id')
            litres_file_id = lazy_book.get('@file_id')
            litres_book = lazy_book.get('title-info')
            litres_authors = litres_book.get('author')
            litres_genres = lazy_book.get('genres')
            litres_series = lazy_book.get('sequences')
            title = litres_book.get('book-title')
            description = litres_book.get('annotation')
            age = lazy_book.get('@adult')

            try:
                publish_info = lazy_book.get('publish-info')
                if publish_info:
                    year = publish_info.get('year', 0)
                    isbn = publish_info.get('isbn', '').replace('-', '')
                else:
                    date = litres_book.get('date', 0)
                    if type(date) is str:
                        year = date
                    elif type(date) is list:
                        if date.get('#text'):
                            year = date.get('#text', 0)

                    if lazy_book.get('@isbn'):
                        isbn = lazy_book.get('@isbn', '').replace('-', '')
                    else:
                        isbn = lazy_book.get('@litres_isbn',
                                             '').replace('-', '')
            except Exception as e:
                print('Exception {}'.format(e))
                print(json.dumps(lazy_book, indent=4, ensure_ascii=False))

            ext = lazy_book.get('@cover')
            rating = decimal.Decimal(lazy_book.get('@rating', 0))

            # Импорт автора
            libs_authors = []
            for litres_author in litres_authors:
                try:
                    author = Author.objects.get(
                        litres_id=litres_author.get('id'))
                    libs_authors.append(author.id)
                except Author.DoesNotExist:
                    fi = "{} {}".format(litres_author.get('last-name'),
                                        litres_author.get('first-name'))
                    fi = fi.replace('None', '').strip()
                    authors = Author.objects.filter(name__icontains=fi)
                    if len(authors) == 1:
                        author = authors[0]
                        libs_authors.append(author.id)
                        author.litres_id = litres_author.get('id')
                        author.save(update_fields=['litres_id'])
                        print("Обновил litres_id для автора {} {}".format(
                            author.id, author.name))
                    elif len(authors) > 1:
                        print("Множество совпадений авторов {} для книги {}".
                              format(litres_authors, litres_book))
                    else:
                        fi = "{} {}".format(litres_author.get('first-name'),
                                            litres_author.get('last-name'))
                        fi = fi.replace('None', '').strip()
                        authors = Author.objects.filter(name__icontains=fi)
                        if len(authors) == 1:
                            author = authors[0]
                            libs_authors.append(author.id)
                            author.litres_id = litres_author.get('id')
                            author.save(update_fields=['litres_id'])
                            print("Обновил litres_id для автора {} {}".format(
                                author.id, author.name))
                        elif len(authors) > 1:
                            print(
                                "Множество совпадений авторов {} для книги {}".
                                format(litres_authors, litres_book))
                        else:
                            # Добавляет нового автора

                            fi = "{} {}".format(
                                litres_author.get('last-name'),
                                litres_author.get('first-name'))
                            fio = "{} {} {}".format(
                                litres_author.get('last-name', ''),
                                litres_author.get('first-name', ''),
                                litres_author.get('middle-name', ''))

                            author = Author(
                                name=fi.replace('None', '').strip(),
                                litres_name=fio.replace('None', '').strip(),
                            )
                            author.save()
                            libs_authors.append(author.id)

            # Опрееление жанра
            libs_genres = []
            if litres_genres:
                litres_genres = litres_genres['genre']
                for litres_genre in litres_genres:
                    genres_new = GenreNew.objects.filter(
                        genre_litres__icontains=litres_genre['@id'])

                    for genre_new in genres_new:
                        libs_genres.append(genre_new.id)

                    if not len(genres_new):
                        print("Жанр {} {} не найден".format(
                            litres_genre['@title'], litres_genre['@id']))

            # Если есть серия
            libs_series = None
            if litres_series:
                litres_series = litres_series.get('sequence')[0]
                try:
                    # Проверяет по id
                    libs_series = Series.objects.get(
                        litres_id=litres_series['@uuid'])
                except Series.DoesNotExist:
                    try:
                        # проверяет по названию
                        libs_series = Series.objects.get(
                            title=litres_series['@name'])
                        libs_series.litres_id = litres_series['@uuid']
                        libs_series.save(update_fields=['litres_id'])
                        print("Обновил litres_id для серии {} {}".format(
                            libs_series.id, libs_series.title))
                    except Series.MultipleObjectsReturned:
                        print("Задвоилась серия {} {}".format(
                            libs_series.id, libs_series.title))
                    except Series.DoesNotExist:
                        # Добавляет новую серию
                        libs_series = Series(title=litres_series['@name'],
                                             litres_id=litres_series['@uuid'])
                        libs_series.save()

            # Ипорт книги
            try:
                book = Book.objects.get(litres_id=litres_id)
            except Book.MultipleObjectsReturned:
                print("Затроило книги litres_id {} isbn {}".format(
                    litres_id, isbn))
            except Book.DoesNotExist:
                # Проверяет по isbn
                try:
                    if len(isbn):
                        book = Book.objects.get(isbn=isbn)
                        book.litres_id = litres_id
                        book.save(update_fields=['litres_id'])
                        print("Обновил litres_id для книги {} {}".format(
                            book.id, book.title))
                    else:
                        print("Пустой isbn litres_id {} isbn {}".format(
                            litres_id, isbn))
                except Book.MultipleObjectsReturned:
                    print("Затроило книги litres_id {} isbn {}".format(
                        litres_id, isbn))
                except Book.DoesNotExist:
                    # Проверяет совпадение по назанию
                    if title and litres_author.get('last-name'):
                        book = Book.objects.filter(
                            title__icontains=title,
                            author__name__icontains=litres_author.get(
                                'last-name'))
                        if len(book) == 1:
                            b = book[0]
                            b.litres_id = litres_id
                            b.isbn = isbn
                            b.save(update_fields=['litres_id', 'isbn'])
                            print("Обновил litres_id и isbn для книги {} {}".
                                  format(b.id, b.title))
                        elif len(book) > 1:
                            print("Множество совпадений c книгой {}".format(
                                litres_book))
                        else:
                            litres_file_id_str = "{0:08d}".format(
                                int(litres_file_id))
                            xx = litres_file_id_str[0:2]
                            yy = litres_file_id_str[2:4]
                            zz = litres_file_id_str[4:6]

                            image = image_template.format(
                                xx, yy, zz, litres_file_id, ext)

                            if rating >= 4:
                                rating = 4

                            book = Book(title=title,
                                        description=description,
                                        age=age,
                                        year=year,
                                        isbn=isbn,
                                        litres_id=litres_id,
                                        image=image,
                                        rating=rating)

                            if decimal.Decimal(rating) > 0:
                                book.rating_partner_votes = 1

                            if libs_series:
                                book.series = libs_series
                            try:
                                book.save()
                            except decimal.InvalidOperation:
                                book.rating = 0
                                book.save()

                            book.genre_new.set(libs_genres)
                            book.author.set(libs_authors)
Example #8
0
def post_create(request):
    form = PostForm()
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.score += 1 # self upvote
            post.save()

            # request.user.upvoted.add(post)

            # Add tags
            tags = request.POST.get('tags')
            if tags:
                tags = tags.split(",")
                for tag in tags:
                    title = tag.strip()
                    slug = slugify(title)
                    # Get tag by slug. Create tag if it doesn't exist.
                    try: 
                        tag = Tag.objects.get(slug=slug)
                    except:
                        tag = Tag.objects.create(title=tag)
                    post.tags.add(tag)

            # Add category
            category = request.POST.get('post_category')
            if category:
                category = Category.objects.get(slug=category)
                post.category = category

            # Add series
            series = request.GET.get('series')
            if series == "new":
                # If I'm being sent from a post that doesn't have series
                # (by clicking "Add Chapter")
                # I create series
                first_chapter = Post.objects.get(slug=request.GET.get('post'))
                series_title = first_chapter.body.splitlines()[0][:100]
                series = Series(slug = first_chapter.slug, title = series_title)
                series.save()
                # Add the original post to it
                first_chapter.series = series
                first_chapter.save()
                # Add the post I've just created to it
                post.series = series
            elif series:
                series = Series.objects.get(pk=series)
                post.series = series

            post.save()

            wordcount = len(re.findall(r'\w+', post.body))
            update_wordcount(wordcount, post.author)
            # post.hubs.add(*form.cleaned_data['tags'])
            # hubs = post.hubs.all()
            
            return HttpResponseRedirect('/post/'+post.slug+'/edit')

    else:
        form = PostForm()
        categories =  Category.objects.all()

        today = time.strftime("%Y-%m-%d")
        if today in request.user.calendar:
            wordcount = eval(request.user.calendar)[today]
        else:
            wordcount = 0
        
        return render(request, 'posts/edit.html', {
            'form':form,
            'wordcount':wordcount,            
            'categories': categories
        })
Example #9
0
        for p in posts:
            if p["pk"] == post["fields"]["parent"]:
                parent = p
        # Modify slug to parent-slug-chapter-slug.
        slug = parent["fields"]["slug"] + "-" + slug

        # Create series for a parent
        series_title = parent["fields"]["title"]
        series_slug = parent["fields"]["slug"]

        # Get or create series
        try:
            series = Series.objects.get(slug=series_slug)
        except:
            series = Series(title=series_title, slug=series_slug)
            series.save()
    # If the story is a parent, find series with matching slug and add it to it.
    try:
        series = Series.objects.get(slug=slug)
    except:
        pass

    try:
        # Check if post already exists
        post = Post.objects.get(slug=slug)
        # On a second run, making sure to add series to parent posts
        post.series = series
        post.save()
    except:
        # Create post if it doesnt exist yet
        new_post = Post(body=body,