Beispiel #1
0
    def bookLoading(self, num):
        start = 1  # except first row
        end = num
        self.progressBar(start, end, "Books data uploading")
        btLen = len(self.bookTags) - 1
        rtLen = len(self.ratings) - 1
        for row in self.booksInfo[1:num + 1]:  # +1 because num+1-1=num
            bTitle = str(row[10])
            bAuthor = str(row[7]).split(',')
            bRating = 0.0

            book = Book(id=row[1], title=bTitle, rating=bRating)
            if row[22][8] != 's':
                image_dir = row[22].split("/")[3:]
                image_dir[-2] = image_dir[-2][:-1] + '{}'
                image_dir = '/'.join(image_dir)
                book.smallImage = image_dir.format("s")
                book.middleImage = image_dir.format("m")
                book.bigImage = image_dir.format("l")
            book.save()
            ## Rating counting
            step = rtLen // 2
            maxIterations = rtLen // 2
            cnt = 0
            i = 1
            up = False
            down = False
            while not up and not down and cnt < maxIterations:
                cnt += 1
                if self.ratings[i][0] == row[1]:
                    caret = i
                    sum = 0.0
                    ratingCnt = 0.0

                    while caret > 1 and self.ratings[caret][0] == row[1]:
                        caret -= 1
                        curRating = float(self.ratings[caret][2])
                        userId = int(self.ratings[caret][1])
                        try:
                            curUser = User.objects.get(id=userId)
                            myUser = MyUser.objects.get(user=curUser)
                            br = BookRating(rtd_book=book, rating=curRating)
                            br.save()
                            curUser.save()
                            myUser.rated_books.add(br)
                            myUser.save()
                        except ObjectDoesNotExist:
                            self.warning(
                                "User with id = {:d} does not exist".format(
                                    userId))
                        sum += curRating
                        ratingCnt += 1.0

                    up = True
                    caret = i
                    while caret < rtLen and self.ratings[caret][0] == row[1]:
                        curRating = float(self.ratings[caret][2])
                        userId = int(self.ratings[caret][1])
                        try:
                            curUser = User.objects.get(id=userId)
                            myUser = MyUser.objects.get(user=curUser)
                            br = BookRating(rtd_book=book, rating=curRating)
                            br.save()
                            curUser.save()
                            myUser.rated_books.add(br)
                            myUser.save()
                        except ObjectDoesNotExist:
                            self.warning(
                                "User with id = {:d} does not exist".format(
                                    userId))
                        sum += curRating
                        ratingCnt += 1.0
                        caret += 1
                    down = True
                    bRating = sum / ratingCnt
                elif int(self.ratings[i][0]) > int(row[1]):
                    i -= step
                    step //= 2
                else:
                    i += step
                    step //= 2

            book.rating = bRating

            try:
                bDate = int(float(row[8]))
            except ValueError:
                bDate = 0
            book.date = bDate

            book.save()

            for auth in bAuthor:
                try:
                    a = Author.objects.get(name__exact=auth)
                except ObjectDoesNotExist:
                    a = Author(name=auth)
                    a.save()
                book.author.add(a)

            ## Genre setting
            step = btLen // 2
            maxIterations = btLen // 2
            cnt = 0
            i = 1
            up = False
            down = False
            while not up and not down and cnt < maxIterations:
                cnt += 1
                if self.bookTags[i][0] == row[1]:
                    caret = i
                    while caret > 1 and self.bookTags[caret][0] == row[1]:
                        caret -= 1
                        try:
                            gName = self.allGenres.get(self.bookTags[caret][1])
                            g = Genre.objects.get(name=gName)
                            book.genre.add(g)
                        except ObjectDoesNotExist:
                            # nothing to do
                            pass
                    up = True
                    caret = i
                    while caret < btLen and self.bookTags[caret][0] == row[1]:
                        try:
                            gName = self.allGenres.get(self.bookTags[caret][1])
                            g = Genre.objects.get(name=gName)
                            book.genre.add(g)
                        except ObjectDoesNotExist:
                            # nothing to do
                            pass
                        caret += 1
                    down = True
                elif int(self.bookTags[i][0]) > int(row[1]):
                    i -= step
                    step //= 2
                else:
                    i += step
                    step //= 2

            book.save()
            self.progressBar(start, end, "Books data uploading")
            start += 1