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
2505f0c1
Commit
2505f0c1
authored
Feb 18, 2019
by
Ozzieisaacs
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'filename/patch-1'
Fixes for Google Drive
parents
237502ae
7fb9bf88
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
40 deletions
+41
-40
gdriveutils.py
cps/gdriveutils.py
+19
-22
helper.py
cps/helper.py
+21
-18
web.py
cps/web.py
+1
-0
No files found.
cps/gdriveutils.py
View file @
2505f0c1
...
...
@@ -31,6 +31,7 @@ from ub import config
import
cli
import
shutil
from
flask
import
Response
,
stream_with_context
import
time
from
sqlalchemy
import
*
from
sqlalchemy.ext.declarative
import
declarative_base
...
...
@@ -187,7 +188,7 @@ def getFolderInFolder(parentId, folderName, drive):
# drive = getDrive(drive)
query
=
""
if
folderName
:
query
=
"title = '
%
s' and "
%
folderName
.
replace
(
"'"
,
"
\
\
'"
)
query
=
"title = '
%
s' and "
%
folderName
.
replace
(
"'"
,
r"
\'"
)
folder
=
query
+
"'
%
s' in parents and mimeType = 'application/vnd.google-apps.folder'"
\
" and trashed = false"
%
parentId
fileList
=
drive
.
ListFile
({
'q'
:
folder
})
.
GetList
()
...
...
@@ -214,7 +215,7 @@ def getEbooksFolderId(drive=None):
def
getFile
(
pathId
,
fileName
,
drive
):
metaDataFile
=
"'
%
s' in parents and trashed = false and title = '
%
s'"
%
(
pathId
,
fileName
.
replace
(
"'"
,
"
\
\
'"
))
metaDataFile
=
"'
%
s' in parents and trashed = false and title = '
%
s'"
%
(
pathId
,
fileName
.
replace
(
"'"
,
r"
\'"
))
fileList
=
drive
.
ListFile
({
'q'
:
metaDataFile
})
.
GetList
()
if
fileList
.
__len__
()
==
0
:
return
None
...
...
@@ -249,7 +250,7 @@ def getFolderId(path, drive):
dbChange
=
True
currentFolderId
=
currentFolder
[
'id'
]
else
:
currentFolderId
=
None
currentFolderId
=
None
break
if
dbChange
:
session
.
commit
()
...
...
@@ -271,16 +272,9 @@ def getFileFromEbooksFolder(path, fileName):
return
None
'''def copyDriveFileRemote(drive, origin_file_id, copy_title):
drive = getDrive(drive)
copied_file = {'title': copy_title}
try:
file_data = drive.auth.service.files().copy(
fileId = origin_file_id, body=copied_file).execute()
return drive.CreateFile({'id': file_data['id']})
except errors.HttpError as error:
print ('An error occurred:
%
s'
%
error)
return None'''
def
moveGdriveFileRemote
(
origin_file_id
,
new_title
):
origin_file_id
[
'title'
]
=
new_title
origin_file_id
.
Upload
()
# Download metadata.db from gdrive
...
...
@@ -307,9 +301,11 @@ def moveGdriveFolderRemote(origin_file, target_folder):
# if previous_parents has no childs anymore, delete originfileparent
# is not working correctly, because of slow update on gdrive -> could cause trouble in gdrive.db
# (nonexisting folder has id)
# children = drive.auth.service.children().list(folderId=previous_parents).execute()
# if not len(children['items']):
# drive.auth.service.files().delete(fileId=previous_parents).execute()
time
.
sleep
(
20
)
children
=
drive
.
auth
.
service
.
children
()
.
list
(
folderId
=
previous_parents
)
.
execute
()
if
not
len
(
children
[
'items'
]):
drive
.
auth
.
service
.
files
()
.
delete
(
fileId
=
previous_parents
)
.
execute
()
time
.
sleep
(
20
)
...
...
@@ -323,7 +319,7 @@ def copyToDrive(drive, uploadFile, createRoot, replaceFiles,
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
()
(
os
.
path
.
basename
(
uploadFile
)
.
replace
(
"'"
,
r"\'"
)
,
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'
]}],
...
...
@@ -338,11 +334,11 @@ def copyToDrive(drive, uploadFile, createRoot, replaceFiles,
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
()
(
os
.
path
.
basename
(
uploadFile
)
.
replace
(
"'"
,
r"\'"
)
,
parent
[
'id'
])})
.
GetList
()
if
len
(
existingFiles
)
>
0
:
driveFile
=
existingFiles
[
0
]
else
:
driveFile
=
drive
.
CreateFile
({
'title'
:
os
.
path
.
basename
(
uploadFile
),
driveFile
=
drive
.
CreateFile
({
'title'
:
os
.
path
.
basename
(
uploadFile
)
.
replace
(
"'"
,
r"\'"
)
,
'parents'
:
[{
"kind"
:
"drive#fileLink"
,
'id'
:
parent
[
'id'
]}],
})
driveFile
.
SetContentFile
(
os
.
path
.
join
(
prevDir
,
uploadFile
))
driveFile
.
Upload
()
...
...
@@ -355,7 +351,7 @@ def uploadFileToEbooksFolder(destFile, f):
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
()
(
x
.
replace
(
"'"
,
r"\'"
)
,
parent
[
'id'
])})
.
GetList
()
if
len
(
existingFiles
)
>
0
:
driveFile
=
existingFiles
[
0
]
else
:
...
...
@@ -364,7 +360,7 @@ def uploadFileToEbooksFolder(destFile, f):
driveFile
.
Upload
()
else
:
existingFolder
=
drive
.
ListFile
({
'q'
:
"title = '
%
s' and '
%
s' in parents and trashed = false"
%
(
x
,
parent
[
'id'
])})
.
GetList
()
(
x
.
replace
(
"'"
,
r"\'"
)
,
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"
})
...
...
@@ -475,9 +471,10 @@ def updateGdriveCalibreFromLocal():
# update gdrive.db on edit of books title
def
updateDatabaseOnEdit
(
ID
,
newPath
):
sqlCheckPath
=
newPath
if
newPath
[
-
1
]
==
'/'
else
newPath
+
u'/'
storedPathName
=
session
.
query
(
GdriveId
)
.
filter
(
GdriveId
.
gdrive_id
==
ID
)
.
first
()
if
storedPathName
:
storedPathName
.
path
=
new
Path
storedPathName
.
path
=
sqlCheck
Path
session
.
commit
()
...
...
cps/helper.py
View file @
2505f0c1
...
...
@@ -324,11 +324,11 @@ def update_dir_structure_file(book_id, calibrepath, first_author):
# Rename all files from old names to new names
if
authordir
!=
new_authordir
or
titledir
!=
new_titledir
:
try
:
new_name
=
get_valid_filename
(
localbook
.
title
)
+
' - '
+
get_valid_filename
(
new_authordir
)
path_name
=
os
.
path
.
join
(
calibrepath
,
new_authordir
,
os
.
path
.
basename
(
path
))
for
file_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
,
file_format
.
name
+
'.'
+
file_format
.
format
.
lower
()),
os
.
path
.
join
(
path_name
,
new_name
+
'.'
+
file_format
.
format
.
lower
()))
os
.
path
.
join
(
path_name
,
new_name
+
'.'
+
file_format
.
format
.
lower
()))
file_format
.
name
=
new_name
except
OSError
as
ex
:
web
.
app
.
logger
.
error
(
"Rename file in path "
+
path
+
" to "
+
new_name
+
": "
+
str
(
ex
))
...
...
@@ -341,6 +341,7 @@ def update_dir_structure_file(book_id, calibrepath, first_author):
def
update_dir_structure_gdrive
(
book_id
,
first_author
):
error
=
False
book
=
db
.
session
.
query
(
db
.
Books
)
.
filter
(
db
.
Books
.
id
==
book_id
)
.
first
()
path
=
book
.
path
authordir
=
book
.
path
.
split
(
'/'
)[
0
]
if
first_author
:
...
...
@@ -348,7 +349,7 @@ def update_dir_structure_gdrive(book_id, first_author):
else
:
new_authordir
=
get_valid_filename
(
book
.
authors
[
0
]
.
name
)
titledir
=
book
.
path
.
split
(
'/'
)[
1
]
new_titledir
=
get_valid_filename
(
book
.
title
)
+
" ("
+
str
(
book_id
)
+
")"
new_titledir
=
get_valid_filename
(
book
.
title
)
+
u" ("
+
str
(
book_id
)
+
u
")"
if
titledir
!=
new_titledir
:
gFile
=
gd
.
getFileFromEbooksFolder
(
os
.
path
.
dirname
(
book
.
path
),
titledir
)
...
...
@@ -356,7 +357,9 @@ def update_dir_structure_gdrive(book_id, first_author):
gFile
[
'title'
]
=
new_titledir
gFile
.
Upload
()
book
.
path
=
book
.
path
.
split
(
'/'
)[
0
]
+
'/'
+
new_titledir
time
.
sleep
(
10
)
book
.
path
=
book
.
path
.
split
(
'/'
)[
0
]
+
u'/'
+
new_titledir
path
=
book
.
path
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
...
...
@@ -364,24 +367,24 @@ def update_dir_structure_gdrive(book_id, first_author):
if
authordir
!=
new_authordir
:
gFile
=
gd
.
getFileFromEbooksFolder
(
os
.
path
.
dirname
(
book
.
path
),
titledir
)
if
gFile
:
gd
.
moveGdriveFolderRemote
(
gFile
,
new_authordir
)
book
.
path
=
new_authordir
+
'/'
+
book
.
path
.
split
(
'/'
)[
1
]
gd
.
moveGdriveFolderRemote
(
gFile
,
new_authordir
)
time
.
sleep
(
10
)
book
.
path
=
new_authordir
+
u'/'
+
book
.
path
.
split
(
'/'
)[
1
]
path
=
book
.
path
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'''
new_name
=
get_valid_filename
(
book
.
title
)
+
u' - '
+
get_valid_filename
(
new_authordir
)
for
file_format
in
book
.
data
:
gFile
=
gd
.
getFileFromEbooksFolder
(
path
,
file_format
.
name
+
u'.'
+
file_format
.
format
.
lower
())
if
not
gFile
:
error
=
_
(
u'File
%(file)
s not found on Google Drive'
,
file
=
file_format
.
name
)
# file not found
break
gd
.
moveGdriveFileRemote
(
gFile
,
new_name
+
u'.'
+
file_format
.
format
.
lower
())
file_format
.
name
=
new_name
return
error
...
...
cps/web.py
View file @
2505f0c1
...
...
@@ -3845,6 +3845,7 @@ def upload():
# upload book to gdrive if nesseccary and add "(bookid)" to folder name
if
config
.
config_use_google_drive
:
gdriveutils
.
updateGdriveCalibreFromLocal
()
time
.
sleep
(
10
)
error
=
helper
.
update_dir_stucture
(
book
.
id
,
config
.
config_calibre_dir
)
db
.
session
.
commit
()
if
config
.
config_use_google_drive
:
...
...
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