Skip to content

Instantly share code, notes, and snippets.

@phette23
Last active January 14, 2021 23:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phette23/5113980ffa35a9153283f5be7a350985 to your computer and use it in GitHub Desktop.
Save phette23/5113980ffa35a9153283f5be7a350985 to your computer and use it in GitHub Desktop.
use Panopto API to delete all empty subfolders of given folder
#!python3
import sys
import argparse
import requests
import urllib3
from panopto_folders import PanoptoFolders
from os.path import dirname, join, abspath
sys.path.insert(0, abspath(join(dirname(__file__), '..', 'common')))
from panopto_oauth2 import PanoptoOAuth2
def parse_argument():
parser = argparse.ArgumentParser(description='Sample of Folders API')
parser.add_argument('--server', dest='server', required=True, help='Server name as FQDN')
parser.add_argument('--client-id', dest='client_id', required=True, help='Client ID of OAuth2 client')
parser.add_argument('--client-secret', dest='client_secret', required=True, help='Client Secret of OAuth2 client')
parser.add_argument('--skip-verify', dest='skip_verify', action='store_true', required=False, help='Skip SSL certificate verification. (Never apply to the production code)')
parser.add_argument('--parent', dest='parent', required=True, help='UUID of the parent folder')
return parser.parse_args()
def main():
args = parse_argument()
if args.skip_verify:
# This line is needed to suppress annoying warning message.
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# Use requests module's Session object in this example.
# ref. https://2.python-requests.org/en/master/user/advanced/#session-objects
requests_session = requests.Session()
requests_session.verify = not args.skip_verify
# Load OAuth2 logic
oauth2 = PanoptoOAuth2(args.server, args.client_id, args.client_secret, not args.skip_verify)
# Load Folders API logic
folders = PanoptoFolders(args.server, not args.skip_verify, oauth2)
get_and_display_folder(folders, args.parent)
# Archives subfolders
children = folders.get_children(args.parent)
for child in children:
delete_folder(folders, child)
def get_and_display_folder(folders, folder_id):
'''
Returning folder object that is returned by API.
None if it is top level folder.
'''
folder = folders.get_folder(folder_id)
print('\nFolder:')
print(' Name: {0}'. format(folder['Name']))
print(' Id: {0}'. format(folder['Id']))
if folder['ParentFolder'] is None:
print(' Parent Folder: Top level folder')
else:
print(' Parent Folder: {0}'. format(folder['ParentFolder']['Name']))
print(' Folder URL: {0}'. format(folder['Urls']['FolderUrl']))
print(' Embed URL: {0}'. format(folder['Urls']['EmbedUrl']))
print(' Share settings URL: {0}'. format(folder['Urls']['ShareSettingsUrl']))
def delete_folder(folders, folder):
sessions = folders.get_sessions(folder['Id'])
if len(sessions) > 0:
print('There are {0} sessions in folder "{1}", skipping deletion.'.format(len(sessions), folder['Name']))
return False
print('Deleting folder {0}'.format(folder['Name']))
return folders.delete_folder(folder['Id'])
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment