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
fa4918a2
Commit
fa4918a2
authored
Jan 06, 2019
by
Ozzieisaacs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
File renaming according to title and author (#654) - gdrive is missing
parent
8db2b62b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
52 additions
and
50 deletions
+52
-50
gdriveutils.py
cps/gdriveutils.py
+16
-9
helper.py
cps/helper.py
+35
-5
web.py
cps/web.py
+1
-36
No files found.
cps/gdriveutils.py
View file @
fa4918a2
...
...
@@ -112,7 +112,8 @@ def migrate():
sql
=
sql
[
0
]
.
replace
(
currUniqueConstraint
,
'UNIQUE (gdrive_id, path)'
)
sql
=
sql
.
replace
(
GdriveId
.
__tablename__
,
GdriveId
.
__tablename__
+
'2'
)
session
.
execute
(
sql
)
session
.
execute
(
'INSERT INTO gdrive_ids2 (id, gdrive_id, path) SELECT id, gdrive_id, path FROM gdrive_ids;'
)
session
.
execute
(
"INSERT INTO gdrive_ids2 (id, gdrive_id, path) SELECT id, "
"gdrive_id, path FROM gdrive_ids;"
)
session
.
commit
()
session
.
execute
(
'DROP TABLE
%
s'
%
'gdrive_ids'
)
session
.
execute
(
'ALTER TABLE gdrive_ids2 RENAME to gdrive_ids'
)
...
...
@@ -165,7 +166,8 @@ def getFolderInFolder(parentId, folderName, drive):
query
=
""
if
folderName
:
query
=
"title = '
%
s' and "
%
folderName
.
replace
(
"'"
,
"
\\
'"
)
folder
=
query
+
"'
%
s' in parents and mimeType = 'application/vnd.google-apps.folder' and trashed = false"
%
parentId
folder
=
query
+
"'
%
s' in parents and mimeType = 'application/vnd.google-apps.folder'"
\
" and trashed = false"
%
parentId
fileList
=
drive
.
ListFile
({
'q'
:
folder
})
.
GetList
()
if
fileList
.
__len__
()
==
0
:
return
None
...
...
@@ -191,7 +193,6 @@ def getEbooksFolderId(drive=None):
def
getFile
(
pathId
,
fileName
,
drive
):
metaDataFile
=
"'
%
s' in parents and trashed = false and title = '
%
s'"
%
(
pathId
,
fileName
.
replace
(
"'"
,
"
\\
'"
))
fileList
=
drive
.
ListFile
({
'q'
:
metaDataFile
})
.
GetList
()
if
fileList
.
__len__
()
==
0
:
return
None
...
...
@@ -299,9 +300,11 @@ def copyToDrive(drive, uploadFile, createRoot, replaceFiles,
if
not
parent
:
parent
=
getEbooksFolder
(
drive
)
if
os
.
path
.
isdir
(
os
.
path
.
join
(
prevDir
,
uploadFile
)):
existingFolder
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
os
.
path
.
basename
(
uploadFile
),
parent
[
'id'
])})
.
GetList
()
existingFolder
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
os
.
path
.
basename
(
uploadFile
),
parent
[
'id'
])})
.
GetList
()
if
len
(
existingFolder
)
==
0
and
(
not
isInitial
or
createRoot
):
parent
=
drive
.
CreateFile
({
'title'
:
os
.
path
.
basename
(
uploadFile
),
'parents'
:
[{
"kind"
:
"drive#fileLink"
,
'id'
:
parent
[
'id'
]}],
parent
=
drive
.
CreateFile
({
'title'
:
os
.
path
.
basename
(
uploadFile
),
'parents'
:
[{
"kind"
:
"drive#fileLink"
,
'id'
:
parent
[
'id'
]}],
"mimeType"
:
"application/vnd.google-apps.folder"
})
parent
.
Upload
()
else
:
...
...
@@ -312,11 +315,13 @@ def copyToDrive(drive, uploadFile, createRoot, replaceFiles,
copyToDrive
(
drive
,
f
,
True
,
replaceFiles
,
ignoreFiles
,
parent
,
os
.
path
.
join
(
prevDir
,
uploadFile
))
else
:
if
os
.
path
.
basename
(
uploadFile
)
not
in
ignoreFiles
:
existingFiles
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
os
.
path
.
basename
(
uploadFile
),
parent
[
'id'
])})
.
GetList
()
existingFiles
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
os
.
path
.
basename
(
uploadFile
),
parent
[
'id'
])})
.
GetList
()
if
len
(
existingFiles
)
>
0
:
driveFile
=
existingFiles
[
0
]
else
:
driveFile
=
drive
.
CreateFile
({
'title'
:
os
.
path
.
basename
(
uploadFile
),
'parents'
:
[{
"kind"
:
"drive#fileLink"
,
'id'
:
parent
[
'id'
]}],
})
driveFile
=
drive
.
CreateFile
({
'title'
:
os
.
path
.
basename
(
uploadFile
),
'parents'
:
[{
"kind"
:
"drive#fileLink"
,
'id'
:
parent
[
'id'
]}],
})
driveFile
.
SetContentFile
(
os
.
path
.
join
(
prevDir
,
uploadFile
))
driveFile
.
Upload
()
...
...
@@ -327,7 +332,8 @@ def uploadFileToEbooksFolder(destFile, f):
splitDir
=
destFile
.
split
(
'/'
)
for
i
,
x
in
enumerate
(
splitDir
):
if
i
==
len
(
splitDir
)
-
1
:
existingFiles
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
x
,
parent
[
'id'
])})
.
GetList
()
existingFiles
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
x
,
parent
[
'id'
])})
.
GetList
()
if
len
(
existingFiles
)
>
0
:
driveFile
=
existingFiles
[
0
]
else
:
...
...
@@ -335,7 +341,8 @@ def uploadFileToEbooksFolder(destFile, f):
driveFile
.
SetContentFile
(
f
)
driveFile
.
Upload
()
else
:
existingFolder
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
x
,
parent
[
'id'
])})
.
GetList
()
existingFolder
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
x
,
parent
[
'id'
])})
.
GetList
()
if
len
(
existingFolder
)
==
0
:
parent
=
drive
.
CreateFile
({
'title'
:
x
,
'parents'
:
[{
"kind"
:
"drive#fileLink"
,
'id'
:
parent
[
'id'
]}],
"mimeType"
:
"application/vnd.google-apps.folder"
})
...
...
cps/helper.py
View file @
fa4918a2
...
...
@@ -284,22 +284,39 @@ def update_dir_structure_file(book_id, calibrepath, first_author):
web
.
app
.
logger
.
info
(
"Copying title: "
+
path
+
" into existing: "
+
new_title_path
)
for
dir_name
,
subdir_list
,
file_list
in
os
.
walk
(
path
):
for
file
in
file_list
:
os
.
renames
(
os
.
path
.
join
(
dir_name
,
file
),
os
.
path
.
join
(
new_title_path
+
dir_name
[
len
(
path
):],
file
))
os
.
renames
(
os
.
path
.
join
(
dir_name
,
file
),
os
.
path
.
join
(
new_title_path
+
dir_name
[
len
(
path
):],
file
))
path
=
new_title_path
localbook
.
path
=
localbook
.
path
.
split
(
'/'
)[
0
]
+
'/'
+
new_titledir
except
OSError
as
ex
:
web
.
app
.
logger
.
error
(
"Rename title from: "
+
path
+
" to "
+
new_title_path
+
": "
+
str
(
ex
))
web
.
app
.
logger
.
debug
(
ex
,
exc_info
=
True
)
return
_
(
"Rename title from: '
%(src)
s' to '
%(dest)
s' failed with error:
%(error)
s"
,
src
=
path
,
dest
=
new_title_path
,
error
=
str
(
ex
))
return
_
(
"Rename title from: '
%(src)
s' to '
%(dest)
s' failed with error:
%(error)
s"
,
src
=
path
,
dest
=
new_title_path
,
error
=
str
(
ex
))
if
authordir
!=
new_authordir
:
try
:
new_author_path
=
os
.
path
.
join
(
os
.
path
.
join
(
calibrepath
,
new_authordir
)
,
os
.
path
.
basename
(
path
))
new_author_path
=
os
.
path
.
join
(
calibrepath
,
new_authordir
,
os
.
path
.
basename
(
path
))
os
.
renames
(
path
,
new_author_path
)
localbook
.
path
=
new_authordir
+
'/'
+
localbook
.
path
.
split
(
'/'
)[
1
]
except
OSError
as
ex
:
web
.
app
.
logger
.
error
(
"Rename author from: "
+
path
+
" to "
+
new_author_path
+
": "
+
str
(
ex
))
web
.
app
.
logger
.
debug
(
ex
,
exc_info
=
True
)
return
_
(
"Rename author from: '
%(src)
s' to '
%(dest)
s' failed with error:
%(error)
s"
,
src
=
path
,
dest
=
new_author_path
,
error
=
str
(
ex
))
return
_
(
"Rename author from: '
%(src)
s' to '
%(dest)
s' failed with error:
%(error)
s"
,
src
=
path
,
dest
=
new_author_path
,
error
=
str
(
ex
))
# Rename all files from old names to new names
if
authordir
!=
new_authordir
or
titledir
!=
new_titledir
:
try
:
for
format
in
localbook
.
data
:
path_name
=
os
.
path
.
join
(
calibrepath
,
new_authordir
,
os
.
path
.
basename
(
path
))
new_name
=
get_valid_filename
(
localbook
.
title
)
+
' - '
+
get_valid_filename
(
new_authordir
)
os
.
renames
(
os
.
path
.
join
(
path_name
,
format
.
name
+
'.'
+
format
.
format
.
lower
()),
os
.
path
.
join
(
path_name
,
new_name
+
'.'
+
format
.
format
.
lower
()))
format
.
name
=
new_name
except
OSError
as
ex
:
web
.
app
.
logger
.
error
(
"Rename file in path "
+
path
+
" to "
+
new_name
+
": "
+
str
(
ex
))
web
.
app
.
logger
.
debug
(
ex
,
exc_info
=
True
)
return
_
(
"Rename file in path '
%(src)
s' to '
%(dest)
s' failed with error:
%(error)
s"
,
src
=
path
,
dest
=
new_name
,
error
=
str
(
ex
))
return
False
...
...
@@ -324,7 +341,7 @@ def update_dir_structure_gdrive(book_id, first_author):
book
.
path
=
book
.
path
.
split
(
'/'
)[
0
]
+
'/'
+
new_titledir
gd
.
updateDatabaseOnEdit
(
gFile
[
'id'
],
book
.
path
)
# only child folder affected
else
:
error
=
_
(
u'File
%(file)
s not found on Google Drive'
,
file
=
book
.
path
)
# file not found
error
=
_
(
u'File
%(file)
s not found on Google Drive'
,
file
=
book
.
path
)
# file not found
if
authordir
!=
new_authordir
:
gFile
=
gd
.
getFileFromEbooksFolder
(
os
.
path
.
dirname
(
book
.
path
),
titledir
)
...
...
@@ -334,6 +351,19 @@ def update_dir_structure_gdrive(book_id, first_author):
gd
.
updateDatabaseOnEdit
(
gFile
[
'id'
],
book
.
path
)
else
:
error
=
_
(
u'File
%(file)
s not found on Google Drive'
,
file
=
authordir
)
# file not found
# Rename all files from old names to new names
# ToDo: Rename also all bookfiles with new author name and new title name
'''
if authordir != new_authordir or titledir != new_titledir:
for format in book.data:
# path_name = os.path.join(calibrepath, new_authordir, os.path.basename(path))
new_name = get_valid_filename(book.title) + ' - ' + get_valid_filename(book)
format.name = new_name
if gFile:
pass
else:
error = _(u'File
%(file)
s not found on Google Drive', file=format.name) # file not found
break'''
return
error
...
...
cps/web.py
View file @
fa4918a2
...
...
@@ -525,18 +525,6 @@ def fill_indexpage(page, database, db_filter, order, *join):
.
filter
(
common_filters
())
.
order_by
(
*
order
)
.
offset
(
off
)
.
limit
(
config
.
config_books_per_page
)
.
all
()
for
book
in
entries
:
book
=
order_authors
(
book
)
'''sort_authors = book.author_sort.split('&')
authors_ordered = list()
error = False
for auth in sort_authors:
# ToDo: How to handle not found authorname
result = db.session.query(db.Authors).filter(db.Authors.sort == auth.lstrip().strip()).first()
if not result:
error = True
break
authors_ordered.append(result)
if not error:
book.authors = authors_ordered'''
return
entries
,
randm
,
pagination
...
...
@@ -1689,18 +1677,6 @@ def show_book(book_id):
entries
.
tags
=
sort
(
entries
.
tags
,
key
=
lambda
tag
:
tag
.
name
)
entries
=
order_authors
(
entries
)
'''sort_authors = entries.author_sort.split('&')
authors_ordered = list()
error = False
for auth in sort_authors:
# ToDo: How to handle not found authorname
result = db.session.query(db.Authors).filter(db.Authors.sort == auth.lstrip().strip()).first()
if not result:
error = True
break
authors_ordered.append(result)
if not error:
entries.authors = authors_ordered'''
kindle_list
=
helper
.
check_send_to_kindle
(
entries
)
reader_list
=
helper
.
check_read_formats
(
entries
)
...
...
@@ -3480,19 +3456,8 @@ def render_edit_book(book_id):
for
indx
in
range
(
0
,
len
(
book
.
languages
)):
book
.
languages
[
indx
]
.
language_name
=
language_table
[
get_locale
()][
book
.
languages
[
indx
]
.
lang_code
]
book
=
order_authors
(
book
)
'''sort_authors = book.author_sort.split('&')
authors_ordered = list()
error = False
for auth in sort_authors:
# ToDo: How to handle not found authorname
result = db.session.query(db.Authors).filter(db.Authors.sort == auth.lstrip().strip()).first()
if not result:
error = True
break
authors_ordered.append(result)
if not error:
book.authors = authors_ordered'''
author_names
=
[]
for
authr
in
book
.
authors
:
...
...
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