Fix koreader importing
This commit is contained in:
@ -232,16 +232,24 @@ def build_scrobbles_from_book_map(
|
|||||||
f"Book {koreader_book_id} - {page_number} {seconds_from_last_page} read seconds"
|
f"Book {koreader_book_id} - {page_number} {seconds_from_last_page} read seconds"
|
||||||
)
|
)
|
||||||
if should_create_scrobble:
|
if should_create_scrobble:
|
||||||
first_page_in_scrobble = list(scrobble_page_data.keys())[0]
|
first_page = scrobble_page_data.get(
|
||||||
start_ts = int(
|
list(scrobble_page_data.keys())[0]
|
||||||
scrobble_page_data.get(first_page_in_scrobble).get(
|
|
||||||
"start_ts"
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
last_page = scrobble_page_data.get(
|
||||||
|
list(scrobble_page_data.keys())[-1]
|
||||||
|
)
|
||||||
|
start_ts = int(first_page.get("start_ts"))
|
||||||
|
end_ts = int(last_page.get("start_ts")) + int(
|
||||||
|
last_page.get("duration")
|
||||||
|
)
|
||||||
|
|
||||||
timestamp = datetime.fromtimestamp(start_ts).replace(
|
timestamp = datetime.fromtimestamp(start_ts).replace(
|
||||||
tzinfo=user.profile.tzinfo
|
tzinfo=user.profile.tzinfo
|
||||||
)
|
)
|
||||||
# TODO Add a shim here temporarily to fix imports while we were in France
|
stop_timestamp = datetime.fromtimestamp(end_ts).replace(
|
||||||
|
tzinfo=user.profile.tzinfo
|
||||||
|
)
|
||||||
|
# Add a shim here temporarily to fix imports while we were in France
|
||||||
# if date is between 10/15 and 12/15, cast it to Europe/Central
|
# if date is between 10/15 and 12/15, cast it to Europe/Central
|
||||||
if (
|
if (
|
||||||
datetime(2023, 10, 15).replace(
|
datetime(2023, 10, 15).replace(
|
||||||
@ -284,11 +292,12 @@ def build_scrobbles_from_book_map(
|
|||||||
source="KOReader",
|
source="KOReader",
|
||||||
media_type=Scrobble.MediaType.BOOK,
|
media_type=Scrobble.MediaType.BOOK,
|
||||||
timestamp=timestamp,
|
timestamp=timestamp,
|
||||||
played_to_completion=True,
|
stop_timestamp=stop_timestamp,
|
||||||
playback_position_seconds=playback_position_seconds,
|
playback_position_seconds=playback_position_seconds,
|
||||||
in_progress=False,
|
|
||||||
book_page_data=scrobble_page_data,
|
book_page_data=scrobble_page_data,
|
||||||
book_pages_read=page_number,
|
book_pages_read=page_number,
|
||||||
|
in_progress=False,
|
||||||
|
played_to_completion=True,
|
||||||
long_play_complete=False,
|
long_play_complete=False,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,9 +1,13 @@
|
|||||||
import hashlib
|
import hashlib
|
||||||
import pytest
|
|
||||||
import random
|
import random
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
from vrobbler.apps.books.koreader import KoReaderBookColumn
|
from vrobbler.apps.books.koreader import KoReaderBookColumn
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
ordinal = lambda n: "%d%s" % (
|
ordinal = lambda n: "%d%s" % (
|
||||||
n,
|
n,
|
||||||
"tsnrhtdd"[(n // 10 % 10 != 1) * (n % 10 < 4) * n % 10 :: 4],
|
"tsnrhtdd"[(n // 10 % 10 != 1) * (n % 10 < 4) * n % 10 :: 4],
|
||||||
@ -112,3 +116,8 @@ class KoReaderBookRows:
|
|||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def koreader_rows():
|
def koreader_rows():
|
||||||
return KoReaderBookRows(book_count=1)
|
return KoReaderBookRows(book_count=1)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def demo_user():
|
||||||
|
return User.objects.create(email="demo@example.com")
|
||||||
|
|||||||
@ -1,7 +1,12 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from books.koreader import KoReaderBookColumn, build_book_map, build_page_data, build_scrobbles_from_book_map
|
from books.koreader import (
|
||||||
|
KoReaderBookColumn,
|
||||||
|
build_book_map,
|
||||||
|
build_page_data,
|
||||||
|
build_scrobbles_from_book_map,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@ -30,13 +35,13 @@ def test_load_page_data_to_map(get_mock, koreader_rows, valid_response):
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@mock.patch("requests.get")
|
@mock.patch("requests.get")
|
||||||
def test_build_scrobbles_from_pages(
|
def test_build_scrobbles_from_pages(
|
||||||
get_mock, koreader_rows, valid_response
|
get_mock, koreader_rows, demo_user, valid_response
|
||||||
):
|
):
|
||||||
get_mock.return_value = valid_response
|
get_mock.return_value = valid_response
|
||||||
book_map = build_book_map(koreader_rows.BOOK_ROWS)
|
book_map = build_book_map(koreader_rows.BOOK_ROWS)
|
||||||
book_map = build_page_data(koreader_rows.PAGE_STATS_ROWS, book_map)
|
book_map = build_page_data(koreader_rows.PAGE_STATS_ROWS, book_map)
|
||||||
|
|
||||||
scrobbles = build_scrobbles_from_book_map(book_map)
|
scrobbles = build_scrobbles_from_book_map(book_map, demo_user)
|
||||||
# Corresponds to number of sessions per book ( 20 pages per session, 120 +/- 15 pages read )
|
# Corresponds to number of sessions per book ( 20 pages per session, 120 +/- 15 pages read )
|
||||||
expected_scrobbles = 6 * len(book_map.keys())
|
expected_scrobbles = 6 * len(book_map.keys())
|
||||||
assert len(scrobbles) == expected_scrobbles
|
assert len(scrobbles) == expected_scrobbles
|
||||||
|
|||||||
Reference in New Issue
Block a user