john pfeiffer
  • Home
  • Categories
  • Tags
  • Archives

nirvanix connection

# 2013-02-14 johnpfeiffer
import requests     # http://docs.python-requests.org/en/latest/api/


"""
 http://developer.nirvanix.com/sitefiles/1000/API.html#_TocRESTProtocol
Example Nirvanix API request format http://services.nirvanix.com/ws/{NameSpace}/MethodName.ashx?name=value&name2=value2
DOWNLOAD_TOKEN_EXPIRATION_IN_SECONDS = 1800;
"""

AUTHENTICATE_URL = '/ws/Authentication/Login.ashx'
LIST_URL = '/ws/IMFS/ListFolder.ashx?'

UPLOAD = "/Upload.ashx"
GET_UPLOAD_TOKEN = "/ws/IMFS/GetStorageNodeExtended.ashx"
GET_DOWNLOAD_TOKEN = "/ws/IMFS/GetOptimalUrls.ashx"
GET_METADATA = "/ws/Metadata/GetMetadata.ashx"
DELETE = "/ws/IMFS/DeleteFiles.ashx"


class NirvanixConnection:
    server = ''
    session_token = ''
    response = None
    response_dictionary = dict()
    username = ''
    password = ''
    appname = ''
    appkey = ''


    def __init__( self , server , username , password , appname , appkey ):
        self.server = server
        self.username = username
        self.password = password
        self.appname = appname
        self.appkey = appkey


    def parse_response( self ):
        status_code = self.response.status_code
        print 'RESPONSE-HEADERS: %s \n' % ( self.response.headers )
        if status_code == 200:
            self.response_dictionary = self.response.json()


    # https://services.smartcloudobjectstorage.com/ws/Authentication/Login.ashx?appKey=7ec360a4-be3c-8495a2932c6f&username=My-Lab&password=MyPassword&output=json
    def authenticate( self):
        payload = {'appKey' : self.appkey , 'username' : self.username  , 'password' : self.password , 'output' : 'json'}
        print 'SENDING PARAMETERS: %s \n' % payload
        self.response = requests.post( self.server + AUTHENTICATE_URL  , params = payload , verify = True )
        if not self.response:
            print 'ERROR: no response \n'
        else:
            self.parse_response()
            if not self.response_dictionary:
                print 'ERROR: no response \n'
            else:
                self.session_token = self.response_dictionary[ 'SessionToken' ]
                print 'session token = %s \n' % ( self.session_token )
                response = ''
                response_dictionary = None


# /ws/IMFS/ListFolder.ashx?sessionToken=YOURSESSIONTOKEN&folderPath=DirTest/F8&pageNumber=1&pageSize=5&output=json
    def list_folder( self , folder_path , page_number , page_size ):
        # http://developer.nirvanix.com/sitefiles/1000/API.html#_TocListFolder
        # sortCode = Name, CreatedDate, SizeBytes, FileType
        # sortDescending = true
        # showMetadata = true
        # showTags = true

        payload = {'sessionToken' : self.session_token , 'folderPath' : folder_path , 'pageNumber' : page_number , 'pageSize' : page_size , 'output' : 'json'}

        self.response = requests.post( self.server + LIST_URL  , params = payload , verify = True )
        if not self.response:
            print 'ERROR: no response \n'
        else:
            self.parse_response()
            if not self.response_dictionary:
                print 'ERROR: no response \n'
            else:
                print 'session token = %s \n' % ( self.response_dictionary )
#                self.session_token = self.response_dictionary[ 'SessionToken' ]
#                print 'session token = %s \n' % ( self.session_token )
                response = ''
                response_dictionary = None




# MAIN ###############

def main():
    print "start..."
    server = 'https://services.smartcloudobjectstorage.com:443'     # 'https://services.nirvanix.com:443'
    username =  'IBM-Lab'
    password = 'myPassword'
    appname = 'IBM'
    appkey = 'be3c-41f0-8d87-8495a2932c6f'


    nirvanix_connection = NirvanixConnection( server , username , password , appname , appkey )
    nirvanix_connection.authenticate()

    folder_path = '/'
    page_number = '1'   # must be between 0 and 4000000
    page_size = '500'

    nirvanix_connection.list_folder( folder_path , page_number , page_size )

if __name__ == "__main__":
    main()



"""
     Nirvanix REST parameters for GetStorageNodeExtended (returns one token per upload, the token returned will expire after 72 hours)
     https ://{apiHostName}/ws/IMFS/GetStorageNodeExtended.ashx?sessionToken={sessionToken}&destFolderPath={destFolderPath}&sizeBytes={ sizeBytes }&fileOverwrite=true&output=json
     https://{uploadHost}/Upload.ashx?uploadToken={uploadToken}&destFolderPath={destFolderPath}&metadata={metadata} REQUIRED: uploadToken

     REQUIRED: destFolderPath - The destination path of the files being uploaded.
     REQUIRED: metadata - The metadata to be associated with the uploaded file.
"""

  • « Centos6 x64 tomcat6 ssl libapr native source iptables authbind
  • Lvm rename volgroup vgrename systemrescuecd lvm2 logical volume resize »

Published

Feb 15, 2013

Category

python

~295 words

Tags

  • connection 4
  • nirvanix 2
  • python 180