import sys
import os
from lib import o2exceptions
if getattr(sys, 'frozen', None): # keyword 'frozen' is for setting basedir while in onefile mode in pyinstaller
basedir = sys._MEIPASS
else:
basedir = os.path.dirname( __file__ )
sys.path.append( os.path.join( basedir , 'gen_py' ) )
from O2Service import O2Service
from O2Service.ttypes import *
from O2Service.constants import *
from errors.ttypes import *
from cloudfs.ttypes import *
from auth.ttypes import *
from signup.ttypes import *
from gridironthrift.transport import THttpClient
from gridironthrift.transport import TTransport
from gridironthrift.protocol import TBinaryProtocol
class OxygenAdapter():
api_key = ''
api_path = ''
app_name = ''
oxygen_api_client = 0
session_id = 0
def __init__(self, api_key, app_name, api_path):
try:
self.api_key = api_key
self.app_name = app_name
self.api_path = api_path
oxygen_api_connector = THttpClient.THttpClient(self.api_path)
oxygen_api_connector = TTransport.TBufferedTransport(oxygen_api_connector)
oxygen_api_protocol = TBinaryProtocol.TBinaryProtocol(oxygen_api_connector)
self.oxygen_api_client = O2Service.Client(oxygen_api_protocol)
# self.oxygen_api_client = Client(oxygen_api_protocol)
except Exception as e:
o2exceptions.handle_exception(e)
except:
raise O2UnexpectedException()
def get_api_service_info(self):
try:
return self.oxygen_api_client.getInfo()
except:
raise
def request_login_url(self):
try:
return self.oxygen_api_client.requestLogin(self.api_key)
except:
raise
def login_regular_user(self, token_id, oxygen_id, password):
try:
return self.oxygen_api_client.loginInternalUser(self.api_key, token_id, '', self.app_name, oxygen_id, password)
except:
raise
def validate_login(self, token_id):
try:
retval = self.oxygen_api_client.validateLogin(self.api_key, token_id)
self.session_id = retval.id
return retval
except:
raise
def validate_login_and_device(self, token_id, device_id):
try:
retval = self.oxygen_api_client.validateLoginAndDevice(self.api_key, token_id, device_id)
self.session_id = retval.id
return retval
except:
raise
def logout(self):
try:
return self.oxygen_api_client.logout( self.session_id )
except:
raise
def get_current_user_info(self):
try:
return self.oxygen_api_client.getUserInfoBySessionId( self.session_id )
except:
raise
def findAllSpacesInAccount(self, createdSince):
try:
return self.oxygen_api_client.findAllSpacesInAccount( self.session_id , createdSince )
except:
raise
def findAllUserVolumesInAccount(self, createdSince):
try:
return self.oxygen_api_client.findAllUserVolumesInAccount( self.session_id , createdSince )
except:
raise
def retrieve_spaces(self):
try:
return self.oxygen_api_client.findSpaces(self.session_id)
except:
raise
def getChildObjects(self, parent):
try:
return self.oxygen_api_client.getChildObjects(self.session_id, parent, 0)
except:
raise
def create_download_object( self, api_object ):
try:
return self.oxygen_api_client.createDownloadObject( self.session_id , api_object )
except:
raise
# returns ApiFile object?
def create_folder( self , o2_space_id , o2_space_repository_node_id , parent_folder_id , name ):
try:
return self.oxygen_api_client.createFolder(self.session_id, o2_space_id, parent_folder_id, name, o2_space_repository_node_id )
except:
raise
# returns ApiFile object?
def create_folder_object( self , parent_object , name ):
try:
return self.oxygen_api_client.createFolderObject( self.session_id , parent_object , name ) # createFolderObject(self, apiSessionId, parent, name):
except:
raise
def delete_object( self , api_object ):
try:
return self.oxygen_api_client.deleteObject( self.session_id , api_object )
except:
raise
def delete_space( self , space_id , space_repository_node_id ):
try:
self.oxygen_api_client.deleteSpace( self.session_id , space_id, space_repository_node_id )
except:
raise
def create_space( self , name , description , owner_id , capacity , listed , writable_by_default , storage_name = '' ):
try:
return self.oxygen_api_client.createSpace( self.session_id , name , description , owner_id , storage_name , capacity , listed , writable_by_default )
except:
raise
"""
def create_upload_object( self, local_file_path, space_id , space_repository_node_id , parent_folder_id = '' ): # optional if uploading directly to a Space
try:
file_name = os.path.basename( local_file_path )
file_size = os.stat( local_file_path ).st_size
return self.oxygen_api_client.createUpload( self.session_id, space_id, parent_folder_id, file_name , file_size, space_repository_node_id )
except:
raise
"""
def create_upload_object( self, space_id , space_repository_node_id , file_name , file_size , parent_folder_id = '' ): # optional if uploading directly to a Space
try:
return self.oxygen_api_client.createUpload( self.session_id, space_id, parent_folder_id, file_name , file_size, space_repository_node_id )
except:
raise
def confirm_upload( self, space_id, parent_folder_id, upload_id, name, hash_value, repository_node_service_id , file_modified_timestamp ):
try:
return self.oxygen_api_client.confirmUpload(self.session_id, space_id, parent_folder_id, upload_id, name, hash_value, repository_node_service_id , file_modified_timestamp )
except:
raise
# BEGIN UNVERIFIED METHODS #########################
def is_ldap_user(self, oxygen_id):
try:
return self.oxygen_api_client.isExternalUser(self.api_key, oxygen_id)
except:
raise
def retrieve_space_contents(self, o2_space, parent_folder_id):
try:
return self.oxygen_api_client.findChildFiles(self.session_id, o2_space.repoNodeServiceId, o2_space.id, parent_folder_id, 0)
except:
raise
def __hashfile( filepath , algorithm_instance , BUFFER_SIZE):
with open( filepath, 'rb' ) as file:
while True:
buffer = file.read( BUFFER_SIZE )
if not buffer:
break
algorithm_instance.update( buffer )
return algorithm_instance.hexdigest()
def __create_upload(self, space_id, parent_folder_id, name, size_in_bytes, repository_node_service_id):
try:
return self.oxygen_api_client.createUpload(self.session_id, space_id, parent_folder_id, name, size_in_bytes, repository_node_service_id)
except:
raise
def __download_file(self, space_id, file_id, repository_node_service_id):
try:
return self.oxygen_api_client.createDownload(self.session_id, space_id, file_id, repository_node_service_id)
except:
raise
def retrieve_file(self, o2_file):
try:
return self.oxygen_api_client.findFileById(self.session_id, o2_file.spaceId, o2_file.id, o2_file.repositoryNodeServiceId)
except:
raise
def load_object_by_id(self, space_id, object_id, repository_node_service_id):
try:
return self.oxygen_api_client.findObjectById(self.session_id, space_id, object_id, repository_node_service_id)
except:
raise
def delete_file(self, o2_file):
try:
self.oxygen_api_client.deleteFile(self.session_id, o2_file)
except:
raise
def move_file(self, o2_file, new_parent_folder_id, new_name):
try:
return self.oxygen_api_client.moveFile(self.session_id, o2_file, new_parent_folder_id, new_name)
except:
raise
def move_object(self, source, new_parent_folder_id, new_name):
try:
return self.oxygen_api_client.moveObject(self.session_id, source, new_parent_folder_id, new_name)
except:
raise
def copy_file(self, o2_file, new_parent_folder_id, new_name):
try:
return self.oxygen_api_client.copyFile(self.session_id, o2_file, new_parent_folder_id, new_name)
except:
raise
def create_web_link(self, o2_file, expiration_in_minutes, password):
try:
return self.oxygen_api_client.createWeblinkUrl(self.session_id, o2_file, expiration_in_minutes, password)
except:
raise
def create_download( self, space_id, file_id, repository_node_service_id ):
try:
return self.oxygen_api_client.createDownload( self.session_id, space_id, file_id, repository_node_service_id )
except:
raise