Skip to content
Merged

Dev #11

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions dev_requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
automation_file_dev
google-api-python-client
google-auth-httplib2
google-auth-oauthlib
APScheduler
12 changes: 12 additions & 0 deletions file_automation/remote/google_drive/delete/delete_manager.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from googleapiclient.errors import HttpError

from file_automation.remote.google_drive.driver_instance import driver_instance


def delete_file(file_id: str):
try:
file = driver_instance.service.files().delete(fileId=file_id).execute()
return file
except HttpError as error:
print(f"An error occurred: {error}")
return None
2 changes: 1 addition & 1 deletion file_automation/remote/google_drive/dir/folder_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ def add_folder(folder_name: str):
).execute()
return file.get("id")
except HttpError as error:
print(F'An error occurred: {error}')
print(f"An error occurred: {error}")
return None
26 changes: 23 additions & 3 deletions file_automation/remote/google_drive/download/download_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,30 @@ def download_file(file_id: str, file_name: str):
done = False
while done is False:
status, done = downloader.next_chunk()
print(F'Download {int(status.progress() * 100)}.')
print(f"Download {file_name} {int(status.progress() * 100)}%.")
except HttpError as error:
print(F'An error occurred: {error}')
file = None
print(f"An error occurred: {error}")
return None
with open(file_name, "wb") as output_file:
output_file.write(file.getbuffer())
return file


def download_file_from_folder(folder_name: str):
try:
files = dict()
response = driver_instance.service.files().list(
q=f"mimeType = 'application/vnd.google-apps.folder' and name = '{folder_name}'"
).execute()
folder = response.get("files", [])[0]
folder_id = folder.get("id")
response = driver_instance.service.files().list(
q=f"'{folder_id}' in parents"
).execute()
for file in response.get("files", []):
download_file(file.get("id"), file.get("name"))
files.update({file.get("name"): file.get("id")})
return files
except HttpError as error:
print(f"An error occurred: {error}")
return None
29 changes: 23 additions & 6 deletions file_automation/remote/google_drive/search/search_drive.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@


def search_all_file():
item = dict()
response = driver_instance.service.files().list().execute()
for file in response.get("files", []):
item.update({file.get("name"): file.get("id")})
return item
try:
item = dict()
response = driver_instance.service.files().list().execute()
for file in response.get("files", []):
item.update({file.get("name"): file.get("id")})
return item
except HttpError as error:
print(f"An error occurred: {error}")
return None


def search_file_mimetype(mime_type: str):
Expand All @@ -28,5 +32,18 @@ def search_file_mimetype(mime_type: str):
break
return files
except HttpError as error:
print(F'An error occurred: {error}')
print(f"An error occurred: {error}")
return None


def search_field(field_pattern: str):
try:
files = dict()
response = driver_instance.service.files().list(fields=field_pattern).execute()
for file in response.get("files", []):
files.update({file.get("name"): file.get("id")})
return files
except HttpError as error:
print(f"An error occurred: {error}")
return None

56 changes: 56 additions & 0 deletions file_automation/remote/google_drive/share/share_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from googleapiclient.errors import HttpError

from file_automation.remote.google_drive.driver_instance import driver_instance


def share_file_to_user(
file_id: str, user: str, user_role: str = "writer"):
try:
service = driver_instance.service
user_permission = {
"type": "user",
"role": user_role,
"emailAddress": user
}
return service.permissions().create(
fileId=file_id,
body=user_permission,
fields='id', ).execute()
except HttpError as error:
print(f"An error occurred: {error}")
return None


def share_file_to_anyone(file_id: str, share_role: str = "reader"):
try:
service = driver_instance.service
user_permission = {
"type": "anyone",
"value": "anyone",
"role": share_role
}
return service.permissions().create(
fileId=file_id,
body=user_permission,
fields='id', ).execute()
except HttpError as error:
print(f"An error occurred: {error}")
return None


def share_file_to_domain(
file_id: str, domain: str, domain_role: str = "reader"):
try:
service = driver_instance.service
domain_permission = {
"type": "domain",
"role": domain_role,
"domain": domain
}
return service.permissions().create(
fileId=file_id,
body=domain_permission,
fields='id', ).execute()
except HttpError as error:
print(f"An error occurred: {error}")
return None
29 changes: 27 additions & 2 deletions file_automation/remote/google_drive/upload/upload_to_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

def upload_to_drive(file_name: str, file_path: str):
try:
if Path(file_path).is_file():
if Path(file_path).exists():
file_metadata = {
"name": file_name,
"mimeType": "*/*"
Expand All @@ -26,5 +26,30 @@ def upload_to_drive(file_name: str, file_path: str):
return file_id
return False
except HttpError as error:
print(F'An error occurred: {error}')
print(f"An error occurred: {error}")
return None


def upload_to_dir(folder_id: str, file_name: str, file_path: str):
try:
if Path(file_path).exists():
file_metadata = {
"name": file_name,
"mimeType": "*/*",
"parents": [f"{folder_id}"]
}
media = MediaFileUpload(
file_path,
mimetype="*/*",
resumable=True
)
file_id = driver_instance.service.files().create(
body=file_metadata,
media_body=media,
fields="id"
).execute()
return file_id
return False
except HttpError as error:
print(f"An error occurred: {error}")
return None
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
automation_file
google-api-python-client
google-auth-httplib2
google-auth-oauthlib
APScheduler
6 changes: 4 additions & 2 deletions tests/unit_test/remote/google_drive/quick_test.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from file_automation.remote.google_drive.dir.folder_manager import add_folder
from file_automation.remote.google_drive.download.download_file import download_file_from_folder
from file_automation.remote.google_drive.search.search_drive import search_all_file

print(add_folder("new_folder"))
print(search_all_file())
print(download_file_from_folder("new_folder"))