Skip to content

Commit

Permalink
Merge pull request #1 from sdaoudi/feature-add-delete-service
Browse files Browse the repository at this point in the history
Add delete service
  • Loading branch information
sdaoudi authored Jul 30, 2023
2 parents 4bcdd52 + 6d8b8bf commit cda3f07
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 2 deletions.
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ If you don't have a service account yet, [click here](./SERVICE_ACCOUNT.md) to a

## Usage

### Upload file

New service `gdrive_uploader.upload`:

```yaml
Expand All @@ -55,3 +57,18 @@ script:
target_dir_name: "my_videos"
upload_file_path: /config/home-assistant.log
```

### Delete file or directory

New service `gdrive_uploader.delete`:

```yaml
script:
upload_video:
alias: Upload video
sequence:
- service: gdrive_uploader.upload
data:
parent_id: 20YTAZESppoiZ4hvuI543diltpez53tSt # Google Drive folder ID
dir_name: my_dir_to_remove # The directory name in Google Drive
```
13 changes: 11 additions & 2 deletions custom_components/gdrive_uploader/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import voluptuous as vol

from .api import GDriveApi
from .const import (ATTR_PARENT_ID, ATTR_TARGET_DIR_NAME, ATTR_UPLOAD_FILE_PATH,
from .const import (ATTR_DIR_NAME, ATTR_PARENT_ID, ATTR_TARGET_DIR_NAME, ATTR_UPLOAD_FILE_PATH,
CONF_SECRET_FILE_PATH, DOMAIN)

_LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -33,8 +33,17 @@ def handle_upload(call):
except (FileExistsError, FileNotFoundError) as error:
_LOGGER.error(error)

hass.states.set("gdrive_uploader.upload", f"{upload_file_path}")
def handle_delete(call):
secret_file_path = config.get(DOMAIN, {}).get(CONF_SECRET_FILE_PATH)
parent_id = call.data.get(ATTR_PARENT_ID)
dir_name = call.data.get(ATTR_DIR_NAME)

gdrive = GDriveApi(secret_file_path)
gdrive.delete_directory_by_name(parent_id, dir_name)

hass.services.register(DOMAIN, "upload", handle_upload)
hass.services.register(DOMAIN, "delete", handle_delete)

return True


22 changes: 22 additions & 0 deletions custom_components/gdrive_uploader/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,13 @@ def upload_file(self, source_file_path, parent_dir_id, directory_name):
if directory_name != "":
try:
target_directory = self.find_resource_by_title(parent_dir_id, str(directory_name))
_LOGGER.debug(f"target directory already exists with id : {target_directory['id']}")
except FileNotFoundError:
target_directory = self.create_folder(parent_dir_id, directory_name)
_LOGGER.debug(f"The target directory has just been created with id : {target_directory['id']}")
else:
target_directory = {"id": parent_dir_id}
_LOGGER.debug("The parent directory is used as a target directory")

filename = os.path.basename(source_file_path)
if (self.resource_exists(target_directory["id"], filename)):
Expand All @@ -81,6 +84,25 @@ def upload_file(self, source_file_path, parent_dir_id, directory_name):
]
}
)

file.SetContentFile(source_file_path)
file.Upload()
_LOGGER.debug(f"A new file is create with id: {file['id']}")
return file

def delete_directory_by_name(self, parent_dir_id, directory_name):
try:
resource = self.find_resource_by_title(parent_dir_id, directory_name)
self._delete_resource(resource["id"])
resource.Delete()
except FileNotFoundError:
_LOGGER.debug(f"The {directory_name} directory is not deleted because it does not exist.")

def _delete_resource(self, resource_id):
file_list = self.drive.ListFile({'q': f"'{resource_id}' in parents and trashed=false"}).GetList()
for file in file_list:
if file['mimeType'] == 'application/vnd.google-apps.folder':
self._delete_resource(file['id'])
file.Delete()


1 change: 1 addition & 0 deletions custom_components/gdrive_uploader/const.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
ATTR_PARENT_ID = "parent_id"
ATTR_DIR_NAME = "dir_name"
ATTR_TARGET_DIR_NAME = "target_dir_name"
ATTR_UPLOAD_FILE_PATH = "upload_file_path"

Expand Down
11 changes: 11 additions & 0 deletions custom_components/gdrive_uploader/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,14 @@ upload:
required: true
advanced: false
example: "/config/home-assistant.log"
delete:
fields:
parent_id:
required: true
advanced: false
example: "20BfZA1fgxxxZ4hvppPa3diltpez53aZe"
dir_name:
required: false
advanced: false
example: "my_dir"
default: ""
15 changes: 15 additions & 0 deletions custom_components/gdrive_uploader/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,21 @@
"description": "The path to retrieve the file to be uploaded."
}
}
},
"delete": {
"name": "Delete directory or file",
"description": "Delete directory or file from Google Drive",
"fields": {
"parent_id": {
"name": "Parent ID",
"description": "The Google Drive ID of the parent folder that contains the resource to remove"
},
"dir_name": {
"name": "Directory name (or filename)",
"description": "The name of the resource to delete"
}
}
}

}
}

0 comments on commit cda3f07

Please sign in to comment.