{"id":18864838,"url":"https://github.com/rshipp/python-appassure","last_synced_at":"2025-08-29T05:14:40.989Z","repository":{"id":10601967,"uuid":"12817466","full_name":"rshipp/python-appassure","owner":"rshipp","description":"Python wrapper for the AppAssure 5 HTTP API.","archived":false,"fork":false,"pushed_at":"2015-04-15T00:14:30.000Z","size":564,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"development","last_synced_at":"2025-08-27T14:48:56.314Z","etag":null,"topics":["api-client","appassure","appliance","backup","dell","disaster-recovery","library","python","python-library","restore"],"latest_commit_sha":null,"homepage":"http://www.appassure.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rshipp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-09-13T19:16:04.000Z","updated_at":"2018-11-20T04:07:03.000Z","dependencies_parsed_at":"2022-09-18T09:12:26.800Z","dependency_job_id":null,"html_url":"https://github.com/rshipp/python-appassure","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rshipp/python-appassure","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshipp%2Fpython-appassure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshipp%2Fpython-appassure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshipp%2Fpython-appassure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshipp%2Fpython-appassure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rshipp","download_url":"https://codeload.github.com/rshipp/python-appassure/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshipp%2Fpython-appassure/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272632808,"owners_count":24967318,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-29T02:00:10.610Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-client","appassure","appliance","backup","dell","disaster-recovery","library","python","python-library","restore"],"created_at":"2024-11-08T04:44:12.306Z","updated_at":"2025-08-29T05:14:40.964Z","avatar_url":"https://github.com/rshipp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"python-appassure\n================\n\n[![Build Status](https://travis-ci.org/rshipp/python-appassure.svg?branch=development)][travis]\n[![Coverage Status](https://coveralls.io/repos/rshipp/python-appassure/badge.png?branch=development)][coveralls]\n\n[travis]: https://travis-ci.org/rshipp/python-appassure\n[coveralls]: https://coveralls.io/r/rshipp/python-appassure?branch=development\n\nA Python wrapper for the [AppAssure 5](http://www.appassure.com/) HTTP API.\n\n## AppAssure\n\n### Features\n\n\u003e Backup, replication and disaster recovery in a single solution\n\u003e\n\u003e *  Restore your entire server and retrieve all of your data in seconds\n\u003e *  Protect your workloads on VMs, physical servers and in the cloud\n\u003e *  Restore to dissimilar systems, physical or virtual\n\u003e *  Recover Microsoft(tm) Exchange, SQL Server(tm) and SharePoint(tm) applications\n\u003e *  Ensure built-in disaster recovery with hot standby VMs\n\n -- *[Dell.com](http://software.dell.com/products/appassure/)*\n\n### AppAssure and Dell\n\n\u003e First acquired by Dell in 2012, AppAssure is now a part of Dell\n\u003e Software. Dell AppAssure products (including the DL and DR family of\n\u003e backup appliances) are already a key part of the Dell's award-wining\n\u003e data protection portfolio which includes NetVault Backup and vRanger.\n\u003e With Dell data protection software and appliances, you can match your\n\u003e backup needs to your business and build the most efficient and\n\u003e effective solution for your business.\n\n -- *[Dell.com](http://software.dell.com/acquisitions/appassure.aspx)*\n\n## Installation\n\n    git clone https://github.com/rshipp/python-appassure.git\n    cd python-appassure\n    python setup.py install\n\n## Usage\n\nThis library is well documented using Python docstrings, so if at any\npoint you get lost, try reading the documentation using Python's\nbuilt-in `help()` function, or simply browsing the source code.\n\nThe usual method of using the library is:\n\n1. Import the required modules and classes\n2. Set up a session object.\n3. Pass the session into a new API interface.\n4. Use the interface.\n\nBecause the API uses a non-standard time format, a few time-related\nmethods are included in the `appassure.api.AppAssureAPI` class that\nmight come in handy.\n\n### Examples\n\nHere's a simple example using the\n[ILocalMountManagement](http://docs.appassure.com/display/AA50D/ILocalMountManagement)\nCore interface.\n\n```python\n# Import the interface(s) you want to work with, and the session\n# manager.\nfrom appassure.core.ILocalMountManagement import ILocalMountManagement\nfrom appassure.session import AppAssureSession\n\n# Set up a session. The same session can be used for multiple\n# interfaces.\nsession = AppAssureSession('myappassure5coreserver', 8006, 'Username',\n        'password')\n\n# Pass the session to the interface(s) on creation.\nmounts = ILocalMountManagement(session)\n\n# Call methods from the interface. Response data can be accessed\n# with object or dictionary syntax.\nmounts.getMounts().mountInfo\nmounts.getMounts()['mountInfo']\n```\n\nSome methods take simple parameters.\n\n```python\nmounts.dismount('my_named_mount')\n```\n\nOthers must be passed in either valid XML data, or a dictionary\nobject that will be converted to XML by the the library. Here's an\nexample using raw XML.\n\n```python\nmountData = \"\"\"\n  \u003cagentIds\u003e\n    \u003cagentId\u003e1627aea5-8e0a-4371-9022-9b504344e724\u003c/agentId\u003e\n    \u003cagentId\u003e1627aea5-8e0a-4371-9022-9b504344e724\u003c/agentId\u003e\n  \u003c/agentIds\u003e\n  \u003cforce\u003etrue\u003c/force\u003e\n  \u003cisNightlyJob\u003etrue\u003c/isNightlyJob\u003e\n  \u003cjobId\u003e1627aea5-8e0a-4371-9022-9b504344e724\u003c/jobId\u003e\n  \u003cjobStartsCount\u003e4294967295\u003c/jobStartsCount\u003e\n  \u003cnightlyJobTransactionId\u003e1627aea5-8e0a-4371-9022-9b504344e724\u003c/nightlyJobTransactionId\u003e\n  \u003cmountPoint\u003eString content\u003c/mountPoint\u003e\n  \u003crecoveryPoint\u003eString content\u003c/recoveryPoint\u003e\n  \u003cshareAllowedGroup\u003eString content\u003c/shareAllowedGroup\u003e\n  \u003cshareName\u003eString content\u003c/shareName\u003e\n  \u003ctype\u003eNone\u003c/type\u003e\n  \u003cvolumeImagesToMount\u003e\n    \u003cstring xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"\u003eString content\u003c/string\u003e\n    \u003cstring xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"\u003eString content\u003c/string\u003e\n  \u003c/volumeImagesToMount\u003e\n\"\"\"\nmounts.startMount(mountData)\n```\n\nSome API methods require data to be in a certain order- in these\ncases, Python's `collections.OrderedDict` must be used instead of\nthe built-in `dict` type. Another example identical to the one above,\nbut using an `OrderedDict` object:\n\n```python\nfrom collections import OrderedDict\n\nmountData = OrderedDict([\n    ('agentIds', {\n        'agentId': [\n            '1627aea5-8e0a-4371-9022-9b504344e724',\n            '1627aea5-8e0a-4371-9022-9b504344e724',\n        ],\n    }),\n    ('isNightlyJob', 'true'),\n    ('jobId', '1627aea5-8e0a-4371-9022-9b504344e724'),\n    ('mountPoint', 'String content'),\n    ('recoveryPoint', 'String content'),\n    ('shareAllowedGroup', 'String content'),\n    ('shareName', 'String content'),\n    ('type', 'None'),\n    ('volumeImagesToMount', {\n        'string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"': [\n            'String content', 'String content'\n        ],\n    }),\n])\nmounts.startMount(mountData)\n```\n\nYou might find that you need to pass in or read timestamps from the API.\nUsing the methods built in to the time module of this library can help\nmake that easier. The `formatTime(time)`, `deformatTime(string)`, and\n`reformatTime(string)` methods all use Python's `datetime` module to\nmake dealing with timestamps in the format expected by the AppAssure API\neasier. Note that all timestamps sent to or recieved from the AppAssure\nAPI should be UTC.\n\n```python\nimport datetime\nfrom appassure import time\n\ntime.formatTime(datetime.datetime.utcnow())\n```\n\n## Contributing\n\n**NOTE**: Dell changed the AppAssure documentation, so the script doesn't\nwork anymore. You can still access the docs and build the interfaces\nmanually:\n\n* Core: http://documents.software.dell.com/DOC308890\n* Agent: http://documents.software.dell.com/DOC308944\n\n### Old info\n\nAppAssure has quite a few of what it calls\n[interfaces](http://docs.appassure.com/display/AA50D/Core+API+Reference)\navailable, all of which have been implemented (but not fully tested) at\nthis time. Most of these were semi-automatically generated by the bash\nscript in the [tools](tools) folder that will pull from the AppAssure\ndocumentation and automate most of the implementation process. (You do,\nhowever, still need to enter the wrapper XML tag for the XML request\nbody, if that exists.)\n\n![xml tag](http://i.imgur.com/HNsxslV.png)\n\nIf there is no XML request body for a method, just press enter. You will\nnot be prompted for request bodies for methods that use the `GET` or\n`DELETE` HTTP verbs.\n\nPull requests and issues are welcomed; if you find a bug, please report\nit!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frshipp%2Fpython-appassure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frshipp%2Fpython-appassure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frshipp%2Fpython-appassure/lists"}