Skip to content

Commit

Permalink
able to upload and get back a file. tested.
Browse files Browse the repository at this point in the history
  • Loading branch information
takotab committed Mar 29, 2019
1 parent 2a2be51 commit 098103d
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 20 deletions.
3 changes: 2 additions & 1 deletion cloudfile/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from .save import save
from .restore import restore
from .restore import restore, download
from .add_file import add_file
from .google_drive import upload_file, get_service
3 changes: 2 additions & 1 deletion cloudfile/add_file.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import os

from .cloudfile import CloudFile
from .google_drive import upload_file


def add_file(file: str, cloudf: CloudFile = None, hard=False):
if cloudf is None:
cloudf = CloudFile()
assert os.path.isfile(file)

return cloudf.upload_file(file)
10 changes: 8 additions & 2 deletions cloudfile/cloudfile.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
import json

from .google_drive import get_service
from .google_drive import get_service, upload_file


class CloudFile(object):
Expand All @@ -17,7 +17,7 @@ def __init__(self, clouldfile="cloudfile.json", unit_test_link_dct=None):
def get_service(self):
if self.service is None:
self.service = get_service()
return self.service()
return self.service

def save_json(self):
json.dump(self.dct, open(self._cloudfile, "w"))
Expand All @@ -36,3 +36,9 @@ def __getitem__(self, item):
def __setitem__(self, key, item):
self.dct[key] = item

def upload_file(self, file):
link = upload_file(self.get_service(), file)
self.dct[file] = link
self.save_json()
return link

46 changes: 38 additions & 8 deletions cloudfile/google_drive.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import pickle
import os.path
from googleapiclient.http import MediaFileUpload
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ["https://www.googleapis.com/auth/drive.appdata"]
SCOPES = ["https://www.googleapis.com/auth/drive"]


def get_service():
Expand Down Expand Up @@ -37,15 +38,44 @@ def get_service():
return build("drive", "v3", credentials=creds) # service


def upload_file(drive_service):
file_metadata = {"name": "photo.jpg"}
media = MediaFileUpload("files/photo.jpg", mimetype="image/jpeg")
file = (
def upload_file(drive_service, file):
# TODO add zip functionality
file_metadata = {"name": "cloudfile_" + file.split(os.sep)[-1]} # TODO parent
media = MediaFileUpload(file, mimetype="application/plain")
file = drive_service.files().create(body=file_metadata, media_body=media).execute()
file_id = file.get("id")
add_link_permision(drive_service, file_id)
url = (
drive_service.files()
.create(body=file_metadata, media_body=media, fields="id")
.execute()
.get(fileId=file_id, fields="webContentLink")
.execute()["webContentLink"]
)
print(f"File ID: {file_id}, link:{url}")

return url


def add_link_permision(drive_service, file_id):
def callback(request_id, response, exception):
if exception:
# Handle error
print(exception)
else:
print(f"Permission Id: {response.get('id')}")

batch = drive_service.new_batch_http_request(callback=callback)
user_permission = {
"type": "anyone",
"role": "reader",
"Value": "",
"WithLink": True,
}
batch.add(
drive_service.permissions().create(
fileId=file_id, body=user_permission, fields="id"
)
)
print("File ID: %s".format(file.get("id")))
batch.execute()


"""
Expand Down
8 changes: 0 additions & 8 deletions tests/add_file.py

This file was deleted.

17 changes: 17 additions & 0 deletions tests/test_add_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import os
import cloudfile
from tests.utils import del_folder


def test_add_file():
if not os.path.isdir("foo"):
os.mkdir("foo")
filename = "foo/bar_new.txt"
with open(filename, "w") as f:
f.write("hello world")
url = cloudfile.add_file(filename)
os.remove(filename)
cloudfile.download(filename, url)
assert os.path.isfile(filename)
del_folder("foo")

0 comments on commit 098103d

Please sign in to comment.