This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Mar 5, 2018. It is now read-only.

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

paAPI

Notice: This module is depreciated in favour of ingrammicro's osaAPI

A python client for the Parallels Operations Automation (POA) and Parallels Business Automation Enterprise (PBA) APIs.

Installation

Using pip:

$ pip install paAPI

Connecting and Authenticating

POA(host,user=None,password=None,ssl=False,verbose=False,port=8440)
PBA(host,user=None,password=None,ssl=False,verbose=False,port=5224)

Default Connection

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com')
# connect to PBAapi=PBA('pba.hostname.com')

Basic HTTP Authentication

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', user='admin', password='setup')

SSL

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', ssl=True)

Custom Port

frompaAPIimportPOA, PBA# connect to POApem=POA('mn.hostname.com', port=8888)

Parallels Operations Automation (POA) API

All but three of the POA API calls start with 'pem', for this reason it is recommended you name your POA connection object 'pem' so you can call functions exactly how they are documented in the POA API as has been done in the examples in this Readme.

The full POA Public API Reference can be found here:

http://download.pa.parallels.com/poa/5.5/doc/index.htm?fileName=56781.htm

Basic API Call

This example will show the pem.getAccountInfo method being called.

frompaAPIimportPOApem=POA('mn.hostname.com')
d= {
'account_id' : 1002242
}
printpem.getAccountInfo(**d)
# {'status': 0, 'result': {'fax': {'phone_num': '', 'ext_num': '', 'area_code': '', 'country_code': ''}, 'account_type': 'C', 'phone': {'phone_num': '00000000', 'ext_num': '', 'area_code': '04', 'country_code': '61'}, 'brand': {'brand_id': 191, 'domain_name': 'brandingdomain.com', 'name': 'brandname'}, 'email': 'noreply@example.com', 'person': {'first_name': 'John', 'last_name': 'Smith', 'middle_name': '', 'company_name': 'Test Account', 'title': ''}, 'address': {'city': 'Canberra', 'country': 'au', 'street_name': '1 Test Street', 'zipcode': '2621', 'state': 'ACT', 'house_num': '', 'address2': ''}, 'parent_account_id': 1002241}}

API Call with 'array of struct'

The POA API often calls for values and settings to be sent as an 'array of struct'. This example shows how to send these values using the paAPI client.

This example is based on the pem.activateSubscription method with resources types called 'DiskSpace' and 'Bandwidth' and a domain name.

frompaAPIimportPOApem=POA('mn.hostname.com')
# define the resource limits:DiskSpace= {
"resource_id" : 1002486,
"resource_limit" : 1024
}
Bandwidth= {
"resource_id" : 1002487,
"resource_limit" : -1
}
# define the paramaters:DomainName= {
"var_name" : "DomainID",
"var_value" : "example.com.au"
}
# setup the call:d= {
"account_id" : 1002242,
"subscription_name" : "Hosting (example.com.au)",
"subscription_id" : 1006754,
"service_template_id" : 204,
"resource_limits" : [DiskSpace, Bandwidth],
"paramaters" : [DomainName],
}
# execute the call:result=pem.activateSubscription(**d)

Transactions

There are three POA API calls that do not start with pem in the official documentation. When using paAPI you can use these API calls as documented but you will still need to prefix them with your POA connection object (the examples on this page use 'pem' as the connection object name).

frompaAPIimportPOApem=POA('mn.hostname.com')
# being transactionpem.txn.Begin()
# commit transactionpem.txn.Commit()
# rollback transactionpem.txn.Rollback()

Error Handling

The POA API has quite good responces when an error occurs during an API call. The below example shows the responce format for POA API errors:

{
'status' : -1,
'extype_id' : 21,
'module_id' : 'OpenAPI',
'error_message' : 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.',
'properties' : {
'reason': 'Invalid set of arguments. There should be specified EITHER external_info OR person, address, phone, [fax], [locale], email.'
}
}

Parallels Business Automation (PBA) API

The PBA API is quite different from the POA API, and not quite as user friendly. The paAPI client makes using the PBA a little easier by standardizing the returned responces, providing status codes, and decoding any error messages.

The major difference between the POA and PBA api is how values are sent and received. In PBA params are sent and responces are received as a list in a specific order to know what each value represents.

The full PBA Public API Reference can be found here:

http://download.pa.parallels.com/pba/5.5/doc/pdf/SDK_API/pba_5.5_public_api_reference.pdf

Basic API Call

This example will show the AccountDetailsGet_API method being called.

frompaAPIimportPBAapi=PBA('pba.hostname.com')
printapi.Execute('AccountDetailsGet_API', params=['1002242'])
# {'status': 0, 'result': [1002242, 1002241, 'Test Account 5543', '1 Test Street', '', 'Canberra', '', '2621', 'au', '', 'John', 'D', 'Smith', 'noreply@example.com', '61', '04', '000000000', '', '', '', '', '', 1351787114, 2, 0]}

Alternate Server

Most PBA API method calls use the "BM" server. Some methods use alternate servers such as "PEMGATE" or "DOMAINGATE". This example shows how to specify an alternate server:

frompaAPIimportPBAapi=PBA('pba.hostname.com')
api.Execute('DomainExpirationDateGet_API', params=params, server='DOMAINGATE')

Error Handling

paAPI takes the way POA returns errors natively and applies it to the PBA API. The status on each responce will either be 0 for a succesfull call, or -1 if PBA returned an error.

This is an example of what is returned in the case of an error:

{
'status' : -1,
'error_message' : 'Table Account does not contain row with ID 99999999.',
'server' : 'BM',
'host' : 'pba.hostname.com',
'params' : ['99999999'],
'result' : None,
'method' : 'AccountDetailsGet_API'
}

About

A python client for the Parallels Operations Automation and Parallels Business Automation Enterprise APIs.

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages