Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
douban-api-proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
douban-api-proxy
Commits
87f07003
Commit
87f07003
authored
Jul 11, 2021
by
Ozzie Isaacs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed invalid code
Sqlalchemy 2.0 compatibility for kobo sync
parent
a56e071a
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
18 deletions
+55
-18
admin.py
cps/admin.py
+0
-1
kobo.py
cps/kobo.py
+55
-17
No files found.
cps/admin.py
View file @
87f07003
...
@@ -40,7 +40,6 @@ from sqlalchemy.exc import IntegrityError, OperationalError, InvalidRequestError
...
@@ -40,7 +40,6 @@ from sqlalchemy.exc import IntegrityError, OperationalError, InvalidRequestError
from
sqlalchemy.sql.expression
import
func
,
or_
,
text
from
sqlalchemy.sql.expression
import
func
,
or_
,
text
from
.
import
constants
,
logger
,
helper
,
services
from
.
import
constants
,
logger
,
helper
,
services
# from .cli import filepicker
from
.
import
db
,
calibre_db
,
ub
,
web_server
,
get_locale
,
config
,
updater_thread
,
babel
,
gdriveutils
from
.
import
db
,
calibre_db
,
ub
,
web_server
,
get_locale
,
config
,
updater_thread
,
babel
,
gdriveutils
from
.helper
import
check_valid_domain
,
send_test_mail
,
reset_password
,
generate_password_hash
,
check_email
,
\
from
.helper
import
check_valid_domain
,
send_test_mail
,
reset_password
,
generate_password_hash
,
check_email
,
\
valid_email
,
check_username
valid_email
,
check_username
...
...
cps/kobo.py
View file @
87f07003
...
@@ -44,6 +44,8 @@ from werkzeug.datastructures import Headers
...
@@ -44,6 +44,8 @@ from werkzeug.datastructures import Headers
from
sqlalchemy
import
func
from
sqlalchemy
import
func
from
sqlalchemy.sql.expression
import
and_
,
or_
from
sqlalchemy.sql.expression
import
and_
,
or_
from
sqlalchemy.exc
import
StatementError
from
sqlalchemy.exc
import
StatementError
from
sqlalchemy
import
__version__
as
sql_version
from
sqlalchemy.sql
import
select
import
requests
import
requests
from
.
import
config
,
logger
,
kobo_auth
,
db
,
calibre_db
,
helper
,
shelf
as
shelf_lib
,
ub
from
.
import
config
,
logger
,
kobo_auth
,
db
,
calibre_db
,
helper
,
shelf
as
shelf_lib
,
ub
...
@@ -64,6 +66,7 @@ kobo_auth.register_url_value_preprocessor(kobo)
...
@@ -64,6 +66,7 @@ kobo_auth.register_url_value_preprocessor(kobo)
log
=
logger
.
create
()
log
=
logger
.
create
()
sql2
=
([
int
(
x
)
for
x
in
sql_version
.
split
(
'.'
)]
>=
[
2
,
0
,
0
])
def
get_store_url_for_current_request
():
def
get_store_url_for_current_request
():
# Programmatically modify the current url to point to the official Kobo store
# Programmatically modify the current url to point to the official Kobo store
...
@@ -153,14 +156,19 @@ def HandleSyncRequest():
...
@@ -153,14 +156,19 @@ def HandleSyncRequest():
calibre_db
.
reconnect_db
(
config
,
ub
.
app_DB_path
)
calibre_db
.
reconnect_db
(
config
,
ub
.
app_DB_path
)
only_kobo_shelves
=
current_user
.
kobo_only_shelves_sync
only_kobo_shelves
=
current_user
.
kobo_only_shelves_sync
# calibre_db.session.query(ub.Shelf).filter(ub.Shelf.user_id == current_user.id).filter(ub.Shelf.kobo_sync).count() > 0
if
only_kobo_shelves
:
if
only_kobo_shelves
:
changed_entries
=
(
if
sql2
:
c
alibre_db
.
session
.
query
(
db
.
Books
,
c
hanged_entries
=
select
(
db
.
Books
,
ub
.
ArchivedBook
.
last_modified
,
ub
.
ArchivedBook
.
last_modified
,
ub
.
BookShelf
.
date_added
,
ub
.
BookShelf
.
date_added
,
ub
.
ArchivedBook
.
is_archived
)
ub
.
ArchivedBook
.
is_archived
)
else
:
changed_entries
=
calibre_db
.
session
.
query
(
db
.
Books
,
ub
.
ArchivedBook
.
last_modified
,
ub
.
BookShelf
.
date_added
,
ub
.
ArchivedBook
.
is_archived
)
changed_entries
=
(
changed_entries
.
join
(
db
.
Data
)
.
outerjoin
(
ub
.
ArchivedBook
,
db
.
Books
.
id
==
ub
.
ArchivedBook
.
book_id
)
.
join
(
db
.
Data
)
.
outerjoin
(
ub
.
ArchivedBook
,
db
.
Books
.
id
==
ub
.
ArchivedBook
.
book_id
)
.
filter
(
or_
(
db
.
Books
.
last_modified
>
sync_token
.
books_last_modified
,
.
filter
(
or_
(
db
.
Books
.
last_modified
>
sync_token
.
books_last_modified
,
ub
.
BookShelf
.
date_added
>
sync_token
.
books_last_modified
))
ub
.
BookShelf
.
date_added
>
sync_token
.
books_last_modified
))
...
@@ -174,8 +182,13 @@ def HandleSyncRequest():
...
@@ -174,8 +182,13 @@ def HandleSyncRequest():
.
distinct
()
.
distinct
()
)
)
else
:
else
:
changed_entries
=
(
if
sql2
:
calibre_db
.
session
.
query
(
db
.
Books
,
ub
.
ArchivedBook
.
last_modified
,
ub
.
ArchivedBook
.
is_archived
)
changed_entries
=
select
(
db
.
Books
,
ub
.
ArchivedBook
.
last_modified
,
ub
.
ArchivedBook
.
is_archived
)
else
:
changed_entries
=
calibre_db
.
session
.
query
(
db
.
Books
,
ub
.
ArchivedBook
.
last_modified
,
ub
.
ArchivedBook
.
is_archived
)
changed_entries
=
(
changed_entries
.
join
(
db
.
Data
)
.
outerjoin
(
ub
.
ArchivedBook
,
db
.
Books
.
id
==
ub
.
ArchivedBook
.
book_id
)
.
join
(
db
.
Data
)
.
outerjoin
(
ub
.
ArchivedBook
,
db
.
Books
.
id
==
ub
.
ArchivedBook
.
book_id
)
.
filter
(
db
.
Books
.
last_modified
>
sync_token
.
books_last_modified
)
.
filter
(
db
.
Books
.
last_modified
>
sync_token
.
books_last_modified
)
.
filter
(
calibre_db
.
common_filters
())
.
filter
(
calibre_db
.
common_filters
())
...
@@ -188,7 +201,11 @@ def HandleSyncRequest():
...
@@ -188,7 +201,11 @@ def HandleSyncRequest():
changed_entries
=
changed_entries
.
filter
(
db
.
Books
.
id
>
sync_token
.
books_last_id
)
changed_entries
=
changed_entries
.
filter
(
db
.
Books
.
id
>
sync_token
.
books_last_id
)
reading_states_in_new_entitlements
=
[]
reading_states_in_new_entitlements
=
[]
for
book
in
changed_entries
.
limit
(
SYNC_ITEM_LIMIT
):
if
sql2
:
books
=
calibre_db
.
session
.
execute
(
changed_entries
.
limit
(
SYNC_ITEM_LIMIT
))
else
:
books
=
changed_entries
.
limit
(
SYNC_ITEM_LIMIT
)
for
book
in
books
:
formats
=
[
data
.
format
for
data
in
book
.
Books
.
data
]
formats
=
[
data
.
format
for
data
in
book
.
Books
.
data
]
if
not
'KEPUB'
in
formats
and
config
.
config_kepubifypath
and
'EPUB'
in
formats
:
if
not
'KEPUB'
in
formats
and
config
.
config_kepubifypath
and
'EPUB'
in
formats
:
helper
.
convert_book_format
(
book
.
Books
.
id
,
config
.
config_calibre_dir
,
'EPUB'
,
'KEPUB'
,
current_user
.
name
)
helper
.
convert_book_format
(
book
.
Books
.
id
,
config
.
config_calibre_dir
,
'EPUB'
,
'KEPUB'
,
current_user
.
name
)
...
@@ -228,7 +245,13 @@ def HandleSyncRequest():
...
@@ -228,7 +245,13 @@ def HandleSyncRequest():
new_books_last_created
=
max
(
ts_created
,
new_books_last_created
)
new_books_last_created
=
max
(
ts_created
,
new_books_last_created
)
max_change
=
changed_entries
.
from_self
()
.
filter
(
ub
.
ArchivedBook
.
is_archived
)
\
if
sql2
:
max_change
=
calibre_db
.
session
.
execute
(
changed_entries
.
filter
(
ub
.
ArchivedBook
.
is_archived
)
.
order_by
(
func
.
datetime
(
ub
.
ArchivedBook
.
last_modified
)
.
desc
()))
\
.
columns
(
db
.
Books
)
.
first
()
else
:
max_change
=
changed_entries
.
from_self
()
.
filter
(
ub
.
ArchivedBook
.
is_archived
)
\
.
order_by
(
func
.
datetime
(
ub
.
ArchivedBook
.
last_modified
)
.
desc
())
.
first
()
.
order_by
(
func
.
datetime
(
ub
.
ArchivedBook
.
last_modified
)
.
desc
())
.
first
()
max_change
=
max_change
.
last_modified
if
max_change
else
new_archived_last_modified
max_change
=
max_change
.
last_modified
if
max_change
else
new_archived_last_modified
...
@@ -236,10 +259,14 @@ def HandleSyncRequest():
...
@@ -236,10 +259,14 @@ def HandleSyncRequest():
new_archived_last_modified
=
max
(
new_archived_last_modified
,
max_change
)
new_archived_last_modified
=
max
(
new_archived_last_modified
,
max_change
)
# no. of books returned
# no. of books returned
if
sql2
:
entries
=
calibre_db
.
session
.
execute
(
changed_entries
)
.
all
()
book_count
=
len
(
entries
)
else
:
entries
=
changed_entries
.
all
()
book_count
=
changed_entries
.
count
()
book_count
=
changed_entries
.
count
()
# last entry:
# last entry:
books_last_id
=
changed_entries
.
all
()
[
-
1
]
.
Books
.
id
or
-
1
if
book_count
else
-
1
books_last_id
=
entries
[
-
1
]
.
Books
.
id
or
-
1
if
book_count
else
-
1
# generate reading state data
# generate reading state data
changed_reading_states
=
ub
.
session
.
query
(
ub
.
KoboReadingState
)
changed_reading_states
=
ub
.
session
.
query
(
ub
.
KoboReadingState
)
...
@@ -668,12 +695,23 @@ def sync_shelves(sync_token, sync_results, only_kobo_shelves=False):
...
@@ -668,12 +695,23 @@ def sync_shelves(sync_token, sync_results, only_kobo_shelves=False):
})
})
extra_filters
.
append
(
ub
.
Shelf
.
kobo_sync
)
extra_filters
.
append
(
ub
.
Shelf
.
kobo_sync
)
for
shelf
in
ub
.
session
.
query
(
ub
.
Shelf
)
.
outerjoin
(
ub
.
BookShelf
)
.
filter
(
if
sql2
:
shelflist
=
ub
.
session
.
execute
(
select
(
ub
.
Shelf
)
.
outerjoin
(
ub
.
BookShelf
)
.
filter
(
or_
(
func
.
datetime
(
ub
.
Shelf
.
last_modified
)
>
sync_token
.
tags_last_modified
,
or_
(
func
.
datetime
(
ub
.
Shelf
.
last_modified
)
>
sync_token
.
tags_last_modified
,
func
.
datetime
(
ub
.
BookShelf
.
date_added
)
>
sync_token
.
tags_last_modified
),
func
.
datetime
(
ub
.
BookShelf
.
date_added
)
>
sync_token
.
tags_last_modified
),
ub
.
Shelf
.
user_id
==
current_user
.
id
,
ub
.
Shelf
.
user_id
==
current_user
.
id
,
*
extra_filters
*
extra_filters
)
.
distinct
()
.
order_by
(
func
.
datetime
(
ub
.
Shelf
.
last_modified
)
.
asc
()):
# .columns(ub.Shelf):
)
.
distinct
()
.
order_by
(
func
.
datetime
(
ub
.
Shelf
.
last_modified
)
.
asc
()))
.
columns
(
ub
.
Shelf
)
else
:
shelflist
=
ub
.
session
.
query
(
ub
.
Shelf
)
.
outerjoin
(
ub
.
BookShelf
)
.
filter
(
or_
(
func
.
datetime
(
ub
.
Shelf
.
last_modified
)
>
sync_token
.
tags_last_modified
,
func
.
datetime
(
ub
.
BookShelf
.
date_added
)
>
sync_token
.
tags_last_modified
),
ub
.
Shelf
.
user_id
==
current_user
.
id
,
*
extra_filters
)
.
distinct
()
.
order_by
(
func
.
datetime
(
ub
.
Shelf
.
last_modified
)
.
asc
())
for
shelf
in
shelflist
:
if
not
shelf_lib
.
check_shelf_view_permissions
(
shelf
):
if
not
shelf_lib
.
check_shelf_view_permissions
(
shelf
):
continue
continue
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment