diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..a80f3a3 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,102 @@ +name: Deploy SDK + +on: + release: + types: + - published + +jobs: + deploy_pre_release: + name: Deploy Client Pre-Release to PYPI + if: ${{ github.event.release.prerelease }} + runs-on: ubuntu-latest + steps: + - name: Set Release Version + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV + + - name: Check Release Tag Format + run: | + re=[0-9]+\.[0-9]+\.[0-9]+b[0-9]+ + if ! [[ $RELEASE_VERSION =~ $re ]]; then + echo 'Tag does not match expected regex pattern for beta releases (v[0-9]+.[0-9]+.[0-9]+b[0-9]+)' + echo $RELEASE_VERSION + echo 'Please update your tag to match the expected regex pattern' + exit 1 + fi + + - name: Checkout + uses: actions/checkout@v4 + with: + ref: feature/openapi-generator-sdk + + - name: Install Packages + run: | + pip install -r requirements.txt + pip install -r test-requirements.txt + + - name: Test + run: | + pytest -v + + - name: Deploy to PYPI + run: | + pip install twine + pip install wheel + python setup.py sdist bdist_wheel + twine upload dist/* -u __token__ -p $PYPI_API_KEY + env: + PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} + PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + + - uses: Bandwidth/build-notify-slack-action@v2.0.0 + if: always() + with: + job-status: ${{ job.status }} + slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} + slack-channel: ${{ secrets.SLACK_CHANNEL }} + + deploy: + name: Deploy `main` to PYPI + if: ${{ !github.event.release.prerelease && github.event.release.target_commitish == 'main' }} + runs-on: ubuntu-latest + steps: + - name: Set Release Version + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV + + - name: Check Release Tag Format + run: | + re=[0-9]+\.[0-9]+\.[0-9]+ + if ! [[ $RELEASE_VERSION =~ $re ]]; then + echo 'Tag does not match expected regex pattern for beta releases (v[0-9]+.[0-9]+.[0-9]+b[0-9]+)' + echo $RELEASE_VERSION + echo 'Please update your tag to match the expected regex pattern' + exit 1 + fi + + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Packages + run: |- + pip install -r requirements.txt + pip install -r test-requirements.txt + + - name: Test + run: |- + pytest -v + + - name: Deploy to PYPI + run: | + pip install twine + pip install wheel + python setup.py sdist bdist_wheel + twine upload dist/* -u __token__ -p $PYPI_API_KEY + env: + PYPI_API_KEY: ${{ secrets.PYPI_API_KEY }} + + - uses: Bandwidth/build-notify-slack-action@v2.0.0 + if: always() + with: + job-status: ${{ job.status }} + slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} + slack-channel: ${{ secrets.SLACK_CHANNEL }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..e2e936b --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,72 @@ +name: Test + +on: + schedule: + - cron: "0 4 * * *" + pull_request: + workflow_dispatch: + inputs: + logLevel: + description: Log level + required: false + default: WARNING + type: choice + options: + - WARNING + - DEBUG + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +jobs: + test: + name: Test + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-2022, windows-2019, ubuntu-20.04, ubuntu-latest] + python-version: [3.8, 3.9, "3.10", "3.11", "3.12"] + fail-fast: false + env: + PYTHON_VERSION: ${{ matrix.python-version }} + OPERATING_SYSTEM: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Packages + run: | + pip install -r requirements.txt + pip install -r test-requirements.txt + + - name: Test at Debug Level + if: ${{ inputs.logLevel == 'DEBUG' }} + run: | + echo "Log level: DEBUG" + pytest -v --log-cli-level=DEBUG + + - name: Test at Warning Level + if: ${{( inputs.logLevel == null) || ( inputs.logLevel == 'WARNING') }} + run: | + echo "Log level: WARNING" + pytest -v --log-cli-level=WARNING + + notify_for_failures: + name: Notify for Failures + needs: [test] + if: failure() + runs-on: ubuntu-latest + steps: + - name: Notify Slack of Failures + uses: Bandwidth/build-notify-slack-action@v2.0.0 + with: + job-status: failure + slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} + slack-channel: ${{ secrets.SLACK_CHANNEL }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2acf124 --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +# OS +.DS_Store +Thumbs.db + +# Python +*.pyc +*.pyo +__pycache__ + +# Common IDEs +*.swp +.idea/ +.pyenv/ +.buildpath +.settings +atlassian-ide-plugin.xml +.project +.pydevproject +.installed.cfg +*.sublime-project +*.sublime-workspace +*.ropeproject +*.patch + +# Coverage +.coverage +htmlcov/ + +# Virtualenv +env/ +.env/ +.env +venv/ +.venv/ +.venv +p2_7 + +# Project +/public/ + +# Settings +settings_local.py +local_settings.py +local.py + +# SQLite +*.sqlite* +*.db + +# Translations + +# Logs +*.log + +*.pid + +/reports/ + +# Redis +*.rdb +*.bak + +django-colors-formatter + +# testing +testing/ +local_env.sh +*.egg-info/ +.tox/ +deprecated/ + +# Config +config.cfg + +# Examples +examples/src \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..54f537d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 bandwidthcom + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..533405b --- /dev/null +++ b/README.md @@ -0,0 +1,737 @@ +# Python Numbers SDK + +## Needed tools + + - Python 3.5 + - pip + +## Requires + + - future + - requests + +## Install +```console +pip install -e git+https://github.com/bandwidthcom/python-bandwidth-iris#egg=iris_sdk +``` + +## Testing + +Tests require the *mock* and *requests_mock* packages. You can install them +with + +```console +pip install -r requirements.txt +``` +The tests can be run by issuing +```console +python -m unittest discover +``` + +## Usage + +```python +from iris_sdk import Account, Client +``` + +```python +client = Client(url="https://dashboard.bandwidth.com/api", account_id=123456, username="foo", + password="bar") +``` +or +```python +client = Client(filename=) +``` + +### Config format +```ini +[account] +account_id = 123456789 +username = spam +password = ham + +[rest] +url = https://dashboard.bandwidth.com/api +``` + +## Examples + +There is an 'examples' folder in the source tree that shows how each of the +API objects work with simple example code. To run these make a copy of +'config.cfg.example', rename to 'config.cfg', edit it to match your IRIS +credentials and run the examples individually, e.g., + +```console +python available_numbers.py +``` + +If an example takes command line parameters, you will get the usage info by +just executing it. + +## API objects + +### General principles + +In most cases you should use an Account object as a starting point. + +```python +account = Account(client=client) +``` + +Account has related entities such as Orders, Sites, etc. + +```python +sites = account.sites.list() +for site in sites.items: + pass +``` + +### Pagination + +Some resources provide paginated result sets and require the use of +page/size parameters. In these cases a Links object will be provided for +iterating over the results. + +```python +in_service_numbers = account.in_service_numbers.list({"page": 1, "size": 10}) + +total = int(account.in_service_numbers.total_count) +total_displayed = len(in_service_numbers.items) +page = None + +while total_displayed <= total: + if page is not None: + in_service_numbers = account.in_service_numbers.list( + {"page": page, "size": 10}) + page = account.in_service_numbers.links.next + for phone_number in in_service_numbers.items: + print(phone_number) + total_displayed += len(in_service_numbers.items) +``` + +### Available numbers + +```python +account.available_numbers.list({"areaCode": 818}) +``` + +### Available Npa-Nxx + +```python +account.available_npa_nxx.list({"state": "NJ"}) +``` + +### Cities + +```python +from iris_sdk import Cities + +cities = Cities(client=client) +cities.list({"state": "NC"}) +``` + +### Covered rate centers + +```python +from iris_sdk import CoveredRateCenters + +rate_centers = CoveredRateCenters(client=client) +rate_centers.list({"page": 1, "size": 10}) +``` + +### Disconnected numbers + +```python +account.disconnected_numbers.list({"areaCode": 919}) +``` + +### Disconnecting telephone numbers + +#### Creating disconnect orders + +```python +disconnect = account.disconnects.create({ + "name": "test disconnect order 4", + "customer_order_id": "Disconnect1234", + "disconnect_telephone_number_order_type": { + "telephone_number_list": { + "telephone_number": ["9192755378", "9192755703"] + } + } +}) +``` + +#### Getting order data + +```python +disconnect = account.disconnects.get("b902dee1-0585-4258-becd-5c7e51ccf5e1") +``` + +#### Adding notes + +```python +disconnect.notes.create({"user_id": "spam", "description": "ham"}) +``` + +#### Getting all order's notes + +```python +notes = disconnect.notes.list() +``` + +### Dlda + +#### Creating orders + +```python +dlda = account.dldas.create({ + "customer_order_id": "123", + "dlda_tn_groups": { + "dlda_tn_group": [{ + "telephone_numbers": { + "telephone_number": ["4352154856"] + "account_type": "RESIDENTIAL", + "listing_type": "LISTED", + "list_address": "true", + "listing_name": { + "first_name": "FirstName", + "first_name2": "FirstName2", + "last_name": "LastName", + "designation": "Designation", + "title_of_lineage": "TitleOfLineage", + "title_of_address": "TitleOfAddress", + "title_of_address2": "TitleOfAddress2", + "title_of_lineage_name2": "TitleOfLineageName2", + "title_of_address_name2": "TitleOfAddressName2", + "title_of_address2_name2": "TitleOfAddress2Name2", + "place_listing_as": "PlaceListingAs", + }, + "address": { + "house_prefix": "HousePrefix", + "house_number": "915", + "house_suffix": "HouseSuffix", + "pre_directional": "PreDirectional", + "street_name": "StreetName", + "street_suffix": "StreetSuffix", + "post_directional": "PostDirectional", + "address_line2": "AddressLine2", + "city": "City", + "state_code": "StateCode", + "zip": "Zip", + "plus_four": "PlusFour", + "country": "Country", + "address_type": "AddressType" + } + } + }] + } +}) +``` + +#### Getting order data + +```python +dlda = account.dldas.get("7802373f-4f52-4387-bdd1-c5b74833d6e2") +``` + +#### Retrieving dlda history + +```python +dlda.history.list() +``` + +#### Getting a list of dldas + +```python +account.dldas.list({"telephoneNumber": "9195551212"}) +``` + +### Import TN Checker +```python +# returns an array of portable TN's +result = account.import_tn_checker(numbers=["3032281000", "9195551234"]) +print(result) # ['3032281000', '9195551234'] +``` + +### In-service numbers + +```python +account.in_service_numbers.list({"areaCode": "919"}) +``` + +### Lidb + +#### Creating orders + +```python +lidb = account.lidbs.create({ + "lidb_tn_groups": { + "lidb_tn_group": [{ + "telephone_numbers": { + "telephone_number": ["4352154856"] + }, + "subscriber_information": "Steve", + "use_type": "RESIDENTIAL", + "visibility": "PUBLIC" + }, + { + "telephone_numbers": { + "telephone_number": ["4352154855"] + }, + "subscriber_information": "Steve", + "use_type": "RESIDENTIAL", + "visibility": "PUBLIC" + }] + } +}) + +``` + +#### Getting order data + +```python +lidb = account.lidbs.get("7802373f-4f52-4387-bdd1-c5b74833d6e2") +``` + +#### Getting a list of lidbs + +```python +lidbs = account.lidbs.list({"last_modified_after": "mm-dd-yy", + "telephone_number": "888"}) +``` + +### LNP Checker + +```python +account.lnpChecker(["4109255199", "9196190594"], "true") +``` + +### Phone numbers orders + +#### Creating orders + +```python +order = account.orders.create({ + "name": "Available Telephone Number order", + "site_id": "2297", + "customer_order_id": "123456789", + "existing_telephone_number_order_type": { + "telephone_number_list": { + "telephone_number": ["9193752369", "9193752720", "9193752648"] + } + } +}) +``` + +#### Getting order data + +```python +response = account.orders.get("f30a31a1-1de4-4939-b094-4521bbe5c8df") +order = response.order +``` + +#### Getting a list of orders + +```python +orders = account.orders.list() +``` + +#### Adding notes + +```python +order.notes.create({"user_id": "spam", "description": "Test Note"}) +``` + +#### Getting order's telephone numbers + +```python +order.tns.list() +``` + +### Port-ins + +#### Creating orders + +```python +portin = account.portins.create({ + "billing_telephone_number": "6882015002", + "subscriber": { + "subscriber_type": "BUSINESS", + "business_name": "Acme Corporation", + "service_address": { + "house_number": "1623", + "street_name": "Brockton Ave", + "city": "Los Angeles", + "state_code": "CA", + "zip": "90025", + "country": "USA" + } + }, + "loa_authorizing_person": "John Doe", + "list_of_phone_numbers": { + "phone_number": ["9882015025", "9882015026"] + }, + "site_id": "365", + "triggered": "false" +}) +``` + +#### Getting order data + +```python +portin = account.portinsget("d28b36f7-fa96-49eb-9556-a40fca49f7c6") +``` + +#### Getting a list of orders + +```python +portins = account.portins.list({"pon": "a pon"}) +``` + +#### Port-in instance methods and properties + +```python +portin.save() +portin.delete() +portin.activation_status + +status = portin.activation_status +status.auto_activation_date = "2014-08-30T18:30:00+03:00" +status.save() + +portin.history +portin.totals +portin.notes +``` + +#### Port-in file management + +```python +portin.loas.list({"metadata": "true"}) +fname = portin.loas.create("loa.pdf", {'content-type': 'application/pdf'}) +portin.loas.update(fname, "loa.pdf", {'content-type':'application/pdf'}) +portin.loas.delete(fname) +portin.loas.metadata.get(fname) +portin.loas.metadata.document_name = "text.txt" +portin.loas.metadata.document_type = "invoice" +portin.loas.metadata.save() +portin.loas.metadata.delete() +``` + +### Rate Centers + +```python +from iris_sdk import RateCenters +rc = RateCenters(client=client) +centers = rc.list({"state": "CA", "available": "true"}) +``` + +### SIP Peers + +#### Creating a SIP peer + +```python +sip_peer = account.sites.list().items[0].sip_peers.create({ + "peer_name": name, + "is_default_peer": "true", + "short_messaging_protocol": "SMPP", + "voice_hosts": { + "host": [{ + "host_name": "92.168.181.95" + }] + }, + "sms_hosts": { + "host": [{ + "host_name": "92.168.181.95" + }] + }, + "termination_hosts": { + "termination_host": [{ + "host_name": "92.168.181.95", + "port": "0", + "customer_traffic_allowed": "DOMESTIC", + "data_allowed": "true" + }] + } + }) +``` + +#### Getting a peer + +```python +sip_peer = account.sites.list().items[0].sip_peers.get("500651") +``` + +#### Getting a list of SIP peers + +```python +sip_peers = account.sites.list().items[0].sip_peers.list() +``` + +#### Deleting SIP peers + +```python +sip_peer.delete() +``` + +#### Moving telephone numbers + +```python +sip_peer.movetns.add("9192000046") +sip_peer.movetns() +``` + +#### Getting peer telephone numbers + +```python +tns = sip_peer.tns.list() +``` + +#### Getting a single phone number + +```python +tn = sip_peer.tns.get("8183386251") +``` + +#### Getting total number of numbers for a SIP peer + +```python +count = sip_peer.totaltns.get() +``` + +#### Setting telephone number options + +```python +tn = sip_peer.tns.get("8183386251") +tn.rpid_format = "e164" +tn.save() +``` + +### Sites + +#### Creating a site + +```python +site = acc.sites.create({ + "name": "test123456", + "address": { + "city": "Raleigh", + "address_type": "Service", + "house_number": "1", + "street_name": "Avenue", + "state_code": "NC", + "zip": "27606" + } +}) +``` + +#### Updating a site + +```python +site.name = "New Name" +site.save() +``` + +#### Deleting a site + +```python +site.delete() +``` + +#### Getting a list of sites + +```python +sites = account.sites.list() +``` + +#### Getting a list of site orders + +```python +site.orders.list({"status": "disabled"}) +``` + +#### Getting the total number of telephone numbers for a site + +```python +site.totaltns.get() +``` + +#### Getting a list of site's port-in orders + +```python +site.portins.list({"status": "disabled"}) +``` + +### Subscriptions + +#### Creating subscriptions + +```python +subscription = account.subscriptions.create({ + "order_type": "portins", + "order_id": "98939562-90b0-40e9-8335-5526432d9741", + "email_subscription": { + "email": "test@test.com", + "digest_requested": "DAILY" + } +}) +``` + +#### Getting subscription information + +```python +subscription = account.subscriptions.get(id) +``` + +#### Getting a list of subscriptions + +```python +account.subscriptions.list({"orderType": "portins"}) +``` + +#### Updating a subscription + +```python +subscription.order_type = "portins" +subscription.save() +``` + +#### Deleting a subscription + +```python +subscription.delete() +``` + +### TNs + +#### Getting a phone number + +```python +from iris_sdk import Tns + +tns = Tns(client=client) +tn = tns.get(id) +``` + +#### Getting a list of TNs + +```python +tns.list({"page": 1, "size": 10 }) +``` + +#### Telephone number instance methods and properties + +```python +tn = tns.get("7576768750") +site = tn.site.get() +sip_peer = tn.sip_peer.get() +tnreservation = tn.tnreservation +tn.tndetails.get() +rc = tn.tn_rate_center.get() +lata = tn.tn_lata.get() +lca = tn.lca.get() +history = tn.history.list() +``` + +### Reserving phone numbers + +#### Create a reservation + +```python +account.tnreservation.reserved_tn = "2512027430" +account.tnreservation.save() +``` + +#### Getting reservation info + +```python +reservation = account.tnreservation.get("0099ff73-da96-4303-8a0a-00ff316c07aa") +``` + +#### Deleting a reservation + +```python +reservation.delete() +``` + +### Get TN Option Orders +```python +orders = account.tn_option_orders.list() +print(orders.total_count) +print(orders.tn_option_order_summary.items[0].account_id) +``` + +### Get TN Option Order +```python +order = account.tn_option_orders.get("order_id") +print(order.order_create_date) +``` + +### Get TN Option Order (error) +```python +order = account.tn_option_orders.get("order_id_with_error") +print(order.error_list.error.items[0].description) +``` + +### Create PortOut Passcode +```python +order = account.tn_option_orders.create({ + "customer_order_id": "custom order", + "tn_option_groups": { + "tn_option_group": [ + { + "port_out_passcode": "12abd38", + "telephone_numbers": { + "telephone_number": [ + "2018551020" + ] + } + } + ] + } +}) + +print(order.order_create_date) +``` + +### Create Call Forward Number +```python +order = account.tn_option_orders.create({ + "customer_order_id": "custom order", + "tn_option_groups": { + "tn_option_group": [ + { + "call_forward": "2018551022", + "telephone_numbers": { + "telephone_number": [ + "2018551020" + ] + } + } + ] + } +}) + +print(order.order_create_date) +``` + +### Enable SMS +```python +order = account.tn_option_orders.create({ + "customer_order_id": "custom order", + "tn_option_groups": { + "tn_option_group": [ + { + "sms": "on", + "telephone_numbers": { + "telephone_number": [ + "2018551020" + ] + } + } + ] + } +}) + +print(order.order_create_date) +``` diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/available_numbers.py b/examples/available_numbers.py new file mode 100644 index 0000000..409a242 --- /dev/null +++ b/examples/available_numbers.py @@ -0,0 +1,22 @@ +import sys + +from iris_sdk import Account, Client, RestError + +if len(sys.argv) < 3: + sys.exit("usage: python available_numbers.py [state] [quantity], e.g.:" + + "\npython available_numbers.py NJ 3") + +acc = Account(client=Client(filename="config.cfg")) + +print("\n") + +try: + available_numbers = acc.available_numbers.list( + {"state": sys.argv[1], "quantity": sys.argv[2]}) +except RestError as error: + sys.exit(error) + +print("\nTotal for search: " + (acc.available_numbers.result_count or "")) + +for phone_number in available_numbers.items: + print(phone_number or "") \ No newline at end of file diff --git a/examples/cities.py b/examples/cities.py new file mode 100644 index 0000000..734ca4a --- /dev/null +++ b/examples/cities.py @@ -0,0 +1,20 @@ +import sys + +from iris_sdk import Cities, Client, RestError + +if len(sys.argv) < 2: + sys.exit("usage: python cities.py [state], e.g.:\n python cities.py NJ") + +cities = Cities(client=Client(filename="config.cfg")) + +print("\n") + +try: + cities_list = cities.list({"state": sys.argv[1]}) +except RestError as error: + sys.exit(error) + +print("\ntotal for search: " + (cities.result_count or "")) + +for city in cities_list.items: + print((city.rc_abbreviation or "") + " (" + (city.name or "") + ")") \ No newline at end of file diff --git a/examples/config.cfg.example b/examples/config.cfg.example new file mode 100644 index 0000000..f1c4f42 --- /dev/null +++ b/examples/config.cfg.example @@ -0,0 +1,7 @@ +[account] +account_id = 123456789 +username = spam +password = ham + +[rest] +url = https://dashboard.bandwidth.com/api \ No newline at end of file diff --git a/examples/covered_rate.py b/examples/covered_rate.py new file mode 100644 index 0000000..ccc3c24 --- /dev/null +++ b/examples/covered_rate.py @@ -0,0 +1,26 @@ +import sys + +from iris_sdk import Client, CoveredRateCenters, RestError + +if len(sys.argv) < 2: + sys.exit("usage: python covered_rate.py [zip], e.g.:" + + "\npython covered_rate.py 27609") + +rate_centers = CoveredRateCenters(client=Client(filename="config.cfg")) + +print("\n") + +try: + rc = rate_centers.list({"zip": sys.argv[1], "page": 1, "size": 30}) +except RestError as error: + sys.exit(error) + +for center in rc.items: + print(center.id or "") + print(" name: " + (center.name or "")) + print(" abbreviation: " + (center.abbreviation or "")) + print(" state: " + (center.state or "")) + print(" lata: " + (center.lata or "")) + print(" tiers:") + for tier in center.tiers.items: + print(" " + (tier or "")) \ No newline at end of file diff --git a/examples/loa.pdf b/examples/loa.pdf new file mode 100644 index 0000000..48eeccc Binary files /dev/null and b/examples/loa.pdf differ diff --git a/examples/npa_nxx_search.py b/examples/npa_nxx_search.py new file mode 100644 index 0000000..d0baee4 --- /dev/null +++ b/examples/npa_nxx_search.py @@ -0,0 +1,25 @@ +import sys + +from iris_sdk import Account, Client, RestError + +if len(sys.argv) < 3: + sys.exit("usage: python npa_nxx_search.py [area code] [quantity], e.g.:" + + "\npython npa_nxx_search.py 435 1") + +acc = Account(client=Client(filename="config.cfg")) + +print("\n") + +try: + available_npa = acc.available_npa_nxx.list( + {"areaCode": sys.argv[1], "quantity": sys.argv[2]}) +except RestError as error: + sys.exit(error) + +for phone_number in available_npa.items: + print(" - ") + print(" city: " + (phone_number.city or "")) + print(" NPA: " + (phone_number.npa or "")) + print(" NXX: " + (phone_number.nxx or "")) + print(" state: " + (phone_number.state or "")) + print(" quantity: " + (phone_number.quantity or "")) \ No newline at end of file diff --git a/examples/order_create.py b/examples/order_create.py new file mode 100644 index 0000000..e394bff --- /dev/null +++ b/examples/order_create.py @@ -0,0 +1,34 @@ +import sys + +from iris_sdk import Account, Client, RestError + +if len(sys.argv) < 2: + sys.exit("usage: python order_create.py [phone number], e.g.:" + + "\npython order_create.py 9193752369") + +acc = Account(client=Client(filename="config.cfg")) + +print("\n") + +try: + order = acc.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "existing_telephone_number_order_type": { + "telephone_number_list": { + "telephone_number": [sys.argv[1]] + } + } + }) +except RestError as error: + sys.exit(error) + +print((order.name or "") + " (" + (order.order_status or "") + ")") +print(" id: " + (order.id or "")) +print(" site: " + (order.site_id or "")) +print(" customer order id: " + (order.customer_order_id or "")) +print(" phone numbers:") +for num in order.existing_telephone_number_order_type.telephone_number_list.\ + telephone_number.items: + print(" " + (num or "")) \ No newline at end of file diff --git a/examples/order_get.py b/examples/order_get.py new file mode 100644 index 0000000..a46aa88 --- /dev/null +++ b/examples/order_get.py @@ -0,0 +1,64 @@ +import sys +import time +from iris_sdk import Account, Client +from iris_sdk.models.data.ord.existing_search_order import ExistingSearchOrder + + +def search_and_order(account, site_id): + numbers = account.available_numbers.list( + {"areaCode": "919", "quantity": 100}) + telephone_number_to_order = numbers.items[-1] + order = account.orders.create({ + "name": "test", + "site_id": site_id, + "customer_order_id": "123456789", + "existing_telephone_number_order_type": { + "telephone_number_list": { + "telephone_number": [telephone_number_to_order] + } + } + }) + order_id = order.id + time.sleep(3) # wait for order to complete + return order_id + + +def list_numbers_on_order(account, order_id): + response = account.orders.get(order_id) + order = response.order + original_payload: ExistingSearchOrder = order.existing_telephone_number_order_type + original_numbers = original_payload.telephone_number_list + failed_quantity = response.failed_quantity + failed_numbers = response.failed_numbers + completed_quantity = response.completed_quantity + completed_numbers = response.completed_numbers + print("Tried to order Numbers:") + for number in original_numbers.items: + print(number) + print(f"Of those numbers, {completed_quantity} were successful:") + for number in response.completed_numbers.items: + print(number) + print(f"Of those numbers, {failed_quantity} were unsuccessful:") + for number in response.failed_numbers.items: + print(number) + return + + +if __name__ == '__main__': + my_account = Account(client=Client(filename="config.cfg")) # Comment this line to use the config file + # Uncomment these lines to use environment variables + # BANDWIDTH_ACCOUNT_ID = os.environ["BANDWIDTH_ACCOUNT_ID"] + # BANDWIDTH_API_USER = os.environ["BANDWIDTH_API_USER"] + # BANDWIDTH_API_PASSWORD = os.environ["BANDWIDTH_API_PASSWORD"] + # client = Client(url="https://dashboard.bandwidth.com/api", + # account_id=BANDWIDTH_ACCOUNT_ID, + # username=BANDWIDTH_API_USER, + # password=BANDWIDTH_API_PASSWORD) + # my_account = Account(client=client) + + if len(sys.argv) < 2: + sys.exit("usage: python order_get.py [site/subbacount-id], e.g.:" + + "\npython order_get.py 23360") + my_site_id = sys.argv[1] + my_order_id = search_and_order(my_account, my_site_id) + list_numbers_on_order(my_account, my_order_id) diff --git a/examples/portin.py b/examples/portin.py new file mode 100644 index 0000000..4fa699e --- /dev/null +++ b/examples/portin.py @@ -0,0 +1,63 @@ +import sys + +from iris_sdk import Account, Client, RestError + +if len(sys.argv) < 3: + sys.exit("usage: python portin.py [phone number] [site id], e.g.:" + + "\npython portin.py 8183386247 2297") + +acc = Account(client=Client(filename="config.cfg")) +port_number = sys.argv[1] + +print("\n") + +try: + response = acc.lnpchecker([port_number], "true") +except RestError as error: + sys.exit(error) + +if port_number not in response.portable_numbers.items: + sys.exit("Number isn't portable") + +print("Number is portable, creating LNP order") + +try: + portin = acc.portins.create({ + "billing_telephone_number": port_number, + "subscriber": { + "subscriber_type": "BUSINESS", + "business_name": "Acme Corporation", + "service_address": { + "house_number": "1623", + "street_name": "Brockton Ave", + "city": "Los Angeles", + "state_code": "CA", + "zip": "90025", + "country": "USA" + } + }, + "loa_authorizing_person": "John Doe", + "list_of_phone_numbers": { + "phone_number": [port_number] + }, + "site_id": sys.argv[2], + "triggered": "false" + }) +except RestError as error: + sys.exit(error) + +print("Order created: " + (portin.id or "")) + +try: + fname = portin.loas.create("loa.pdf", {'content-type': 'application/pdf'}) +except RestError as error: + sys.exit(error) + +print("LOA uploaded: " + (fname or "")) + +try: + res=portin.loas.update(fname,"loa.pdf",{'content-type':'application/pdf'}) +except RestError as error: + sys.exit(error) + +print("LOA successfully updated") \ No newline at end of file diff --git a/examples/rate_center.py b/examples/rate_center.py new file mode 100644 index 0000000..df8e139 --- /dev/null +++ b/examples/rate_center.py @@ -0,0 +1,21 @@ +import sys + +from iris_sdk import Client, RateCenters, RestError + +if len(sys.argv) < 2: + sys.exit("usage: python rate_center.py [state], e.g.:\n" + + "python rate_center.py NJ") + +rate_centers = RateCenters(client=Client(filename="config.cfg")) + +print("\n") + +try: + centers = rate_centers.list({"state": sys.argv[1]}) +except RestError as error: + sys.exit(error) + +print("\ntotal for search: " + (rate_centers.total_count or "")) + +for rc in centers.items: + print((rc.abbreviation or "") + " (" + (rc.name or "") + ")") \ No newline at end of file diff --git a/examples/sippeers_create.py b/examples/sippeers_create.py new file mode 100644 index 0000000..cde1058 --- /dev/null +++ b/examples/sippeers_create.py @@ -0,0 +1,60 @@ +import sys + +from iris_sdk import Account, Client, RestError + +if len(sys.argv) < 4: + sys.exit("usage: python sippeer_create.py [host] [peer name] [site], " + + "e.g.:\npython sippeer_create.py 92.168.181.95 peer12 2297") + +acc = Account(client=Client(filename="config.cfg")) + +print("\n") + +host = sys.argv[1] +name = sys.argv[2] +site = sys.argv[3] + +try: + sip_peer = acc.sites.get(site).sip_peers.create({ + "peer_name": name, + "is_default_peer": "true", + "short_messaging_protocol": "SMPP", + "voice_hosts": { + "host": [{ + "host_name": host + }] + }, + "sms_hosts": { + "host": [{ + "host_name": host + }] + }, + "termination_hosts": { + "termination_host": [{ + "host_name": host, + "port": "0", + "customer_traffic_allowed": "DOMESTIC", + "data_allowed": "true" + }] + } + }) +except RestError as error: + sys.exit(error) + +print("id: " + (sip_peer.id or "")) +print("name: " + (sip_peer.name or "")) +print("default peer: " + (sip_peer.is_default_peer)) +print("sms protocol: " + (sip_peer.short_messaging_protocol or "")) +print("voice hosts:") +for host in sip_peer.voice_hosts.items: + print(" " + (host.host_name or "")) +print("sms hosts:") +for host in sip_peer.sms_hosts.items: + print(" " + (host.host_name or "")) +print("termination hosts:") +for host in sip_peer.termination_hosts.items: + print(" " + (host.host_name or "")) + print(" port: " + (host.port or "")) + print(" data allowed: " +(host.data_allowed or "")) + print(" customer traffic allowed: " + + (host.customer_traffic_allowed or "")) \ No newline at end of file diff --git a/examples/site_create.py b/examples/site_create.py new file mode 100644 index 0000000..2567b43 --- /dev/null +++ b/examples/site_create.py @@ -0,0 +1,47 @@ +import sys + +from iris_sdk import Account, Client, RestError + +if len(sys.argv) < 2: + sys.exit("usage: python site_create.py [site name], e.g.:\n" + + "python site_create.py test12") + +acc = Account(client=Client(filename="config.cfg")) + +print("\n") + +try: + site = acc.sites.create({ + "name": sys.argv[1], + "address": { + "city": "Raleigh", + "address_type": "Service", + "house_number": "1", + "street_name": "Avenue", + "state_code": "NC", + "zip": "27606" + } + }) +except RestError as error: + sys.exit(error) + +print("id: " + (site.id or "")) +print("name: " + (site.name or "")) +print("address:") +print(" city: " + (site.address.city or "")) +print(" addr. type: " + (site.address.address_type or "")) +print(" house no.: " + (site.address.house_number or "")) +print(" street: " + (site.address.street_name or "")) +print(" state: " + (site.address.state_code or "")) + +print("\nupdating site house number...") + +site.address.house_number = "12" + +try: + site.save() +except RestError as error: + sys.exit(error) + +print("\nsuccess") +print("new house number: " + (site.address.house_number or "")) diff --git a/examples/tns_details.py b/examples/tns_details.py new file mode 100644 index 0000000..d12da69 --- /dev/null +++ b/examples/tns_details.py @@ -0,0 +1,36 @@ +import sys + +from iris_sdk import Client, Tns, RestError + +if len(sys.argv) < 2: + sys.exit("usage: python tns_details.py [number], e.g.:" + + "\npython tns_details.py 4109235436") + +tns = Tns(client=Client(filename="config.cfg")) + +print("\n") + +try: + details = tns.get(sys.argv[1]).tndetails.get() +except RestError as error: + sys.exit(error) + +print(" account: " + (details.account_id or "")) +print(" city: " + (details.city or "")) +print(" last modified: " + (details.last_modified_date or "")) +print(" LATA: " + (details.lata or "")) +print(" rate center: " + (details.rate_center or "")) +print(" state: " + (details.state or "")) +print(" tier: " + (details.tier or "")) +print(" vendor id: " + (details.vendor_id or "")) +print(" vendor name: " + (details.vendor_name or "")) + +print(" dlda") +print(" city: " + (details.features.dlda.address.city or "")) +print(" listing: ") +print(" first name" + + (details.features.dlda.listing_name.first_name or "")) +print(" last name" + \ + (details.features.dlda.listing_name.last_name or "")) +print(" lidb") +print(" status: " + (details.features.lidb.status or "")) \ No newline at end of file diff --git a/examples/tns_list.py b/examples/tns_list.py new file mode 100644 index 0000000..604e47b --- /dev/null +++ b/examples/tns_list.py @@ -0,0 +1,27 @@ +import sys + +from iris_sdk import Client, Tns, RestError + +if len(sys.argv) < 2: + sys.exit("usage: python tns_list.py [npa], e.g.:\npython tns_list.py 818") + +tns = Tns(client=Client(filename="config.cfg")) + +print("\n") + +try: + tn_list = tns.list({"page": 1, "size": 10, "npa": sys.argv[1]}) +except RestError as error: + sys.exit(error) + +for phone in tn_list.items: + print(phone.full_number or "") + print(" account: " + (phone.account_id or "")) + print(" city: " + (phone.city or "")) + print(" last modified: " + (phone.last_modified_date or "")) + print(" LATA: " + (phone.lata or "")) + print(" rate center: " + (phone.rate_center or "")) + print(" state: " + (phone.state or "")) + print(" status: " + (phone.status or "")) + print(" vendor id: " + (phone.vendor_id or "")) + print(" vendor name: " + (phone.vendor_name or "")) \ No newline at end of file diff --git a/iris_sdk/__init__.py b/iris_sdk/__init__.py new file mode 100644 index 0000000..f215009 --- /dev/null +++ b/iris_sdk/__init__.py @@ -0,0 +1,11 @@ +from iris_sdk.client import Client +from iris_sdk.models.account import Account +from iris_sdk.models.cities import Cities +from iris_sdk.models.covered_rate_centers import CoveredRateCenters +from iris_sdk.models.rate_centers import RateCenters +from iris_sdk.models.tns import Tns +from iris_sdk.models.users import Users +from iris_sdk.utils.rest import RestError + +__all__ = ["Client", "Account", "Tns", "Users", "Cities", "RateCenters", + "RestError", "CoveredRateCenters", ] \ No newline at end of file diff --git a/iris_sdk/client.py b/iris_sdk/client.py new file mode 100644 index 0000000..91dfa5e --- /dev/null +++ b/iris_sdk/client.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +from iris_sdk.utils.config import Config +from iris_sdk.utils.rest import RestClient + +class Client(object): + + """HTTP requests""" + + @property + def config(self): + return self._config + + def __init__( + self, url=None, account_id=None, username=None, password=None, + filename=None): + + if url is None: + url = "https://dashboard.bandwidth.com/api" + + self._config = Config(url, account_id, username, password, filename) + self._rest = RestClient() + + def _get_uri(self, section=None): + + """http://foo/bar/// + ///bar/// -> http://foo/bar""" + + _section = "" + if section is not None: + _section = section.lstrip('/').rstrip('/') + + res = self.config.url.rstrip('/') + ("" if not _section else '/') + \ + _section + + return res + + def _request(self,method,section=None,params=None,data=None,headers=None): + return self._rest.request( + method, url=self._get_uri(section), + auth=(self.config.username, self.config.password), + params=params, data=data, headers=headers) + + def delete(self, section=None): + return self._request("DELETE", section) + + def get(self, section=None, params=None): + return self._request("GET", section, params) + + def post(self, section=None, params=None, data=None, headers=None): + return self._request("POST", section, params, data, headers) + + def put(self, section=None, params=None, data=None, headers=None): + return self._request("PUT", section, params, data, headers) diff --git a/iris_sdk/include/__init__.py b/iris_sdk/include/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/iris_sdk/include/xml_consts.py b/iris_sdk/include/xml_consts.py new file mode 100644 index 0000000..163c54f --- /dev/null +++ b/iris_sdk/include/xml_consts.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +XML_FALSE = "false" +XML_PARAM_METADATA = "metadata" +XML_PARAM_PAGE = "page" +XML_PARAM_SIZE = "size" +XML_PARAM_TN_DETAIL = "enableTNDetail" +XML_TRUE = "true" + +__all__ = [ + "XML_FALSE", + "XML_PARAM_METADATA", + "XML_PARAM_PAGE", + "XML_PARAM_SIZE", + "XML_PARAM_TN_DETAIL", + "XML_TRUE" +] \ No newline at end of file diff --git a/iris_sdk/models/__init__.py b/iris_sdk/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/iris_sdk/models/account.py b/iris_sdk/models/account.py new file mode 100644 index 0000000..bb773e4 --- /dev/null +++ b/iris_sdk/models/account.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.account_users import AccountUsers +from iris_sdk.models.available_npa_nxx import AvailableNpaNxx +from iris_sdk.models.available_numbers import AvailableNumbers +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.account import AccountData +from iris_sdk.models.disc_numbers import DiscNumbers +from iris_sdk.models.disconnects import Disconnects +from iris_sdk.models.in_service_numbers import InServiceNumbers +from iris_sdk.models.line_option_orders import LineOptionOrder +from iris_sdk.models.import_tn_checker import ImportTnChecker +from iris_sdk.models.lnpchecker import LnpChecker +from iris_sdk.models.orders import Orders +from iris_sdk.models.lidbs import Lidbs +from iris_sdk.models.dldas import Dldas +from iris_sdk.models.subscriptions import Subscriptions +from iris_sdk.models.portins import PortIns +from iris_sdk.models.portouts import PortOuts +from iris_sdk.models.reservation import Reservation +from iris_sdk.models.site_hosts import SiteHosts +from iris_sdk.models.sites import Sites +from iris_sdk.models.tn_option_orders import TnOptionOrders + +XPATH_ACCOUNT = "/accounts/{}" + +class Account(BaseResource, AccountData): + + """Iris account""" + + _xpath = XPATH_ACCOUNT + + @property + def available_npa_nxx(self): + return self._available_npa_nxx + + @property + def available_numbers(self): + return self._available_numbers + + @property + def disconnected_numbers(self): + return self._disconnected_numbers + + @property + def disconnects(self): + return self._disconnects + + @property + def dldas(self): + return self._dldas + + @property + def hosts(self): + return self._hosts + + @property + def id(self): + return self.account_id + @id.setter + def id(self, id): + self.account_id = id + + @property + def import_tn_checker(self): + return self._import_tn_checker + + @property + def in_service_numbers(self): + return self._in_service_numbers + + @property + def lidbs(self): + return self._lidbs + + @property + def line_option_orders(self): + return self._line_option_orders + + @property + def lnpchecker(self): + return self._lnpchecker + + @property + def orders(self): + return self._orders + + @property + def portins(self): + return self._portins + + @property + def portouts(self): + return self._portouts + + @property + def sites(self): + return self._sites + + @property + def subscriptions(self): + return self._subscriptions + + @property + def tnreservation(self): + return self._tnreservation + + @property + def users(self): + return self._users + + @property + def tn_option_orders(self): + return self._tn_option_orders + + def __init__(self, parent=None, client=None): + if client is not None: + self.id = client.config.account_id + super().__init__(parent, client) + AccountData.__init__(self) + self._available_npa_nxx = AvailableNpaNxx(self, client) + self._available_numbers = AvailableNumbers(self, client) + self._disconnected_numbers = DiscNumbers(self, client) + self._disconnects = Disconnects(self, client) + self._hosts = SiteHosts(self, client) + self._import_tn_checker = ImportTnChecker(self, client) + self._in_service_numbers = InServiceNumbers(self, client) + self._line_option_orders = LineOptionOrder(self, client) + self._lnpchecker = LnpChecker(self, client) + self._orders = Orders(self, client) + self._portins = PortIns(self, client) + self._portouts = PortOuts(self, client) + self._lidbs = Lidbs(self, client) + self._dldas = Dldas(self, client) + self._subscriptions = Subscriptions(self, client) + self._sites = Sites(self, client) + self._tnreservation = Reservation(self, client) + self._users = AccountUsers(self, client) + self._tn_option_orders = TnOptionOrders(self, client) + + def get(self, id=None): + return self._get_data(id) diff --git a/iris_sdk/models/account_users.py b/iris_sdk/models/account_users.py new file mode 100644 index 0000000..3a560ba --- /dev/null +++ b/iris_sdk/models/account_users.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.account_users import AccountUsersData + +XML_NAME_USERS_ACC = "Users" +XPATH_USERS_ACC = "/users" + +class AccountUsers(BaseResource, AccountUsersData): + + """Account users details""" + + _node_name = XML_NAME_USERS_ACC + _xpath = XPATH_USERS_ACC + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + AccountUsersData.__init__(self) + + def list(self): + return self._get_data().user \ No newline at end of file diff --git a/iris_sdk/models/activation_status.py b/iris_sdk/models/activation_status.py new file mode 100644 index 0000000..de375dd --- /dev/null +++ b/iris_sdk/models/activation_status.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.activation_status import ActivationStatusData + +XPATH_ACTIVATION_STATUS = "/activationStatus" + +class ActivationStatus(BaseResource, ActivationStatusData): + + """Local number portability order activation status""" + + _xpath = XPATH_ACTIVATION_STATUS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + ActivationStatusData.__init__(self) + self._id = 1 + + def get(self): + return self._get_data() + + def save(self): + self.id = 1 + self._save() \ No newline at end of file diff --git a/iris_sdk/models/available_npa_nxx.py b/iris_sdk/models/available_npa_nxx.py new file mode 100644 index 0000000..e78ae64 --- /dev/null +++ b/iris_sdk/models/available_npa_nxx.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.available_npa_nxx import AvailableNpaNxxData + +XML_NAME_AVAILABLE_NPA_NXX = "SearchResultForAvailableNpaNxx" +XPATH_AVAILABLE_NPA_NXX = "/availableNpaNxx" + +class AvailableNpaNxx(BaseResource, AvailableNpaNxxData): + + """Available NPA/NXX for account""" + + _node_name = XML_NAME_AVAILABLE_NPA_NXX + _xpath = XPATH_AVAILABLE_NPA_NXX + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + AvailableNpaNxxData.__init__(self) + + def list(self, params): + return self.get(params=params).available_npa_nxx_list.\ + available_npa_nxx \ No newline at end of file diff --git a/iris_sdk/models/available_numbers.py b/iris_sdk/models/available_numbers.py new file mode 100644 index 0000000..4145e10 --- /dev/null +++ b/iris_sdk/models/available_numbers.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.include.xml_consts import XML_PARAM_TN_DETAIL, XML_TRUE +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.available_numbers import AvailableNumbersData + +XML_NAME_AVAILABLE_NUMBERS = "SearchResult" +XPATH_AVAILABLE_NUMBERS = "/availableNumbers" + +class AvailableNumbers(BaseResource, AvailableNumbersData): + + """Available numbers for account""" + + _node_name = XML_NAME_AVAILABLE_NUMBERS + _xpath = XPATH_AVAILABLE_NUMBERS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + AvailableNumbersData.__init__(self) + + def list(self, params): + self.get(params=params) + if params.get(XML_PARAM_TN_DETAIL, "") == XML_TRUE: + return self.telephone_number_detail_list.telephone_number_detail + else: + return self.telephone_number_list.telephone_number \ No newline at end of file diff --git a/iris_sdk/models/base_resource.py b/iris_sdk/models/base_resource.py new file mode 100644 index 0000000..f3d55ed --- /dev/null +++ b/iris_sdk/models/base_resource.py @@ -0,0 +1,486 @@ +#!/usr/bin/env python + +from inspect import getmro +from io import BytesIO +from xml.etree.ElementTree import Element, ElementTree, fromstring, SubElement + +from iris_sdk.models.maps.base_map import BaseMap +from iris_sdk.utils.rest import HTTP_OK +from iris_sdk.utils.strings import Converter + +BASE_MAP_SUFFIX = "Map" +BASE_PROP_CLIENT = "client" +BASE_PROP_ITEMS = "items" +BASE_PROP_NODE = "_node_name" +BASE_PROP_NODE_SAVE = "_node_name_save" +BASE_PROP_XPATH = "xpath" +BASE_PROP_XPATH_SEPARATOR = "{" +HEADER_LOCATION = "location" + +class BaseData(object): + + """Base class for everything""" + + def clear(self): + + """Flushes the data""" + + for prop in dir(self): + + property = getattr(self, prop) + + # Might be needed + if (prop.startswith("_")) or (prop == BASE_PROP_CLIENT) or \ + (prop == BASE_PROP_XPATH) or (prop == BASE_PROP_ITEMS) or\ + (callable(property)): + continue + + cleared = False + _class = property.__class__ + + # Everything is either a BaseData, a BaseResourceList or a + # BaseResource descendant (which itself inherits from BaseData). + if (_class == BaseData) or (_class == BaseResourceList) or \ + (_class == BaseResourceSimpleList): + property.clear() + cleared = True + else: + for classtype in getmro(property.__class__): + if (classtype==BaseData) or (classtype==BaseResourceList)\ + or (classtype==BaseResource) or \ + (classtype==BaseResourceSimpleList): + property.clear() + cleared = True + break + + # Built-in types + if not cleared: + setattr(self, prop, None) + + def set_from_dict(self, initial_data=None): + + if (initial_data is None) or (not isinstance(initial_data, dict)): + return self + + self.clear() + + for key in initial_data: + + if not hasattr(self, key): + continue + + if isinstance(initial_data[key], str): + setattr(self, key, initial_data[key]) + else: + + attr = getattr(self, key) + if isinstance(initial_data[key], dict): + if attr is None: + # attr should be already not None by the + # moment of calling set_from_dict, + # but just in case + attr = BaseResource() + attr.set_from_dict(initial_data[key]) + setattr(self, key, attr) + elif isinstance(attr, BaseData): + attr.set_from_dict(initial_data[key]) + elif isinstance(initial_data[key], list): + if attr is None: + setattr(self, key, BaseResourceList(BaseResource)) + attr = getattr(self, key) + if isinstance(attr, BaseResourceSimpleList): + attr.clear() + for list_item in initial_data[key]: + attr.add(list_item) + setattr(self, key, attr) + return self + +class BaseResourceSimpleList(object): + + """ + Used to store simple values. + """ + + @property + def items(self): + return self._items + + def __init__(self): + self._items = [] + + def add(self, value): + self.items.append(value) + return self.items[-1] + + def clear(self): + del self.items[:] + +class BaseResourceList(BaseResourceSimpleList): + + """ + List of instances of "class_type" passed to constructor. + "parent" used to link BaseResource instances and pass their "client" + properties. + """ + + @property + def class_type(self): + return self._class_type + + @property + def parent(self): + return self._parent + + def __init__(self, class_type, parent=None): + BaseResourceSimpleList.__init__(self) + self._class_type = class_type + self._parent = parent + + def add(self, initial_data=None): + if self.parent is not None: + item = self.class_type(self.parent) + else: + item = self.class_type() + item.set_from_dict(initial_data) + self.items.append(item) + return item + +class BaseResource(BaseData): + + """ + REST resource. + + "_node_name" - corresponding XML element name, + "_save_post" - uses POST if True, PUT - otherwise, + "_xpath_save" - if set, uses this for saving, + "client" does http requests, + "xpath" returns the REST resource's relative path. + """ + + _id = None + _parent = None + _node_name = None + _node_name_save = None + _save_post = False + _xpath = "" + _xpath_save = None + + @property + def client(self): + return self._client + @client.setter + def client(self, client): + self._client = client + + @property + def id(self): + return self._id + @id.setter + def id(self, id): + self._id = id + + @property + def xpath(self): + return self._xpath + + def __init__(self, parent=None, client=None): + self._converter = Converter() + self._parent = parent + self._client = client + if (client is None) and (parent is not None): + self._client = parent.client + + def _delete_file(self, xpath, id): + if id is None: + raise ValueError("No id specified") + path = "" + if xpath is not None: + path = xpath.format(id) + response = self._client.delete(section=self.get_xpath() + path) + return response.status_code == HTTP_OK + + def _element_from_string(self, str): + return fromstring(str) + + def _from_xml(self, element, instance=None): + + """ + Parses XML elements into existing objects, e.g.: + + garply = some_class(), + garply._node_name = "Foo" + garply.bar_baz = some_other_class() + garply.bar_baz.qux = None + + + + Corge + + + + garply.bar_baz.qux equals "Corge". + + Converts CamelCase names to lowercase underscore ones. + """ + + # If instance is None, the tag name to search for in XML data equals + # class name. + + inst = (instance or self) + class_name = inst.__class__.__name__ + + node_name = None + if hasattr(inst, BASE_PROP_NODE): + node_name = inst._node_name + + # Recursive call: instance's class represents the element's structure + if instance is not None: + search_name = element.tag + else: + search_name = (node_name or class_name) + + # The provided element is actually the one we're searching for + if element.tag == search_name: + element_children = list(element) + else: + element_children = element.findall(search_name) + + for el in element_children: + + tag = self._converter.to_underscore(el.tag) + + property = None + if not hasattr(inst, tag): + # Not the base class + if instance is not None: + continue + else: + property = getattr(inst, tag) + + if len(list(el)) == 0: + if el.text is not None: + # Simple list - multiple "" lines + if isinstance(property, BaseResourceSimpleList): + property.items.append(el.text) + else: + setattr(inst, tag, el.text) + continue + + _inst = property + + # List of instances - add an item and parse recursively + if isinstance(property, BaseResourceList): + # Set parents for REST resources + has_parent = False + for class_type in property.class_type.__bases__: + if class_type == BaseResource: + has_parent = True + break + self._class = property.class_type + if has_parent: + item = property.class_type(property.parent) + else: + item = property.class_type() + property.items.append(item) + _inst = property.items[-1] + + # Instance's class mirrors the element's structure + self._from_xml(el, _inst) + + def _get(self, id=None, params=None): + new_id = (id or self.id) + self.clear() + self.id = new_id + xpath = self.get_xpath() + if (self.id is None) and (BASE_PROP_XPATH_SEPARATOR in xpath): + raise ValueError("No id specified") + return self._client.get(self.get_xpath(), params) + + def _get_data(self, id=None, params=None): + content = self._get(id, params).content.decode(encoding="UTF-8") + if content: + root = self._element_from_string(content) + self._from_xml(root) + return self + + def _get_file(self, xpath, id): + if id is None: + raise ValueError("No id specified") + path = "" + if xpath is not None: + path = xpath.format(id) + return self._client.get(section=self.get_xpath() + path) + + def _get_status(self, id=None, params=None): + return self._get(id, params).status + + def _post(self, xpath, data, params): + return self._client.post(section=xpath, params=params, data=data) + + def _post_data(self, response_instance=None, params=None): + content = self._save(return_content=True, params=params) + if content: + root = self._element_from_string(content) + inst = (response_instance or self) + inst.clear() + inst._from_xml(root) + return inst + return self + + def _put(self, xpath, data): + return self._client.put(section=xpath, data=data) + + def _save(self, return_content=False, params=None): + + data = self._serialize() + + if (self.id is not None) and (not self._save_post): + response = self._put(self.get_xpath(True), data) + if return_content: + return response.content.decode(encoding="UTF-8") + else: + return response.status_code == HTTP_OK + + resource = (self if self._save_post else self._parent) + path = resource.get_xpath(True) + + response = self._post(path, data, params) + + location = None + if HEADER_LOCATION in response.headers: + location = response.headers[HEADER_LOCATION] + res = "" + if location is not None: + pos = location.rfind("/") + res = location[pos+1:] + + self.id = (res if res else self.id) + + if return_content: + return response.content.decode(encoding="UTF-8") + else: + return True + + def _send_file(self, xpath, filename, headers, id=None): + + path = "" + request = self._client.post + if id is not None: + if xpath is not None: + path = xpath.format(id) + request = self._client.put + + with open(filename, 'rb') as file_data: + response = request(section=self.get_xpath() + path, + data=file_data, headers=headers) + + location = None + if HEADER_LOCATION in response.headers: + location = response.headers[HEADER_LOCATION] + + if location is not None: + return location[location.rfind("/")+1:] + else: + return response.status_code == HTTP_OK + + def _serialize(self): + root = ElementTree(self._to_xml()) + data_io = BytesIO() + root.write(data_io, encoding="UTF-8", xml_declaration=True) + return data_io.getvalue() + + def _to_xml(self, element=None, instance=None): + + """ + The opposite of "_from_xml". + Lowercase underscore names are converted to CamelCase. + """ + + inst = (instance or self) + + # Renaming the root + node_name = inst.__class__.__name__ + + if hasattr(inst, BASE_PROP_NODE): + if inst._node_name is not None: + node_name = inst._node_name + + if hasattr(inst, BASE_PROP_NODE_SAVE): + if inst._node_name_save is not None: + node_name = inst._node_name_save + + elem = (Element(node_name) if element is None else element) + + map = None + + # "Map" is a base class that sets the correspondence between XML + # elements and class properties, i.e. what's not in this class doesn't + # get written to the file. + + for classtype in getmro(inst.__class__): + if (classtype.__name__.endswith(BASE_MAP_SUFFIX) and + classtype.__name__ != BaseMap.__name__): + map = classtype + break + + if map is None: + return elem + + for prop in dir(map): + + property = getattr(inst, prop) + + if (prop.startswith("_") or + callable(property) or + property is None): + continue + + # Lists + + if isinstance(property, BaseResourceList): + for item in property.items: + el = SubElement(elem, self._converter.to_camelcase(prop)) + self._to_xml(el, item) + continue + + if isinstance(property, BaseResourceSimpleList): + for item in property.items: + el = SubElement(elem, self._converter.to_camelcase(prop)) + el.text = str(item) + continue + + # Everything else + + el = SubElement(elem, self._converter.to_camelcase(prop)) + + if isinstance(property, BaseMap): + self._to_xml(el, property) + if (len(list(el)) == 0) and (el.text is None): + elem.remove(el) + else: + el.text = str(property) + + return elem + + def delete(self): + response = self._client.delete(self.get_xpath()) + return response.status_code == HTTP_OK + + def get(self, id=None, params=None): + return self._get_data(id, params) + + def get_status(self, id=None, params=None): + return self._get_status(self.get_xpath(id), params) + + def get_xpath(self, save_path=False): + parent_path = "" + if self._parent is not None: + parent_path = self._parent.get_xpath(save_path) + own_path = self._xpath + if save_path and (self._xpath_save is not None): + own_path = self._xpath_save + xpath = parent_path + own_path + return xpath.format(self.id) + + def save(self): + self._save() diff --git a/iris_sdk/models/cities.py b/iris_sdk/models/cities.py new file mode 100644 index 0000000..a3f987b --- /dev/null +++ b/iris_sdk/models/cities.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.cities import CitiesData + +XML_NAME_CITIES = "CityResponse" +XPATH_RATE_CITIES = "/cities" + +class Cities(BaseResource, CitiesData): + + """Covered cities directory""" + + _node_name = XML_NAME_CITIES + _xpath = XPATH_RATE_CITIES + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + CitiesData.__init__(self) + + def list(self, params): + return self._get_data(params=params).cities.city \ No newline at end of file diff --git a/iris_sdk/models/covered_rate_centers.py b/iris_sdk/models/covered_rate_centers.py new file mode 100644 index 0000000..c6bdd10 --- /dev/null +++ b/iris_sdk/models/covered_rate_centers.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.covered_rate_centers import CoveredRateCentersData +from iris_sdk.models.rate_center import RateCenter + +XPATH_COVERED_RATE_CENTERS = "/coveredratecenters" + +class CoveredRateCenters(BaseResource, CoveredRateCentersData): + + """Covered rate centers""" + + _xpath = XPATH_COVERED_RATE_CENTERS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + CoveredRateCentersData.__init__(self, self) + + def get(self, id): + return RateCenter(self).get(id) + + def list(self, params): + return self._get_data(params=params).covered_rate_center \ No newline at end of file diff --git a/iris_sdk/models/data/__init__.py b/iris_sdk/models/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/iris_sdk/models/data/a2p_settings.py b/iris_sdk/models/data/a2p_settings.py new file mode 100644 index 0000000..f633c9c --- /dev/null +++ b/iris_sdk/models/data/a2p_settings.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.a2p_settings import A2pSettingsMap + +class A2pSettings(A2pSettingsMap, BaseData): + pass diff --git a/iris_sdk/models/data/account.py b/iris_sdk/models/data/account.py new file mode 100644 index 0000000..0ed37dc --- /dev/null +++ b/iris_sdk/models/data/account.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.address import Address +from iris_sdk.models.data.contact import Contact +from iris_sdk.models.data.tier_list import TierList +from iris_sdk.models.maps.account import AccountMap + +class AccountData(AccountMap, BaseData): + + def __init__(self): + self.address = Address() + self.contact = Contact() + self.tiers = TierList() \ No newline at end of file diff --git a/iris_sdk/models/data/account_user.py b/iris_sdk/models/data/account_user.py new file mode 100644 index 0000000..704abed --- /dev/null +++ b/iris_sdk/models/data/account_user.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.roles_list import RolesList +from iris_sdk.models.maps.account_user import AccountUserMap + +class AccountUser(AccountUserMap, BaseData): + + def __init__(self): + self.roles = RolesList() \ No newline at end of file diff --git a/iris_sdk/models/data/account_users.py b/iris_sdk/models/data/account_users.py new file mode 100644 index 0000000..c29b249 --- /dev/null +++ b/iris_sdk/models/data/account_users.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.account_user import AccountUser +from iris_sdk.models.maps.account_users import AccountUsersMap + +class AccountUsersData(AccountUsersMap, BaseData): + + def __init__(self): + self.user = BaseResourceList(AccountUser) \ No newline at end of file diff --git a/iris_sdk/models/data/activation_status.py b/iris_sdk/models/data/activation_status.py new file mode 100644 index 0000000..61430ad --- /dev/null +++ b/iris_sdk/models/data/activation_status.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.maps.activation_status import ActivationStatusMap + +class ActivationStatusData(ActivationStatusMap, BaseData): + + def __init__(self): + self.activated_telephone_numbers_list = TelephoneNumberList() + self.not_yet_activated_telephone_numbers_list = TelephoneNumberList() \ No newline at end of file diff --git a/iris_sdk/models/data/address.py b/iris_sdk/models/data/address.py new file mode 100644 index 0000000..40ba331 --- /dev/null +++ b/iris_sdk/models/data/address.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.address import AddressMap + +class Address(AddressMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/available_npa_nxx.py b/iris_sdk/models/data/available_npa_nxx.py new file mode 100644 index 0000000..414bcc0 --- /dev/null +++ b/iris_sdk/models/data/available_npa_nxx.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.available_npa_nxx_list import AvailableNpaNxxList +from iris_sdk.models.maps.available_npa_nxx import AvailableNpaNxxMap + +class AvailableNpaNxxData(AvailableNpaNxxMap, BaseData): + + def __init__(self): + self.available_npa_nxx_list = AvailableNpaNxxList() \ No newline at end of file diff --git a/iris_sdk/models/data/available_npa_nxx_list.py b/iris_sdk/models/data/available_npa_nxx_list.py new file mode 100644 index 0000000..54b7165 --- /dev/null +++ b/iris_sdk/models/data/available_npa_nxx_list.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.npa_nxx import NpaNxx +from iris_sdk.models.maps.available_npa_nxx_list import AvailableNpaNxxListMap + +class AvailableNpaNxxList(AvailableNpaNxxListMap, BaseData): + + @property + def items(self): + return self.available_npa_nxx.items + + def __init__(self): + self.available_npa_nxx = BaseResourceList(NpaNxx) \ No newline at end of file diff --git a/iris_sdk/models/data/available_numbers.py b/iris_sdk/models/data/available_numbers.py new file mode 100644 index 0000000..01a368d --- /dev/null +++ b/iris_sdk/models/data/available_numbers.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.data.telephone_number_detail_list import \ + TelephoneNumberDetailList +from iris_sdk.models.maps.available_numbers import AvailableNumbersMap + +class AvailableNumbersData(AvailableNumbersMap): + + @property + def total_count(self): + return self.result_count + @total_count.setter + def total_count(self, total_count): + self.result_count = total_count + + def __init__(self): + self.telephone_number_detail_list = TelephoneNumberDetailList() + self.telephone_number_list = TelephoneNumberList() \ No newline at end of file diff --git a/iris_sdk/models/data/callback_subscription.py b/iris_sdk/models/data/callback_subscription.py new file mode 100644 index 0000000..e9f50c8 --- /dev/null +++ b/iris_sdk/models/data/callback_subscription.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.callback_subscription import CallbackSubscriptionMap + +class CallbackSubscription(CallbackSubscriptionMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/calling_name.py b/iris_sdk/models/data/calling_name.py new file mode 100644 index 0000000..3f49451 --- /dev/null +++ b/iris_sdk/models/data/calling_name.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.calling_name import CallingNameMap + +class CallingName(CallingNameMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/cities.py b/iris_sdk/models/data/cities.py new file mode 100644 index 0000000..e71ad1f --- /dev/null +++ b/iris_sdk/models/data/cities.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.cities_list import CitiesList +from iris_sdk.models.maps.cities import CitiesMap + +class CitiesData(CitiesMap, BaseData): + + def __init__(self): + self.cities = CitiesList() \ No newline at end of file diff --git a/iris_sdk/models/data/cities_list.py b/iris_sdk/models/data/cities_list.py new file mode 100644 index 0000000..41f82b9 --- /dev/null +++ b/iris_sdk/models/data/cities_list.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.city import City +from iris_sdk.models.maps.cities_list import CitiesListMap + +class CitiesList(CitiesListMap, BaseData): + + def __init__(self): + self.city = BaseResourceList(City) \ No newline at end of file diff --git a/iris_sdk/models/data/cities_short_list.py b/iris_sdk/models/data/cities_short_list.py new file mode 100644 index 0000000..f39a4ee --- /dev/null +++ b/iris_sdk/models/data/cities_short_list.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.cities_short_list import CitiesShortListMap + +class CitiesShortList(CitiesShortListMap, BaseData): + + @property + def items(self): + return self.city.items + + def __init__(self): + self.city = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/city.py b/iris_sdk/models/data/city.py new file mode 100644 index 0000000..3f942c2 --- /dev/null +++ b/iris_sdk/models/data/city.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.city import CityMap + +class City(CityMap, BaseData): + + @property + def city(self): + return self.name + @city.setter + def city(self, city): + self.name = city \ No newline at end of file diff --git a/iris_sdk/models/data/completed_numbers.py b/iris_sdk/models/data/completed_numbers.py new file mode 100644 index 0000000..f493838 --- /dev/null +++ b/iris_sdk/models/data/completed_numbers.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.data.full_numbers import FullNumbers +from iris_sdk.models.maps.completed_numbers import CompletedNumbersMap + +class CompletedNumbers(CompletedNumbersMap, BaseData): + + @property + def items(self): + return self.telephone_number.items + + def __init__(self): + self.telephone_number = FullNumbers() + + def add(self, phone_number=None): + return self.telephone_number.add(phone_number) diff --git a/iris_sdk/models/data/contact.py b/iris_sdk/models/data/contact.py new file mode 100644 index 0000000..5ce2dbb --- /dev/null +++ b/iris_sdk/models/data/contact.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.contact import ContactMap + +class Contact(ContactMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/covered_rate_centers.py b/iris_sdk/models/data/covered_rate_centers.py new file mode 100644 index 0000000..4b1ecc1 --- /dev/null +++ b/iris_sdk/models/data/covered_rate_centers.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.links import Links +from iris_sdk.models.rate_center import RateCenter +from iris_sdk.models.maps.covered_rate_centers import CoveredRateCentersMap + +class CoveredRateCentersData(CoveredRateCentersMap, BaseData): + + def __init__(self, parent=None): + self.links = Links() + self.covered_rate_center = BaseResourceList(RateCenter, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/disc_numbers.py b/iris_sdk/models/data/disc_numbers.py new file mode 100644 index 0000000..2c24426 --- /dev/null +++ b/iris_sdk/models/data/disc_numbers.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.links import Links +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.maps.disc_numbers import DiscNumbersMap + +class DiscNumbersData(DiscNumbersMap, BaseData): + + def __init__(self): + self.links = Links() + self.telephone_numbers = TelephoneNumberList() \ No newline at end of file diff --git a/iris_sdk/models/data/disconnect.py b/iris_sdk/models/data/disconnect.py new file mode 100644 index 0000000..8eeea3f --- /dev/null +++ b/iris_sdk/models/data/disconnect.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.error_list import ErrorList +from iris_sdk.models.data.disconnect_telephone_number_order_type import \ + DisconnectTelephoneNumberOrderType +from iris_sdk.models.telephone_number import TelephoneNumber +from iris_sdk.models.maps.disconnect import DisconnectMap + +class DisconnectData(DisconnectMap, BaseData): + + @property + def count_of_tns(self): + return self.count_of_t_ns + @count_of_tns.setter + def count_of_tns(self, count_of_tns): + self.count_of_t_ns = count_of_tns + + def __init__(self): + self.disconnect_telephone_number_order_type = \ + DisconnectTelephoneNumberOrderType() + self.telephone_number_details = TelephoneNumber() diff --git a/iris_sdk/models/data/disconnect_telephone_number_order_type.py b/iris_sdk/models/data/disconnect_telephone_number_order_type.py new file mode 100644 index 0000000..09bf7dd --- /dev/null +++ b/iris_sdk/models/data/disconnect_telephone_number_order_type.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.maps.disconnect_telephone_number_order_type import \ + DisconnectTelephoneNumberOrderTypeMap + +class DisconnectTelephoneNumberOrderType( + DisconnectTelephoneNumberOrderTypeMap, BaseData): + + def __init__(self): + self.telephone_number_list = TelephoneNumberList() \ No newline at end of file diff --git a/iris_sdk/models/data/disconnects.py b/iris_sdk/models/data/disconnects.py new file mode 100644 index 0000000..d37fc3b --- /dev/null +++ b/iris_sdk/models/data/disconnects.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.links import Links +from iris_sdk.models.maps.disconnects import DisconnectsMap +from iris_sdk.models.disconnect import Disconnect + +class DisconnectsData(DisconnectsMap, BaseData): + + def __init__(self, parent=None): + self.links = Links() + self.order_id_user_id_date = BaseResourceList(Disconnect, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/dlda.py b/iris_sdk/models/data/dlda.py new file mode 100644 index 0000000..79fc796 --- /dev/null +++ b/iris_sdk/models/data/dlda.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.dlda import DldaMap +from iris_sdk.models.data.dlda_tn_groups import DldaTnGroups +from iris_sdk.models.data.error_list import ErrorList + +class DldaData(DldaMap, BaseData): + + @property + def count_of_tns(self): + return self.count_of_t_ns + @count_of_tns.setter + def count_of_tns(self, count_of_tns): + self.count_of_t_ns = count_of_tns + + def __init__(self): + self.dlda_tn_groups = DldaTnGroups() + self.error_list = ErrorList() \ No newline at end of file diff --git a/iris_sdk/models/data/dlda_order_response.py b/iris_sdk/models/data/dlda_order_response.py new file mode 100644 index 0000000..07508d3 --- /dev/null +++ b/iris_sdk/models/data/dlda_order_response.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.dlda_order_response import DldaOrderResponseMap + +class DldaOrderResponseData(DldaOrderResponseMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/dlda_tn_group.py b/iris_sdk/models/data/dlda_tn_group.py new file mode 100644 index 0000000..b834795 --- /dev/null +++ b/iris_sdk/models/data/dlda_tn_group.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.dlda_tn_group import DldaTnGroupMap +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.data.address import Address +from iris_sdk.models.data.listing_name import ListingName + +class DldaTnGroupData(DldaTnGroupMap, BaseData): + + def __init__(self): + self.telephone_numbers = TelephoneNumberList() + self.listing_name = ListingName() + self.address = Address() \ No newline at end of file diff --git a/iris_sdk/models/data/dlda_tn_groups.py b/iris_sdk/models/data/dlda_tn_groups.py new file mode 100644 index 0000000..edb0622 --- /dev/null +++ b/iris_sdk/models/data/dlda_tn_groups.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.dlda_tn_groups import DldaTnGroupsMap +from iris_sdk.models.data.dlda_tn_group import DldaTnGroupData + +class DldaTnGroups(DldaTnGroupsMap, BaseData): + + def __init__(self): + self.dlda_tn_group = BaseResourceList(DldaTnGroupData) diff --git a/iris_sdk/models/data/dldas.py b/iris_sdk/models/data/dldas.py new file mode 100644 index 0000000..84edae3 --- /dev/null +++ b/iris_sdk/models/data/dldas.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.dldas import DldasMap +from iris_sdk.models.dlda import Dlda + +class DldasData(DldasMap, BaseData): + + def __init__(self, parent=None): + self.order_id_user_id_date = BaseResourceList(Dlda, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/email_subscription.py b/iris_sdk/models/data/email_subscription.py new file mode 100644 index 0000000..2b142e0 --- /dev/null +++ b/iris_sdk/models/data/email_subscription.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.email_subscription import EmailSubscriptionMap + +class EmailSubscription(EmailSubscriptionMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/error.py b/iris_sdk/models/data/error.py new file mode 100644 index 0000000..ddf49f8 --- /dev/null +++ b/iris_sdk/models/data/error.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.error import ErrorMap + +class Error(ErrorMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/error_list.py b/iris_sdk/models/data/error_list.py new file mode 100644 index 0000000..001f159 --- /dev/null +++ b/iris_sdk/models/data/error_list.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.error import Error +from iris_sdk.models.maps.error_list import ErrorListMap + +class ErrorList(ErrorListMap, BaseData): + + def __init__(self): + self.error = BaseResourceList(Error) \ No newline at end of file diff --git a/iris_sdk/models/data/feature_dlda.py b/iris_sdk/models/data/feature_dlda.py new file mode 100644 index 0000000..91c926f --- /dev/null +++ b/iris_sdk/models/data/feature_dlda.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.address import Address +from iris_sdk.models.data.listing_name import ListingName +from iris_sdk.models.maps.feature_dlda import FeatureDldaMap + +class FeatureDlda(FeatureDldaMap, BaseData): + + def __init__(self): + self.address = Address() + self.listing_name = ListingName() \ No newline at end of file diff --git a/iris_sdk/models/data/feature_lidb.py b/iris_sdk/models/data/feature_lidb.py new file mode 100644 index 0000000..9efad63 --- /dev/null +++ b/iris_sdk/models/data/feature_lidb.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.feature_lidb import FeatureLidbMap + +class FeatureLidb(FeatureLidbMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/features.py b/iris_sdk/models/data/features.py new file mode 100644 index 0000000..b8caa41 --- /dev/null +++ b/iris_sdk/models/data/features.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.feature_dlda import FeatureDlda +from iris_sdk.models.data.feature_lidb import FeatureLidb +from iris_sdk.models.maps.features import FeaturesMap + +class Features(FeaturesMap, BaseData): + + def __init__(self): + self.dlda = FeatureDlda() + self.lidb = FeatureLidb() \ No newline at end of file diff --git a/iris_sdk/models/data/file_data.py b/iris_sdk/models/data/file_data.py new file mode 100644 index 0000000..4d7dc9a --- /dev/null +++ b/iris_sdk/models/data/file_data.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.file_meta_data import FileMetaDataData +from iris_sdk.models.maps.file_data import FileDataMap + +class FileData(FileDataMap, BaseData): + + def __init__(self): + self.file_meta_data = FileMetaDataData() \ No newline at end of file diff --git a/iris_sdk/models/data/file_meta_data.py b/iris_sdk/models/data/file_meta_data.py new file mode 100644 index 0000000..8be759d --- /dev/null +++ b/iris_sdk/models/data/file_meta_data.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.file_meta_data import FileMetaDataMap + +class FileMetaDataData(FileMetaDataMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/full_numbers.py b/iris_sdk/models/data/full_numbers.py new file mode 100644 index 0000000..c85dd6b --- /dev/null +++ b/iris_sdk/models/data/full_numbers.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.full_numbers import FullNumbersMap + +class FullNumbers(FullNumbersMap, BaseData): + + @property + def items(self): + return self.full_number.items + + def __init__(self): + self.full_number = BaseResourceSimpleList() + + def add(self, phone_number=None): + return self.full_number.add(phone_number) diff --git a/iris_sdk/models/data/history.py b/iris_sdk/models/data/history.py new file mode 100644 index 0000000..47186cc --- /dev/null +++ b/iris_sdk/models/data/history.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.order_history import OrderHistoryData +from iris_sdk.models.maps.history import HistoryMap + +class HistoryData(HistoryMap, BaseData): + + def __init__(self): + self.order_history = BaseResourceList(OrderHistoryData) \ No newline at end of file diff --git a/iris_sdk/models/data/host.py b/iris_sdk/models/data/host.py new file mode 100644 index 0000000..1bdc907 --- /dev/null +++ b/iris_sdk/models/data/host.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.host import HostMap + +class Host(HostMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/hosts.py b/iris_sdk/models/data/hosts.py new file mode 100644 index 0000000..33e1dd2 --- /dev/null +++ b/iris_sdk/models/data/hosts.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.host import Host +from iris_sdk.models.maps.hosts import HostsMap + +class Hosts(HostsMap, BaseData): + + @property + def items(self): + return self.host.items + + def __init__(self): + self.host = BaseResourceList(Host) + + def add(self): + return self.host.add() \ No newline at end of file diff --git a/iris_sdk/models/data/import_tn_checker.py b/iris_sdk/models/data/import_tn_checker.py new file mode 100644 index 0000000..ff96c76 --- /dev/null +++ b/iris_sdk/models/data/import_tn_checker.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.import_tn_checker_list import TelephoneNumbers +from iris_sdk.models.maps.import_tn_checker import ImportTnCheckerMap + +class ImportTnCheckerData(ImportTnCheckerMap, BaseData): + + def __init__(self): + self.telephone_numbers = TelephoneNumbers() diff --git a/iris_sdk/models/data/import_tn_checker_list.py b/iris_sdk/models/data/import_tn_checker_list.py new file mode 100644 index 0000000..82f9e14 --- /dev/null +++ b/iris_sdk/models/data/import_tn_checker_list.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.import_tn_checker_list import TnListMap + +class TelephoneNumbers(TnListMap, BaseData): + + @property + def items(self): + return self.telephone_number.items + + def __init__(self): + self.telephone_number = BaseResourceSimpleList() + + def add(self, phone_number=None): + return self.telephone_number.add(phone_number) diff --git a/iris_sdk/models/data/import_tn_checker_payload.py b/iris_sdk/models/data/import_tn_checker_payload.py new file mode 100644 index 0000000..bc0a17f --- /dev/null +++ b/iris_sdk/models/data/import_tn_checker_payload.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.data.import_tn_checker_list import TelephoneNumbers + +class ImportTnCheckerResponse(TelephoneNumbers, BaseData): + + @property + def items(self): + return self.telephone_numbers.items + + def __init__(self): + self.telephone_numbers = TelephoneNumbers() diff --git a/iris_sdk/models/data/import_tn_checker_response.py b/iris_sdk/models/data/import_tn_checker_response.py new file mode 100644 index 0000000..b5ceced --- /dev/null +++ b/iris_sdk/models/data/import_tn_checker_response.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.import_tn_checker_payload import ImportTnCheckerResponse +from iris_sdk.models.maps.import_tn_checker_response import ImportTnCheckerResponseMap + +class ImportTnCheckerResponseData(ImportTnCheckerResponseMap, BaseData): + + def __init__(self): + self.import_tn_checker_payload = ImportTnCheckerResponse() diff --git a/iris_sdk/models/data/in_service_numbers.py b/iris_sdk/models/data/in_service_numbers.py new file mode 100644 index 0000000..a719164 --- /dev/null +++ b/iris_sdk/models/data/in_service_numbers.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.links import Links +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.maps.in_service_numbers import InServiceNumbersMap + +class InServiceNumbersData(InServiceNumbersMap, BaseData): + + def __init__(self): + self.links = Links() + self.telephone_numbers = TelephoneNumberList() \ No newline at end of file diff --git a/iris_sdk/models/data/lidb.py b/iris_sdk/models/data/lidb.py new file mode 100644 index 0000000..fd021ec --- /dev/null +++ b/iris_sdk/models/data/lidb.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.lidb import LidbMap +from iris_sdk.models.data.lidb_tn_groups import LidbTnGroups +from iris_sdk.models.data.error_list import ErrorList + +class LidbData(LidbMap, BaseData): + + @property + def count_of_tns(self): + return self.count_of_t_ns + @count_of_tns.setter + def count_of_tns(self, count_of_tns): + self.count_of_t_ns = count_of_tns + + def __init__(self): + self.lidb_tn_groups = LidbTnGroups() + self.error_list = ErrorList() \ No newline at end of file diff --git a/iris_sdk/models/data/lidb_tn_group.py b/iris_sdk/models/data/lidb_tn_group.py new file mode 100644 index 0000000..8c39883 --- /dev/null +++ b/iris_sdk/models/data/lidb_tn_group.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.lidb_tn_group import LidbTnGroupMap +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList + +class LidbTnGroupData(LidbTnGroupMap, BaseData): + + def __init__(self): + self.telephone_numbers = TelephoneNumberList() \ No newline at end of file diff --git a/iris_sdk/models/data/lidb_tn_groups.py b/iris_sdk/models/data/lidb_tn_groups.py new file mode 100644 index 0000000..65fa6f2 --- /dev/null +++ b/iris_sdk/models/data/lidb_tn_groups.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.lidb_tn_group import LidbTnGroupData +from iris_sdk.models.maps.lidb_tn_groups import LidbTnGroupsMap + +class LidbTnGroups(LidbTnGroupsMap, BaseData): + + def __init__(self): + self.lidb_tn_group = BaseResourceList(LidbTnGroupData) diff --git a/iris_sdk/models/data/lidbs.py b/iris_sdk/models/data/lidbs.py new file mode 100644 index 0000000..de5ab22 --- /dev/null +++ b/iris_sdk/models/data/lidbs.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.lidbs import LidbsMap +from iris_sdk.models.lidb import Lidb + +class LidbsData(LidbsMap, BaseData): + + def __init__(self, parent=None): + self.order_id_user_id_date = BaseResourceList(Lidb, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/line_option_order.py b/iris_sdk/models/data/line_option_order.py new file mode 100644 index 0000000..afb9db5 --- /dev/null +++ b/iris_sdk/models/data/line_option_order.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.line_option_order import LineOptionOrderMap +from iris_sdk.models.data.tn_line_options import TnLineOptionsData + +class LineOptionOrderData(LineOptionOrderMap, BaseData): + + def __init__(self, parent=None): + self.tn_line_options = BaseResourceList(TnLineOptionsData) \ No newline at end of file diff --git a/iris_sdk/models/data/line_option_order_response.py b/iris_sdk/models/data/line_option_order_response.py new file mode 100644 index 0000000..1189ec7 --- /dev/null +++ b/iris_sdk/models/data/line_option_order_response.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.line_option_order_response import LineOptionOrderResponseMap +from iris_sdk.models.data.line_options import LineOptionsData + +class LineOptionOrderResponseData(LineOptionOrderResponseMap, BaseData): + + def __init__(self): + self.line_options = BaseResourceList(LineOptionsData) \ No newline at end of file diff --git a/iris_sdk/models/data/line_options.py b/iris_sdk/models/data/line_options.py new file mode 100644 index 0000000..ef83a92 --- /dev/null +++ b/iris_sdk/models/data/line_options.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.line_options import LineOptionsMap +from iris_sdk.models.data.error_list import ErrorList +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList + +class LineOptionsData(LineOptionsMap, BaseData): + + def __init__(self, parent=None): + self.complete_numbers = TelephoneNumberList() + self.errors = ErrorList() \ No newline at end of file diff --git a/iris_sdk/models/data/links.py b/iris_sdk/models/data/links.py new file mode 100644 index 0000000..1451f14 --- /dev/null +++ b/iris_sdk/models/data/links.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +from future.standard_library import install_aliases +install_aliases() + +from urllib.parse import parse_qs, urlparse + +from iris_sdk.include.xml_consts import XML_PARAM_PAGE +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.links import LinksMap + +LINK_PREFIX = "<" +LINK_SUFFIX = ">" + +class Links(LinksMap, BaseData): + + _first = None + _next = None + + @property + def first(self): + return self._first + @first.setter + def first(self, first): + if first is None: + self._first = None + return + url =(first or "").partition(LINK_PREFIX)[2].partition(LINK_SUFFIX)[0] + params = parse_qs(urlparse(url).query) + try: + self._first = params[XML_PARAM_PAGE] + except: + self._first = None + + @property + def next(self): + return self._next + @next.setter + def next(self, next): + if next is None: + self._next = None + return + url = (next or "").partition(LINK_PREFIX)[2].partition(LINK_SUFFIX)[0] + params = parse_qs(urlparse(url).query) + try: + self._next = params[XML_PARAM_PAGE] + except: + self._next = None \ No newline at end of file diff --git a/iris_sdk/models/data/listing_name.py b/iris_sdk/models/data/listing_name.py new file mode 100644 index 0000000..09f4320 --- /dev/null +++ b/iris_sdk/models/data/listing_name.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.listing_name import ListingNameMap + +class ListingName(ListingNameMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/lnp_losing_carriers.py b/iris_sdk/models/data/lnp_losing_carriers.py new file mode 100644 index 0000000..a5ae8ee --- /dev/null +++ b/iris_sdk/models/data/lnp_losing_carriers.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.losing_carrier_tn_list import LosingCarrierTnList +from iris_sdk.models.maps.lnp_losing_carriers import LnpLosingCarriersMap + +class LnpLosingCarriers(LnpLosingCarriersMap, BaseData): + + def __init__(self): + self.losing_carrier_tn_list = LosingCarrierTnList() \ No newline at end of file diff --git a/iris_sdk/models/data/lnp_rate_center.py b/iris_sdk/models/data/lnp_rate_center.py new file mode 100644 index 0000000..5d47904 --- /dev/null +++ b/iris_sdk/models/data/lnp_rate_center.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.tier_list import TierList +from iris_sdk.models.data.tn_list import TnList +from iris_sdk.models.maps.lnp_rate_center import LnpRateCenterMap + +class LnpRateCenter(LnpRateCenterMap, BaseData): + + def __init__(self): + self.tiers = TierList() + self.tn_list = TnList() \ No newline at end of file diff --git a/iris_sdk/models/data/lnp_rate_center_list.py b/iris_sdk/models/data/lnp_rate_center_list.py new file mode 100644 index 0000000..25e2701 --- /dev/null +++ b/iris_sdk/models/data/lnp_rate_center_list.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.lnp_rate_center import LnpRateCenter +from iris_sdk.models.maps.lnp_rate_center_list import LnpRateCenterListMap + +class LnpRateCenterList(LnpRateCenterListMap, BaseData): + + @property + def items(self): + return self.rate_center_group.items + + def __init__(self): + self.rate_center_group = BaseResourceList(LnpRateCenter) \ No newline at end of file diff --git a/iris_sdk/models/data/lnpchecker.py b/iris_sdk/models/data/lnpchecker.py new file mode 100644 index 0000000..f906cfe --- /dev/null +++ b/iris_sdk/models/data/lnpchecker.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.tn_list import TnList +from iris_sdk.models.maps.lnpchecker import LnpCheckerMap + +class LnpCheckerData(LnpCheckerMap, BaseData): + + def __init__(self): + self.tn_list = TnList() \ No newline at end of file diff --git a/iris_sdk/models/data/lnpchecker_response.py b/iris_sdk/models/data/lnpchecker_response.py new file mode 100644 index 0000000..518ae95 --- /dev/null +++ b/iris_sdk/models/data/lnpchecker_response.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.lnp_losing_carriers import LnpLosingCarriers +from iris_sdk.models.data.lnp_rate_center_list import LnpRateCenterList +from iris_sdk.models.data.tn_list import TnList +from iris_sdk.models.maps.lnpchecker_response import LnpCheckerResponseMap + +class LnpCheckerResponseData(LnpCheckerResponseMap, BaseData): + + def __init__(self): + self.partner_supported_rate_centers = LnpRateCenterList() + self.portable_numbers = TnList() + self.supported_losing_carriers = LnpLosingCarriers() + self.supported_rate_centers = LnpRateCenterList() + self.unsupported_rate_centers = LnpRateCenterList() \ No newline at end of file diff --git a/iris_sdk/models/data/loas.py b/iris_sdk/models/data/loas.py new file mode 100644 index 0000000..1b0b867 --- /dev/null +++ b/iris_sdk/models/data/loas.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList, \ + BaseResourceSimpleList +from iris_sdk.models.data.file_data import FileData +from iris_sdk.models.maps.loas import LoasMap + +class LoasData(LoasMap, BaseData): + + def __init__(self): + self.file_data = BaseResourceList(FileData) + self.file_names = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/local_rate_center_list.py b/iris_sdk/models/data/local_rate_center_list.py new file mode 100644 index 0000000..a2c3d78 --- /dev/null +++ b/iris_sdk/models/data/local_rate_center_list.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.local_rate_center_list import LocalRateCenterListMap + +class LocalRateCenterList(LocalRateCenterListMap, BaseData): + + @property + def items(self): + return self.local_rate_center_id.items + + def __init__(self): + self.local_rate_center_id = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/location.py b/iris_sdk/models/data/location.py new file mode 100644 index 0000000..b68e30f --- /dev/null +++ b/iris_sdk/models/data/location.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.tn_rate_centers_list import TnRateCentersList +from iris_sdk.models.maps.location import LocationMap + +class Location(LocationMap, BaseData): + + def __init__(self): + self.rate_centers = BaseResourceList(TnRateCentersList) \ No newline at end of file diff --git a/iris_sdk/models/data/losing_carrier_tn_list.py b/iris_sdk/models/data/losing_carrier_tn_list.py new file mode 100644 index 0000000..35bec8b --- /dev/null +++ b/iris_sdk/models/data/losing_carrier_tn_list.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.tn_list import TnList +from iris_sdk.models.maps.losing_carrier_tn_list import LosingCarrierTnListMap + +class LosingCarrierTnList(LosingCarrierTnListMap, BaseData): + + def __init__(self): + self.tn_list = TnList() \ No newline at end of file diff --git a/iris_sdk/models/data/movetns.py b/iris_sdk/models/data/movetns.py new file mode 100644 index 0000000..5a9b532 --- /dev/null +++ b/iris_sdk/models/data/movetns.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.movetns import MovetnsMap + +class MovetnsData(MovetnsMap, BaseData): + + def __init__(self): + self.full_number = BaseResourceSimpleList() + + def add(self, phone_number): + return self.full_number.add(phone_number) \ No newline at end of file diff --git a/iris_sdk/models/data/note.py b/iris_sdk/models/data/note.py new file mode 100644 index 0000000..98b5789 --- /dev/null +++ b/iris_sdk/models/data/note.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.note import NoteMap + +class NoteData(NoteMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/notes.py b/iris_sdk/models/data/notes.py new file mode 100644 index 0000000..de13560 --- /dev/null +++ b/iris_sdk/models/data/notes.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.note import Note +from iris_sdk.models.maps.notes import NotesMap + +class NotesData(NotesMap, BaseData): + + def __init__(self, parent=None): + self.note = BaseResourceList(Note, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/npa_nxx.py b/iris_sdk/models/data/npa_nxx.py new file mode 100644 index 0000000..b738fce --- /dev/null +++ b/iris_sdk/models/data/npa_nxx.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.npa_nxx import NpaNxxMap + +class NpaNxx(NpaNxxMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/npanxx_list.py b/iris_sdk/models/data/npanxx_list.py new file mode 100644 index 0000000..82192a5 --- /dev/null +++ b/iris_sdk/models/data/npanxx_list.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.npanxx_list import NpanxxListMap + +class NpanxxList(NpanxxListMap, BaseData): + + @property + def items(self): + return self.npanxx.items + + @property + def npa_nxx_x(self): + return self.npanxx + + def __init__(self): + self.npanxx = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/ord/__init__.py b/iris_sdk/models/data/ord/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/iris_sdk/models/data/ord/area_code_search_order.py b/iris_sdk/models/data/ord/area_code_search_order.py new file mode 100644 index 0000000..05b85fd --- /dev/null +++ b/iris_sdk/models/data/ord/area_code_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.area_code_search_order import \ + AreaCodeSearchOrderMap + +class AreaCodeSearchOrder(AreaCodeSearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/city_search_order.py b/iris_sdk/models/data/ord/city_search_order.py new file mode 100644 index 0000000..e22ce07 --- /dev/null +++ b/iris_sdk/models/data/ord/city_search_order.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.city_search_order import CitySearchOrderMap + +class CitySearchOrder(CitySearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/existing_search_order.py b/iris_sdk/models/data/ord/existing_search_order.py new file mode 100644 index 0000000..09a762b --- /dev/null +++ b/iris_sdk/models/data/ord/existing_search_order.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.maps.ord.existing_search_order import \ + ExistingSearchOrderMap +from iris_sdk.models.data.reservation_list import ReservationList + +class ExistingSearchOrder(ExistingSearchOrderMap, BaseData): + + def __init__(self): + self.reservation_id_list = ReservationList() + self.telephone_number_list = TelephoneNumberList() \ No newline at end of file diff --git a/iris_sdk/models/data/ord/lata_search_order.py b/iris_sdk/models/data/ord/lata_search_order.py new file mode 100644 index 0000000..8582abb --- /dev/null +++ b/iris_sdk/models/data/ord/lata_search_order.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.lata_search_order import LataSearchOrderMap + +class LataSearchOrder(LataSearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/npa_search_order.py b/iris_sdk/models/data/ord/npa_search_order.py new file mode 100644 index 0000000..8cba4b2 --- /dev/null +++ b/iris_sdk/models/data/ord/npa_search_order.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.npa_search_order import NpaSearchOrderMap + +class NpaSearchOrder(NpaSearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/rate_center_search_order.py b/iris_sdk/models/data/ord/rate_center_search_order.py new file mode 100644 index 0000000..167cfac --- /dev/null +++ b/iris_sdk/models/data/ord/rate_center_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.rate_center_search_order import \ + RateCenterSearchOrderMap + +class RateCenterSearchOrder(RateCenterSearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/state_search_order.py b/iris_sdk/models/data/ord/state_search_order.py new file mode 100644 index 0000000..59325f9 --- /dev/null +++ b/iris_sdk/models/data/ord/state_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.state_search_order import \ + StateSearchOrderMap + +class StateSearchOrder(StateSearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/vanity_search_order.py b/iris_sdk/models/data/ord/vanity_search_order.py new file mode 100644 index 0000000..7d384f8 --- /dev/null +++ b/iris_sdk/models/data/ord/vanity_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.vanity_search_order import \ + VanitySearchOrderMap + +class VanitySearchOrder(VanitySearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/wildcard_search_order.py b/iris_sdk/models/data/ord/wildcard_search_order.py new file mode 100644 index 0000000..5240b7f --- /dev/null +++ b/iris_sdk/models/data/ord/wildcard_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.wildcard_search_order import \ + WildcardSearchOrderMap + +class WildcardSearchOrder(WildcardSearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/ord/zip_search_order.py b/iris_sdk/models/data/ord/zip_search_order.py new file mode 100644 index 0000000..5bf94ef --- /dev/null +++ b/iris_sdk/models/data/ord/zip_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.ord.zip_search_order import \ + ZipSearchOrderMap + +class ZipSearchOrder(ZipSearchOrderMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/order.py b/iris_sdk/models/data/order.py new file mode 100644 index 0000000..69fef48 --- /dev/null +++ b/iris_sdk/models/data/order.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.error_list import ErrorList +from iris_sdk.models.data.ord.area_code_search_order import \ + AreaCodeSearchOrder +from iris_sdk.models.data.ord.city_search_order import \ + CitySearchOrder +from iris_sdk.models.data.ord.existing_search_order import \ + ExistingSearchOrder +from iris_sdk.models.data.ord.lata_search_order import \ + LataSearchOrder +from iris_sdk.models.data.ord.npa_search_order import \ + NpaSearchOrder +from iris_sdk.models.data.ord.rate_center_search_order import \ + RateCenterSearchOrder +from iris_sdk.models.data.ord.state_search_order import \ + StateSearchOrder +from iris_sdk.models.data.ord.vanity_search_order import \ + VanitySearchOrder +from iris_sdk.models.data.ord.wildcard_search_order import \ + WildcardSearchOrder +from iris_sdk.models.data.ord.zip_search_order import \ + ZipSearchOrder +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.maps.order import OrderMap + +class OrderData(OrderMap, BaseData): + + @property + def count_of_tns(self): + return self.count_of_t_ns + @count_of_tns.setter + def count_of_tns(self, count_of_tns): + self.count_of_t_ns = count_of_tns + + def __init__(self): + self.area_code_search_and_order_type = AreaCodeSearchOrder() + self.city_search_and_order_type = CitySearchOrder() + self.existing_telephone_number_order_type = ExistingSearchOrder() + self.lata_search_and_order_type = LataSearchOrder() + self.npanxx_search_and_order_type = NpaSearchOrder() + self.rate_center_search_and_order_type = RateCenterSearchOrder() + self.state_search_and_order_type = StateSearchOrder() + self.telephone_number_list = TelephoneNumberList() + self.toll_free_vanity_search_and_order_type = VanitySearchOrder() + self.toll_free_wild_char_search_and_order_type = WildcardSearchOrder() + self.zip_search_and_order_type = ZipSearchOrder() + + def add_reservation(self, id): + return self.existing_telephone_number_order_type.\ + reservation_id_list.add(id) + + def add_tn(self, number): + return self.existing_telephone_number_order_type.\ + telephone_number_list.add(number) \ No newline at end of file diff --git a/iris_sdk/models/data/order_history.py b/iris_sdk/models/data/order_history.py new file mode 100644 index 0000000..cdf053a --- /dev/null +++ b/iris_sdk/models/data/order_history.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.order_history import OrderHistoryMap + +class OrderHistoryData(OrderHistoryMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/order_response.py b/iris_sdk/models/data/order_response.py new file mode 100644 index 0000000..5161db4 --- /dev/null +++ b/iris_sdk/models/data/order_response.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.error_list import ErrorList +from iris_sdk.models.data.full_numbers import FullNumbers +from iris_sdk.models.data.completed_numbers import CompletedNumbers +from iris_sdk.models.maps.order_response import OrderResponseMap + +class OrderResponseData(OrderResponseMap, BaseData): + + def __init__(self): + self.completed_numbers = CompletedNumbers() + self.error_list = ErrorList() + self.failed_numbers = FullNumbers() diff --git a/iris_sdk/models/data/order_tns.py b/iris_sdk/models/data/order_tns.py new file mode 100644 index 0000000..d36440d --- /dev/null +++ b/iris_sdk/models/data/order_tns.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.order_tns import OrderTnsMap + +class OrderTnsData(OrderTnsMap, BaseData): + + def __init__(self): + self.telephone_number = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/orders.py b/iris_sdk/models/data/orders.py new file mode 100644 index 0000000..180c920 --- /dev/null +++ b/iris_sdk/models/data/orders.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.links import Links +from iris_sdk.models.maps.orders import OrdersMap +from iris_sdk.models.order import Order + +class OrdersData(OrdersMap, BaseData): + + def __init__(self, parent=None): + self.links = Links() + self.order_id_user_id_date = BaseResourceList(Order, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/permission.py b/iris_sdk/models/data/permission.py new file mode 100644 index 0000000..a4f867b --- /dev/null +++ b/iris_sdk/models/data/permission.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.permission import PermissionMap + +class Permission(PermissionMap, BaseData): + + @property + def name(self): + return self.permission_name + @name.setter + def name(self, name): + self.permission_name = name \ No newline at end of file diff --git a/iris_sdk/models/data/permissions_list.py b/iris_sdk/models/data/permissions_list.py new file mode 100644 index 0000000..779485d --- /dev/null +++ b/iris_sdk/models/data/permissions_list.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.permission import Permission +from iris_sdk.models.maps.permissions_list import PermissionsListMap + +class PermissionsList(PermissionsListMap, BaseData): + + @property + def items(self): + return self.permission.items + + def __init__(self): + self.permission = BaseResourceList(Permission) \ No newline at end of file diff --git a/iris_sdk/models/data/phone_number_list.py b/iris_sdk/models/data/phone_number_list.py new file mode 100644 index 0000000..928ab7b --- /dev/null +++ b/iris_sdk/models/data/phone_number_list.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.phone_number_list import PhoneNumberListMap + +class PhoneNumberList(PhoneNumberListMap, BaseData): + + @property + def items(self): + return self.phone_number.items + + def __init__(self): + self.phone_number = BaseResourceSimpleList() + + def add(self, phone_number=None): + return self.phone_number.add(phone_number) \ No newline at end of file diff --git a/iris_sdk/models/data/portin.py b/iris_sdk/models/data/portin.py new file mode 100644 index 0000000..75f6a69 --- /dev/null +++ b/iris_sdk/models/data/portin.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.error import Error +from iris_sdk.models.data.phone_number_list import PhoneNumberList +from iris_sdk.models.data.subscriber import Subscriber +from iris_sdk.models.data.wireless_info import WirelessInfo +from iris_sdk.models.maps.portin import PortInMap + +class PortInData(PortInMap, BaseData): + + @property + def count_of_tns(self): + return self.count_of_t_ns + @count_of_tns.setter + def count_of_tns(self, count_of_tns): + self.count_of_t_ns = count_of_tns + + def __init__(self): + self.errors = Error() + self.list_of_phone_numbers = PhoneNumberList() + self.status = Error() + self.subscriber = Subscriber() + self.wireless_info = WirelessInfo() + + def add_tn(self, number): + return self.list_of_phone_numbers.items.add(number) \ No newline at end of file diff --git a/iris_sdk/models/data/portins.py b/iris_sdk/models/data/portins.py new file mode 100644 index 0000000..d05e8f6 --- /dev/null +++ b/iris_sdk/models/data/portins.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.links import Links +from iris_sdk.models.maps.portins import PortInsMap +from iris_sdk.models.portin import PortIn + +class PortInsData(PortInsMap, BaseData): + + def __init__(self, parent=None): + self.links = Links() + self.lnp_port_info_for_given_status = BaseResourceList(PortIn, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/portouts.py b/iris_sdk/models/data/portouts.py new file mode 100644 index 0000000..44da99d --- /dev/null +++ b/iris_sdk/models/data/portouts.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.links import Links +from iris_sdk.models.maps.portins import PortInsMap +from iris_sdk.models.portout import PortOut + +class PortOutsData(PortInsMap, BaseData): + + def __init__(self, parent=None): + self.links = Links() + self.lnp_port_info_for_given_status = BaseResourceList(PortOut, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/rate_center.py b/iris_sdk/models/data/rate_center.py new file mode 100644 index 0000000..3537611 --- /dev/null +++ b/iris_sdk/models/data/rate_center.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.cities_short_list import CitiesShortList +from iris_sdk.models.data.local_rate_center_list import LocalRateCenterList +from iris_sdk.models.data.npanxx_list import NpanxxList +from iris_sdk.models.data.tier_list import TierList +from iris_sdk.models.data.zip_code_list import ZipCodeList +from iris_sdk.models.maps.rate_center import RateCenterMap + +class RateCenterData(RateCenterMap, BaseData): + + def __init__(self): + self.cities = CitiesShortList() + self.local_rate_centers = LocalRateCenterList() + self.npa_nxx_xs = NpanxxList() + self.tiers = TierList() + self.zip_codes = ZipCodeList() \ No newline at end of file diff --git a/iris_sdk/models/data/rate_centers.py b/iris_sdk/models/data/rate_centers.py new file mode 100644 index 0000000..0d4bbf1 --- /dev/null +++ b/iris_sdk/models/data/rate_centers.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.rate_centers_list import RateCentersList +from iris_sdk.models.maps.rate_centers import RateCentersMap + +class RateCentersData(RateCentersMap, BaseData): + + @property + def total_count(self): + return self.result_count + @total_count.setter + def total_count(self, total_count): + self.result_count = total_count + + def __init__(self): + self.rate_centers = RateCentersList() \ No newline at end of file diff --git a/iris_sdk/models/data/rate_centers_list.py b/iris_sdk/models/data/rate_centers_list.py new file mode 100644 index 0000000..f19e537 --- /dev/null +++ b/iris_sdk/models/data/rate_centers_list.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.rate_center import RateCenterData +from iris_sdk.models.maps.rate_centers_list import RateCentersListMap + +class RateCentersList(RateCentersListMap, BaseData): + + def __init__(self): + self.rate_center = BaseResourceList(RateCenterData) \ No newline at end of file diff --git a/iris_sdk/models/data/reservation.py b/iris_sdk/models/data/reservation.py new file mode 100644 index 0000000..71485a0 --- /dev/null +++ b/iris_sdk/models/data/reservation.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.reservation import ReservationMap + +class ReservationData(ReservationMap, BaseData): + + @property + def account(self): + return self.account_id + @account.setter + def account(self, account): + self.account_id = account \ No newline at end of file diff --git a/iris_sdk/models/data/reservation_list.py b/iris_sdk/models/data/reservation_list.py new file mode 100644 index 0000000..606451c --- /dev/null +++ b/iris_sdk/models/data/reservation_list.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.reservation_list import ReservationListMap + +class ReservationList(ReservationListMap, BaseData): + + @property + def items(self): + return self.reservation_id.items + + def __init__(self): + self.reservation_id = BaseResourceSimpleList() + + def add(self, id=None): + return self.reservation_id.add(id) \ No newline at end of file diff --git a/iris_sdk/models/data/response_status.py b/iris_sdk/models/data/response_status.py new file mode 100644 index 0000000..f33f9a7 --- /dev/null +++ b/iris_sdk/models/data/response_status.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.response_status import ResponseStatusMap + +class ResponseStatus(ResponseStatusMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/role.py b/iris_sdk/models/data/role.py new file mode 100644 index 0000000..8e73d3d --- /dev/null +++ b/iris_sdk/models/data/role.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.permissions_list import PermissionsList +from iris_sdk.models.maps.role import RoleMap + +class Role(RoleMap, BaseData): + + @property + def name(self): + return self.role_name + @name.setter + def name(self, name): + self.role_name = name + + def __init__(self): + self.permissions = PermissionsList() \ No newline at end of file diff --git a/iris_sdk/models/data/roles_list.py b/iris_sdk/models/data/roles_list.py new file mode 100644 index 0000000..263a796 --- /dev/null +++ b/iris_sdk/models/data/roles_list.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.role import Role +from iris_sdk.models.maps.roles_list import RolesListMap + +class RolesList(RolesListMap, BaseData): + + @property + def items(self): + return self.role.items + + def __init__(self): + self.role = BaseResourceList(Role) \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peer.py b/iris_sdk/models/data/sip_peer.py new file mode 100644 index 0000000..e601b6d --- /dev/null +++ b/iris_sdk/models/data/sip_peer.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +from iris_sdk.models.data.address import Address +from iris_sdk.models.data.calling_name import CallingName +from iris_sdk.models.data.hosts import Hosts +from iris_sdk.models.data.termination_hosts import TerminationHosts +from iris_sdk.models.maps.sip_peer import SipPeerMap + +class SipPeerData(SipPeerMap): + + @property + def name(self): + return self.peer_name + @name.setter + def name(self, name): + self.peer_name = name + + def __init__(self): + self.address = Address() + self.calling_name = CallingName() + self.sms_hosts = Hosts() + self.termination_hosts = TerminationHosts() + self.voice_hosts = Hosts() \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peer_host.py b/iris_sdk/models/data/sip_peer_host.py new file mode 100644 index 0000000..1173211 --- /dev/null +++ b/iris_sdk/models/data/sip_peer_host.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.hosts import Hosts +from iris_sdk.models.data.termination_hosts import TerminationHosts +from iris_sdk.models.maps.sip_peer_host import SipPeerHostMap + +class SipPeerHost(SipPeerHostMap, BaseData): + + def __init__(self): + self.sms_hosts = Hosts() + self.termination_hosts = Hosts() + self.voice_hosts = Hosts() \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peer_hosts.py b/iris_sdk/models/data/sip_peer_hosts.py new file mode 100644 index 0000000..c0164f1 --- /dev/null +++ b/iris_sdk/models/data/sip_peer_hosts.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.sip_peer_host import SipPeerHost +from iris_sdk.models.maps.sip_peer_hosts import SipPeerHostsMap + +class SipPeerHosts(SipPeerHostsMap, BaseData): + + @property + def items(self): + return self.sip_peer_host.items + + def __init__(self): + self.sip_peer_host = BaseResourceList(SipPeerHost) \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peer_telephone_number.py b/iris_sdk/models/data/sip_peer_telephone_number.py new file mode 100644 index 0000000..90c9bef --- /dev/null +++ b/iris_sdk/models/data/sip_peer_telephone_number.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.tn_attributes import TnAttributes +from iris_sdk.models.maps.sip_peer_telephone_number import \ + SipPeerTelephoneNumberMap + +class SipPeerTelephoneNumberData(SipPeerTelephoneNumberMap, BaseData): + + def __init__(self): + self.tn_attributes = TnAttributes() \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peer_telephone_numbers.py b/iris_sdk/models/data/sip_peer_telephone_numbers.py new file mode 100644 index 0000000..4892aa1 --- /dev/null +++ b/iris_sdk/models/data/sip_peer_telephone_numbers.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.sip_peer_telephone_numbers import \ + SipPeerTelephoneNumbersMap +from iris_sdk.models.sip_peer_telephone_number import \ + SipPeerTelephoneNumber + +class SipPeerTelephoneNumbers(SipPeerTelephoneNumbersMap, BaseData): + + @property + def items(self): + return self.sip_peer_telephone_number.items + + def __init__(self, parent=None): + self.sip_peer_telephone_number = BaseResourceList( + SipPeerTelephoneNumber, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peer_tns.py b/iris_sdk/models/data/sip_peer_tns.py new file mode 100644 index 0000000..c696e78 --- /dev/null +++ b/iris_sdk/models/data/sip_peer_tns.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.sip_peer_telephone_numbers import \ + SipPeerTelephoneNumbers +from iris_sdk.models.maps.sip_peer_tns import SipPeerTnsMap + +class SipPeerTnsData(SipPeerTnsMap, BaseData): + + def __init__(self, parent=None): + self.sip_peer_telephone_numbers = SipPeerTelephoneNumbers(parent) \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peer_totaltns.py b/iris_sdk/models/data/sip_peer_totaltns.py new file mode 100644 index 0000000..e5c05bb --- /dev/null +++ b/iris_sdk/models/data/sip_peer_totaltns.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.sip_peer_totaltns import SipPeerTotaltnsMap + +class SipPeerTotaltnsData(SipPeerTotaltnsMap, BaseData): + + @property + def count(self): + return self.sip_peer_telephone_numbers_count + @count.setter + def count(self, count): + self.sip_peer_telephone_numbers_count = count \ No newline at end of file diff --git a/iris_sdk/models/data/sip_peers.py b/iris_sdk/models/data/sip_peers.py new file mode 100644 index 0000000..c19655b --- /dev/null +++ b/iris_sdk/models/data/sip_peers.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.sip_peers import SipPeersMap +from iris_sdk.models.sip_peer import SipPeer + +class SipPeersData(SipPeersMap, BaseData): + + def __init__(self, parent=None): + self.sip_peer = BaseResourceList(SipPeer, self) \ No newline at end of file diff --git a/iris_sdk/models/data/site.py b/iris_sdk/models/data/site.py new file mode 100644 index 0000000..1f79380 --- /dev/null +++ b/iris_sdk/models/data/site.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.data.address import Address +from iris_sdk.models.maps.site import SiteMap + +class SiteData(SiteMap): + + def __init__(self): + self.address = Address() \ No newline at end of file diff --git a/iris_sdk/models/data/site_host.py b/iris_sdk/models/data/site_host.py new file mode 100644 index 0000000..66e1ee1 --- /dev/null +++ b/iris_sdk/models/data/site_host.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.sip_peer_hosts import SipPeerHosts +from iris_sdk.models.maps.site_host import SiteHostMap + +class SiteHost(SiteHostMap, BaseData): + + def __init__(self): + self.sip_peer_hosts = SipPeerHosts() \ No newline at end of file diff --git a/iris_sdk/models/data/site_hosts.py b/iris_sdk/models/data/site_hosts.py new file mode 100644 index 0000000..a83655b --- /dev/null +++ b/iris_sdk/models/data/site_hosts.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.site_host import SiteHost +from iris_sdk.models.maps.site_hosts import SiteHostsMap + +class SiteHostsData(SiteHostsMap, BaseData): + + @property + def items(self): + return self.site_host.items + + def __init__(self): + self.site_host = BaseResourceList(SiteHost) \ No newline at end of file diff --git a/iris_sdk/models/data/site_totaltns.py b/iris_sdk/models/data/site_totaltns.py new file mode 100644 index 0000000..de74a95 --- /dev/null +++ b/iris_sdk/models/data/site_totaltns.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.site_totaltns import SiteTotaltnsMap + +class SiteTotaltnsData(SiteTotaltnsMap, BaseData): + + @property + def count(self): + return self.total_count + @count.setter + def count(self, count): + self.total_count = count \ No newline at end of file diff --git a/iris_sdk/models/data/sites.py b/iris_sdk/models/data/sites.py new file mode 100644 index 0000000..03fc424 --- /dev/null +++ b/iris_sdk/models/data/sites.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.sites import SitesMap +from iris_sdk.models.site import Site + +class SitesData(SitesMap, BaseData): + + def __init__(self, parent=None): + self.site = BaseResourceList(Site, self) \ No newline at end of file diff --git a/iris_sdk/models/data/subscriber.py b/iris_sdk/models/data/subscriber.py new file mode 100644 index 0000000..a1823d1 --- /dev/null +++ b/iris_sdk/models/data/subscriber.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.address import Address +from iris_sdk.models.maps.subscriber import SubscriberMap + +class Subscriber(SubscriberMap, BaseData): + + def __init__(self): + self.service_address = Address() \ No newline at end of file diff --git a/iris_sdk/models/data/subscription.py b/iris_sdk/models/data/subscription.py new file mode 100644 index 0000000..870235d --- /dev/null +++ b/iris_sdk/models/data/subscription.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.email_subscription import EmailSubscription +from iris_sdk.models.data.callback_subscription import CallbackSubscription +from iris_sdk.models.maps.subscription import SubscriptionMap + +class SubscriptionData(SubscriptionMap, BaseData): + + def __init__(self): + self.email_subscription = EmailSubscription() + self.callback_subscription = CallbackSubscription() \ No newline at end of file diff --git a/iris_sdk/models/data/subscriptions.py b/iris_sdk/models/data/subscriptions.py new file mode 100644 index 0000000..5a28ec5 --- /dev/null +++ b/iris_sdk/models/data/subscriptions.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.subscriptions import SubscriptionsMap +from iris_sdk.models.subscription import Subscription + +class SubscriptionsData(SubscriptionsMap, BaseData): + + def __init__(self, parent=None): + self.subscription = BaseResourceList(Subscription, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/telephone_number.py b/iris_sdk/models/data/telephone_number.py new file mode 100644 index 0000000..6265080 --- /dev/null +++ b/iris_sdk/models/data/telephone_number.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.telephone_number import TelephoneNumberMap + +class TelephoneNumberData(TelephoneNumberMap, BaseData): + + @property + def last_modified_date(self): + return self.last_modified + @last_modified_date.setter + def last_modified_date(self, last_modified_date): + self.last_modified = last_modified_date \ No newline at end of file diff --git a/iris_sdk/models/data/telephone_number_detail_list.py b/iris_sdk/models/data/telephone_number_detail_list.py new file mode 100644 index 0000000..059cf73 --- /dev/null +++ b/iris_sdk/models/data/telephone_number_detail_list.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.telephone_number_detail_list import \ + TelephoneNumberDetailListMap +from iris_sdk.models.data.telephone_number import TelephoneNumberData + +class TelephoneNumberDetailList(TelephoneNumberDetailListMap, BaseData): + + @property + def items(self): + return self.telephone_number_detail.items + + def __init__(self): + self.telephone_number_detail = BaseResourceList(TelephoneNumberData) \ No newline at end of file diff --git a/iris_sdk/models/data/telephone_number_detail_list_tn.py b/iris_sdk/models/data/telephone_number_detail_list_tn.py new file mode 100644 index 0000000..6352d0c --- /dev/null +++ b/iris_sdk/models/data/telephone_number_detail_list_tn.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.telephone_number_detail_list_tn import \ + TelephoneNumberDetailListTnMap +from iris_sdk.models.telephone_number import TelephoneNumber + +class TelephoneNumberDetailListTn(TelephoneNumberDetailListTnMap, BaseData): + + @property + def items(self): + return self.telephone_number.items + + def __init__(self, parent=None): + self.telephone_number = BaseResourceList(TelephoneNumber, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/telephone_number_list.py b/iris_sdk/models/data/telephone_number_list.py new file mode 100644 index 0000000..709415f --- /dev/null +++ b/iris_sdk/models/data/telephone_number_list.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.telephone_number_list import TelephoneNumberListMap + +class TelephoneNumberList(TelephoneNumberListMap, BaseData): + + @property + def items(self): + return self.telephone_number.items + + def __init__(self): + self.telephone_number = BaseResourceSimpleList() + + def add(self, phone_number=None): + return self.telephone_number.add(phone_number) \ No newline at end of file diff --git a/iris_sdk/models/data/telephone_numbers.py b/iris_sdk/models/data/telephone_numbers.py new file mode 100644 index 0000000..3fd2f32 --- /dev/null +++ b/iris_sdk/models/data/telephone_numbers.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.data.telephone_number_detail_list_tn import \ + TelephoneNumberDetailListTn +from iris_sdk.models.maps.telephone_numbers import TelephoneNumbersMap + +class TelephoneNumbers(TelephoneNumbersMap, TelephoneNumberDetailListTn): + + def __init__(self, parent=None): + TelephoneNumberDetailListTn.__init__(self, parent) \ No newline at end of file diff --git a/iris_sdk/models/data/termination_hosts.py b/iris_sdk/models/data/termination_hosts.py new file mode 100644 index 0000000..e2b5c8e --- /dev/null +++ b/iris_sdk/models/data/termination_hosts.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.host import Host +from iris_sdk.models.maps.termination_hosts import TerminationHostsMap + +class TerminationHosts(TerminationHostsMap, BaseData): + + @property + def items(self): + return self.termination_host.items + + def __init__(self): + self.termination_host = BaseResourceList(Host) + + def add(self): + return self.termination_host.add() \ No newline at end of file diff --git a/iris_sdk/models/data/tier_list.py b/iris_sdk/models/data/tier_list.py new file mode 100644 index 0000000..40736ed --- /dev/null +++ b/iris_sdk/models/data/tier_list.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.tier_list import TierListMap + +class TierList(TierListMap, BaseData): + + @property + def items(self): + return self.tier.items + + def __init__(self): + self.tier = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/tn_attributes.py b/iris_sdk/models/data/tn_attributes.py new file mode 100644 index 0000000..09799c6 --- /dev/null +++ b/iris_sdk/models/data/tn_attributes.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.tn_attributes import TnAttributesMap + +class TnAttributes(TnAttributesMap, BaseData): + + @property + def items(self): + return self.tn_attribute.items + + def __init__(self, parent=None): + self.tn_attribute = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/tn_history.py b/iris_sdk/models/data/tn_history.py new file mode 100644 index 0000000..4269acc --- /dev/null +++ b/iris_sdk/models/data/tn_history.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.tn_status import TnStatus +from iris_sdk.models.maps.tn_history import TnHistoryMap + +class TnHistoryData(TnHistoryMap): + + def __init__(self): + self.telephone_number_status = BaseResourceList(TnStatus) \ No newline at end of file diff --git a/iris_sdk/models/data/tn_lca.py b/iris_sdk/models/data/tn_lca.py new file mode 100644 index 0000000..117018d --- /dev/null +++ b/iris_sdk/models/data/tn_lca.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResourceSimpleList +from iris_sdk.models.data.location import Location +from iris_sdk.models.data.npanxx_list import NpanxxList +from iris_sdk.models.maps.tn_lca import TnLcaMap + +class TnLcaData(TnLcaMap): + + def __init__(self): + self.listof_npanxx = NpanxxList() + self.location = Location() \ No newline at end of file diff --git a/iris_sdk/models/data/tn_line_options.py b/iris_sdk/models/data/tn_line_options.py new file mode 100644 index 0000000..4f7291a --- /dev/null +++ b/iris_sdk/models/data/tn_line_options.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.tn_line_options import TnLineOptionsMap + +class TnLineOptionsData(TnLineOptionsMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/tn_list.py b/iris_sdk/models/data/tn_list.py new file mode 100644 index 0000000..e1b3de2 --- /dev/null +++ b/iris_sdk/models/data/tn_list.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.tn_list import TnListMap + +class TnList(TnListMap, BaseData): + + @property + def items(self): + return self.tn.items + + def __init__(self): + self.tn = BaseResourceSimpleList() + + def add(self, phone_number=None): + return self.tn.add(phone_number) \ No newline at end of file diff --git a/iris_sdk/models/data/tn_option_order.py b/iris_sdk/models/data/tn_option_order.py new file mode 100644 index 0000000..1fd2315 --- /dev/null +++ b/iris_sdk/models/data/tn_option_order.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.tn_option_order import TnOptionOrderMap +from iris_sdk.models.data.error_list import ErrorList +from iris_sdk.models.data.warnings import Warnings +from iris_sdk.models.data.tn_option_order_groups import TnOptionOrderGroupsData + +class TnOptionOrderData(TnOptionOrderMap, BaseData): + + def __init__(self): + self.error_list = ErrorList() + self.warnings = Warnings() + self.tn_option_groups = TnOptionOrderGroupsData() diff --git a/iris_sdk/models/data/tn_option_order_group.py b/iris_sdk/models/data/tn_option_order_group.py new file mode 100644 index 0000000..26a4015 --- /dev/null +++ b/iris_sdk/models/data/tn_option_order_group.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.tn_option_order_group import TnOptionOrderGroupMap +from iris_sdk.models.data.telephone_number_list import TelephoneNumberList +from iris_sdk.models.data.a2p_settings import A2pSettings + +class TnOptionOrderGroupData(TnOptionOrderGroupMap, BaseData): + + def __init__(self, parent=None): + self.telephone_numbers = TelephoneNumberList() + self.a2p_settings = A2pSettings() diff --git a/iris_sdk/models/data/tn_option_order_groups.py b/iris_sdk/models/data/tn_option_order_groups.py new file mode 100644 index 0000000..a1ac899 --- /dev/null +++ b/iris_sdk/models/data/tn_option_order_groups.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.tn_option_order_groups import TnOptionOrderGroupsMap +from iris_sdk.models.data.tn_option_order_group import TnOptionOrderGroupData + +class TnOptionOrderGroupsData(TnOptionOrderGroupsMap, BaseData): + + def __init__(self, parent=None): + self.tn_option_group = BaseResourceList(TnOptionOrderGroupData, parent) diff --git a/iris_sdk/models/data/tn_option_orders.py b/iris_sdk/models/data/tn_option_orders.py new file mode 100644 index 0000000..b7a2f20 --- /dev/null +++ b/iris_sdk/models/data/tn_option_orders.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.tn_option_orders import TnOptionOrdersMap +from iris_sdk.models.tn_option_order import TnOptionOrder + +class TnOptionOrdersData(TnOptionOrdersMap, BaseData): + + def __init__(self, parent=None): + self.tn_option_order_summary = BaseResourceList(TnOptionOrder, parent) + self.tn_option_order = BaseResourceList(TnOptionOrder, parent) diff --git a/iris_sdk/models/data/tn_rate_center.py b/iris_sdk/models/data/tn_rate_center.py new file mode 100644 index 0000000..8afa3d7 --- /dev/null +++ b/iris_sdk/models/data/tn_rate_center.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.maps.tn_rate_center import TnRateCenterMap + +class TnRateCenterData(TnRateCenterMap, BaseData): + + @property + def name(self): + return self.rate_center + @name.setter + def name(self, name): + self.rate_center = name \ No newline at end of file diff --git a/iris_sdk/models/data/tn_rate_centers_list.py b/iris_sdk/models/data/tn_rate_centers_list.py new file mode 100644 index 0000000..24e96aa --- /dev/null +++ b/iris_sdk/models/data/tn_rate_centers_list.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.data.tn_rc_list import TelephoneNumberRcList +from iris_sdk.models.maps.tn_rate_centers_list import TnRateCentersListMap + +class TnRateCentersList(TnRateCentersListMap, BaseData): + + @property + def items(self): + return self.rcs.items + + @property + def rcs(self): + return self.r_cs + + def __init__(self): + self.r_cs = TelephoneNumberRcList() \ No newline at end of file diff --git a/iris_sdk/models/data/tn_rc_list.py b/iris_sdk/models/data/tn_rc_list.py new file mode 100644 index 0000000..7c3c51e --- /dev/null +++ b/iris_sdk/models/data/tn_rc_list.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.tn_rc_list import TelephoneNumberRcListMap + +class TelephoneNumberRcList(TelephoneNumberRcListMap, BaseData): + + @property + def items(self): + return self.rc.items + + def __init__(self): + self.rc = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/data/tn_status.py b/iris_sdk/models/data/tn_status.py new file mode 100644 index 0000000..befd00f --- /dev/null +++ b/iris_sdk/models/data/tn_status.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.tn_status import TnStatusMap + +class TnStatus(TnStatusMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/tndetails.py b/iris_sdk/models/data/tndetails.py new file mode 100644 index 0000000..1fba910 --- /dev/null +++ b/iris_sdk/models/data/tndetails.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.features import Features +from iris_sdk.models.maps.tndetails import TndetailsMap + +class TndetailsData(TndetailsMap, BaseData): + + @property + def id(self): + return self.full_number + @id.setter + def id(self, id): + self.full_number = id + + @property + def last_modified_date(self): + return self.last_modified + @last_modified_date.setter + def last_modified_date(self, last_modified_date): + self.last_modified = last_modified_date + + def __init__(self): + self.features = Features() \ No newline at end of file diff --git a/iris_sdk/models/data/tns.py b/iris_sdk/models/data/tns.py new file mode 100644 index 0000000..4e3b64f --- /dev/null +++ b/iris_sdk/models/data/tns.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.data.links import Links +from iris_sdk.models.data.listing_name import ListingName +from iris_sdk.models.maps.tns import TnsMap + +class TnsData(TnsMap, BaseData): + + @property + def result_count(self): + return self.telephone_number_count + @result_count.setter + def result_count(self, result_count): + self.telephone_number_count = result_count + + def __init__(self): + self.links = Links() \ No newline at end of file diff --git a/iris_sdk/models/data/totals.py b/iris_sdk/models/data/totals.py new file mode 100644 index 0000000..f951a14 --- /dev/null +++ b/iris_sdk/models/data/totals.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.totals import TotalsMap + +class TotalsData(TotalsMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/warning.py b/iris_sdk/models/data/warning.py new file mode 100644 index 0000000..4de61b6 --- /dev/null +++ b/iris_sdk/models/data/warning.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.warning import WarningMap + +class WarningCls(WarningMap, BaseData): #Warning is a reserved word in python + pass diff --git a/iris_sdk/models/data/warnings.py b/iris_sdk/models/data/warnings.py new file mode 100644 index 0000000..178dbdd --- /dev/null +++ b/iris_sdk/models/data/warnings.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceList +from iris_sdk.models.data.warning import WarningCls +from iris_sdk.models.maps.warnings import WarningsMap + +class Warnings(WarningsMap, BaseData): + + def __init__(self): + self.warning = BaseResourceList(WarningCls) diff --git a/iris_sdk/models/data/wireless_info.py b/iris_sdk/models/data/wireless_info.py new file mode 100644 index 0000000..863d837 --- /dev/null +++ b/iris_sdk/models/data/wireless_info.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData +from iris_sdk.models.maps.wireless_info import WirelessInfoMap + +class WirelessInfo(WirelessInfoMap, BaseData): + pass \ No newline at end of file diff --git a/iris_sdk/models/data/zip_code_list.py b/iris_sdk/models/data/zip_code_list.py new file mode 100644 index 0000000..8b87bc2 --- /dev/null +++ b/iris_sdk/models/data/zip_code_list.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseData, BaseResourceSimpleList +from iris_sdk.models.maps.zip_code_list import ZipCodeListMap + +class ZipCodeList(ZipCodeListMap, BaseData): + + @property + def items(self): + return self.zip_code.items + + def __init__(self): + self.zip_code = BaseResourceSimpleList() \ No newline at end of file diff --git a/iris_sdk/models/disc_numbers.py b/iris_sdk/models/disc_numbers.py new file mode 100644 index 0000000..b06eddc --- /dev/null +++ b/iris_sdk/models/disc_numbers.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.include.xml_consts import XML_PARAM_TN_DETAIL, XML_TRUE +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.disc_numbers import DiscNumbersData +from iris_sdk.models.totals import Totals + +XML_NAME_DISC_NUMBERS = "TNs" +XPATH_DISC_NUMBERS = "/discnumbers" + +class DiscNumbers(BaseResource, DiscNumbersData): + + """Disconnected numbers for account""" + + _node_name = XML_NAME_DISC_NUMBERS + _xpath = XPATH_DISC_NUMBERS + + @property + def totals(self): + return self._totals + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + DiscNumbersData.__init__(self) + self._totals = Totals(self) + + def list(self, params): + return self._get_data(params=params).telephone_numbers.\ + telephone_number \ No newline at end of file diff --git a/iris_sdk/models/disconnect.py b/iris_sdk/models/disconnect.py new file mode 100644 index 0000000..25b06c6 --- /dev/null +++ b/iris_sdk/models/disconnect.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.disconnect import DisconnectData +from iris_sdk.models.notes import Notes +from iris_sdk.models.disconnect_order_response import DisconnectOrderResponse + +XML_NAME_DISCONNECT = "DisconnectTelephoneNumberOrder" +XPATH_DISCONNECT = "/{}" + +class Disconnect(BaseResource, DisconnectData): + + """Disconnect telephone numbers order for account""" + + _node_name = XML_NAME_DISCONNECT + _xpath = XPATH_DISCONNECT + + @property + def id(self): + return self.order_id + @id.setter + def id(self, id): + self.order_id = id + + @property + def notes(self): + return self._notes + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + DisconnectData.__init__(self) + self._notes = Notes(self, client) + + def get(self, id, params=None): + _id = id + order_response = DisconnectOrderResponse(self._parent) + self.clear() + order_response.order_request = self + return order_response.get(_id, params=params) + + def save(self): + str = self._save(True) + order_response = DisconnectOrderResponse(self._parent) + self.clear() + order_response.order_request = self + order_response._from_xml(self._element_from_string(str)) + self.order_status = order_response.order_status + return True \ No newline at end of file diff --git a/iris_sdk/models/disconnect_order_response.py b/iris_sdk/models/disconnect_order_response.py new file mode 100644 index 0000000..e8534cd --- /dev/null +++ b/iris_sdk/models/disconnect_order_response.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.order_response import OrderResponseData + +XML_NAME_DISCONNECT_ORDER_RESPONSE = "DisconnectTelephoneNumberOrderResponse" +XPATH_DISCONNECT_ORDER_RESPONSE = "/{}" + +class DisconnectOrderResponse(BaseResource, OrderResponseData): + + """Telephone numbers disconnect order response""" + + _node_name = XML_NAME_DISCONNECT_ORDER_RESPONSE + _xpath = XPATH_DISCONNECT_ORDER_RESPONSE + + @property + def id(self): + return self.order_request.order_id + @id.setter + def id(self, order_id): + self.order_request.order_id = order_id + + @property + def order_request(self): + return self._order + @order_request.setter + def order_request(self, order_request): + self._order = order_request + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + OrderResponseData.__init__(self) + + def get(self, id=None, params=None): + return self._get_data((id or self.id), params=params) \ No newline at end of file diff --git a/iris_sdk/models/disconnects.py b/iris_sdk/models/disconnects.py new file mode 100644 index 0000000..46d6bb5 --- /dev/null +++ b/iris_sdk/models/disconnects.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.disconnects import DisconnectsData +from iris_sdk.models.disconnect import Disconnect + +XML_NAME_DISCONNECTS = "ListOrderIdUserIdDate" +XPATH_DISCONNECTS = "/disconnects" + +class Disconnects(BaseResource, DisconnectsData): + + """Disconnect telephone numbers orders for account""" + + _node_name = XML_NAME_DISCONNECTS + _xpath = XPATH_DISCONNECTS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + DisconnectsData.__init__(self, self) + + def create(self, data=None, save=True): + disconnect = Disconnect(self).set_from_dict(data) + if save and (data is not None): + disconnect.save() + return disconnect + + def get(self, id, params=None): + return Disconnect(self).get(id, params=params) + + def list(self, params): + return self._get_data(params=params).order_id_user_id_date \ No newline at end of file diff --git a/iris_sdk/models/dlda.py b/iris_sdk/models/dlda.py new file mode 100644 index 0000000..76b613e --- /dev/null +++ b/iris_sdk/models/dlda.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.dlda import DldaData +from iris_sdk.models.dlda_order_response import DldaOrderResponse +from iris_sdk.models.history import History + +XML_NAME_DLDA = "DldaOrder" +XPATH_DLDA = "/{}" + +class Dlda(BaseResource, DldaData): + + """ DLDA order """ + + _node_name = XML_NAME_DLDA + _xpath = XPATH_DLDA + + @property + def id(self): + return self.order_id + @id.setter + def id(self, id): + self.order_id = id + + @property + def history(self): + return self._history + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + DldaData.__init__(self) + self._history = History(self, client) + + def get(self, id=None, params=None): + return self._get_data(id) + + def save(self): + str = self._save(True) + self.clear() + self._from_xml(self._element_from_string(str)) + return True \ No newline at end of file diff --git a/iris_sdk/models/dlda_order_response.py b/iris_sdk/models/dlda_order_response.py new file mode 100644 index 0000000..36fbd85 --- /dev/null +++ b/iris_sdk/models/dlda_order_response.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.dlda_order_response import DldaOrderResponseData + +XPATH_DLDA_ORDER_RESPONSE = "/{}" + +class DldaOrderResponse(BaseResource, DldaOrderResponseData): + + """ DLDA order response """ + + _xpath = XPATH_DLDA_ORDER_RESPONSE + + @property + def id(self): + return self.dlda_order.order_id + @id.setter + def id(self, order_id): + self.dlda_order.order_id = order_id + + @property + def dlda_order(self): + return self._dlda_order + @dlda_order.setter + def dlda_order(self, dlda_order): + self._dlda_order = dlda_order + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + DldaOrderResponseData.__init__(self) + + def get(self, id=None, params=None): + return self._get_data((id or self.id), params=params) \ No newline at end of file diff --git a/iris_sdk/models/dldas.py b/iris_sdk/models/dldas.py new file mode 100644 index 0000000..eb8d8a1 --- /dev/null +++ b/iris_sdk/models/dldas.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.dldas import DldasData +from iris_sdk.models.dlda import Dlda + +XML_NAME_DLDAS = "ListOrderIdUserIdDate" +XPATH_DLDAS = "/dldas" + +class Dldas(BaseResource, DldasData): + + """ DLDA orders """ + + _node_name = XML_NAME_DLDAS + _xpath = XPATH_DLDAS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + DldasData.__init__(self, self) + + def create(self, data=None, save=True): + dlda = Dlda(self).set_from_dict(data) + if save and (data is not None): + dlda.save() + return dlda + + def get(self, id, params=None): + return Dlda(self).get(id, params=params) + + def list(self, params=None): + return self._get_data(params=params).order_id_user_id_date \ No newline at end of file diff --git a/iris_sdk/models/file_meta_data.py b/iris_sdk/models/file_meta_data.py new file mode 100644 index 0000000..6fca5ee --- /dev/null +++ b/iris_sdk/models/file_meta_data.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.maps.file_meta_data import FileMetaDataMap + +XPATH_METADATA = "/{}/metadata" + +class FileMetaData(BaseResource, FileMetaDataMap): + + """LOAs metadata""" + + _xpath = XPATH_METADATA + _xpath_save = _xpath + + def get(self, id): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/history.py b/iris_sdk/models/history.py new file mode 100644 index 0000000..fb8b65f --- /dev/null +++ b/iris_sdk/models/history.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.history import HistoryData + +XML_NAME_HISTORY = "OrderHistoryWrapper" +XPATH_HISTORY = "/history" + +class History(BaseResource, HistoryData): + + """Order history""" + + _node_name = XML_NAME_HISTORY + _xpath = XPATH_HISTORY + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + HistoryData.__init__(self) + + def list(self): + return self._get_data().order_history \ No newline at end of file diff --git a/iris_sdk/models/import_tn_checker.py b/iris_sdk/models/import_tn_checker.py new file mode 100644 index 0000000..f597b4b --- /dev/null +++ b/iris_sdk/models/import_tn_checker.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.import_tn_checker import ImportTnCheckerData +from iris_sdk.models.import_tn_checker_response import ImportTnCheckerResponse + +XML_NAME_IMPORTTN_CHECKER = "ImportTnCheckerPayload" +XPATH_IMPORTTN_CHECKER = "/importTnChecker" + +class ImportTnChecker(BaseResource, ImportTnCheckerData): + + """Request portability information for hosted messaging on a set of TNs""" + + _save_post = True + _node_name = XML_NAME_IMPORTTN_CHECKER + _xpath = XPATH_IMPORTTN_CHECKER + + def __call__(self, numbers): + self.clear() + self.telephone_numbers.items.extend(numbers) + return self._post_data(ImportTnCheckerResponse()) + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + ImportTnCheckerData.__init__(self) diff --git a/iris_sdk/models/import_tn_checker_response.py b/iris_sdk/models/import_tn_checker_response.py new file mode 100644 index 0000000..3a82791 --- /dev/null +++ b/iris_sdk/models/import_tn_checker_response.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.import_tn_checker_response import ImportTnCheckerResponseData + +XML_NAME_IMPORTTN_CHECKER_RESPONSE = "ImportTnCheckerResponse" + +class ImportTnCheckerResponse(BaseResource, ImportTnCheckerResponseData): + + """Import TN Checker Response""" + + _node_name = XML_NAME_IMPORTTN_CHECKER_RESPONSE + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + ImportTnCheckerResponseData.__init__(self) diff --git a/iris_sdk/models/in_service_numbers.py b/iris_sdk/models/in_service_numbers.py new file mode 100644 index 0000000..3bbe548 --- /dev/null +++ b/iris_sdk/models/in_service_numbers.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.totals import Totals +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.in_service_numbers import InServiceNumbersData + +XML_NAME_IN_SERVICE_NUMBERS = "TNs" +XPATH_IN_SERVICE_NUMBERS = "/inserviceNumbers" + +class InServiceNumbers(BaseResource, InServiceNumbersData): + + """In-service numbers for account""" + + _node_name = XML_NAME_IN_SERVICE_NUMBERS + _xpath = XPATH_IN_SERVICE_NUMBERS + + @property + def totals(self): + return self._totals + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + InServiceNumbersData.__init__(self) + self._totals = Totals(self, client) + + def list(self, params=None): + self._get_data(params=params) + return self.telephone_numbers.telephone_number \ No newline at end of file diff --git a/iris_sdk/models/lidb.py b/iris_sdk/models/lidb.py new file mode 100644 index 0000000..817517a --- /dev/null +++ b/iris_sdk/models/lidb.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.lidb import LidbData + +XML_NAME_LIDB = "LidbOrder" +XPATH_LIDB = "/{}" + +class Lidb(BaseResource, LidbData): + + """ CNAM Update (LIDB) order """ + + _node_name = XML_NAME_LIDB + _xpath = XPATH_LIDB + + @property + def id(self): + return self.order_id + @id.setter + def id(self, id): + self.order_id = id + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + LidbData.__init__(self) + + def get(self, id=None, params=None): + return self._get_data(id, params=params) + + def save(self): + return self._post_data() \ No newline at end of file diff --git a/iris_sdk/models/lidbs.py b/iris_sdk/models/lidbs.py new file mode 100644 index 0000000..f668c6d --- /dev/null +++ b/iris_sdk/models/lidbs.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.lidbs import LidbsData +from iris_sdk.models.lidb import Lidb + +XML_NAME_LIDBS = "ListOrderIdUserIdDate" +XPATH_LIDBS = "/lidbs" + +class Lidbs(BaseResource, LidbsData): + + """ CNAM Update (LIDB) order """ + + _node_name = XML_NAME_LIDBS + _xpath = XPATH_LIDBS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + LidbsData.__init__(self, self) + + def create(self, data=None, save=True): + lidb = Lidb(self).set_from_dict(data) + if save and (data is not None): + lidb.save() + return lidb + + def get(self, id, params=None): + return Lidb(self).get(id, params=params) + + def list(self, params): + return self._get_data(params=params).order_id_user_id_date \ No newline at end of file diff --git a/iris_sdk/models/line_option_order_response.py b/iris_sdk/models/line_option_order_response.py new file mode 100644 index 0000000..0274604 --- /dev/null +++ b/iris_sdk/models/line_option_order_response.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.line_option_order_response import LineOptionOrderResponseData + +XPATH_LINE_OPTION_ORDER_RESPONSE = "/{}" + +class LineOptionOrderResponse(BaseResource, LineOptionOrderResponseData): + + """ + Establish Calling Name Display settings for a collection of TNs at a time + """ + + _xpath = XPATH_LINE_OPTION_ORDER_RESPONSE + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + LineOptionOrderResponseData.__init__(self) diff --git a/iris_sdk/models/line_option_orders.py b/iris_sdk/models/line_option_orders.py new file mode 100644 index 0000000..8332138 --- /dev/null +++ b/iris_sdk/models/line_option_orders.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.line_option_order import LineOptionOrderData +from iris_sdk.models.line_option_order_response import LineOptionOrderResponse + +XML_NAME_LINE_OPTION_ORDERS = "LineOptionOrder" +XPATH_LINE_OPTION_ORDERS = "/lineOptionOrders" + +class LineOptionOrder(BaseResource, LineOptionOrderData): + + """ + Establish Calling Name Display settings for a collection of TNs at a time + """ + + _node_name = XML_NAME_LINE_OPTION_ORDERS + _save_post = True + _xpath = XPATH_LINE_OPTION_ORDERS + _xpath_save = _xpath + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + LineOptionOrderData.__init__(self) + + def save(self): + response = LineOptionOrderResponse(self._parent) + return self._post_data(response) \ No newline at end of file diff --git a/iris_sdk/models/lnpchecker.py b/iris_sdk/models/lnpchecker.py new file mode 100644 index 0000000..bb59933 --- /dev/null +++ b/iris_sdk/models/lnpchecker.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.lnpchecker import LnpCheckerData +from iris_sdk.models.lnpchecker_response import LnpCheckerResponse + +XML_NAME_LNP_CHECKER = "NumberPortabilityRequest" +XPATH_LNP_CHECKER = "/lnpchecker" + +class LnpChecker(BaseResource, LnpCheckerData): + + """Check local number portability""" + + _save_post = True + _node_name = XML_NAME_LNP_CHECKER + _xpath = XPATH_LNP_CHECKER + + def __call__(self, numbers, params=None): + self.clear() + self.tn_list.items.extend(numbers) + return self._post_data(LnpCheckerResponse(), params) + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + LnpCheckerData.__init__(self) \ No newline at end of file diff --git a/iris_sdk/models/lnpchecker_response.py b/iris_sdk/models/lnpchecker_response.py new file mode 100644 index 0000000..f9d1a0c --- /dev/null +++ b/iris_sdk/models/lnpchecker_response.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.lnpchecker_response import LnpCheckerResponseData + +XML_NAME_LNP_CHECKER_RESPONSE = "NumberPortabilityResponse" + +class LnpCheckerResponse(BaseResource, LnpCheckerResponseData): + + """Local number portability check response""" + + _node_name = XML_NAME_LNP_CHECKER_RESPONSE + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + LnpCheckerResponseData.__init__(self) \ No newline at end of file diff --git a/iris_sdk/models/loas.py b/iris_sdk/models/loas.py new file mode 100644 index 0000000..5cb8468 --- /dev/null +++ b/iris_sdk/models/loas.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.include.xml_consts import XML_PARAM_METADATA, XML_TRUE +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.loas import LoasData +from iris_sdk.models.file_meta_data import FileMetaData + +XML_NAME_LOAS = "FileListResponse" +XPATH_LOAS_FILENAME = "/{}" +XPATH_LOAS = "/loas" + +class Loas(BaseResource, LoasData): + + """Local number portability order LOAs""" + + _node_name = XML_NAME_LOAS + _xpath = XPATH_LOAS + + @property + def metadata(self): + return self._metadata + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + LoasData.__init__(self) + self._metadata = FileMetaData(self, client) + + def create(self, filename, headers): + return self._send_file("", filename, headers) + + def delete(self, id): + return self._delete_file(XPATH_LOAS_FILENAME, id) + + def get(self, id): + return self._get_file(XPATH_LOAS_FILENAME, id) + + def list(self, params=None): + self._get_data(params=params) + if params.get(XML_PARAM_METADATA.lower(), "") == XML_TRUE: + return self.file_data + else: + return self.file_names + + def update(self, id, filename, headers): + return self._send_file(XPATH_LOAS_FILENAME, filename, headers, id) \ No newline at end of file diff --git a/iris_sdk/models/maps/__init__.py b/iris_sdk/models/maps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/iris_sdk/models/maps/a2p_settings.py b/iris_sdk/models/maps/a2p_settings.py new file mode 100644 index 0000000..772652b --- /dev/null +++ b/iris_sdk/models/maps/a2p_settings.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class A2pSettingsMap(BaseMap): + + message_class = None + campaign_id = None + action = None diff --git a/iris_sdk/models/maps/account.py b/iris_sdk/models/maps/account.py new file mode 100644 index 0000000..d9889c3 --- /dev/null +++ b/iris_sdk/models/maps/account.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AccountMap(BaseMap): + + account_id = None + account_type = None + address = None + alt_spid = None + company_name = None + contact = None + customer_name = None + description = None + is_new_sms_account = None + lnp_enabled = None + nena_id = None + port_carrier_type = None + reservation_allowed = None + spid = None + tiers = None \ No newline at end of file diff --git a/iris_sdk/models/maps/account_user.py b/iris_sdk/models/maps/account_user.py new file mode 100644 index 0000000..db4dcf8 --- /dev/null +++ b/iris_sdk/models/maps/account_user.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AccountUserMap(BaseMap): + + email_address = None + first_name = None + last_name = None + roles = None + telephone_number = None + username = None \ No newline at end of file diff --git a/iris_sdk/models/maps/account_users.py b/iris_sdk/models/maps/account_users.py new file mode 100644 index 0000000..764136d --- /dev/null +++ b/iris_sdk/models/maps/account_users.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AccountUsersMap(BaseMap): + + user = None \ No newline at end of file diff --git a/iris_sdk/models/maps/activation_status.py b/iris_sdk/models/maps/activation_status.py new file mode 100644 index 0000000..c16f3b2 --- /dev/null +++ b/iris_sdk/models/maps/activation_status.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ActivationStatusMap(BaseMap): + + activated_telephone_numbers_list = None + auto_activation_date = None + not_yet_activated_telephone_numbers_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/address.py b/iris_sdk/models/maps/address.py new file mode 100644 index 0000000..0257979 --- /dev/null +++ b/iris_sdk/models/maps/address.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AddressMap(BaseMap): + + address_line2 = None + address_type = None + city = None + county = None + country = None + house_number = None + house_prefix = None + house_suffix = None + plus_four = None + pre_directional = None + post_directional = None + state_code = None + street_name = None + street_suffix = None + zip = None \ No newline at end of file diff --git a/iris_sdk/models/maps/available_npa_nxx.py b/iris_sdk/models/maps/available_npa_nxx.py new file mode 100644 index 0000000..fc0d436 --- /dev/null +++ b/iris_sdk/models/maps/available_npa_nxx.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AvailableNpaNxxMap(BaseMap): + + available_npa_nxx_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/available_npa_nxx_list.py b/iris_sdk/models/maps/available_npa_nxx_list.py new file mode 100644 index 0000000..9e11eb1 --- /dev/null +++ b/iris_sdk/models/maps/available_npa_nxx_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AvailableNpaNxxListMap(BaseMap): + + available_npa_nxx = None \ No newline at end of file diff --git a/iris_sdk/models/maps/available_numbers.py b/iris_sdk/models/maps/available_numbers.py new file mode 100644 index 0000000..8cb8901 --- /dev/null +++ b/iris_sdk/models/maps/available_numbers.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AvailableNumbersMap(BaseMap): + + result_count = None + telephone_number_detail_list = None + telephone_number_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/base_map.py b/iris_sdk/models/maps/base_map.py new file mode 100644 index 0000000..7aae88c --- /dev/null +++ b/iris_sdk/models/maps/base_map.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python + +class BaseMap(object): + pass \ No newline at end of file diff --git a/iris_sdk/models/maps/callback_subscription.py b/iris_sdk/models/maps/callback_subscription.py new file mode 100644 index 0000000..b65c2be --- /dev/null +++ b/iris_sdk/models/maps/callback_subscription.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CallbackSubscriptionMap(BaseMap): + + url = None + user = None + expiry = None + status = None \ No newline at end of file diff --git a/iris_sdk/models/maps/calling_name.py b/iris_sdk/models/maps/calling_name.py new file mode 100644 index 0000000..df4e38c --- /dev/null +++ b/iris_sdk/models/maps/calling_name.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CallingNameMap(BaseMap): + + display = None + enforce = None + enforced = None \ No newline at end of file diff --git a/iris_sdk/models/maps/cities.py b/iris_sdk/models/maps/cities.py new file mode 100644 index 0000000..a5e7486 --- /dev/null +++ b/iris_sdk/models/maps/cities.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CitiesMap(BaseMap): + + result_count = None + cities = None \ No newline at end of file diff --git a/iris_sdk/models/maps/cities_list.py b/iris_sdk/models/maps/cities_list.py new file mode 100644 index 0000000..7faf80c --- /dev/null +++ b/iris_sdk/models/maps/cities_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CitiesListMap(BaseMap): + + city = None \ No newline at end of file diff --git a/iris_sdk/models/maps/cities_short_list.py b/iris_sdk/models/maps/cities_short_list.py new file mode 100644 index 0000000..7642d43 --- /dev/null +++ b/iris_sdk/models/maps/cities_short_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CitiesShortListMap(BaseMap): + + city = None \ No newline at end of file diff --git a/iris_sdk/models/maps/city.py b/iris_sdk/models/maps/city.py new file mode 100644 index 0000000..6542bf6 --- /dev/null +++ b/iris_sdk/models/maps/city.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CityMap(BaseMap): + + city = None + name = None + rc_abbreviation = None \ No newline at end of file diff --git a/iris_sdk/models/maps/completed_numbers.py b/iris_sdk/models/maps/completed_numbers.py new file mode 100644 index 0000000..e43fcad --- /dev/null +++ b/iris_sdk/models/maps/completed_numbers.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CompletedNumbersMap(BaseMap): + + telephone_number = None diff --git a/iris_sdk/models/maps/contact.py b/iris_sdk/models/maps/contact.py new file mode 100644 index 0000000..456354f --- /dev/null +++ b/iris_sdk/models/maps/contact.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ContactMap(BaseMap): + + email = None + first_name = None + last_name = None + phone = None \ No newline at end of file diff --git a/iris_sdk/models/maps/covered_rate_centers.py b/iris_sdk/models/maps/covered_rate_centers.py new file mode 100644 index 0000000..f12f5bd --- /dev/null +++ b/iris_sdk/models/maps/covered_rate_centers.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CoveredRateCentersMap(BaseMap): + + links = None + covered_rate_center = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/disc_numbers.py b/iris_sdk/models/maps/disc_numbers.py new file mode 100644 index 0000000..7c720e5 --- /dev/null +++ b/iris_sdk/models/maps/disc_numbers.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DiscNumbersMap(BaseMap): + + links = None + telephone_numbers = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/disconnect.py b/iris_sdk/models/maps/disconnect.py new file mode 100644 index 0000000..dea7f0f --- /dev/null +++ b/iris_sdk/models/maps/disconnect.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DisconnectMap(BaseMap): + + count_of_t_ns = None + disconnect_telephone_number_order_type = None + telephone_number_details = None + customer_order_id = None + last_modified_date = None + name = None + order_create_date = None + order_date = None + order_id = None + order_status = None + order_type = None + user_id = None \ No newline at end of file diff --git a/iris_sdk/models/maps/disconnect_telephone_number_order_type.py b/iris_sdk/models/maps/disconnect_telephone_number_order_type.py new file mode 100644 index 0000000..540304c --- /dev/null +++ b/iris_sdk/models/maps/disconnect_telephone_number_order_type.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DisconnectTelephoneNumberOrderTypeMap(BaseMap): + + disconnect_mode = None + telephone_number_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/disconnects.py b/iris_sdk/models/maps/disconnects.py new file mode 100644 index 0000000..4a671d8 --- /dev/null +++ b/iris_sdk/models/maps/disconnects.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DisconnectsMap(BaseMap): + + links = None + order_id_user_id_date = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/dlda.py b/iris_sdk/models/maps/dlda.py new file mode 100644 index 0000000..c371e03 --- /dev/null +++ b/iris_sdk/models/maps/dlda.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DldaMap(BaseMap): + + customer_order_id = None + order_id = None + account_id = None + count_of_t_ns = None + user_id = None + last_modified_date = None + order_type = None + order_date = None + order_status = None + order_create_date = None + processing_status = None + created_by_user = None + order_complete_date = None + error_list = None + dlda_tn_groups = None + subscriber_type = None diff --git a/iris_sdk/models/maps/dlda_order_response.py b/iris_sdk/models/maps/dlda_order_response.py new file mode 100644 index 0000000..b9dd1b9 --- /dev/null +++ b/iris_sdk/models/maps/dlda_order_response.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DldaOrderResponseMap(BaseMap): + + dlda_order = None \ No newline at end of file diff --git a/iris_sdk/models/maps/dlda_tn_group.py b/iris_sdk/models/maps/dlda_tn_group.py new file mode 100644 index 0000000..3e0d9e9 --- /dev/null +++ b/iris_sdk/models/maps/dlda_tn_group.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DldaTnGroupMap(BaseMap): + + telephone_numbers = None + account_type = None + listing_type = None + list_address = None + listing_name = None + address = None + subscriber_type = None diff --git a/iris_sdk/models/maps/dlda_tn_groups.py b/iris_sdk/models/maps/dlda_tn_groups.py new file mode 100644 index 0000000..f7abb83 --- /dev/null +++ b/iris_sdk/models/maps/dlda_tn_groups.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DldaTnGroupsMap(BaseMap): + + dlda_tn_group = None \ No newline at end of file diff --git a/iris_sdk/models/maps/dldas.py b/iris_sdk/models/maps/dldas.py new file mode 100644 index 0000000..2c481cd --- /dev/null +++ b/iris_sdk/models/maps/dldas.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class DldasMap(BaseMap): + + order_id_user_id_date = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/email_subscription.py b/iris_sdk/models/maps/email_subscription.py new file mode 100644 index 0000000..6f3066c --- /dev/null +++ b/iris_sdk/models/maps/email_subscription.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class EmailSubscriptionMap(BaseMap): + + email = None + digest_requested = None \ No newline at end of file diff --git a/iris_sdk/models/maps/error.py b/iris_sdk/models/maps/error.py new file mode 100644 index 0000000..9b24acf --- /dev/null +++ b/iris_sdk/models/maps/error.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ErrorMap(BaseMap): + + code = None + description = None + error_code = None + telephone_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/error_list.py b/iris_sdk/models/maps/error_list.py new file mode 100644 index 0000000..9515072 --- /dev/null +++ b/iris_sdk/models/maps/error_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ErrorListMap(BaseMap): + + error = None \ No newline at end of file diff --git a/iris_sdk/models/maps/feature_dlda.py b/iris_sdk/models/maps/feature_dlda.py new file mode 100644 index 0000000..516a8d9 --- /dev/null +++ b/iris_sdk/models/maps/feature_dlda.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class FeatureDldaMap(BaseMap): + + address = None + list_address = None + listing_name = None + listing_type = None + status = None + subscriber_type = None \ No newline at end of file diff --git a/iris_sdk/models/maps/feature_lidb.py b/iris_sdk/models/maps/feature_lidb.py new file mode 100644 index 0000000..7922b49 --- /dev/null +++ b/iris_sdk/models/maps/feature_lidb.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class FeatureLidbMap(BaseMap): + + status = None + subscriber_information = None + use_type = None + visibility = None diff --git a/iris_sdk/models/maps/features.py b/iris_sdk/models/maps/features.py new file mode 100644 index 0000000..dcc9382 --- /dev/null +++ b/iris_sdk/models/maps/features.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class FeaturesMap(BaseMap): + + dlda = None + lidb = None \ No newline at end of file diff --git a/iris_sdk/models/maps/file_data.py b/iris_sdk/models/maps/file_data.py new file mode 100644 index 0000000..d841693 --- /dev/null +++ b/iris_sdk/models/maps/file_data.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class FileDataMap(BaseMap): + + file_meta_data = None + file_name = None \ No newline at end of file diff --git a/iris_sdk/models/maps/file_meta_data.py b/iris_sdk/models/maps/file_meta_data.py new file mode 100644 index 0000000..a4d2ad6 --- /dev/null +++ b/iris_sdk/models/maps/file_meta_data.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class FileMetaDataMap(BaseMap): + + document_name = None + document_type = None \ No newline at end of file diff --git a/iris_sdk/models/maps/full_numbers.py b/iris_sdk/models/maps/full_numbers.py new file mode 100644 index 0000000..8089731 --- /dev/null +++ b/iris_sdk/models/maps/full_numbers.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class FullNumbersMap(BaseMap): + + full_number = None diff --git a/iris_sdk/models/maps/history.py b/iris_sdk/models/maps/history.py new file mode 100644 index 0000000..82d69f3 --- /dev/null +++ b/iris_sdk/models/maps/history.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class HistoryMap(BaseMap): + + order_history = None \ No newline at end of file diff --git a/iris_sdk/models/maps/host.py b/iris_sdk/models/maps/host.py new file mode 100644 index 0000000..0f9adfc --- /dev/null +++ b/iris_sdk/models/maps/host.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class HostMap(BaseMap): + + customer_traffic_allowed = None + data_allowed = None + host_name = None + port = None \ No newline at end of file diff --git a/iris_sdk/models/maps/hosts.py b/iris_sdk/models/maps/hosts.py new file mode 100644 index 0000000..4746fc6 --- /dev/null +++ b/iris_sdk/models/maps/hosts.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class HostsMap(BaseMap): + + host = None \ No newline at end of file diff --git a/iris_sdk/models/maps/import_tn_checker.py b/iris_sdk/models/maps/import_tn_checker.py new file mode 100644 index 0000000..bd2821f --- /dev/null +++ b/iris_sdk/models/maps/import_tn_checker.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ImportTnCheckerMap(BaseMap): + + telephone_numbers = None diff --git a/iris_sdk/models/maps/import_tn_checker_list.py b/iris_sdk/models/maps/import_tn_checker_list.py new file mode 100644 index 0000000..6569d96 --- /dev/null +++ b/iris_sdk/models/maps/import_tn_checker_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnListMap(BaseMap): + + telephone_number = None diff --git a/iris_sdk/models/maps/import_tn_checker_payload.py b/iris_sdk/models/maps/import_tn_checker_payload.py new file mode 100644 index 0000000..e970afd --- /dev/null +++ b/iris_sdk/models/maps/import_tn_checker_payload.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ImportTnCheckerPayloadMap(BaseMap): + + telephone_numbers = None + import_tn_errors = None diff --git a/iris_sdk/models/maps/import_tn_checker_response.py b/iris_sdk/models/maps/import_tn_checker_response.py new file mode 100644 index 0000000..1b08c8a --- /dev/null +++ b/iris_sdk/models/maps/import_tn_checker_response.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ImportTnCheckerResponseMap(BaseMap): + + import_tn_checker_payload = None diff --git a/iris_sdk/models/maps/in_service_numbers.py b/iris_sdk/models/maps/in_service_numbers.py new file mode 100644 index 0000000..d7d2015 --- /dev/null +++ b/iris_sdk/models/maps/in_service_numbers.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class InServiceNumbersMap(BaseMap): + + links = None + telephone_numbers = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lata.py b/iris_sdk/models/maps/lata.py new file mode 100644 index 0000000..2c0703f --- /dev/null +++ b/iris_sdk/models/maps/lata.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LataMap(BaseMap): + + lata = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lidb.py b/iris_sdk/models/maps/lidb.py new file mode 100644 index 0000000..6b236db --- /dev/null +++ b/iris_sdk/models/maps/lidb.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LidbMap(BaseMap): + + customer_order_id = None + order_id = None + account_id = None + count_of_t_ns = None + user_id = None + last_modified_date = None + order_type = None + order_date = None + order_status = None + order_create_date = None + processing_status = None + created_by_user = None + order_complete_date = None + error_list = None + lidb_tn_groups = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lidb_tn_group.py b/iris_sdk/models/maps/lidb_tn_group.py new file mode 100644 index 0000000..0548b08 --- /dev/null +++ b/iris_sdk/models/maps/lidb_tn_group.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LidbTnGroupMap(BaseMap): + + telephone_numbers = None + subscriber_information = None + use_type = None + visibility = None + full_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lidb_tn_groups.py b/iris_sdk/models/maps/lidb_tn_groups.py new file mode 100644 index 0000000..4bb51c0 --- /dev/null +++ b/iris_sdk/models/maps/lidb_tn_groups.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LidbTnGroupsMap(BaseMap): + + lidb_tn_group = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lidbs.py b/iris_sdk/models/maps/lidbs.py new file mode 100644 index 0000000..2b76e65 --- /dev/null +++ b/iris_sdk/models/maps/lidbs.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LidbsMap(BaseMap): + + order_id_user_id_date = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/line_option_order.py b/iris_sdk/models/maps/line_option_order.py new file mode 100644 index 0000000..1bb3c44 --- /dev/null +++ b/iris_sdk/models/maps/line_option_order.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LineOptionOrderMap(BaseMap): + + tn_line_options = None \ No newline at end of file diff --git a/iris_sdk/models/maps/line_option_order_response.py b/iris_sdk/models/maps/line_option_order_response.py new file mode 100644 index 0000000..65ef7c7 --- /dev/null +++ b/iris_sdk/models/maps/line_option_order_response.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LineOptionOrderResponseMap(BaseMap): + + line_options = None \ No newline at end of file diff --git a/iris_sdk/models/maps/line_options.py b/iris_sdk/models/maps/line_options.py new file mode 100644 index 0000000..2711bdc --- /dev/null +++ b/iris_sdk/models/maps/line_options.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LineOptionsMap(BaseMap): + + complete_numbers = None + errors = None \ No newline at end of file diff --git a/iris_sdk/models/maps/links.py b/iris_sdk/models/maps/links.py new file mode 100644 index 0000000..f8ab7cf --- /dev/null +++ b/iris_sdk/models/maps/links.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LinksMap(BaseMap): + + first = None + next = None \ No newline at end of file diff --git a/iris_sdk/models/maps/listing_name.py b/iris_sdk/models/maps/listing_name.py new file mode 100644 index 0000000..8742eac --- /dev/null +++ b/iris_sdk/models/maps/listing_name.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ListingNameMap(BaseMap): + + first_name = None + first_name2 = None + last_name = None + designation = None + title_of_lineage = None + title_of_address = None + title_of_address2 = None + title_of_lineage_name2 = None + title_of_address_name2 = None + title_of_address2_name2 = None + place_listing_as = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lnp_losing_carriers.py b/iris_sdk/models/maps/lnp_losing_carriers.py new file mode 100644 index 0000000..7548da6 --- /dev/null +++ b/iris_sdk/models/maps/lnp_losing_carriers.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LnpLosingCarriersMap(BaseMap): + + losing_carrier_tn_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lnp_rate_center.py b/iris_sdk/models/maps/lnp_rate_center.py new file mode 100644 index 0000000..9fa3414 --- /dev/null +++ b/iris_sdk/models/maps/lnp_rate_center.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LnpRateCenterMap(BaseMap): + + city = None + lata = None + rate_center = None + state = None + tiers = None + tn_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lnp_rate_center_list.py b/iris_sdk/models/maps/lnp_rate_center_list.py new file mode 100644 index 0000000..7cc36f9 --- /dev/null +++ b/iris_sdk/models/maps/lnp_rate_center_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LnpRateCenterListMap(BaseMap): + + rate_center_group = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lnpchecker.py b/iris_sdk/models/maps/lnpchecker.py new file mode 100644 index 0000000..c60a31d --- /dev/null +++ b/iris_sdk/models/maps/lnpchecker.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LnpCheckerMap(BaseMap): + + tn_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/lnpchecker_response.py b/iris_sdk/models/maps/lnpchecker_response.py new file mode 100644 index 0000000..4a0f0e7 --- /dev/null +++ b/iris_sdk/models/maps/lnpchecker_response.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LnpCheckerResponseMap(BaseMap): + + partner_supported_rate_centers = None + portable_numbers = None + supported_losing_carriers = None + supported_rate_centers = None + unsupported_rate_centers = None \ No newline at end of file diff --git a/iris_sdk/models/maps/loas.py b/iris_sdk/models/maps/loas.py new file mode 100644 index 0000000..2cd35dd --- /dev/null +++ b/iris_sdk/models/maps/loas.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LoasMap(BaseMap): + + file_count = None + file_data = None + file_names = None + result_code = None + result_message = None \ No newline at end of file diff --git a/iris_sdk/models/maps/local_rate_center_list.py b/iris_sdk/models/maps/local_rate_center_list.py new file mode 100644 index 0000000..0112992 --- /dev/null +++ b/iris_sdk/models/maps/local_rate_center_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LocalRateCenterListMap(BaseMap): + + rate_center_id = None \ No newline at end of file diff --git a/iris_sdk/models/maps/location.py b/iris_sdk/models/maps/location.py new file mode 100644 index 0000000..8770fb5 --- /dev/null +++ b/iris_sdk/models/maps/location.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LocationMap(BaseMap): + + rate_centers = None \ No newline at end of file diff --git a/iris_sdk/models/maps/losing_carrier_tn_list.py b/iris_sdk/models/maps/losing_carrier_tn_list.py new file mode 100644 index 0000000..c1d026d --- /dev/null +++ b/iris_sdk/models/maps/losing_carrier_tn_list.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LosingCarrierTnListMap(BaseMap): + + losing_carrier_account_number_required = None + losing_carrier_is_wireless = None + losing_carrier_minimum_porting_interval = None + losing_carrier_name = None + losing_carrier_spid = None + tn_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/movetns.py b/iris_sdk/models/maps/movetns.py new file mode 100644 index 0000000..773473a --- /dev/null +++ b/iris_sdk/models/maps/movetns.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class MovetnsMap(BaseMap): + + full_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/note.py b/iris_sdk/models/maps/note.py new file mode 100644 index 0000000..586c4d9 --- /dev/null +++ b/iris_sdk/models/maps/note.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class NoteMap(BaseMap): + + description = None + id = None + last_date_modifier = None + user_id = None \ No newline at end of file diff --git a/iris_sdk/models/maps/notes.py b/iris_sdk/models/maps/notes.py new file mode 100644 index 0000000..42cdc9a --- /dev/null +++ b/iris_sdk/models/maps/notes.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class NotesMap(BaseMap): + + note = None \ No newline at end of file diff --git a/iris_sdk/models/maps/npa_nxx.py b/iris_sdk/models/maps/npa_nxx.py new file mode 100644 index 0000000..4ace04a --- /dev/null +++ b/iris_sdk/models/maps/npa_nxx.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class NpaNxxMap(BaseMap): + + city = None + npa = None + nxx = None + quantity = None + state = None \ No newline at end of file diff --git a/iris_sdk/models/maps/npanxx_list.py b/iris_sdk/models/maps/npanxx_list.py new file mode 100644 index 0000000..521af1a --- /dev/null +++ b/iris_sdk/models/maps/npanxx_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class NpanxxListMap(BaseMap): + + npanxx = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/__init__.py b/iris_sdk/models/maps/ord/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/iris_sdk/models/maps/ord/area_code_search_order.py b/iris_sdk/models/maps/ord/area_code_search_order.py new file mode 100644 index 0000000..3acff11 --- /dev/null +++ b/iris_sdk/models/maps/ord/area_code_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class AreaCodeSearchOrderMap(BaseMap): + + area_code = None + quantity = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/city_search_order.py b/iris_sdk/models/maps/ord/city_search_order.py new file mode 100644 index 0000000..b461173 --- /dev/null +++ b/iris_sdk/models/maps/ord/city_search_order.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class CitySearchOrderMap(BaseMap): + + city = None + quantity = None + state = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/existing_search_order.py b/iris_sdk/models/maps/ord/existing_search_order.py new file mode 100644 index 0000000..8c45912 --- /dev/null +++ b/iris_sdk/models/maps/ord/existing_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ExistingSearchOrderMap(BaseMap): + + reservation_id_list = None + telephone_number_list = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/lata_search_order.py b/iris_sdk/models/maps/ord/lata_search_order.py new file mode 100644 index 0000000..51e30b8 --- /dev/null +++ b/iris_sdk/models/maps/ord/lata_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class LataSearchOrderMap(BaseMap): + + lata = None + quantity = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/npa_search_order.py b/iris_sdk/models/maps/ord/npa_search_order.py new file mode 100644 index 0000000..2184050 --- /dev/null +++ b/iris_sdk/models/maps/ord/npa_search_order.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class NpaSearchOrderMap(BaseMap): + + enable_lca = None + npa_nxx = None + quantity = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/rate_center_search_order.py b/iris_sdk/models/maps/ord/rate_center_search_order.py new file mode 100644 index 0000000..25ecb54 --- /dev/null +++ b/iris_sdk/models/maps/ord/rate_center_search_order.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class RateCenterSearchOrderMap(BaseMap): + + quantity = None + rate_center = None + state = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/state_search_order.py b/iris_sdk/models/maps/ord/state_search_order.py new file mode 100644 index 0000000..cd37f78 --- /dev/null +++ b/iris_sdk/models/maps/ord/state_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class StateSearchOrderMap(BaseMap): + + quantity = None + state = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/vanity_search_order.py b/iris_sdk/models/maps/ord/vanity_search_order.py new file mode 100644 index 0000000..e9da2b2 --- /dev/null +++ b/iris_sdk/models/maps/ord/vanity_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class VanitySearchOrderMap(BaseMap): + + quantity = None + toll_free_vanity = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/wildcard_search_order.py b/iris_sdk/models/maps/ord/wildcard_search_order.py new file mode 100644 index 0000000..6633927 --- /dev/null +++ b/iris_sdk/models/maps/ord/wildcard_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class WildcardSearchOrderMap(BaseMap): + + quantity = None + toll_free_wild_card_pattern = None \ No newline at end of file diff --git a/iris_sdk/models/maps/ord/zip_search_order.py b/iris_sdk/models/maps/ord/zip_search_order.py new file mode 100644 index 0000000..ef982f8 --- /dev/null +++ b/iris_sdk/models/maps/ord/zip_search_order.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ZipSearchOrderMap(BaseMap): + + quantity = None + zip = None \ No newline at end of file diff --git a/iris_sdk/models/maps/order.py b/iris_sdk/models/maps/order.py new file mode 100644 index 0000000..93c1f9a --- /dev/null +++ b/iris_sdk/models/maps/order.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class OrderMap(BaseMap): + + area_code_search_and_order_type = None + back_order_requested = None + close_order = None + count_of_t_ns = None + customer_order_id = None + city_search_and_order_type = None + existing_telephone_number_order_type = None + last_modified_date = None + lata_search_and_order_type = None + name = None + npanxx_search_and_order_type = None + order_create_date = None + order_date = None + order_id = None + order_status = None + order_type = None + peer_id = None + partial_allowed = None + quantity = None + rate_center_search_and_order_type = None + reservation_id_list = None + site_id = None + state_search_and_order_type = None + telephone_number_list = None + toll_free_vanity_search_and_order_type = None + toll_free_wild_char_search_and_order_type = None + user_id = None + zip_search_and_order_type = None \ No newline at end of file diff --git a/iris_sdk/models/maps/order_history.py b/iris_sdk/models/maps/order_history.py new file mode 100644 index 0000000..05d8e62 --- /dev/null +++ b/iris_sdk/models/maps/order_history.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class OrderHistoryMap(BaseMap): + + order_date = None + note = None + author = None + status = None + difference = None \ No newline at end of file diff --git a/iris_sdk/models/maps/order_response.py b/iris_sdk/models/maps/order_response.py new file mode 100644 index 0000000..8025fa0 --- /dev/null +++ b/iris_sdk/models/maps/order_response.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class OrderResponseMap(BaseMap): + + completed_numbers = None + completed_quantity = None + created_by_user = None + error_list = None + failed_numbers = None + failed_quantity = None + last_modified_date = None + order = None + order_complete_date = None + order_date = None + order_id = None + order_status = None + order_type = None + pending_quantity = None + user_id = None \ No newline at end of file diff --git a/iris_sdk/models/maps/order_tns.py b/iris_sdk/models/maps/order_tns.py new file mode 100644 index 0000000..6f6c29e --- /dev/null +++ b/iris_sdk/models/maps/order_tns.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class OrderTnsMap(BaseMap): + + count = None + telephone_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/orders.py b/iris_sdk/models/maps/orders.py new file mode 100644 index 0000000..20eacb7 --- /dev/null +++ b/iris_sdk/models/maps/orders.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class OrdersMap(BaseMap): + + links = None + order_id_user_id_date = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/permission.py b/iris_sdk/models/maps/permission.py new file mode 100644 index 0000000..54de8d8 --- /dev/null +++ b/iris_sdk/models/maps/permission.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class PermissionMap(BaseMap): + + permission_name = None \ No newline at end of file diff --git a/iris_sdk/models/maps/permissions_list.py b/iris_sdk/models/maps/permissions_list.py new file mode 100644 index 0000000..34f8f0f --- /dev/null +++ b/iris_sdk/models/maps/permissions_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class PermissionsListMap(BaseMap): + + permission = None \ No newline at end of file diff --git a/iris_sdk/models/maps/phone_number_list.py b/iris_sdk/models/maps/phone_number_list.py new file mode 100644 index 0000000..461423f --- /dev/null +++ b/iris_sdk/models/maps/phone_number_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class PhoneNumberListMap(BaseMap): + + phone_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/portin.py b/iris_sdk/models/maps/portin.py new file mode 100644 index 0000000..3f39f2b --- /dev/null +++ b/iris_sdk/models/maps/portin.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class PortInMap(BaseMap): + + account_id = None + alternate_spid = None + billing_telephone_number = None + billing_type = None + count_of_t_ns = None + customer_order_id = None + error_code = None + error_message = None + errors = None + immidiately = None + last_modified_date = None + last_modified_by = None + list_of_phone_numbers = None + lnp_losing_carrier_id = None + lnp_losing_carrier_name = None + loa_authorizing_person = None + order_date = None + order_create_date = None + order_id = None + order_type = None + partial_port = None + peer_id = None + pon = None + processing_status = None + requested_foc_date = None + site_id = None + status = None + subscriber = None + triggered = None + user_id = None + vendor_id = None + vendor_name = None + wireless_info = None \ No newline at end of file diff --git a/iris_sdk/models/maps/portins.py b/iris_sdk/models/maps/portins.py new file mode 100644 index 0000000..8b7680c --- /dev/null +++ b/iris_sdk/models/maps/portins.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class PortInsMap(BaseMap): + + links = None + lnp_port_info_for_given_status = None + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/rate_center.py b/iris_sdk/models/maps/rate_center.py new file mode 100644 index 0000000..6e7ad58 --- /dev/null +++ b/iris_sdk/models/maps/rate_center.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class RateCenterMap(BaseMap): + + abbreviation = None + available_number_count = None + cities = None + id = None + lata = None + local_rate_centers = None + name = None + npa_nxx_xs = None + state = None + tiers = None + zip_codes = None \ No newline at end of file diff --git a/iris_sdk/models/maps/rate_centers.py b/iris_sdk/models/maps/rate_centers.py new file mode 100644 index 0000000..0994f64 --- /dev/null +++ b/iris_sdk/models/maps/rate_centers.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class RateCentersMap(BaseMap): + + result_count = None + rate_centers = None \ No newline at end of file diff --git a/iris_sdk/models/maps/rate_centers_list.py b/iris_sdk/models/maps/rate_centers_list.py new file mode 100644 index 0000000..b7a17c5 --- /dev/null +++ b/iris_sdk/models/maps/rate_centers_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class RateCentersListMap(BaseMap): + + rate_center = None \ No newline at end of file diff --git a/iris_sdk/models/maps/reservation.py b/iris_sdk/models/maps/reservation.py new file mode 100644 index 0000000..1c224a2 --- /dev/null +++ b/iris_sdk/models/maps/reservation.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ReservationMap(BaseMap): + + account_id = None + reservation_id = None + reservation_expires = None + reserved_tn = None \ No newline at end of file diff --git a/iris_sdk/models/maps/reservation_list.py b/iris_sdk/models/maps/reservation_list.py new file mode 100644 index 0000000..339c787 --- /dev/null +++ b/iris_sdk/models/maps/reservation_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ReservationListMap(BaseMap): + + reservation_id = None diff --git a/iris_sdk/models/maps/response_status.py b/iris_sdk/models/maps/response_status.py new file mode 100644 index 0000000..2244283 --- /dev/null +++ b/iris_sdk/models/maps/response_status.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ResponseStatusMap(BaseMap): + + description = None \ No newline at end of file diff --git a/iris_sdk/models/maps/role.py b/iris_sdk/models/maps/role.py new file mode 100644 index 0000000..ecee2a2 --- /dev/null +++ b/iris_sdk/models/maps/role.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class RoleMap(BaseMap): + + permissions = None + role_name = None \ No newline at end of file diff --git a/iris_sdk/models/maps/roles_list.py b/iris_sdk/models/maps/roles_list.py new file mode 100644 index 0000000..c8f654a --- /dev/null +++ b/iris_sdk/models/maps/roles_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class RolesListMap(BaseMap): + + role = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peer.py b/iris_sdk/models/maps/sip_peer.py new file mode 100644 index 0000000..1df86b3 --- /dev/null +++ b/iris_sdk/models/maps/sip_peer.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeerMap(BaseMap): + + address = None + calling_name = None + description = None + final_destination_uri = None + is_default_peer = None + peer_id = None + peer_name = None + short_messaging_protocol = None + sms_hosts = None + termination_hosts = None + voice_hosts = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peer_host.py b/iris_sdk/models/maps/sip_peer_host.py new file mode 100644 index 0000000..6ab7516 --- /dev/null +++ b/iris_sdk/models/maps/sip_peer_host.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeerHostMap(BaseMap): + + sip_peer_id = None + sms_hosts = None + termination_hosts = None + voice_hosts = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peer_hosts.py b/iris_sdk/models/maps/sip_peer_hosts.py new file mode 100644 index 0000000..a183b3e --- /dev/null +++ b/iris_sdk/models/maps/sip_peer_hosts.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeerHostsMap(BaseMap): + + sip_peer_host = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peer_telephone_number.py b/iris_sdk/models/maps/sip_peer_telephone_number.py new file mode 100644 index 0000000..bb74343 --- /dev/null +++ b/iris_sdk/models/maps/sip_peer_telephone_number.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeerTelephoneNumberMap(BaseMap): + + call_forward = None + calling_name_display = None + full_number = None + number_format = None + rewrite_user = None + rpid_format = None + tn_attributes = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peer_telephone_numbers.py b/iris_sdk/models/maps/sip_peer_telephone_numbers.py new file mode 100644 index 0000000..a9b1e91 --- /dev/null +++ b/iris_sdk/models/maps/sip_peer_telephone_numbers.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeerTelephoneNumbersMap(BaseMap): + + sip_peer_telephone_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peer_tns.py b/iris_sdk/models/maps/sip_peer_tns.py new file mode 100644 index 0000000..b4f7be6 --- /dev/null +++ b/iris_sdk/models/maps/sip_peer_tns.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeerTnsMap(BaseMap): + + sip_peer_telephone_numbers = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peer_totaltns.py b/iris_sdk/models/maps/sip_peer_totaltns.py new file mode 100644 index 0000000..44b5800 --- /dev/null +++ b/iris_sdk/models/maps/sip_peer_totaltns.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeerTotaltnsMap(BaseMap): + + cnam_count = None + lidb_count = None + sip_peer_telephone_numbers_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sip_peers.py b/iris_sdk/models/maps/sip_peers.py new file mode 100644 index 0000000..444c8cf --- /dev/null +++ b/iris_sdk/models/maps/sip_peers.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SipPeersMap(BaseMap): + + sip_peer = None \ No newline at end of file diff --git a/iris_sdk/models/maps/site.py b/iris_sdk/models/maps/site.py new file mode 100644 index 0000000..f38af09 --- /dev/null +++ b/iris_sdk/models/maps/site.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SiteMap(BaseMap): + + address = None + customer_name = None + customer_provided_id = None + description = None + id = None + name = None \ No newline at end of file diff --git a/iris_sdk/models/maps/site_host.py b/iris_sdk/models/maps/site_host.py new file mode 100644 index 0000000..d61ed24 --- /dev/null +++ b/iris_sdk/models/maps/site_host.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SiteHostMap(BaseMap): + + sip_peer_hosts = None + site_id = None \ No newline at end of file diff --git a/iris_sdk/models/maps/site_hosts.py b/iris_sdk/models/maps/site_hosts.py new file mode 100644 index 0000000..8aa7c98 --- /dev/null +++ b/iris_sdk/models/maps/site_hosts.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SiteHostsMap(BaseMap): + + site_host = None \ No newline at end of file diff --git a/iris_sdk/models/maps/site_totaltns.py b/iris_sdk/models/maps/site_totaltns.py new file mode 100644 index 0000000..a44d2a6 --- /dev/null +++ b/iris_sdk/models/maps/site_totaltns.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SiteTotaltnsMap(BaseMap): + + total_count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/sites.py b/iris_sdk/models/maps/sites.py new file mode 100644 index 0000000..e8b5c81 --- /dev/null +++ b/iris_sdk/models/maps/sites.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SitesMap(BaseMap): + + site = None \ No newline at end of file diff --git a/iris_sdk/models/maps/subscriber.py b/iris_sdk/models/maps/subscriber.py new file mode 100644 index 0000000..66e730f --- /dev/null +++ b/iris_sdk/models/maps/subscriber.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SubscriberMap(BaseMap): + + business_name = None + subscriber_type = None + service_address = None \ No newline at end of file diff --git a/iris_sdk/models/maps/subscription.py b/iris_sdk/models/maps/subscription.py new file mode 100644 index 0000000..196dfb4 --- /dev/null +++ b/iris_sdk/models/maps/subscription.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SubscriptionMap(BaseMap): + + subscription_id = None + order_id = None + order_type = None + email_subscription = None + callback_subscription = None \ No newline at end of file diff --git a/iris_sdk/models/maps/subscriptions.py b/iris_sdk/models/maps/subscriptions.py new file mode 100644 index 0000000..37ebc41 --- /dev/null +++ b/iris_sdk/models/maps/subscriptions.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class SubscriptionsMap(BaseMap): + + subscription = None \ No newline at end of file diff --git a/iris_sdk/models/maps/telephone_number.py b/iris_sdk/models/maps/telephone_number.py new file mode 100644 index 0000000..795980c --- /dev/null +++ b/iris_sdk/models/maps/telephone_number.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TelephoneNumberMap(BaseMap): + + account_id = None + city = None + full_number = None + last_modified = None + lata = None + order_create_date = None + order_id = None + order_type = None + rate_center = None + site_id = None + state = None + status = None + tier = None + vendor_id = None + vendor_name = None \ No newline at end of file diff --git a/iris_sdk/models/maps/telephone_number_detail_list.py b/iris_sdk/models/maps/telephone_number_detail_list.py new file mode 100644 index 0000000..c8f8744 --- /dev/null +++ b/iris_sdk/models/maps/telephone_number_detail_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TelephoneNumberDetailListMap(BaseMap): + + telephone_number_detail = None \ No newline at end of file diff --git a/iris_sdk/models/maps/telephone_number_detail_list_tn.py b/iris_sdk/models/maps/telephone_number_detail_list_tn.py new file mode 100644 index 0000000..cf5ee5a --- /dev/null +++ b/iris_sdk/models/maps/telephone_number_detail_list_tn.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TelephoneNumberDetailListTnMap(BaseMap): + + telephone_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/telephone_number_list.py b/iris_sdk/models/maps/telephone_number_list.py new file mode 100644 index 0000000..51a1d09 --- /dev/null +++ b/iris_sdk/models/maps/telephone_number_list.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TelephoneNumberListMap(BaseMap): + + count = None + telephone_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/telephone_numbers.py b/iris_sdk/models/maps/telephone_numbers.py new file mode 100644 index 0000000..977ba54 --- /dev/null +++ b/iris_sdk/models/maps/telephone_numbers.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TelephoneNumbersMap(BaseMap): + + telephone_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/termination_hosts.py b/iris_sdk/models/maps/termination_hosts.py new file mode 100644 index 0000000..100cd2e --- /dev/null +++ b/iris_sdk/models/maps/termination_hosts.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TerminationHostsMap(BaseMap): + + termination_host = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tier_list.py b/iris_sdk/models/maps/tier_list.py new file mode 100644 index 0000000..9e1ba94 --- /dev/null +++ b/iris_sdk/models/maps/tier_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TierListMap(BaseMap): + + tier = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_attributes.py b/iris_sdk/models/maps/tn_attributes.py new file mode 100644 index 0000000..b063d83 --- /dev/null +++ b/iris_sdk/models/maps/tn_attributes.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnAttributesMap(BaseMap): + + tn_attribute = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_history.py b/iris_sdk/models/maps/tn_history.py new file mode 100644 index 0000000..07ca4c1 --- /dev/null +++ b/iris_sdk/models/maps/tn_history.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnHistoryMap(BaseMap): + + telephone_number_status = None diff --git a/iris_sdk/models/maps/tn_lca.py b/iris_sdk/models/maps/tn_lca.py new file mode 100644 index 0000000..d9fbb5a --- /dev/null +++ b/iris_sdk/models/maps/tn_lca.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnLcaMap(BaseMap): + + listof_npanxx = None + location = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_line_options.py b/iris_sdk/models/maps/tn_line_options.py new file mode 100644 index 0000000..a71b334 --- /dev/null +++ b/iris_sdk/models/maps/tn_line_options.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnLineOptionsMap(BaseMap): + + telephone_number = None + calling_name_display = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_list.py b/iris_sdk/models/maps/tn_list.py new file mode 100644 index 0000000..5b75d0f --- /dev/null +++ b/iris_sdk/models/maps/tn_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnListMap(BaseMap): + + tn = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_option_order.py b/iris_sdk/models/maps/tn_option_order.py new file mode 100644 index 0000000..1b6ddc5 --- /dev/null +++ b/iris_sdk/models/maps/tn_option_order.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnOptionOrderMap(BaseMap): + + customer_order_id = None + account_id = None + count_of_tns = None + user_id = None + last_modified_date = None + order_date = None + order_type = None + order_status = None + order_id = None + order_create_date = None + created_by_user = None + last_modified_date = None + processing_status = None + error_list = None + warnings = None + tn_option_groups = None diff --git a/iris_sdk/models/maps/tn_option_order_group.py b/iris_sdk/models/maps/tn_option_order_group.py new file mode 100644 index 0000000..aa6ea55 --- /dev/null +++ b/iris_sdk/models/maps/tn_option_order_group.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnOptionOrderGroupMap(BaseMap): + + number_format = None + rpid_format = None + rewrite_user = None + call_forward = None + calling_name_display = None + port_out_passcode = None + protected = None + sms = None + final_destination_uri = None + telephone_numbers = None + a2p_settings = None diff --git a/iris_sdk/models/maps/tn_option_order_groups.py b/iris_sdk/models/maps/tn_option_order_groups.py new file mode 100644 index 0000000..2210a4f --- /dev/null +++ b/iris_sdk/models/maps/tn_option_order_groups.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnOptionOrderGroupsMap(BaseMap): + tn_option_group = None diff --git a/iris_sdk/models/maps/tn_option_orders.py b/iris_sdk/models/maps/tn_option_orders.py new file mode 100644 index 0000000..301a75f --- /dev/null +++ b/iris_sdk/models/maps/tn_option_orders.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnOptionOrdersMap(BaseMap): + + tn_option_order_summary = None + total_count = None diff --git a/iris_sdk/models/maps/tn_rate_center.py b/iris_sdk/models/maps/tn_rate_center.py new file mode 100644 index 0000000..64397d4 --- /dev/null +++ b/iris_sdk/models/maps/tn_rate_center.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnRateCenterMap(BaseMap): + + state = None + rate_center = None + rc = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_rate_centers_list.py b/iris_sdk/models/maps/tn_rate_centers_list.py new file mode 100644 index 0000000..3825444 --- /dev/null +++ b/iris_sdk/models/maps/tn_rate_centers_list.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnRateCentersListMap(BaseMap): + + state = None + r_cs = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_rc_list.py b/iris_sdk/models/maps/tn_rc_list.py new file mode 100644 index 0000000..9bcd1d5 --- /dev/null +++ b/iris_sdk/models/maps/tn_rc_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TelephoneNumberRcListMap(BaseMap): + + rc = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tn_status.py b/iris_sdk/models/maps/tn_status.py new file mode 100644 index 0000000..eb5eee6 --- /dev/null +++ b/iris_sdk/models/maps/tn_status.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnStatusMap(BaseMap): + + account_id = None + last_modified_date = None + order_create_date = None + order_id = None + order_type = None + status = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tndetails.py b/iris_sdk/models/maps/tndetails.py new file mode 100644 index 0000000..eeb0805 --- /dev/null +++ b/iris_sdk/models/maps/tndetails.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TndetailsMap(BaseMap): + + account_id = None + city = None + features = None + full_number = None + last_modified = None + lata = None + rate_center = None + state = None + status = None + tier = None + vendor_id = None + vendor_name = None \ No newline at end of file diff --git a/iris_sdk/models/maps/tns.py b/iris_sdk/models/maps/tns.py new file mode 100644 index 0000000..876a583 --- /dev/null +++ b/iris_sdk/models/maps/tns.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TnsMap(BaseMap): + + links = None + telephone_number_count = None + telephone_numbers = None \ No newline at end of file diff --git a/iris_sdk/models/maps/totals.py b/iris_sdk/models/maps/totals.py new file mode 100644 index 0000000..3a0cd23 --- /dev/null +++ b/iris_sdk/models/maps/totals.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class TotalsMap(BaseMap): + + count = None \ No newline at end of file diff --git a/iris_sdk/models/maps/warning.py b/iris_sdk/models/maps/warning.py new file mode 100644 index 0000000..745208c --- /dev/null +++ b/iris_sdk/models/maps/warning.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class WarningMap(BaseMap): + description = None + telephone_number = None diff --git a/iris_sdk/models/maps/warnings.py b/iris_sdk/models/maps/warnings.py new file mode 100644 index 0000000..d17a1f2 --- /dev/null +++ b/iris_sdk/models/maps/warnings.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class WarningsMap(BaseMap): + warning = None diff --git a/iris_sdk/models/maps/wireless_info.py b/iris_sdk/models/maps/wireless_info.py new file mode 100644 index 0000000..be9f63d --- /dev/null +++ b/iris_sdk/models/maps/wireless_info.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class WirelessInfoMap(BaseMap): + + account_number = None + pin_number = None \ No newline at end of file diff --git a/iris_sdk/models/maps/zip_code_list.py b/iris_sdk/models/maps/zip_code_list.py new file mode 100644 index 0000000..3c036ad --- /dev/null +++ b/iris_sdk/models/maps/zip_code_list.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from iris_sdk.models.maps.base_map import BaseMap + +class ZipCodeListMap(BaseMap): + + zip_code = None \ No newline at end of file diff --git a/iris_sdk/models/movetns.py b/iris_sdk/models/movetns.py new file mode 100644 index 0000000..b8dab6d --- /dev/null +++ b/iris_sdk/models/movetns.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource, BaseResourceList +from iris_sdk.models.data.movetns import MovetnsData + +XML_NAME_MOVETNS = "SipPeerTelephoneNumbers" +XPATH_MOVETNS = "/movetns" + +class Movetns(BaseResource, MovetnsData): + + """Moving telephone numbers across SIP peers""" + + _node_name = XML_NAME_MOVETNS + _save_post = True + _xpath = XPATH_MOVETNS + + def __call__(self): + self.save() + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + MovetnsData.__init__(self) \ No newline at end of file diff --git a/iris_sdk/models/note.py b/iris_sdk/models/note.py new file mode 100644 index 0000000..853eadf --- /dev/null +++ b/iris_sdk/models/note.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.note import NoteData + +XPATH_NOTE = "" + +class Note(BaseResource, NoteData): + + """Order notes""" + + _save_post = True + _xpath = XPATH_NOTE + _xpath_save = _xpath + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + + def save(self): + self.user_id = self.client.config.username + self._save() \ No newline at end of file diff --git a/iris_sdk/models/notes.py b/iris_sdk/models/notes.py new file mode 100644 index 0000000..a59d74c --- /dev/null +++ b/iris_sdk/models/notes.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.notes import NotesData +from iris_sdk.models.note import Note + +XPATH_NOTES = "/notes" + +class Notes(BaseResource, NotesData): + + """Order notes""" + + _save_post = True + _xpath = XPATH_NOTES + _xpath_save = _xpath + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + NotesData.__init__(self, self) + + def create(self, data=None, save=True): + note = Note(self).set_from_dict(data) + if save and (data is not None): + note.save() + return note + + def list(self): + return self._get_data().note \ No newline at end of file diff --git a/iris_sdk/models/order.py b/iris_sdk/models/order.py new file mode 100644 index 0000000..3d1122a --- /dev/null +++ b/iris_sdk/models/order.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.order import OrderData +from iris_sdk.models.notes import Notes +from iris_sdk.models.order_response import OrderResponse +from iris_sdk.models.order_tns import OrderTns + +XPATH_ORDER = "/{}" + +class Order(BaseResource, OrderData): + + """Account telephone numbers order""" + + _xpath = XPATH_ORDER + + @property + def id(self): + return self.order_id + @id.setter + def id(self, id): + self.order_id = id + + @property + def notes(self): + return self._notes + + @property + def tns(self): + return self._tns + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + OrderData.__init__(self) + self._notes = Notes(self, client) + self._tns = OrderTns(self, client) + + def get(self, id=None, params=None): + order_response = OrderResponse(self._parent) + order_response.order = self + return order_response.get(id, params=params) + + def save(self): + str = self._save(True) + order_response = OrderResponse(self._parent) + self.clear() + order_response.order = self + order_response._from_xml(self._element_from_string(str)) + self.order_status = order_response.order_status + return True \ No newline at end of file diff --git a/iris_sdk/models/order_history.py b/iris_sdk/models/order_history.py new file mode 100644 index 0000000..368b664 --- /dev/null +++ b/iris_sdk/models/order_history.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.order_history import OrderHistoryData + +XPATH_ORDER_HISTORY = "" + +class OrderHistory(BaseResource, OrderHistoryData): + + """Order history""" + + _save_post = True + _xpath = XPATH_ORDER_HISTORY + _xpath_save = _xpath + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + + def save(self): + self.user_id = self.client.config.username + self._save() \ No newline at end of file diff --git a/iris_sdk/models/order_response.py b/iris_sdk/models/order_response.py new file mode 100644 index 0000000..25cb7e6 --- /dev/null +++ b/iris_sdk/models/order_response.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.order_response import OrderResponseData + +XPATH_ORDER_RESPONSE = "/{}" + +class OrderResponse(BaseResource, OrderResponseData): + + """Telephone numbers order response""" + + _xpath = XPATH_ORDER_RESPONSE + + @property + def id(self): + return self.order.order_id + @id.setter + def id(self, order_id): + self.order.order_id = order_id + + @property + def order(self): + return self._order + @order.setter + def order(self, order): + self._order = order + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + OrderResponseData.__init__(self) + + def get(self, id=None, params=None): + return self._get_data((id or self.id), params=params) \ No newline at end of file diff --git a/iris_sdk/models/order_tns.py b/iris_sdk/models/order_tns.py new file mode 100644 index 0000000..69807af --- /dev/null +++ b/iris_sdk/models/order_tns.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource, BaseResourceList +from iris_sdk.models.data.order_tns import OrderTnsData + +XML_NAME_TNS_ORDERS = "TelephoneNumbers" +XPATH_TNS_ORDERS = "/tns" + +class OrderTns(BaseResource, OrderTnsData): + + """Telephone numbers directory""" + + _node_name = XML_NAME_TNS_ORDERS + _xpath = XPATH_TNS_ORDERS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + OrderTnsData.__init__(self) + + def list(self): + return self._get_data().telephone_number \ No newline at end of file diff --git a/iris_sdk/models/orders.py b/iris_sdk/models/orders.py new file mode 100644 index 0000000..2b30e79 --- /dev/null +++ b/iris_sdk/models/orders.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.orders import OrdersData +from iris_sdk.models.order import Order + +XML_NAME_ORDERS = "ListOrderIdUserIdDate" +XPATH_ORDERS = "/orders" + +class Orders(BaseResource, OrdersData): + + """Telephone number orders for account""" + + _node_name = XML_NAME_ORDERS + _xpath = XPATH_ORDERS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + OrdersData.__init__(self, self) + + def create(self, data=None, save=True): + order = Order(self).set_from_dict(data) + if save and (data is not None): + order.save() + return order + + def get(self, id, params=None): + return self.create(save=False).get(id, params=params) + + def list(self, params): + return self._get_data(params=params).order_id_user_id_date \ No newline at end of file diff --git a/iris_sdk/models/password.py b/iris_sdk/models/password.py new file mode 100644 index 0000000..3005670 --- /dev/null +++ b/iris_sdk/models/password.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource + +XPATH_PASSWORD = "/password" +PAYLOAD_PASSWORD = "{}" + +class Password(BaseResource): + + """Changing user's pass""" + + _xpath = XPATH_PASSWORD + + def change(self, new_password): + self._put(self.get_xpath(), + PAYLOAD_PASSWORD.format(new_password)) \ No newline at end of file diff --git a/iris_sdk/models/portin.py b/iris_sdk/models/portin.py new file mode 100644 index 0000000..38d56c4 --- /dev/null +++ b/iris_sdk/models/portin.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.activation_status import ActivationStatus +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.portin import PortInData +from iris_sdk.models.history import History +from iris_sdk.models.loas import Loas +from iris_sdk.models.notes import Notes +from iris_sdk.models.totals import Totals + +XML_NAME_PORTIN = "LnpOrderResponse" +XML_NAME_PORTIN_SAVE = "LnpOrder" +XPATH_PORTIN = "/{}" + +class PortIn(BaseResource, PortInData): + + """Local number portability order""" + + _node_name = XML_NAME_PORTIN + _node_name_save = XML_NAME_PORTIN_SAVE + _xpath = XPATH_PORTIN + + @property + def activation_status(self): + return self._activation_status + + @property + def history(self): + return self._history + + @property + def id(self): + return self.order_id + @id.setter + def id(self, id): + self.order_id = id + + @property + def loas(self): + return self._loas + + @property + def notes(self): + return self._notes + + @property + def totals(self): + return self._totals + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + PortInData.__init__(self) + self._activation_status = ActivationStatus(self) + self._history = History(self) + self._loas = Loas(self, client) + self._notes = Notes(self, client) + self._totals = Totals(self, client) + + def save(self): + return self._post_data() \ No newline at end of file diff --git a/iris_sdk/models/portins.py b/iris_sdk/models/portins.py new file mode 100644 index 0000000..1bcfcea --- /dev/null +++ b/iris_sdk/models/portins.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.portins import PortInsData +from iris_sdk.models.portin import PortIn + +XML_NAME_PORTINS = "LNPResponseWrapper" +XPATH_PORTINS = "/portins" + +class PortIns(BaseResource, PortInsData): + + """Local number portability orders for account""" + + _node_name = XML_NAME_PORTINS + _xpath = XPATH_PORTINS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + PortInsData.__init__(self, self) + + def create(self, data=None, save=True): + portin = PortIn(self).set_from_dict(data) + if save and (data is not None): + portin.save() + return portin + + def get(self, id, params): + return PortIn(self).get(id, params=params) + + def list(self, params): + return self._get_data(params=params).lnp_port_info_for_given_status \ No newline at end of file diff --git a/iris_sdk/models/portout.py b/iris_sdk/models/portout.py new file mode 100644 index 0000000..0ce325b --- /dev/null +++ b/iris_sdk/models/portout.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.portin import PortInData +from iris_sdk.models.notes import Notes +from iris_sdk.models.totals import Totals + +XML_NAME_PORTOUT = "LnpOrderResponse" +XPATH_PORTOUT = "/{}" + +class PortOut(BaseResource, PortInData): + + """Local number portability order from a winning carrier""" + + _node_name = XML_NAME_PORTOUT + _xpath = XPATH_PORTOUT + + @property + def notes(self): + return self._notes + + @property + def totals(self): + return self._totals + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + PortInData.__init__(self) + self._notes = Notes(self) + self._totals = Totals(self, client) \ No newline at end of file diff --git a/iris_sdk/models/portouts.py b/iris_sdk/models/portouts.py new file mode 100644 index 0000000..6b177ba --- /dev/null +++ b/iris_sdk/models/portouts.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.portouts import PortOutsData + +XML_NAME_PORTOUTS = "LNPResponseWrapper" +XPATH_PORTOUTS = "/portouts" + +class PortOuts(BaseResource, PortOutsData): + + """Local number portability orders from winning carriers for account""" + + _node_name = XML_NAME_PORTOUTS + _xpath = XPATH_PORTOUTS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + PortOutsData.__init__(self, self) + + def list(self, params): + return self._get_data(params=params).lnp_port_info_for_given_status \ No newline at end of file diff --git a/iris_sdk/models/rate_center.py b/iris_sdk/models/rate_center.py new file mode 100644 index 0000000..9e14c41 --- /dev/null +++ b/iris_sdk/models/rate_center.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.rate_center import RateCenterData + +XML_NAME_COVERED_RATE_CENTER = "CoveredRateCenter" +XPATH_COVERED_RATE_CENTER = "/{}" + +class RateCenter(BaseResource, RateCenterData): + + """Rate Center""" + + _node_name = XML_NAME_COVERED_RATE_CENTER + _xpath = XPATH_COVERED_RATE_CENTER + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + RateCenterData.__init__(self) + + def get(self, id=None): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/rate_centers.py b/iris_sdk/models/rate_centers.py new file mode 100644 index 0000000..56cee0b --- /dev/null +++ b/iris_sdk/models/rate_centers.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.rate_centers import RateCentersData + +XML_NAME_RATE_CENTERS = "RateCenterResponse" +XPATH_RATE_CENTERS = "/ratecenters" + +class RateCenters(BaseResource, RateCentersData): + + """Rate centers directory""" + + _node_name = XML_NAME_RATE_CENTERS + _xpath = XPATH_RATE_CENTERS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + RateCentersData.__init__(self) + + def list(self, params): + return self._get_data(params=params).rate_centers.rate_center \ No newline at end of file diff --git a/iris_sdk/models/reservation.py b/iris_sdk/models/reservation.py new file mode 100644 index 0000000..147811b --- /dev/null +++ b/iris_sdk/models/reservation.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.reservation import ReservationData + +XML_NAME_RESERVATION = "Reservation" +XPATH_RESERVATION = "/tnreservation/{}" +XPATH_RESERVATION_SAVE = "/tnreservation" + +class Reservation(BaseResource, ReservationData): + + """Account's telephone number reservation""" + + _node_name = XML_NAME_RESERVATION + _save_post = True + _xpath = XPATH_RESERVATION + _xpath_save = XPATH_RESERVATION_SAVE + + @property + def reservation_id(self): + return self.id + @reservation_id.setter + def reservation_id(self, reservation_id): + self.id = reservation_id + + def get(self, id=None): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/sip_peer.py b/iris_sdk/models/sip_peer.py new file mode 100644 index 0000000..6ced3eb --- /dev/null +++ b/iris_sdk/models/sip_peer.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.sip_peer import SipPeerData +from iris_sdk.models.data.address import Address +from iris_sdk.models.data.calling_name import CallingName +from iris_sdk.models.data.hosts import Hosts +from iris_sdk.models.data.termination_hosts import TerminationHosts +from iris_sdk.models.maps.sip_peer import SipPeerMap +from iris_sdk.models.movetns import Movetns +from iris_sdk.models.sip_peer_tns import SipPeerTns +from iris_sdk.models.sip_peer_totaltns import SipPeerTotaltns + +XPATH_SIP_PEER = "/{}" + +class SipPeer(BaseResource, SipPeerData): + + """Site SIP peer""" + + _xpath = XPATH_SIP_PEER + + @property + def id(self): + return self.peer_id + @id.setter + def id(self, id): + self.peer_id = id + + @property + def movetns(self): + return self._movetns + + @property + def tns(self): + return self._tns + + @property + def totaltns(self): + return self._totaltns + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SipPeerData.__init__(self) + self._movetns = Movetns(self, client) + self._tns = SipPeerTns(self, client) + self._totaltns = SipPeerTotaltns(self, client) + + def get(self, id=None): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/sip_peer_telephone_number.py b/iris_sdk/models/sip_peer_telephone_number.py new file mode 100644 index 0000000..cda71c6 --- /dev/null +++ b/iris_sdk/models/sip_peer_telephone_number.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.sip_peer_telephone_number import \ + SipPeerTelephoneNumberData + +XPATH_SIP_PEER_TN = "/{}" + +class SipPeerTelephoneNumber(BaseResource, SipPeerTelephoneNumberData): + + """Sip peer telephone number""" + + _xpath = XPATH_SIP_PEER_TN + + @property + def id(self): + return self.full_number + @id.setter + def id(self, id): + self.full_number = id + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SipPeerTelephoneNumberData.__init__(self) + + def get(self, id=None): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/sip_peer_tns.py b/iris_sdk/models/sip_peer_tns.py new file mode 100644 index 0000000..3fb69b2 --- /dev/null +++ b/iris_sdk/models/sip_peer_tns.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.sip_peer_tns import SipPeerTnsData +from iris_sdk.models.sip_peer_telephone_number import \ + SipPeerTelephoneNumber + +XML_NAME_SIP_PEER_TNS = "SipPeerTelephoneNumbersResponse" +XPATH_SIP_PEER_TNS = "/tns" + +class SipPeerTns(BaseResource, SipPeerTnsData): + + """SIP peers telephone numbers""" + + _node_name = XML_NAME_SIP_PEER_TNS + _xpath = XPATH_SIP_PEER_TNS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SipPeerTnsData.__init__(self, self) + + def create(self, data=None, save=True): + tn = SipPeerTelephoneNumber(self).set_from_dict(data) + if save and (data is not None): + tn.save() + return tn + + def get(self, id): + return SipPeerTelephoneNumber(self).get(id) + + def list(self): + return self._get_data().sip_peer_telephone_numbers.\ + sip_peer_telephone_number \ No newline at end of file diff --git a/iris_sdk/models/sip_peer_totaltns.py b/iris_sdk/models/sip_peer_totaltns.py new file mode 100644 index 0000000..23c6970 --- /dev/null +++ b/iris_sdk/models/sip_peer_totaltns.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.sip_peer_totaltns import SipPeerTotaltnsData + +XML_NAME_TOTALTNS_SIP_PEER = "SipPeerTelephoneNumbersCounts" +XPATH_TOTALTNS_SIP_PEER = "/totaltns" + +class SipPeerTotaltns(BaseResource, SipPeerTotaltnsData): + + """Total telephone numbers count for a sip peer""" + + _node_name = XML_NAME_TOTALTNS_SIP_PEER + _xpath = XPATH_TOTALTNS_SIP_PEER + + def get(self, params=None): + return self._get_data(params=params) \ No newline at end of file diff --git a/iris_sdk/models/sip_peers.py b/iris_sdk/models/sip_peers.py new file mode 100644 index 0000000..b95182b --- /dev/null +++ b/iris_sdk/models/sip_peers.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource, BaseResourceList +from iris_sdk.models.data.sip_peers import SipPeersData +from iris_sdk.models.sip_peer import SipPeer + +XPATH_SIP_PEERS = "/sippeers" + +class SipPeers(BaseResource, SipPeersData): + + """Site's SIP peers""" + + _xpath = XPATH_SIP_PEERS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SipPeersData.__init__(self, self) + + def create(self, data=None, save=True): + sip_peer = SipPeer(self).set_from_dict(data) + if save and (data is not None): + sip_peer.save() + return sip_peer + + def get(self, id): + return SipPeer(self).get(id) + + def list(self): + return self._get_data().sip_peer \ No newline at end of file diff --git a/iris_sdk/models/site.py b/iris_sdk/models/site.py new file mode 100644 index 0000000..2d9db05 --- /dev/null +++ b/iris_sdk/models/site.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource, BaseResourceList +from iris_sdk.models.data.site import SiteData +from iris_sdk.models.orders import Orders +from iris_sdk.models.portins import PortIns +from iris_sdk.models.sip_peers import SipPeers +from iris_sdk.models.site_totaltns import SiteTotaltns + + +XPATH_SITE = "/{}" + +class Site(BaseResource, SiteData): + + """Account site""" + + _xpath = XPATH_SITE + + @property + def orders(self): + return self._orders + + @property + def portins(self): + return self._portins + + @property + def sip_peers(self): + return self._sip_peers + + @property + def totaltns(self): + return self._totaltns + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SiteData.__init__(self) + self._orders = Orders(self, client) + self._portins = PortIns(self, client) + self._sip_peers = SipPeers(self, client) + self._totaltns = SiteTotaltns(self, client) + + def get(self, id=None): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/site_hosts.py b/iris_sdk/models/site_hosts.py new file mode 100644 index 0000000..4b56e70 --- /dev/null +++ b/iris_sdk/models/site_hosts.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.site_hosts import SiteHostsData + +XML_NAME_SITE_HOSTS = "SiteHosts" +XPATH_SITE_HOSTS = "/hosts" + +class SiteHosts(BaseResource, SiteHostsData): + + """Sites hosts list""" + + _node_name = XML_NAME_SITE_HOSTS + _xpath = XPATH_SITE_HOSTS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SiteHostsData.__init__(self) + + def list(self, params=None): + return self._get_data(params=params).site_host \ No newline at end of file diff --git a/iris_sdk/models/site_totaltns.py b/iris_sdk/models/site_totaltns.py new file mode 100644 index 0000000..95aaa5a --- /dev/null +++ b/iris_sdk/models/site_totaltns.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.site_totaltns import SiteTotaltnsData + +XML_NAME_TOTALTNS_SITE = "SiteTNs" +XPATH_TOTALTNS_SITE = "/totaltns" + +class SiteTotaltns(BaseResource, SiteTotaltnsData): + + """Total telephone numbers count for a site""" + + _node_name = XML_NAME_TOTALTNS_SITE + _xpath = XPATH_TOTALTNS_SITE + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/sites.py b/iris_sdk/models/sites.py new file mode 100644 index 0000000..39dd997 --- /dev/null +++ b/iris_sdk/models/sites.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource, BaseResourceList +from iris_sdk.models.data.sites import SitesData +from iris_sdk.models.site import Site + +XPATH_SITES = "/sites" + +class Sites(BaseResource, SitesData): + + """Account sites""" + + _xpath = XPATH_SITES + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SitesData.__init__(self, self) + + def create(self, data=None, save=True): + site = Site(self).set_from_dict(data) + if save and (data is not None): + site.save() + return site + + def get(self, id): + return Site(self).get(id) + + def list(self): + return self._get_data().site \ No newline at end of file diff --git a/iris_sdk/models/subscription.py b/iris_sdk/models/subscription.py new file mode 100644 index 0000000..5783954 --- /dev/null +++ b/iris_sdk/models/subscription.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.subscription import SubscriptionData + +XPATH_SUBSCRIPTION = "/{}" + +class Subscription(BaseResource, SubscriptionData): + + """Subscription for account""" + + _xpath = XPATH_SUBSCRIPTION + + @property + def id(self): + return self.subscription_id + @id.setter + def id(self, id): + self.subscription_id = id + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SubscriptionData.__init__(self) + + def get(self, id=None): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/subscriptions.py b/iris_sdk/models/subscriptions.py new file mode 100644 index 0000000..f35ec38 --- /dev/null +++ b/iris_sdk/models/subscriptions.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.subscriptions import SubscriptionsData +from iris_sdk.models.subscription import Subscription + +XPATH_SUBSCRIPTIONS = "/subscriptions" + +class Subscriptions(BaseResource, SubscriptionsData): + + """Subscriptions for account""" + + _xpath = XPATH_SUBSCRIPTIONS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + SubscriptionsData.__init__(self, self) + + def create(self, data=None, save=True): + subscription = Subscription(self).set_from_dict(data) + if save and (data is not None): + subscription.save() + return subscription + + def get(self, id, params=None): + return Subscription(self).get(id, params=params) + + def list(self, params=None): + return self._get_data(params=params).subscription \ No newline at end of file diff --git a/iris_sdk/models/telephone_number.py b/iris_sdk/models/telephone_number.py new file mode 100644 index 0000000..f3a8c05 --- /dev/null +++ b/iris_sdk/models/telephone_number.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.telephone_number import TelephoneNumberData +from iris_sdk.models.tn_history import TnHistory +from iris_sdk.models.tn_lata import TnLata +from iris_sdk.models.tn_lca import TnLca +from iris_sdk.models.tn_rate_center import TnRateCenter +from iris_sdk.models.tn_reservation import TnReservation +from iris_sdk.models.tn_sip_peer import TnSipPeer +from iris_sdk.models.tn_site import TnSite +from iris_sdk.models.tndetails import Tndetails + +XML_NAME_TN = "TelephoneNumberResponse" +XPATH_TN = "/{}" + +class TelephoneNumber(BaseResource, TelephoneNumberData): + + """Telephone number""" + + _node_name = XML_NAME_TN + _xpath = XPATH_TN + + @property + def history(self): + return self._history + + @property + def id(self): + return self.full_number + @id.setter + def id(self, id): + self.full_number = id + + @property + def lca(self): + return self._lca + + @property + def sip_peer(self): + return self._sip_peer + + @property + def site(self): + return self._site + + @property + def tndetails(self): + return self._tndetails + + @property + def tn_lata(self): + return self._lata + + @property + def tn_rate_center(self): + return self._rate_center + + @property + def tnreservation(self): + return self._tnreservation + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + self._history = TnHistory(self, client) + self._lata = TnLata(self, client) + self._lca = TnLca(self, client) + self._rate_center = TnRateCenter(self, client) + self._sip_peer = TnSipPeer(self, client) + self._site = TnSite(self, client) + self._tndetails = Tndetails(self, client) + self._tnreservation = TnReservation(self, client) + + def get(self, id=None): + return self._get_data(id) \ No newline at end of file diff --git a/iris_sdk/models/tn_history.py b/iris_sdk/models/tn_history.py new file mode 100644 index 0000000..7736630 --- /dev/null +++ b/iris_sdk/models/tn_history.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.tn_history import TnHistoryData + +XML_NAME_HISTORY_TN = "TelephoneNumberStatuses" +XPATH_HISTORY_TN = "/history" + +class TnHistory(BaseResource, TnHistoryData): + + """Telephone number history""" + + _node_name = XML_NAME_HISTORY_TN + _xpath = XPATH_HISTORY_TN + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + TnHistoryData.__init__(self) + + def list(self): + return self._get_data().telephone_number_status \ No newline at end of file diff --git a/iris_sdk/models/tn_lata.py b/iris_sdk/models/tn_lata.py new file mode 100644 index 0000000..dc1ec9a --- /dev/null +++ b/iris_sdk/models/tn_lata.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.maps.lata import LataMap + +XML_NAME_LATA_TN = "TelephoneNumberDetails" +XPATH_LATA_TN = "/lata" + +class TnLata(BaseResource, LataMap): + + """Lata associated with a telephone number""" + + _node_name = XML_NAME_LATA_TN + _xpath = XPATH_LATA_TN + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/tn_lca.py b/iris_sdk/models/tn_lca.py new file mode 100644 index 0000000..97fab65 --- /dev/null +++ b/iris_sdk/models/tn_lca.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.tn_lca import TnLcaData + +XML_NAME_LCA_TN = "SearchResult" +XPATH_LCA_TN = "/lca" + +class TnLca(BaseResource, TnLcaData): + + """LCAs associated with a telephone number""" + + _node_name = XML_NAME_LCA_TN + _xpath = XPATH_LCA_TN + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + TnLcaData.__init__(self) + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/tn_line_options.py b/iris_sdk/models/tn_line_options.py new file mode 100644 index 0000000..144a2e1 --- /dev/null +++ b/iris_sdk/models/tn_line_options.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.tn_line_options import TnLineOptionsData + +XPATH_TN_LINE_OPTIONS = "/{}" + +class TnLineOptions(BaseResource, TnLineOptionsData): + + _xpath = XPATH_TN_LINE_OPTIONS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + TnLineOptionsData.__init__(self) \ No newline at end of file diff --git a/iris_sdk/models/tn_option_order.py b/iris_sdk/models/tn_option_order.py new file mode 100644 index 0000000..82eeb66 --- /dev/null +++ b/iris_sdk/models/tn_option_order.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.tn_option_order import TnOptionOrderData + +XML_NAME_TN_OPTION_ORDER = "TnOptionOrder" +XPATH_TN_OPTION_ORDER = "/{}" + +class TnOptionOrder(BaseResource, TnOptionOrderData): + + _node_name = XML_NAME_TN_OPTION_ORDER + _xpath = XPATH_TN_OPTION_ORDER + + @property + def id(self): + return self.order_id + @id.setter + def id(self, id): + self.order_id = id + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + TnOptionOrderData.__init__(self) + + def get(self, id=None, params=None): + return self._get_data(id) + + def save(self): + str = self._save(True) + self.clear() + self._from_xml(self._element_from_string(str)) + return True diff --git a/iris_sdk/models/tn_option_orders.py b/iris_sdk/models/tn_option_orders.py new file mode 100644 index 0000000..3c2d411 --- /dev/null +++ b/iris_sdk/models/tn_option_orders.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.tn_option_orders import TnOptionOrdersData +from iris_sdk.models.tn_option_order import TnOptionOrder + +XML_NAME_TN_OPTION_ORDERS = "TnOptionOrders" +XPATH_TN_OPTION_ORDERS = "/tnoptions" + +class TnOptionOrders(BaseResource, TnOptionOrdersData): + + _node_name = XML_NAME_TN_OPTION_ORDERS + _xpath = XPATH_TN_OPTION_ORDERS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + TnOptionOrdersData.__init__(self, self) + + def create(self, data=None, save=True): + tn_option_order = TnOptionOrder(self).set_from_dict(data) + if save and (data is not None): + tn_option_order.save() + return tn_option_order + + def get(self, id, params=None): + return TnOptionOrder(self).get(id, params=params) + + def list(self, params=None): + return self._get_data(params=params) diff --git a/iris_sdk/models/tn_rate_center.py b/iris_sdk/models/tn_rate_center.py new file mode 100644 index 0000000..eed85e6 --- /dev/null +++ b/iris_sdk/models/tn_rate_center.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.tn_rate_center import TnRateCenterData + +XML_NAME_RATE_CENTER_TN = "TelephoneNumberDetails" +XPATH_RATE_CENTER_TN = "/ratecenter" + +class TnRateCenter(BaseResource, TnRateCenterData): + + """Rate center associated with a telephone number""" + + _node_name = XML_NAME_RATE_CENTER_TN + _xpath = XPATH_RATE_CENTER_TN + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/tn_reservation.py b/iris_sdk/models/tn_reservation.py new file mode 100644 index 0000000..48b5ac0 --- /dev/null +++ b/iris_sdk/models/tn_reservation.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.reservation import ReservationData + +XML_NAME_RESERVATION_TN = "TNReservation" +XPATH_RESERVATION_TN = "/tnreservation" + +class TnReservation(BaseResource, ReservationData): + + """Telephone number's reservation""" + + _node_name = XML_NAME_RESERVATION_TN + _xpath = XPATH_RESERVATION_TN + + @property + def reservation_id(self): + return self.id + @reservation_id.setter + def reservation_id(self, reservation_id): + self.id = reservation_id + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/tn_sip_peer.py b/iris_sdk/models/tn_sip_peer.py new file mode 100644 index 0000000..3dc885f --- /dev/null +++ b/iris_sdk/models/tn_sip_peer.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.maps.sip_peer import SipPeerMap + +XML_NAME_SIP_PEER_TN = "SipPeer" +XPATH_SIP_PEER_TN = "/sippeers" + +class TnSipPeer(BaseResource, SipPeerMap): + + """SIP peer associated with a telephone number""" + + _node_name = XML_NAME_SIP_PEER_TN + _xpath = XPATH_SIP_PEER_TN + + @property + def name(self): + return self.peer_name + @name.setter + def name(self, name): + self.peer_name = name + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/tn_site.py b/iris_sdk/models/tn_site.py new file mode 100644 index 0000000..18c4a1a --- /dev/null +++ b/iris_sdk/models/tn_site.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.maps.site import SiteMap + +XML_NAME_SITE_TN = "Site" +XPATH_SITE_TN = "/sites" + +class TnSite(BaseResource, SiteMap): + + """Site associated with a telephone number""" + + _node_name = XML_NAME_SITE_TN + _xpath = XPATH_SITE_TN + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/tndetails.py b/iris_sdk/models/tndetails.py new file mode 100644 index 0000000..c3c5542 --- /dev/null +++ b/iris_sdk/models/tndetails.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.tndetails import TndetailsData + +XML_NAME_TNDETAILS = "TelephoneNumberDetails" +XPATH_TNDETAILS = "/tndetails" + +class Tndetails(BaseResource, TndetailsData): + + """Telephone number details""" + + _node_name = XML_NAME_TNDETAILS + _xpath = XPATH_TNDETAILS + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + TndetailsData.__init__(self) + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/tns.py b/iris_sdk/models/tns.py new file mode 100644 index 0000000..baccb91 --- /dev/null +++ b/iris_sdk/models/tns.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource, BaseResourceList +from iris_sdk.models.data.tns import TnsData +from iris_sdk.models.data.telephone_numbers import TelephoneNumbers +from iris_sdk.models.telephone_number import TelephoneNumber + +XML_NAME_TNS = "TelephoneNumbersResponse" +XPATH_TNS = "/tns" + +class Tns(BaseResource, TnsData): + + """Telephone numbers directory""" + + _node_name = XML_NAME_TNS + _xpath = XPATH_TNS + + @property + def telephone_numbers(self): + return self._telephone_numbers + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + TnsData.__init__(self) + self._telephone_numbers = TelephoneNumbers(self) + + def get(self, id): + return TelephoneNumber(self).get(id) + + def list(self, params): + self._get_data(params=params) + return self.telephone_numbers.telephone_number \ No newline at end of file diff --git a/iris_sdk/models/totals.py b/iris_sdk/models/totals.py new file mode 100644 index 0000000..261e46a --- /dev/null +++ b/iris_sdk/models/totals.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.data.totals import TotalsData + +XML_NAME_TOTALS = "Quantity" +XPATH_TOTALS = "/totals" + +class Totals(BaseResource, TotalsData): + + """Telephone numbers totals for resource""" + + _node_name = XML_NAME_TOTALS + _xpath = XPATH_TOTALS + + def get(self): + return self._get_data() \ No newline at end of file diff --git a/iris_sdk/models/users.py b/iris_sdk/models/users.py new file mode 100644 index 0000000..9858d2d --- /dev/null +++ b/iris_sdk/models/users.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.password import Password + +XPATH_USERS = "/users/{}" + +class Users(BaseResource): + + """System users""" + + _xpath = XPATH_USERS + + @property + def password(self): + return self._password + + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + if client is not None: + self.id = (client.config.username or "") + self._password = Password(self, client) \ No newline at end of file diff --git a/iris_sdk/utils/__init__.py b/iris_sdk/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/iris_sdk/utils/config.py b/iris_sdk/utils/config.py new file mode 100644 index 0000000..ea76c18 --- /dev/null +++ b/iris_sdk/utils/config.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python + +from future import standard_library + +import os + +from iris_sdk.utils.py_compat import PY_VER_MAJOR + +if PY_VER_MAJOR < 3: + from io import open + +from configparser import ConfigParser + +MAX_FILE_SIZE = 1048576 +SECTION_ACCOUNT = "account" +SECTION_SRV = "rest" +VALUE_ACCOUNT_ID = "account_id" +VALUE_PASSWORD = "password" +VALUE_URL = "url" +VALUE_USERNAME = "username" + +class ConfigData(object): + + @property + def account_id(self): + return self._account_id + + @account_id.setter + def account_id(self, account_id): + self._account_id = account_id + + @property + def password(self): + return self._password + + @password.setter + def password(self, password): + self._password = password + + @property + def url(self): + return self._url + + @url.setter + def url(self, url): + self._url = url + + @property + def username(self): + return self._username + + @username.setter + def username(self, username): + self._username = username + +class Config(ConfigData): + + """Connection and auth settings""" + + def __init__( + self, url=None, account_id=None, username=None, password=None, + filename=None): + + if filename is None: + self._account_id = account_id + self._password = password + self._url = url + self._username = username + else: + self._account_id = None + self._password = None + self._url = None + self._username = None + self.load_from_file(filename) + + def load_from_file(self, filename=None): + + """ + Loads config values from "filename". + + See the default file for structure. + Configs larger than MAX_FILE_SIZE are skipped. + Leading and trailing whitespace is removed. + + Args: + filename: a UTF-8 config file. + """ + + # Skip non-existing and huge files + + if not os.path.isfile(filename): + raise ValueError("Config file doesn't exist") + + if os.path.getsize(filename) > MAX_FILE_SIZE: + raise ValueError("Config too large") + + with open(filename, encoding="UTF-8") as fp: + self._parser = ConfigParser(allow_no_value = True) + if PY_VER_MAJOR == 3: + self._parser.read_file(fp) + else: + self._parser.readfp(fp) + + self._account_id = self._parser.get( + SECTION_ACCOUNT, VALUE_ACCOUNT_ID + ) + self._account_id = self._account_id.strip() + + self._username = self._parser.get(SECTION_ACCOUNT, VALUE_USERNAME) + self._username = self._username.strip() + + self._password = self._parser.get(SECTION_ACCOUNT, VALUE_PASSWORD) + self._password = self._password.strip() + + self._url = self._parser.get(SECTION_SRV, VALUE_URL) + self._url = self._url.strip() \ No newline at end of file diff --git a/iris_sdk/utils/py_compat.py b/iris_sdk/utils/py_compat.py new file mode 100644 index 0000000..52d065c --- /dev/null +++ b/iris_sdk/utils/py_compat.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +import sys + +PY_VER_MAJOR = sys.version_info[0] +PY_VER_MINOR = sys.version_info[1] \ No newline at end of file diff --git a/iris_sdk/utils/rest.py b/iris_sdk/utils/rest.py new file mode 100644 index 0000000..b4e152c --- /dev/null +++ b/iris_sdk/utils/rest.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python + +from future.utils import raise_from + +import requests +from xml.etree import ElementTree + +ERROR_TAG = "ErrorList" +ERROR_TEMPLATE = "{} Iris error: {}" +HEADERS = {"content-type": "application/xml"} +HTTP_OK = 200 +HTTP_OK_MAX = 299 + +class RestError(Exception): + + """RestClient.request exception""" + + pass + +class RestClient(object): + + """HTTP requests wrapper""" + + def request(self, method, url, auth, params=None, data=None,headers=None): + + assert method in ("GET", "POST", "DELETE", "PUT") + + response = None + try: + + response = requests.request(method, url, auth=auth, + headers=(HEADERS if headers is None else headers), + data=data, params=params) + + response.raise_for_status() + + return response + + except requests.exceptions.HTTPError as http_exception: + + if (response is None) or (response.content == b"") or \ + (response.status_code <= HTTP_OK_MAX): + raise http_exception + + # Logical error descriptions in response body + + error_msg = None + + try: + root = ElementTree.fromstring(response.content) + msg_node = root + # In data responses (orders, etc.) the error list element + # can be anywhere. Scan the first two levels and give up. + el = root.find(ERROR_TAG) + if el is None: + children = root.getchildren() + for elem in children: + el = elem.find(ERROR_TAG) + if el is not None: + break + msg_node = (el if el is not None else msg_node) + error_msg = ERROR_TEMPLATE.format( + msg_node[0][0].text, msg_node[0][1].text) + except: + error_msg = response.content + + # Suppress the HTTP exception + raise_from(RestError(error_msg), None) \ No newline at end of file diff --git a/iris_sdk/utils/strings.py b/iris_sdk/utils/strings.py new file mode 100644 index 0000000..1481f33 --- /dev/null +++ b/iris_sdk/utils/strings.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from re import sub + +class Converter(object): + + """String case conversions""" + + def to_camelcase(self, string): + if string.upper() == 'URL': + return 'URL' + str = sub(r'_([a-zA-Z])', lambda m: m.group(1).upper(), string) + return str[0].upper() + str[1:] + + def to_underscore(self, string): + str = sub('(.)([A-Z][a-z]+)', r'\1_\2', string) + return sub('([a-z0-9])([A-Z])', r'\1_\2', str).lower() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..cd8a90a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +certifi==2019.11.28 +chardet==3.0.4 +future==1.0.0 +idna==2.8 +requests==2.32.3 +urllib3==1.26.6 +six==1.16.0 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..224a779 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[metadata] +description-file = README.md \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..a4d2625 --- /dev/null +++ b/setup.py @@ -0,0 +1,22 @@ +from setuptools import setup, find_packages + +setup( + name = "iris_sdk", + version = "0.1", + description = "IRIS / BBS Python API", + author = "Bandwidth", + maintainer = "Bandwidth", + url = "https://github.com/scottbarstow/iris-python", + license = "MIT", + packages = find_packages(), + long_description = "Python client library for IRIS / BBS API", + classifiers = [ + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + ], + install_requires=[ + "future", + "requests", + ] +) \ No newline at end of file diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..439ad14 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +mock==3.0.5 +requests-mock==1.7.0 +pytest==7.1.3 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_account.py b/tests/test_account.py new file mode 100644 index 0000000..217c919 --- /dev/null +++ b/tests/test_account.py @@ -0,0 +1,493 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account +from iris_sdk.utils.rest import RestError + +XML_RESPONSE_ACCOUNT_GET = ( + b"" + b" " + b" " + b" 123456" + b" Spam" + b" Ham" + b" " + b" 0" + b" " + b"
" + b" 900" + b"
" + b" " + b" Eggs" + b" " + b"
" + b"
" +) + +XML_RESPONSE_AVAILABLE_NPA_NXX_GET = ( + b"" + b"" + b" " + b" " + b" COMPTON:COMPTON DA" + b" 424" + b" 242" + b" 7" + b" CA" + b" " + b" " + b" COMPTON:GARDENA DA" + b" 424" + b" 246" + b" 5" + b" CA" + b" " + b" " + b"" +) + +XML_RESPONSE_AVAILABLE_NUMBERS_GET = ( + b"" + b" 3" + b" " + b" 6093252507" + b" 6093570994" + b" 6093574598" + b" " + b"" +) + +XML_RESPONSE_AVAILABLE_NUMBERS_DETAIL_GET = ( + b"" + b" 3" + b" " + b" " + b" ALLENTOWN" + b" 222" + b" ALLENTOWN " + b" NJ" + b" 6093252507" + b" 0" + b" 49" + b" Bandwidth CLEC" + b" " + b" " + b" ALLENTOWN" + b" 222" + b" ALLENTOWN " + b" NJ" + b" 6093570994" + b" 0" + b" 49" + b" Bandwidth CLEC" + b" " + b" " + b" ALLENTOWN" + b" 222" + b" ALLENTOWN " + b" NJ" + b" 6093574598" + b" 0" + b" 49" + b" Bandwidth CLEC" + b" " + b" " + b"" +) + +XML_RESPONSE_AVAILABLE_NUMBERS_ERROR = ( + b"" + b"" + b" " + b" 4010" + b" Unable to perform search." + b" " + b"" +) + +XML_RESPONSE_DISCONNECTED_NUMBERS_GET = ( + b"" + b"" + b" 4" + b" " + b" " + b" " + b" " + b" 2" + b" 4158714245" + b" 4352154439" + b" " + b"" +) + +XML_RESPONSE_LINE_OPTION_ORDER = ( + b"" + b"" + b" " + b" " + b" 2013223685" + b" " + b" " + b" " + b" 5209072452" + b" 5071" + b" " + b" Telephone number not available." + b" " + b" " + b" " + b" 5209072451" + b" 13518" + b" " + b" CNAM for telephone number is applied at the " + b" Location level and it is notapplicable at the TN " + b" level." + b" " + b" " + b" " + b" " + b"" +) + +XML_RESPONSE_LNP_CHECKER = ( + b"" + b"" + b" " + b" " + b" " + b" BALTIMORE" + b" BALTIMORE" + b" MD" + b" 238" + b" " + b" 4109255199" + b" 4104685864" + b" " + b" " + b" " + b" SPARKSGLNC" + b" SPARKS GLENCOE" + b" MD" + b" 238" + b" " + b" 4103431313" + b" 4103431561" + b" " + b" " + b" " + b" " + b" " + b" FT COLLINS" + b" FORT COLLINS" + b" CO" + b" 656" + b" " + b" 1" + b" " + b" " + b" 4109235436" + b" " + b" " + b" " + b" " + b" " + b" 9998" + b" Carrier L3" + b" false" + b" false" + b" 5" + b" " + b" 4109255199" + b" 4104685864" + b" 4103431313" + b" 4103431561" + b" " + b" " + b" " + b" " + b"" +) + +XML_RESPONSE_TN_RESERVATION_GET = ( + b"" + b"" + b" " + b" 0099ff73-da96-4303" + b" 14" + b" 0" + b" 2512027430" + b" " + b"" +) + +XML_RESPONSE_TOTALS = ( + b"" + b" 4" + b"" +) + +class ClassAccountTest(TestCase): + + """Test account mapping and resources""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_account_get(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url + self._account.get_xpath() + m.get(url, content=XML_RESPONSE_ACCOUNT_GET) + + self._account.get() + + self.assertEqual(self._account.id, "123456") + self.assertEqual(self._account.company_name, "Spam") + self.assertEqual(self._account.account_type, "Ham") + self.assertEqual(self._account.tiers.tier.items, ["0"]) + self.assertEqual(self._account.address.house_number, "900") + self.assertEqual(self._account.contact.first_name, "Eggs") + + def test_available_numbers(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.available_numbers.get_xpath() + m.get(url, content=XML_RESPONSE_AVAILABLE_NUMBERS_GET) + + avail_numbers = self._account.available_numbers.list( + {"state": "NJ"}) + + self.assertEqual(avail_numbers.items, + ["6093252507", "6093570994", "6093574598"]) + self.assertEqual(self._account.available_numbers.result_count, + "3") + + def test_available_numbers_detail(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.available_numbers.get_xpath() + m.get(url, content=XML_RESPONSE_AVAILABLE_NUMBERS_DETAIL_GET) + + avail_numbers = self._account.available_numbers.list( + {"enableTNDetail": "true", "state": "NJ"}) + + self.assertEqual(avail_numbers.items[0].city, "ALLENTOWN") + self.assertEqual(avail_numbers.items[0].lata, "222") + self.assertEqual(avail_numbers.items[1].full_number,"6093570994") + self.assertEqual(avail_numbers.items[1].tier, "0") + self.assertEqual(avail_numbers.items[2].vendor_id, "49") + self.assertEqual(avail_numbers.items[2].vendor_name, + "Bandwidth CLEC") + self.assertEqual(self._account.available_numbers.result_count,"3") + + def test_available_numbers_error(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.available_numbers.get_xpath() + m.get(url, content=XML_RESPONSE_AVAILABLE_NUMBERS_ERROR, + status_code=400) + + with self.assertRaises(RestError): + self._account.available_numbers.list(None) + + def test_disc_numbers(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.disconnected_numbers.get_xpath() + m.get(url, content=XML_RESPONSE_DISCONNECTED_NUMBERS_GET) + + disc_numbers = self._account.disconnected_numbers.list( + {"page": 1, "type": "x"}) + + self.assertEqual(disc_numbers.items, ["4158714245","4352154439"]) + + def test_disc_numbers_totals(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.disconnected_numbers.totals.get_xpath() + m.get(url, content=XML_RESPONSE_TOTALS) + + count = self._account.disconnected_numbers.totals.get().count + self.assertEqual(count, "4") + + def test_in_service_numbers(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.in_service_numbers.get_xpath() + m.get(url, content=XML_RESPONSE_DISCONNECTED_NUMBERS_GET) + + numbers = self._account.in_service_numbers.list({"state": "NJ"}) + + self.assertEqual(numbers.items,["4158714245","4352154439"]) + self.assertEqual(self._account.in_service_numbers.total_count,"4") + + def test_in_service_numbers_totals(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.in_service_numbers.totals.get_xpath() + m.get(url, content=XML_RESPONSE_TOTALS) + + count = self._account.in_service_numbers.totals.get().count + self.assertEqual(count, "4") + + def test_line_option_orders(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.line_option_orders.get_xpath() + m.post(url, content = XML_RESPONSE_LINE_OPTION_ORDER) + + self._account.line_option_orders.tn_line_options.add( + {"telephone_number":"5209072453","calling_name_display":"off"} + ) + + response = self._account.line_option_orders.save() + + self.assertEqual(response.line_options.items[0].errors.error.\ + items[0].telephone_number, "5209072452") + + def test_lnpchecker(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.lnpchecker.get_xpath(True) + m.post(url, content = XML_RESPONSE_LNP_CHECKER) + + response = self._account.lnpchecker(["123456"]) + + grp = response.unsupported_rate_centers.rate_center_group.items[0] + + self.assertEqual(grp.rate_center, "BALTIMORE") + self.assertEqual(grp.city, "BALTIMORE") + self.assertEqual(grp.state, "MD") + self.assertEqual(grp.lata, "238") + self.assertEqual(grp.tn_list.tn.items,["4109255199","4104685864"]) + + grp = response.unsupported_rate_centers.rate_center_group.items[1] + + self.assertEqual(grp.rate_center, "SPARKSGLNC") + self.assertEqual(grp.city, "SPARKS GLENCOE") + self.assertEqual(grp.state, "MD") + self.assertEqual(grp.lata, "238") + self.assertEqual(grp.tn_list.tn.items,["4103431313","4103431561"]) + + grp = response.partner_supported_rate_centers.rate_center_group.\ + items[0] + + self.assertEqual(grp.rate_center, "FT COLLINS") + self.assertEqual(grp.city, "FORT COLLINS") + self.assertEqual(grp.state, "CO") + self.assertEqual(grp.lata, "656") + self.assertEqual(grp.tn_list.tn.items, ["4109235436"]) + self.assertEqual(grp.tiers.tier.items, ["1"]) + + grp = response.supported_losing_carriers.losing_carrier_tn_list + + self.assertEqual(grp.losing_carrier_spid, "9998") + self.assertEqual(grp.losing_carrier_name, "Carrier L3") + self.assertEqual(grp.losing_carrier_is_wireless, "false") + self.assertEqual(grp.losing_carrier_account_number_required, + "false") + self.assertEqual(grp.losing_carrier_minimum_porting_interval,"5") + self.assertEqual(grp.tn_list.tn.items, + ["4109255199","4104685864","4103431313","4103431561"]) + + def test_npa_nxx(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.available_npa_nxx.get_xpath() + m.get(url, content=XML_RESPONSE_AVAILABLE_NPA_NXX_GET) + + npa = self._account.available_npa_nxx.list({"state": "CA"}) + + self.assertEqual(len(npa.items), 2) + self.assertEqual(npa.items[0].city, "COMPTON:COMPTON DA") + self.assertEqual(npa.items[0].npa, "424") + self.assertEqual(npa.items[0].nxx, "242") + self.assertEqual(npa.items[1].quantity, "5") + self.assertEqual(npa.items[1].state, "CA") + + def test_tn_reservation_delete(self): + res = self._account.tnreservation + res.id = "123" + url = self._account.client.config.url +\ + self._account.tnreservation.get_xpath() + + with requests_mock.Mocker() as m: + m.delete(url, status_code = 200) + res.delete() + + def test_tn_reservation_get(self): + + res = self._account.tnreservation + res.id = "123" + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.tnreservation.get_xpath() + m.get(url, content = XML_RESPONSE_TN_RESERVATION_GET) + + res.get("123") + + self.assertEqual(res.id, "0099ff73-da96-4303") + self.assertEqual(res.reserved_tn, "2512027430") + self.assertEqual(res.account_id, "14") + self.assertEqual(res.reservation_expires, "0") + + def test_tn_reservation_save(self): + + with requests_mock.Mocker() as m: + + url = self._account.client.config.url +\ + self._account.tnreservation.get_xpath(True) + m.post(url, headers={"location": url + "/1337"}) + + res = self._account.tnreservation + res.reserved_tn = "123456789" + res.save() + + self.assertEqual(m.request_history[0].method, "POST") + self.assertEqual(res.id, "1337") + self.assertEqual(res.reserved_tn, "123456789") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_basedata.py b/tests/test_basedata.py new file mode 100644 index 0000000..b930371 --- /dev/null +++ b/tests/test_basedata.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +from iris_sdk.models.base_resource import BaseData + +class BaseDataStub(BaseData): + foo = 1 + +class BaseDataStubDescendant(BaseDataStub): + spam = "ham" + +class TestStub(BaseDataStub): + _baz = 3 + bar = 2 + client = 4 + eggs = None + fred = None + items = 5 + xpath = 6 + def __init__(self): + self.eggs = BaseDataStubDescendant() + self.fred = BaseData() + self.fred.barney = 7 + +class ClassBaseDataClearTest(TestCase): + + """Test BaseData's clear method""" + + def setUp(self): + self._test_stub = TestStub() + + def tearDown(self): + del self._test_stub + + def test_basedata_clear(self): + + self._test_stub.clear() + + self.assertEqual(self._test_stub._baz, 3) + self.assertEqual(self._test_stub.bar, None) + self.assertEqual(self._test_stub.client, 4) + self.assertEqual(self._test_stub.eggs.spam, None) + self.assertEqual(self._test_stub.foo, None) + self.assertEqual(self._test_stub.fred.barney, None) + self.assertEqual(self._test_stub.items, 5) + self.assertEqual(self._test_stub.xpath, 6) + +class ClassBaseDataDictTest(TestCase): + + """Test BaseData's dict initialization""" + + def setUp(self): + self._test_stub = TestStub() + + def tearDown(self): + del self._test_stub + + def test_basedata_clear(self): + + self._test_stub.set_from_dict({ + "_baz": "34", "bar": "2", + "eggs": { + "spam": "foo" + } + }) + + self.assertEqual(self._test_stub._baz, "34") + self.assertEqual(self._test_stub.bar, "2") + self.assertEqual(self._test_stub.eggs.spam, "foo") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_baseresource.py b/tests/test_baseresource.py new file mode 100644 index 0000000..b45ec3d --- /dev/null +++ b/tests/test_baseresource.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python + +from __future__ import division, absolute_import, print_function +from future.builtins import super + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from iris_sdk.utils.py_compat import PY_VER_MAJOR + +from unittest import main, TestCase + +if PY_VER_MAJOR == 3: + from unittest.mock import call, MagicMock, patch +else: + from mock import call, MagicMock, patch + +from xml.etree.ElementTree import Element, ElementTree, fromstring + +from iris_sdk.models.base_resource import BaseResource +from iris_sdk.models.maps.base_map import BaseMap + +class FooMap(BaseMap): + fred = "A" + barney = "B" + qux_quux = "R" + bar = None + +class BarMap(BaseMap): + spam = 1 + ham = 2 + eggs = 3 + +class Foo(BaseResource, FooMap): + def __init__(self, parent=None, client=None): + super().__init__(parent, client) + self.bar = Bar() + +class Bar(BaseResource, BarMap): + pass + +class ClassBaseResourceInitTest(TestCase): + + """Test class initialization and properties""" + + def setUp(self): + _patcher = patch("iris_sdk.utils.strings.Converter.__init__", + return_value=None) + self._converter = _patcher.start() + self.addCleanup(patch.stopall) + + def test_baseresource_init(self): + + self._base_resource = BaseResource("foo", "bar") + + self._converter.assert_any_call() + self.assertEqual(self._base_resource._parent, "foo") + self.assertEqual(self._base_resource._client, "bar") + + del self._base_resource + + foo = MagicMock(BaseResource) + self._base_resource = BaseResource(foo) + self.assertEqual(self._base_resource._client, foo.client) + +class ClassBaseResourceXmlTest(TestCase): + + """Test XML conversion""" + + def setUp(self): + self.foo = Foo() + self.str = ("\n" + "321" + "BAR") + + def test_baseresource_from_xml(self): + + root = self.foo._element_from_string(self.str) + self.foo.clear() + self.assertIsNone(self.foo.fred) + self.foo._from_xml(root) + + self.assertEqual(self.foo.barney, "B") + self.assertEqual(self.foo.fred, "A") + self.assertEqual(self.foo.qux_quux, "R") + + def test_baseresource_to_xml(self): + + xml = self.foo._serialize() + xml = xml.decode("UTF-8") + xml = xml.replace("encoding='utf-8'", "encoding='UTF-8'") + xml.encode("UTF-8") + + self.assertEqual(self.str, xml) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_cities.py b/tests/test_cities.py new file mode 100644 index 0000000..af7517e --- /dev/null +++ b/tests/test_cities.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.cities import Cities + +XML_RESPONSE_CITIES_LIST = ( + b"" + b"618" + b"PINEHURSTABERDEEN" + b"JULIANADVANCE" + b"" +) + +class ClassCitiesTest(TestCase): + + """Test the Cities dir""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._cities = Cities(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._cities + del cls._client + + def test_cities_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._cities.get_xpath() + m.get(url, content=XML_RESPONSE_CITIES_LIST) + + city = self._cities.list({"state": "NC"}).items[0] + + self.assertEqual(city.rc_abbreviation, "PINEHURST") + self.assertEqual(city.name, "ABERDEEN") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_client.py b/tests/test_client.py new file mode 100644 index 0000000..ad3f106 --- /dev/null +++ b/tests/test_client.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from iris_sdk.utils.py_compat import PY_VER_MAJOR + +from unittest import main, TestCase + +if PY_VER_MAJOR == 3: + from unittest.mock import patch, MagicMock, PropertyMock +else: + from mock import patch, MagicMock, PropertyMock + +from iris_sdk.client import Client + +class ClassClientInitTest(TestCase): + + """Test class initialization and properties.""" + + @classmethod + def setUpClass(cls): + with patch("iris_sdk.utils.config.Config"): + cls._client = Client() + + @classmethod + def tearDownClass(cls): + del cls._client + + def test_client_config_prop(self): + self._client._config = "foo" + self.assertEqual(self._client._config, self._client.config) + +class ClassClientConfigTest(TestCase): + + """Test class config.""" + + def setUp(self): + self._client = None + + def tearDown(self): + del self._client + + @patch("iris_sdk.utils.rest.RestClient.__init__", return_value = None) + @patch("iris_sdk.utils.config.Config.__init__", return_value = None) + def test_client_init(self, mock1, mock2): + self._client = Client("foo", "bar", "baz", "qux", "quux") + mock1.assert_called_once_with("foo", "bar", "baz", "qux", "quux") + mock2.assert_any_call() + +class ClassClientStrings(TestCase): + + """Test string manipulation.""" + + @classmethod + def setUpClass(cls): + with patch("iris_sdk.utils.config.Config"): + with patch("iris_sdk.utils.rest.RestClient"): + cls._client = Client("foo///") + + @classmethod + def tearDownClass(cls): + del cls._client + + def test_client_get_uri_no_section(self): + str = self._client._get_uri() + self.assertEqual(str, "foo") + + def test_client_get_uri_with_section(self): + str = self._client._get_uri("///bar/baz///") + self.assertEqual(str, "foo/bar/baz") + +class ClassClientRequests(TestCase): + + """Test rest requests.""" + + def setUp(self): + + patcher_req = patch("iris_sdk.utils.rest.RestClient.request") + patcher_url = patch("iris_sdk.utils.config.Config.url", + new_callable = PropertyMock, return_value = "foo") + patcher_pass = patch("iris_sdk.utils.config.Config.password", + new_callable = PropertyMock, return_value = "bar") + patcher_user = patch("iris_sdk.utils.config.Config.username", + new_callable = PropertyMock, return_value = "baz") + + self._url = patcher_url.start() + self._pass = patcher_pass.start() + self._request = patcher_req.start() + self._user = patcher_user.start() + + self._request.return_value = self._mock_res + + self.addCleanup(patch.stopall) + + @classmethod + def setUpClass(cls): + + cls._mock_res = MagicMock("requests.models.Request") + cls._mock_res.headers = {"location": "return/return1"} + cls._mock_res.content = b"foobar" + cls._mock_res.status_code = 1337 + + with patch("iris_sdk.utils.config.Config"): + with patch("iris_sdk.utils.rest.RestClient"): + cls._client = Client() + + @classmethod + def tearDownClass(cls): + del cls._client + + def test_client_delete(self): + res = self._client.delete("qux") + self._request.assert_called_once_with("DELETE", + url="foo/qux", + auth=(self._user.return_value, self._pass.return_value), + params=None, data=None, headers=None) + + def test_client_get(self): + res = self._client.get("", "qux") + self._request.assert_called_once_with("GET", + url=self._url.return_value, + auth=(self._user.return_value, self._pass.return_value), + params="qux", data=None, headers=None) + + def test_client_post(self): + res = self._client.post("", "qux", "quux") + self._request.assert_called_once_with("POST", + url=self._url.return_value, + auth=(self._user.return_value, self._pass.return_value), + params="qux", data="quux", headers=None) + + def test_client_put(self): + self._request.return_value.status_code = 200 + res = self._client.put("", "qux", "quux") + self._request.assert_called_once_with("PUT", + url=self._url.return_value, + auth=(self._user.return_value, self._pass.return_value), + params="qux", data="quux", headers=None) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..67801fc --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python + +from io import StringIO +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from iris_sdk.utils.py_compat import PY_VER_MAJOR + +from unittest import main, TestCase + +if PY_VER_MAJOR == 3: + from unittest.mock import mock_open, patch, MagicMock +else: + from mock import mock_open, patch, MagicMock + +from iris_sdk.utils.config import * + +class ClassConfigPropsTest(TestCase): + + """Test class properties""" + + @classmethod + def setUpClass(cls): + cls._config = Config() + + @classmethod + def tearDownClass(cls): + del cls._config + + def test_config_prop_account_id(self): + self._config.account_id = "foo" + self.assertEqual(self._config._account_id, "foo") + self.assertEqual(self._config._account_id, self._config.account_id) + + def test_config_prop_password(self): + self._config.password = "bar" + self.assertEqual(self._config._password, "bar") + self.assertEqual(self._config._password, self._config.password) + + def test_config_prop_url(self): + self._config.url = "baz" + self.assertEqual(self._config._url, self._config.url) + self.assertEqual(self._config._url, "baz") + + def test_config_prop_username(self): + self._config.username = "qux" + self.assertEqual(self._config._username, self._config.username) + self.assertEqual(self._config._username, "qux") + +class ClassConfigInitializationTest (TestCase) : + + """Test class initialization""" + + def setUp(self): + patcher = patch("iris_sdk.utils.config.Config.load_from_file") + self._patch = patcher.start() + self.addCleanup(patch.stopall) + + def test_config__init_without_filename(self): + self._config = Config("foo", "bar", "baz", "qux") + self.assertEqual(self._config.url, "foo" ) + self.assertEqual(self._config.account_id, "bar" ) + self.assertEqual(self._config.username, "baz" ) + self.assertEqual(self._config.password, "qux" ) + assert not self._patch.called + + def test_config__init_with_filename(self): + self._config = Config("foo", "bar", "baz", "qux", "quux") + self.assertEqual(self._config.url, None ) + self.assertEqual(self._config.account_id, None ) + self.assertEqual(self._config.password, None ) + self.assertEqual(self._config.username, None ) + self._patch.assert_called_once_with("quux") + +class ClassConfigLoadConfigTest (TestCase) : + + """Test file loading""" + + def setUp(self): + patcher_isfile = patch("os.path.isfile") + patcher_getsize = patch("os.path.getsize") + if PY_VER_MAJOR == 3: + patcher_config_get = patch( + 'configparser.ConfigParser.get') + patcher_config_read = patch( + 'configparser.ConfigParser.read_file') + else: + patcher_config_get = patch('ConfigParser.ConfigParser.get') + patcher_config_read = patch('ConfigParser.ConfigParser.readfp') + self._isfile = patcher_isfile.start() + self._getsize = patcher_getsize.start() + self._config_read = patcher_config_read.start() + self._config_get = patcher_config_get.start() + self.addCleanup(patch.stopall) + + def test_config_load_from_non_existing_file(self): + self._isfile.return_value = False + with self.assertRaises(ValueError): + self._config = Config(filename="foo") + + def test_config_load_from_huge_file(self): + self._isfile.return_value = True + self._getsize.return_value = MAX_FILE_SIZE + 1 + with self.assertRaises(ValueError): + self._config = Config(filename="foo") + + def test_config_load_from_good_file(self): + + from iris_sdk.utils import config + + m = mock_open() + if PY_VER_MAJOR == 3: + m.return_value = StringIO("foobar") + else: + m.return_value = StringIO(unicode("foobar")) + + self._isfile.return_value = True + self._getsize.return_value = 0 + + self._config_get.side_effect = lambda str1, str2: { + (SECTION_ACCOUNT, VALUE_ACCOUNT_ID): " foo ", + (SECTION_ACCOUNT, VALUE_USERNAME): " bar ", + (SECTION_ACCOUNT, VALUE_PASSWORD): " baz ", + (SECTION_SRV, VALUE_URL): " qux "} [str1, str2] + + with patch.object(config, "open", m, create=True): + self._config = Config(filename="whatever") + + self.assertEqual(self._config.account_id, "foo") + self.assertEqual(self._config.username, "bar") + self.assertEqual(self._config.password, "baz") + self.assertEqual(self._config.url, "qux") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_covered_rate_centers.py b/tests/test_covered_rate_centers.py new file mode 100644 index 0000000..52f9239 --- /dev/null +++ b/tests/test_covered_rate_centers.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.covered_rate_centers import CoveredRateCenters +from iris_sdk.models.rate_center import RateCenter + +XML_RESPONSE_CRC_GET = ( + b" " + b"AVALON" + b"AVALON CA730" + b"1" + b"90731SAN PEDRO " + b"0 " + b"31051003105101" + b"31094983109499" + b"42422601" + b"" +) + +XML_RESPONSE_CRC_LIST_GET = ( + b"" + b"18" + b"Link=<https://dashboard.bandwidth.com/api/coveredRateCenters?" + b"npa=310&size=10&embed=Cities&embed=ZipCodes&embed=" + b"NpaNxxX&page=1>;rel=\"first\";Link=<" + b"https://dashboard.bandwidth.com/api/coveredRateCenters?npa=310&" + b"size=10&embed=Cities&embed=ZipCodes&embed=NpaNxxX& " + b"page=5>;rel=\"next\"; " + b"AVALONAVALON" + b"CA730" + b"1" + b"90731 SAN PEDRO" + b"0" + b"31051003105101" + b"31094983109499" + b"42422601" + b" BEVERLY HILLS" + b"BEVERLYHLSCA" + b"73025" + b"9001390014" + b"9001591504" + b"91505" + b"BEVERLY HILLSBURBANKGARDENA" + b"LOS ANGELESSHERMAN OAKS" + b"SUN VALLEYVAN NUYS" + b"03102010" + b"31020113102012" + b"42477774247778" + b"42477793" + b"" +) + +class ClassCoveredRateCentersTest(TestCase): + + """Test the covered rate centers directory mapping""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._crc = CoveredRateCenters(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._crc + + def test_rate_center_get(self): + + with requests_mock.Mocker() as m: + + url = self._crc.client.config.url +\ + self._crc.get_xpath() + RateCenter._xpath.format("1") + m.get(url, content=XML_RESPONSE_CRC_GET) + + center = self._crc.get(1) + + self.assertEqual(center.name, "AVALON") + self.assertEqual(center.abbreviation, "AVALON") + self.assertEqual(center.state, "CA") + self.assertEqual(center.lata, "730") + self.assertEqual(center.available_number_count, "1") + self.assertEqual(center.zip_codes.zip_code.items[0], "90731") + self.assertEqual(center.cities.city.items[0], "SAN PEDRO") + self.assertEqual(center.tiers.tier.items[0], "0") + self.assertEqual(center.npa_nxx_xs.npa_nxx_x.items, + ["3105100","3105101","3109498","3109499","4242260"]) + + def test_rate_centers_list(self): + + with requests_mock.Mocker() as m: + + url = self._crc.client.config.url + self._crc.get_xpath() + m.get(url, content=XML_RESPONSE_CRC_LIST_GET) + + centers = self._crc.list({"page": 1, "size": 2}) + + self.assertEqual(len(centers.items), 2) + + item = centers.items[0] + + self.assertEqual(item.name, "AVALON") + self.assertEqual(item.abbreviation, "AVALON") + self.assertEqual(item.state, "CA") + self.assertEqual(item.lata, "730") + self.assertEqual(item.available_number_count, "1") + self.assertEqual(item.zip_codes.zip_code.items[0], "90731") + self.assertEqual(item.cities.city.items[0], "SAN PEDRO") + self.assertEqual(item.tiers.tier.items[0], "0") + self.assertEqual(item.npa_nxx_xs.npa_nxx_x.items, + ["3105100","3105101","3109498","3109499","4242260"]) + self.assertEqual(item.id, "1") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_disconnects.py b/tests/test_disconnects.py new file mode 100644 index 0000000..72237a7 --- /dev/null +++ b/tests/test_disconnects.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_DISCONNECT_GET = ( + b"" + b"" + b"5006" + b"Telephone number could not be disconnected since it is \ + bnot associated with your account" + b"9192755703" + b"5006" + b"Telephone number could not be disconnected since it is \ + not associated with your account" + b"9192755378" + b"" + b"Disconnect1234" + b"2015-06-17T18:14:08.683Z" + b"b902dee1-0585-4258-becd-5c7e51ccf5e1" + b"" + b"" + b"9192755378" + b"9192755703" + b"" + b"normal" + b"" + b"FAILED" + b"" +) + +XML_RESPONSE_DISCONNECT_POST = ( + b"" + b"" + b"Disconnect1234" + b"2015-06-17T18:14:08.683Z" + b"b902dee1-0585-4258-becd-5c7e51ccf5e1" + b"" + b"9192755378" + b"9192755703" + b"normal" + b"" + b"RECEIVED" + b"" +) + +XML_RESPONSE_DISCONNECTS_LIST = ( + b"" + b"7" + b"1" + b"smckinnon" + b"2014-01-10T17-34-15Z" + b"6d7da966-e071-4741-b31c-1d8932f4b8da" + b"disconnect" + b"2014-01-10T17-34-15.797Z" + b"COMPLETE" + b"" + b"1jbm" + b"2013-12-04T21-59-32Z" + b"4ffe9262-1965-4479-a1d5-b8584440667d" + b"disconnect" + b"2013-12-04T21-59-32.243Z" + b"COMPLETE" + b"" + b"" +) + +class ClassDisconnectsTest(TestCase): + + """Test phone disconnect orders""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_disconnect_create(self): + + with requests_mock.Mocker() as m: + + url =self._client.config.url+self._account.disconnects.get_xpath() + m.post(url, content=XML_RESPONSE_DISCONNECT_POST) + + disconnect = self._account.disconnects.create({ + "name": "test disconnect order 4", + "customer_order_id": "Disconnect1234", + "disconnect_telephone_number_order_type": { + "telephone_number_list": { + "telephone_number": ["9192755378", "9192755703"] + } + } + }) + + self.assertEqual(disconnect.id, + "b902dee1-0585-4258-becd-5c7e51ccf5e1") + self.assertEqual(disconnect.order_id, disconnect.id) + self.assertEqual(disconnect.customer_order_id, "Disconnect1234") + self.assertEqual(disconnect.order_create_date, + "2015-06-17T18:14:08.683Z") + order_type = disconnect.disconnect_telephone_number_order_type + self.assertEqual( + order_type.telephone_number_list.telephone_number.items, + ["9192755378", "9192755703"]) + self.assertEqual(order_type.disconnect_mode, "normal") + self.assertEqual(disconnect.order_status, "RECEIVED") + + def test_disconnect_get(self): + + disconnect = self._account.disconnects.create({"order_id": + "b902dee1-0585-4258-becd-5c7e51ccf5e1"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + disconnect.get_xpath() + m.get(url, content=XML_RESPONSE_DISCONNECT_GET) + + resp = disconnect.get("b902dee1-0585-4258-becd-5c7e51ccf5e1") + req = resp.order_request + + self.assertEqual(req.id, "b902dee1-0585-4258-becd-5c7e51ccf5e1") + self.assertEqual(req.customer_order_id, "Disconnect1234") + + order_type = req.disconnect_telephone_number_order_type + + self.assertEqual( + order_type.telephone_number_list.telephone_number.items, + ["9192755378","9192755703"]) + self.assertEqual(order_type.disconnect_mode, "normal") + self.assertEqual(req.order_create_date, + "2015-06-17T18:14:08.683Z") + + error = resp.error_list.error.items[0] + + self.assertEqual(error.code, "5006") + self.assertEqual(error.telephone_number, "9192755703") + self.assertTrue(error.description.startswith( + "Telephone number could not be disconnected")) + + error = resp.error_list.error.items[1] + + self.assertEqual(error.code, "5006") + self.assertEqual(error.telephone_number, "9192755378") + self.assertTrue(error.description.startswith( + "Telephone number could not be disconnected")) + + def test_disconnects_get(self): + + with requests_mock.Mocker() as m: + + url =self._client.config.url+self._account.disconnects.get_xpath() + m.get(url, content=XML_RESPONSE_DISCONNECTS_LIST) + + disconnects = self._account.disconnects.list({"page":1,"size":5}) + + self.assertEqual(len(disconnects.items), 2) + + disc = disconnects.items[0] + + self.assertEqual(disc.count_of_tns, "1") + self.assertEqual(disc.user_id, "smckinnon") + self.assertEqual(disc.last_modified_date, "2014-01-10T17-34-15Z") + self.assertEqual(disc.order_id, + "6d7da966-e071-4741-b31c-1d8932f4b8da") + self.assertEqual(disc.order_type, "disconnect") + self.assertEqual(disc.order_date, "2014-01-10T17-34-15.797Z") + self.assertEqual(disc.order_status, "COMPLETE") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_dlda.py b/tests/test_dlda.py new file mode 100644 index 0000000..dba1ac1 --- /dev/null +++ b/tests/test_dlda.py @@ -0,0 +1,429 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_DLDA_GET = ( + b"" + b"" + b"5a88d16d-f8a9-45c5-a5db-137d700c6a22" + b"2014-07-10T12:38:11.833Z" + b"14jbm" + b"ea9e90c2-77a4-4f82-ac47-e1c5bb1311f4" + b"2014-07-10T12:38:11.833Z" + b"RECEIVED" + b"" + b"2053778335" + b"2053865784" + b"BUSINESSLISTED" + b"JoeSmith" + b"true
" + b"12ELM" + b"New YorkNY10007" + b"United StatesDlda" + b"
" + b"
" +) + +XML_RESPONSE_DLDA_HISTORY = ( + b" " + b"2014-09-04T16:28:11.320Z" + b"The DL/DA request has been received" + b"jbmRECEIVED" + b"2014-09-04T16:28:18.742Z" + b"The DL/DA request is being processed by our 3rd party supplier" + b"jbmPROCESSING " + b"2014-09-05T19:00:17.968Z" + b"The DL/DA request is complete for all TNs" + b"jbmCOMPLETE" + b"" +) + +XML_RESPONSE_DLDA_LIST = ( + b"" + b"" + b"3" + b"142" + b"team_ua" + b"2014-07-07T10:06:43.427Z" + b"dlda" + b"2014-07-07T10:06:43.427Z" + b"37a6447c-1a0b-4be9-ba89-3f5cb0aea142" + b"FAILED" + b"14" + b"2team_ua" + b"2014-07-07T10:05:56.595Z" + b"dlda" + b"2014-07-07T10:05:56.595Z" + b"743b0e64-3350-42e4-baa6-406dac7f4a85" + b"RECEIVED" + b"14" + b"2team_ua" + b"2014-07-07T09:32:17.234Z" + b"dlda" + b"2014-07-07T09:32:17.234Z" + b"f71eb4d2-bfef-4384-957f-45cd6321185e" + b"RECEIVED" + b"" +) + +XML_RESPONSE_DLDA_POST = ( + b"" + b"" + b"5a88d16d-f8a9-45c5-a5db-137d700c6a22" + b"2014-07-10T12:38:11.833Z" + b"14jbm" + b"ea9e90c2-77a4-4f82-ac47-e1c5bb1311f4" + b"2014-07-10T12:38:11.833Z" + b"RECEIVED" + b"" + b"2053778335" + b"2053865784" + b"BUSINESSLISTED" + b"JoeSmith" + b"true
" + b"12ELM" + b"New YorkNY10007" + b"United StatesDlda" + b"
" + b"
" +) + +class ClassDldaTest(TestCase): + + """Test DLDA orders""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_dlda_get(self): + + with requests_mock.Mocker() as m: + + dlda = self._account.dldas.create() + dlda.id = "ea9e90c2-77a4-4f82-ac47-e1c5bb1311f4" + + url = self._client.config.url + dlda.get_xpath() + m.get(url, content=XML_RESPONSE_DLDA_GET) + + dlda = self._account.dldas.get(dlda.id) + + self.assertEqual(dlda.id, "ea9e90c2-77a4-4f82-ac47-e1c5bb1311f4") + self.assertEqual(dlda.customer_order_id, + "5a88d16d-f8a9-45c5-a5db-137d700c6a22") + self.assertEqual(dlda.order_create_date, + "2014-07-10T12:38:11.833Z") + self.assertEqual(dlda.account_id, "14") + self.assertEqual(dlda.created_by_user, "jbm") + self.assertEqual(dlda.order_id, + "ea9e90c2-77a4-4f82-ac47-e1c5bb1311f4") + self.assertEqual(dlda.last_modified_date, + "2014-07-10T12:38:11.833Z") + self.assertEqual(dlda.processing_status, "RECEIVED") + + grp = dlda.dlda_tn_groups.dlda_tn_group.items[0] + + self.assertEqual( + grp.telephone_numbers.telephone_number.items, + ["2053778335","2053865784"] + ) + + self.assertEqual(grp.account_type, "BUSINESS") + self.assertEqual(grp.listing_type, "LISTED") + self.assertEqual(grp.list_address, "true") + + lname = grp.listing_name + + self.assertEqual(lname.first_name, "Joe") + self.assertEqual(lname.last_name, "Smith") + + addr = grp.address + + self.assertEqual(addr.city, "New York") + self.assertEqual(addr.house_number, "12") + self.assertEqual(addr.street_name, "ELM") + self.assertEqual(addr.state_code, "NY") + self.assertEqual(addr.zip, "10007") + self.assertEqual(addr.country, "United States") + self.assertEqual(addr.address_type, "Dlda") + + def test_dlda_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.dldas.get_xpath() + m.get(url, content=XML_RESPONSE_DLDA_LIST) + + dldas = self._account.dldas.list() + + dlda = dldas.items[0] + + self.assertEqual(len(dldas.items), 3) + self.assertEqual(dlda.id, "37a6447c-1a0b-4be9-ba89-3f5cb0aea142") + self.assertEqual(dlda.account_id, "14") + self.assertEqual(dlda.count_of_tns, "2") + self.assertEqual(dlda.user_id, "team_ua") + self.assertEqual(dlda.last_modified_date, + "2014-07-07T10:06:43.427Z") + self.assertEqual(dlda.order_type, "dlda") + self.assertEqual(dlda.order_date, "2014-07-07T10:06:43.427Z") + self.assertEqual(dlda.order_id, "37a6447c-1a0b-4be9-ba89-3f5cb0aea142") + self.assertEqual(dlda.order_status, "FAILED") + + def test_dlda_post(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.dldas.get_xpath() + m.post(url, content=XML_RESPONSE_DLDA_POST) + + order_data = { + "customer_order_id": "123", + "dlda_tn_groups": { + "dlda_tn_group": [{ + "telephone_numbers": { + "telephone_number": ["4352154856"] + }, + "account_type": "RESIDENTIAL", + "listing_type": "LISTED", + "list_address": "true", + "listing_name": { + "first_name": "first name", + "first_name2": "first name2", + "last_name": "last name", + "designation": "designation", + "title_of_lineage": "title of lineage", + "title_of_address": "title of address", + "title_of_address2": "title of address2", + "title_of_lineage_name2":"title of lineage name2", + "title_of_address_name2":"title of address name2", + "title_of_address2_name2": + "title of address2 name2", + "place_listing_as": "place listing as" + }, + "address": { + "house_prefix": "house prefix", + "house_number": "915", + "house_suffix": "house suffix", + "pre_directional": "pre directional", + "street_name": "street name", + "street_suffix": "street suffix", + "post_directional": "post directional", + "address_line2": "address line2", + "city": "city", + "state_code": "state code", + "zip": "zip", + "plus_four": "plus four", + "country": "country", + "address_type": "address type" + } + }] + } + } + + dlda = self._account.dldas.create(order_data, False) + + self.assertEqual(dlda.customer_order_id, "123") + grp = dlda.dlda_tn_groups.dlda_tn_group.items[0] + self.assertEqual(grp.telephone_numbers.telephone_number.items, + ["4352154856"]) + self.assertEqual(grp.account_type, "RESIDENTIAL") + self.assertEqual(grp.listing_type, "LISTED") + self.assertEqual(grp.list_address, "true") + + name = grp.listing_name + + self.assertEqual(name.first_name, "first name") + self.assertEqual(name.first_name2, "first name2") + self.assertEqual(name.last_name, "last name") + self.assertEqual(name.designation, "designation") + self.assertEqual(name.title_of_lineage, "title of lineage") + self.assertEqual(name.title_of_address, "title of address") + self.assertEqual(name.title_of_address2, "title of address2") + self.assertEqual(name.title_of_lineage_name2, + "title of lineage name2") + self.assertEqual(name.title_of_address_name2, + "title of address name2") + self.assertEqual(name.title_of_address2_name2, + "title of address2 name2") + self.assertEqual(name.place_listing_as, "place listing as") + + addr = grp.address + + self.assertEqual(addr.house_prefix, "house prefix") + self.assertEqual(addr.house_number, "915") + self.assertEqual(addr.house_suffix, "house suffix") + self.assertEqual(addr.pre_directional, "pre directional") + self.assertEqual(addr.street_name, "street name") + self.assertEqual(addr.street_suffix, "street suffix") + self.assertEqual(addr.post_directional, "post directional") + self.assertEqual(addr.address_line2, "address line2") + self.assertEqual(addr.city, "city") + self.assertEqual(addr.state_code, "state code") + self.assertEqual(addr.zip, "zip") + self.assertEqual(addr.plus_four, "plus four") + self.assertEqual(addr.country, "country") + self.assertEqual(addr.address_type, "address type") + + dlda = self._account.dldas.create(order_data) + + self.assertEqual(dlda.customer_order_id, + "5a88d16d-f8a9-45c5-a5db-137d700c6a22") + self.assertEqual(dlda.order_create_date, + "2014-07-10T12:38:11.833Z") + self.assertEqual(dlda.account_id, "14") + self.assertEqual(dlda.created_by_user, "jbm") + self.assertEqual(dlda.order_id, + "ea9e90c2-77a4-4f82-ac47-e1c5bb1311f4") + self.assertEqual(dlda.last_modified_date, + "2014-07-10T12:38:11.833Z") + self.assertEqual(dlda.processing_status, "RECEIVED") + + grp = dlda.dlda_tn_groups.dlda_tn_group.items[0] + + self.assertEqual(grp.telephone_numbers.telephone_number.items, + ["2053778335","2053865784"]) + self.assertEqual(grp.account_type, "BUSINESS") + self.assertEqual(grp.listing_type, "LISTED") + self.assertEqual(grp.list_address, "true") + + name = grp.listing_name + + self.assertEqual(name.first_name, "Joe") + self.assertEqual(name.last_name, "Smith") + + addr = grp.address + + self.assertEqual(addr.city, "New York") + self.assertEqual(addr.house_number, "12") + self.assertEqual(addr.street_name, "ELM") + self.assertEqual(addr.state_code, "NY") + self.assertEqual(addr.zip, "10007") + self.assertEqual(addr.country, "United States") + self.assertEqual(addr.address_type, "Dlda") + + def test_dlda_put(self): + + order_data = { + "order_id": "7802373f-4f52-4387-bdd1-c5b74833d6e2", + "customer_order_id": "123", + "dlda_tn_groups": { + "dlda_tn_group": [{ + "telephone_numbers": { + "telephone_number": ["4352154856"] + }, + "account_type": "RESIDENTIAL", + "listing_type": "LISTED", + "list_address": "true", + "listing_name": { + "first_name": "first name", + "first_name2": "first name2", + "last_name": "last name", + "designation": "designation", + "title_of_lineage": "title of lineage", + "title_of_address": "title of address", + "title_of_address2": "title of address2", + "title_of_lineage_name2":"title of lineage name2", + "title_of_address_name2":"title of address name2", + "title_of_address2_name2": "title of address2 name2", + "place_listing_as": "place listing as" + }, + "address": { + "house_prefix": "house prefix", + "house_number": "915", + "house_suffix": "house suffix", + "pre_directional": "pre directional", + "street_name": "street name", + "street_suffix": "street suffix", + "post_directional": "post directional", + "address_line2": "address line2", + "city": "city", + "state_code": "state code", + "zip": "zip", + "plus_four": "plus four", + "country": "country", + "address_type": "address type" + } + }] + } + } + + dlda = self._account.dldas.create(order_data, False) + + self.assertEqual(dlda.customer_order_id, "123") + self.assertEqual(dlda.order_id, + "7802373f-4f52-4387-bdd1-c5b74833d6e2") + + grp = dlda.dlda_tn_groups.dlda_tn_group.items[0] + self.assertEqual(grp.telephone_numbers.telephone_number.items, + ["4352154856"]) + self.assertEqual(grp.account_type, "RESIDENTIAL") + self.assertEqual(grp.listing_type, "LISTED") + self.assertEqual(grp.list_address, "true") + + name = grp.listing_name + + self.assertEqual(name.first_name, "first name") + self.assertEqual(name.first_name2, "first name2") + self.assertEqual(name.last_name, "last name") + self.assertEqual(name.designation, "designation") + self.assertEqual(name.title_of_lineage, "title of lineage") + self.assertEqual(name.title_of_address, "title of address") + self.assertEqual(name.title_of_address2, "title of address2") + self.assertEqual(name.title_of_lineage_name2, + "title of lineage name2") + self.assertEqual(name.title_of_address_name2, + "title of address name2") + self.assertEqual(name.title_of_address2_name2, + "title of address2 name2") + self.assertEqual(name.place_listing_as, "place listing as") + + addr = grp.address + + self.assertEqual(addr.house_prefix, "house prefix") + self.assertEqual(addr.house_number, "915") + self.assertEqual(addr.house_suffix, "house suffix") + self.assertEqual(addr.pre_directional, "pre directional") + self.assertEqual(addr.street_name, "street name") + self.assertEqual(addr.street_suffix, "street suffix") + self.assertEqual(addr.post_directional, "post directional") + self.assertEqual(addr.address_line2, "address line2") + self.assertEqual(addr.city, "city") + self.assertEqual(addr.state_code, "state code") + self.assertEqual(addr.zip, "zip") + self.assertEqual(addr.plus_four, "plus four") + self.assertEqual(addr.country, "country") + self.assertEqual(addr.address_type, "address type") + + self.assertEqual(dlda.get_xpath(), + self._account.get_xpath() + self._account.dldas._xpath + + dlda._xpath.format(dlda.id)) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + dlda.get_xpath() + m.put(url, content = XML_RESPONSE_DLDA_GET) + + dlda.save() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_lidb.py b/tests/test_lidb.py new file mode 100644 index 0000000..9734ed7 --- /dev/null +++ b/tests/test_lidb.py @@ -0,0 +1,257 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_LIDB_GET = ( + b"" + b"2015-06-21T04:52:33.191Z" + b"9500249byo_dev" + b"7802373f-4f52-4387-bdd1-c5b74833d6e2" + b"2015-06-21T04:52:33.191Z" + b"11014" + b"Number does not belong to this account" + b"4352154856" + b"11014" + b"Number does not belong to this account" + b"4352154855" + b"FAILED" + b"4352154856" + b"Steve" + b"RESIDENTIALPUBLIC" + b"" + b"4352154855" + b"Steve" + b"RESIDENTIALPUBLIC" + b"" +) + +XML_RESPONSE_LIDB_LIST = ( + b"" + b"2122" + b"99999990" + b"2014-02-25T16:02:43.195Z" + b"lidb" + b"2014-02-25T16:02:43.195Z" + b"abe36738-6929-4c6f-926c-88e534e2d46f" + b"FAILED" + b"team_ua" + b"99999990" + b"2014-02-25T16:02:39.021Z" + b"lidb" + b"2014-02-25T16:02:39.021Z" + b"ba5b6297-139b-4430-aab0-9ff02c4362f4" + b"FAILEDteam_ua" + b"" +) + +XML_RESPONSE_LIDB_POST = ( + b"" + b"testCustomerOrderId" + b"255bda29-fc57-44e8-a6c2-59b45388c6d0" + b"2014-05-28T14:46:21.724Z" + b"RECEIVED" + b"jbm" + b"2014-02-20T19:33:17.600Z" + b"2014-02-20T19:33:17.600Z" + b"" + b"4082213311" + b"8042105618" + b"Fred" + b"BUSINESSPRIVATE" + b"" + b"4082212850" + b"4082213310" + b"8042105760" + b"Fred" + b"RESIDENTIALPUBLIC" + b"" +) + +class ClassLidbTest(TestCase): + + """Test LIDB orders""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_lidb_get(self): + + with requests_mock.Mocker() as m: + + lidb = self._account.lidbs.create() + lidb.id = "7802373f-4f52-4387-bdd1-c5b74833d6e2" + + url = self._client.config.url + lidb.get_xpath() + m.get(url, content=XML_RESPONSE_LIDB_GET) + + lidb = self._account.lidbs.get( + "7802373f-4f52-4387-bdd1-c5b74833d6e2") + + self.assertEqual(lidb.order_id, + "7802373f-4f52-4387-bdd1-c5b74833d6e2") + self.assertEqual(lidb.account_id, "9500249") + self.assertEqual(lidb.last_modified_date, + "2015-06-21T04:52:33.191Z") + self.assertEqual(lidb.order_create_date, + "2015-06-21T04:52:33.191Z") + self.assertEqual(lidb.processing_status, "FAILED") + self.assertEqual(lidb.created_by_user, "byo_dev") + + error = lidb.error_list.error.items[0] + + self.assertEqual(error.telephone_number, "4352154856") + self.assertEqual(error.code, "11014") + self.assertEqual(error.description, + "Number does not belong to this account") + + error = lidb.error_list.error.items[1] + + self.assertEqual(error.telephone_number, "4352154855") + self.assertEqual(error.code, "11014") + self.assertEqual(error.description, + "Number does not belong to this account") + + grp = lidb.lidb_tn_groups.lidb_tn_group.items[0] + + self.assertEqual(grp.telephone_numbers.telephone_number.items[0], + "4352154856") + + self.assertEqual(grp.subscriber_information, "Steve") + self.assertEqual(grp.use_type, "RESIDENTIAL") + self.assertEqual(grp.visibility, "PUBLIC") + + grp = lidb.lidb_tn_groups.lidb_tn_group.items[1] + + self.assertEqual(grp.telephone_numbers.telephone_number.items[0], + "4352154855") + + self.assertEqual(grp.subscriber_information, "Steve") + self.assertEqual(grp.use_type, "RESIDENTIAL") + self.assertEqual(grp.visibility, "PUBLIC") + + def test_lidb_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.lidbs.get_xpath() + m.get(url, content=XML_RESPONSE_LIDB_LIST) + + lidbs = self._account.lidbs.list({"telephone_number": "888"}) + + lidb = lidbs.items[0] + + self.assertEqual(len(lidbs.items), 2) + self.assertEqual(lidb.order_id, + "abe36738-6929-4c6f-926c-88e534e2d46f") + self.assertEqual(lidb.account_id, "9999999") + self.assertEqual(lidb.count_of_tns, "0") + self.assertEqual(lidb.user_id, "team_ua") + self.assertEqual(lidb.last_modified_date, + "2014-02-25T16:02:43.195Z") + self.assertEqual(lidb.order_type, "lidb") + self.assertEqual(lidb.order_date, "2014-02-25T16:02:43.195Z") + self.assertEqual(lidb.order_status, "FAILED") + self.assertEqual(lidb.id, "abe36738-6929-4c6f-926c-88e534e2d46f") + + def test_lidb_post(self): + + order_data = { + "lidb_tn_groups": { + "lidb_tn_group": [ + { + "telephone_numbers": { + "telephone_number": ["4352154856"] + }, + "subscriber_information": "Steve", + "use_type": "RESIDENTIAL", + "visibility": "PUBLIC" + }, + { + "telephone_numbers": { + "telephone_number": ["4352154855"] + }, + "subscriber_information": "Steve", + "use_type": "RESIDENTIAL", + "visibility": "PUBLIC" + } + ] + } + } + + lidb = self._account.lidbs.create(order_data, False) + + grp = lidb.lidb_tn_groups.lidb_tn_group.items[0] + tns = grp.telephone_numbers.telephone_number.items + + self.assertEqual(tns, ["4352154856"]) + self.assertEqual(grp.subscriber_information, "Steve") + self.assertEqual(grp.use_type, "RESIDENTIAL") + self.assertEqual(grp.visibility, "PUBLIC") + + grp = lidb.lidb_tn_groups.lidb_tn_group.items[1] + tns = grp.telephone_numbers.telephone_number.items + + self.assertEqual(tns, ["4352154855"]) + self.assertEqual(grp.subscriber_information, "Steve") + self.assertEqual(grp.use_type, "RESIDENTIAL") + self.assertEqual(grp.visibility, "PUBLIC") + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.lidbs.get_xpath() + m.post(url, content=XML_RESPONSE_LIDB_POST) + + lidb = self._account.lidbs.create(order_data) + + self.assertEqual(lidb.customer_order_id, "testCustomerOrderId") + self.assertEqual(lidb.order_id, + "255bda29-fc57-44e8-a6c2-59b45388c6d0") + self.assertEqual(lidb.last_modified_date, + "2014-02-20T19:33:17.600Z") + self.assertEqual(lidb.order_create_date, + "2014-05-28T14:46:21.724Z") + self.assertEqual(lidb.processing_status, "RECEIVED") + self.assertEqual(lidb.created_by_user, "jbm") + self.assertEqual(lidb.order_complete_date, + "2014-02-20T19:33:17.600Z") + + grp = lidb.lidb_tn_groups.lidb_tn_group.items[0] + tns = grp.telephone_numbers.telephone_number.items + + self.assertEqual(tns, ["4082213311"]) + self.assertEqual(grp.subscriber_information, "Fred") + self.assertEqual(grp.use_type, "BUSINESS") + self.assertEqual(grp.visibility, "PRIVATE") + self.assertEqual(grp.full_number, "8042105618") + + grp = lidb.lidb_tn_groups.lidb_tn_group.items[1] + tns = grp.telephone_numbers.telephone_number.items + + self.assertEqual(tns, ["4082212850", "4082213310"]) + self.assertEqual(grp.subscriber_information, "Fred") + self.assertEqual(grp.use_type, "RESIDENTIAL") + self.assertEqual(grp.visibility, "PUBLIC") + self.assertEqual(grp.full_number, "8042105760") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_notes.py b/tests/test_notes.py new file mode 100644 index 0000000..a853975 --- /dev/null +++ b/tests/test_notes.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_NOTES_GET = ( + b"" + b"11425byo_dev" + b"Test Note" + b"2015-06-18T04:19:59.000Z" + b"" +) + +XML_RESPONSE_NOTES_LIST = ( + b"" + b"11425byo_dev" + b"Test Note" + b"2015-06-18T04:19:59.000Z" + b"11425byo_dev" + b"Test Note" + b"2015-06-18T04:19:59.000Z" + b"" +) + +class ClassNotesTest(TestCase): + + """Test the Notes resource""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + cls._notes = cls._account.disconnects.create( + {"order_id": "123"}, False).notes + cls._url = cls._client.config.url + cls._notes.get_xpath() + + @classmethod + def tearDownClass(cls): + del cls._notes + del cls._account + del cls._client + + def test_notes_create(self): + with requests_mock.Mocker() as m: + m.post(self._url, headers={"location": self._url + "/123"}) + note = self._notes.create({"user_id":"spam", "description":"ham"}) + self.assertEqual(note.id, "123") + + def test_notes_get(self): + with requests_mock.Mocker() as m: + m.get(self._url, content=XML_RESPONSE_NOTES_GET) + notes = self._notes.list() + self.assertEqual(notes.items[0].id, "11425") + + def test_notes_list(self): + with requests_mock.Mocker() as m: + m.get(self._url, content=XML_RESPONSE_NOTES_LIST) + notes = self._notes.list() + self.assertEqual(len(notes.items), 2) + self.assertEqual(notes.items[0].id, "11425") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_notes_urls.py b/tests/test_notes_urls.py new file mode 100644 index 0000000..59b3c5d --- /dev/null +++ b/tests/test_notes_urls.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account +from iris_sdk.models.portout import PortOut + +class ClassNotesUrlsTest(TestCase): + + """Test the Notes resource URI linking""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_notes_disconnects(self): + with requests_mock.Mocker() as m: + disc = self._account.disconnects.create({"order_id": "1"}, False) + m.get(self._client.config.url + disc.notes.get_xpath()) + disc.notes.list() + + def test_notes_orders(self): + with requests_mock.Mocker() as m: + ord = self._account.orders.create({"order_id": "2"}, False) + m.get(self._client.config.url + ord.notes.get_xpath()) + ord.notes.list() + + def test_notes_portins(self): + with requests_mock.Mocker() as m: + pin = self._account.portins.create({"order_id": "3"}, False) + m.get(self._client.config.url + pin.notes.get_xpath()) + pin.notes.list() + + def test_notes_portouts(self): + with requests_mock.Mocker() as m: + po = PortOut(self._account.portouts) + po.id = "4" + m.get(self._client.config.url + po.notes.get_xpath()) + po.notes.list() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_orders.py b/tests/test_orders.py new file mode 100644 index 0000000..536d832 --- /dev/null +++ b/tests/test_orders.py @@ -0,0 +1,327 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_ORDER_CREATE = ( + b"" + b"123456789" + b"Available Telephone Number order" + b"2015-06-20T10:54:08.042Z" + b"false" + b"f30a31a1-1de4-4939-b094-4521bbe5c8df" + b"" + b"9193752369" + b"9193752720" + b"true" + b"2297" + b"RECEIVED" +) + +XML_RESPONSE_ORDER_GET = ( + b"" + b"123456789" + b"Available Telephone Number order" + b"2015-06-20T10:54:08.042Z" + b"false" + b"f30a31a1-1de4-4939-b094-4521bbe5c8df" + b"" + b"9193752369" + b"9193752720" + b"9193752648" + b"" + b"true2297" + b"RECEIVED" +) + +XML_RESPONSE_ORDERS_LIST = ( + b"<" + b"ResponseSelectWrapper>2" + b"" + b"0123456789" + b"byo_dev" + b"2015-06-13T16:14:46.017Z" + b"2015-06-13T16:14:45.956Z" + b"new_number" + b"016c1aef-a873-4a90-8374-60771cba9452" + b"FAILED" + b"0" + b"123456789byo_dev" + b"2015-06-13T16:32:04.216Z" + b"2015-06-13T16:32:04.181Z" + b"new_number" + b"77659f47-d527-42ad-bf72-34b6841016ac" + b"FAILED" + b"" +) + +class ClassOrdersTest(TestCase): + + """Test phone number orders""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_area_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "area_code_search_and_order_type": { + "area_code": "617", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.area_code_search_and_order_type.area_code, + "617") + self.assertEqual(order.area_code_search_and_order_type.quantity, + "1") + + def test_city_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "city_search_and_order_type": { + "state": "NC", + "city": "RALEIGH", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.city_search_and_order_type.state, "NC") + self.assertEqual(order.city_search_and_order_type.city, "RALEIGH") + self.assertEqual(order.city_search_and_order_type.quantity, "1") + + def test_lata_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "lata_search_and_order_type": { + "lata": "224", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.lata_search_and_order_type.lata, "224") + self.assertEqual(order.lata_search_and_order_type.quantity, "1") + + def test_npa_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "npanxx_search_and_order_type": { + "npa_nxx": "919439", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.npanxx_search_and_order_type.npa_nxx, "919439") + self.assertEqual(order.npanxx_search_and_order_type.quantity, "1") + + def test_order_create(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.orders.get_xpath() + m.post(url, content=XML_RESPONSE_ORDER_CREATE) + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "existing_telephone_number_order_type": { + "telephone_number_list": { + "telephone_number": ["9193752369", "9193752720"] + } + } + }) + + self.assertEqual(order.id, "f30a31a1-1de4-4939-b094-4521bbe5c8df") + self.assertEqual(order.order_status, "RECEIVED") + + def test_order_get(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.orders.get_xpath()+\ + "/f30a31a1-1de4-4939-b094-4521bbe5c8df" + m.get(url, content=XML_RESPONSE_ORDER_GET) + + order = self._account.orders.get( + "f30a31a1-1de4-4939-b094-4521bbe5c8df") + + self.assertEqual(order.id, + "f30a31a1-1de4-4939-b094-4521bbe5c8df") + self.assertEqual(order.order_status, "RECEIVED") + + def test_order_update(self): + + with requests_mock.Mocker() as m: + + order = self._account.orders.create({ + "id": "f30a31a1-1de4-4939-b094-4521bbe5c8df", + "name": "Available telephone number order", + "customer_order_id": "123456789", + "close_order": "true" + }, False) + + url = self._client.config.url + order.get_xpath() + m.put(url, content=XML_RESPONSE_ORDER_CREATE) + + self.assertEqual(order.close_order, "true") + + def test_orders_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.orders.get_xpath() + m.get(url, content=XML_RESPONSE_ORDERS_LIST) + + ord = self._account.orders.list({"page": 1, "size": 20}) + + self.assertEqual(len(ord.items), 2) + self.assertEqual(ord.items[0].id, + "016c1aef-a873-4a90-8374-60771cba9452") + self.assertEqual(ord.items[0].customer_order_id, "123456789") + self.assertEqual(ord.items[0].order_type, "new_number") + self.assertEqual(ord.items[0].count_of_tns, "0") + self.assertEqual(ord.items[0].order_status, "FAILED") + + def test_rate_center_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "rate_center_search_and_order_type": { + "rate_center": "RALEIGH", + "state": "NC", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.rate_center_search_and_order_type.rate_center, + "RALEIGH") + self.assertEqual(order.rate_center_search_and_order_type.state, "NC") + self.assertEqual(order.rate_center_search_and_order_type.quantity,"1") + + def test_state_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "state_search_and_order_type": { + "state": "NC", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.state_search_and_order_type.state, "NC") + self.assertEqual(order.state_search_and_order_type.quantity,"1") + + def test_toll_free_vanity_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "toll_free_vanity_search_and_order_type": { + "toll_free_vanity": "newcars", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.toll_free_vanity_search_and_order_type.\ + toll_free_vanity, "newcars") + self.assertEqual(order.toll_free_vanity_search_and_order_type.\ + quantity,"1") + + def test_toll_free_wildcard_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "toll_free_wild_char_search_and_order_type": { + "toll_free_wild_card_pattern": "8**", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.toll_free_wild_char_search_and_order_type.\ + toll_free_wild_card_pattern, "8**") + self.assertEqual(order.toll_free_wild_char_search_and_order_type.\ + quantity,"1") + + def test_zip_search_and_order(self): + + order = self._account.orders.create({ + "name": "Available telephone number order", + "site_id": "2297", + "customer_order_id": "123456789", + "zip_search_and_order_type": { + "zip": "1337", + "quantity": "1" + } + }, False) + + self.assertEqual(order.name, "Available telephone number order") + self.assertEqual(order.site_id, "2297") + self.assertEqual(order.customer_order_id, "123456789") + self.assertEqual(order.zip_search_and_order_type.zip, "1337") + self.assertEqual(order.zip_search_and_order_type.quantity,"1") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_portins.py b/tests/test_portins.py new file mode 100644 index 0000000..ea3e8cc --- /dev/null +++ b/tests/test_portins.py @@ -0,0 +1,320 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_ACTIVATION_STATUS = ( + b"" + b"" + b"2014-08-29T18:30:00+03:00" + b"" + b"6052609021" + b"6052609021" + b"" + b"" +) + +XML_RESPONSE_HISTORY = ( + b"" + b"" + b"2015-06-03T15:06:35.765Z" + b"LOA requiredbyo_dev" + b"PENDING_DOCUMENTS" + b"2015-06-03T15:06:36.234Z" + b"Order has been createdSystem" + b"SUBMITTED" + b"LoaDate: Wed Jun 03 15:06:35 UTC 2015" + b"" +) + +XML_RESPONSE_LNP_UPDATE = ( + b"" + b"0fe651a2-6ffc-4758-b7b7-e3eed66409ec" + b"200" + b"Supp request received." + b"REQUESTED_SUPP" + b"2012-08-30T00:00:00Z" + b"" +) + +XML_RESPONSE_LOAS_GET = ( + b"" + b"00" + b"No LOA files found for order" + b"" +) + +XML_RESPONSE_META_GET = ( + b"" + b"test.txt" + b"LOA" +) + +XML_RESPONSE_PORTIN_POST = ( + b"" + b"" + b"d28b36f7-fa96-49eb-9556-a40fca49f7c6" + b"201" + b"" + b"PENDING_DOCUMENTS" + b"John Doe" + b"BUSINESS" + b"Acme Corporation" + b"1623Brockton Ave #1" + b"Los AngelesCA90025" + b"USA" + b"6882015002" + b"6882015025" + b"6882015026" + b"falsePORTIN" + b"" +) + +class ClassPortinsTest(TestCase): + + """Test port-in orders""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "baz", "qux") + cls._account = Account(client=cls._client) + cls._portins = cls._account.portins + + @classmethod + def tearDownClass(cls): + del cls._portins + del cls._account + del cls._client + + def test_get_loas(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + portin.loas.get_xpath() + m.get(url, content=XML_RESPONSE_LOAS_GET) + + portin.loas.list({"metadata": "true"}) + + self.assertEqual(portin.loas.result_message, + "No LOA files found for order") + + def test_portin_activation_status_get(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + with requests_mock.Mocker() as m: + + url = portin.activation_status.get_xpath() + m.get(url, content=XML_RESPONSE_ACTIVATION_STATUS) + + status = portin.activation_status.get() + + self.assertEqual(status.activated_telephone_numbers_list.\ + telephone_number.items[0], "6052609021") + + def test_portin_activation_status_set(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + portin.activation_status.auto_activation_status =\ + "2014-08-30T18:30:00+03:00" + + with requests_mock.Mocker() as m: + + url = portin.activation_status.get_xpath() + m.put(url) + + status = portin.activation_status + status.save() + + def test_portin_create(self): + + portin = self._portins.create({ + "billing_telephone_number": "6882015002", + "subscriber": { + "subscriber_type": "BUSINESS", + "business_name": "Acme Corporation", + "service_address": { + "house_number": "1623", + "street_name": "Brockton Ave", + "city": "Los Angeles", + "state_code": "CA", + "zip": "90025", + "country": "USA" + } + }, + "loa_authorizing_person": "John Doe", + "list_of_phone_numbers": { + "phone_number": ["9882015025", "9882015026"] + }, + "site_id": "365", + "triggered": "false" + }, False) + + self.assertEqual(portin.list_of_phone_numbers.phone_number.items[1], + "9882015026") + self.assertEqual(portin.subscriber.service_address.street_name, + "Brockton Ave") + + with requests_mock.Mocker() as m: + + url = self._portins.get_xpath() + m.post(url, content=XML_RESPONSE_PORTIN_POST) + + portin = self._portins.create({ + "billing_telephone_number": "6882015002", + "subscriber": { + "subscriber_type": "BUSINESS", + "business_name": "Acme Corporation", + "service_address": { + "house_number": "1623", + "street_name": "Brockton Ave", + "city": "Los Angeles", + "state_code": "CA", + "zip": "90025", + "country": "USA" + } + }, + "loa_authorizing_person": "John Doe", + "list_of_phone_numbers": { + "phone_number": ["9882015025", "9882015026"] + }, + "site_id": "365", + "triggered": "false" + }) + + self.assertEqual(portin.order_id, + "d28b36f7-fa96-49eb-9556-a40fca49f7c6") + + def test_portin_delete(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + portin.get_xpath() + m.delete(url) + + portin.delete() + + def test_portin_history(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + portin.history.get_xpath() + m.get(url, content=XML_RESPONSE_HISTORY) + + history = portin.history.list() + + oh = history.items[0] + self.assertEqual(len(history.items), 2) + self.assertEqual(oh.order_date, "2015-06-03T15:06:35.765Z") + self.assertEqual(oh.note, "LOA required") + self.assertEqual(oh.author, "byo_dev") + self.assertEqual(oh.status, "PENDING_DOCUMENTS") + + def test_portin_loas_delete(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + portin.loas.get_xpath() + "/fname" + m.delete(url) + + portin.loas.delete("fname") + + def test_portin_loas_get_metadata(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + portin.loas.get_xpath() +\ + portin.loas.metadata._xpath.format("fname") + m.get(url, content=XML_RESPONSE_META_GET) + + metadata = portin.loas.metadata.get("fname") + + self.assertEqual(metadata.document_name, "test.txt") + self.assertEqual(metadata.document_type, "LOA") + + def test_portin_loas_set_metadata(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + portin.loas.metadata.id = "fname" + portin.loas.metadata.document_name = "foo" + portin.loas.metadata.document_type = "bar" + + with requests_mock.Mocker() as m: + + url = self._client.config.url +portin.loas.metadata.get_xpath() + m.put(url) + + portin.loas.metadata.save() + + def test_portin_loas_delete_metadata(self): + + portin = self._portins.create({"order_id": + "d28b36f7-fa96-49eb-9556-a40fca49f7c6"}, False) + + portin.loas.metadata.id = "fname" + portin.loas.metadata.document_name = "foo" + portin.loas.metadata.document_type = "bar" + + with requests_mock.Mocker() as m: + + url = self._client.config.url +portin.loas.metadata.get_xpath() + m.delete(url) + + portin.loas.metadata.delete() + + def test_portin_update(self): + + portin = self._portins.create({ + "order_id": "d28b36f7-fa96-49eb-9556-a40fca49f7c6", + "status": { + "code": "0", + "description": "empty" + } + }, False) + portin.requested_foc_date = "2012-08-30T00:00:00.000Z" + + with requests_mock.Mocker() as m: + + url = self._client.config.url + portin.get_xpath() + m.put(url, content=XML_RESPONSE_LNP_UPDATE) + + portin.save() + + self.assertEqual(portin.status.code, "200") + self.assertEqual(portin.status.description, + "Supp request received.") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_rc.py b/tests/test_rc.py new file mode 100644 index 0000000..625cc31 --- /dev/null +++ b/tests/test_rc.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.rate_centers import RateCenters + +XML_RESPONSE_RC_LIST = ( + b"" + b"652" + b"AGOURAAGOURA" + b"ALAMITOS" + b"ALAMITOS" +) + +class ClassRcTest(TestCase): + + """Test the Rate centers dir""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._rc = RateCenters(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._rc + del cls._client + + def test_rc_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._rc.get_xpath() + m.get(url, content=XML_RESPONSE_RC_LIST) + + rc = self._rc.list({"state": "CA"}).items[0] + + self.assertEqual(rc.name, "AGOURA") + self.assertEqual(rc.abbreviation, "AGOURA") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_rest.py b/tests/test_rest.py new file mode 100644 index 0000000..4ab9bd6 --- /dev/null +++ b/tests/test_rest.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from iris_sdk.utils.py_compat import PY_VER_MAJOR + +from unittest import main, TestCase + +if PY_VER_MAJOR == 3: + from unittest.mock import MagicMock, patch +else: + from mock import MagicMock, patch + +from requests.exceptions import HTTPError + +from iris_sdk.utils.rest import ERROR_TAG, ERROR_TEMPLATE, HEADERS, HTTP_OK,\ + RestClient, RestError + +class HttpErrorStub(HTTPError): + pass + +class ClassRestRequestTest(TestCase): + + """Test HTTP requests""" + + def raise_for_status_stub(self): + raise HttpErrorStub("foo") + + @classmethod + def setUpClass(cls): + cls._mock_req_res = MagicMock("requests.models.Response") + cls._mock_req_res.status_code = HTTP_OK + cls._mock_req_res.headers = {"foo": "bar"} + cls._rest_client = RestClient() + + def setUp(self): + patcher_req = patch("requests.request") + patcher_resp = patch("requests.Response") + patcher_stat = patch("requests.Response.raise_for_status") + + self._resp = patcher_resp.start() + self._request = patcher_req.start() + self._stat = patcher_stat.start() + self._request.return_value = self._mock_req_res + + self.addCleanup(patch.stopall) + + @classmethod + def tearDownClass(cls): + del cls._rest_client + + def test_rest_client_request_wrong_method(self): + with self.assertRaises(AssertionError): + self._rest_client.request("foo", "bar", "baz") + + def test_rest_client_response(self): + + self._mock_req_res.content=b"barqux" + self._mock_req_res.status_code = HTTP_OK + self._mock_req_res.raise_for_status = self._stat + + self._rest_client.request("GET","foo","bar","baz","qux") + self._request.assert_called_once_with("GET", "foo", auth="bar", + headers=HEADERS, params="baz", data="qux") + self._stat.assert_any_call + + self.assertEqual(self._mock_req_res.status_code, HTTP_OK) + self.assertEqual(self._mock_req_res.content, + b"barqux") + self.assertEqual(self._mock_req_res.headers["foo"], "bar") + + @patch("xml.etree.ElementTree.fromstring", return_value = "foo") + def test_rest_client_exception(self, _fromstring): + + class XmlElem(object): + def __init__(self): + self.find_res = None + self.children = [] + self.tag = None + self.text = None + def find(self, str): + self._call_arg = str + return self.find_res + def getchildren(self): + return self.children + + self._mock_req_res.content = b"" + self._mock_req_res.status_code = 300 + self._mock_req_res.raise_for_status = self.raise_for_status_stub + + with self.assertRaises(HttpErrorStub): + self._rest_client.request("GET","foo","bar","baz","qux") + + self._mock_req_res.content =b"barqux" + + _mock = [[0 for i in range(2)] for i in range(1)] + + _m = XmlElem() + _n = XmlElem() + _m.text = "bar" + _n.text = "qux" + _mock[0][0] = _m + _mock[0][1] = _n + + root = XmlElem() + root.find_res = _mock + _fromstring.return_value = root + + if PY_VER_MAJOR == 3: + with self.assertRaisesRegex(RestError, + ERROR_TEMPLATE.format("bar", "qux")): + self._rest_client.request("GET","foo","bar","baz","qux") + else: + with self.assertRaisesRegexp(RestError, + ERROR_TEMPLATE.format("bar", "qux")): + self._rest_client.request("GET","foo","bar","baz","qux") + + root.find_res = None + root.children = [_m, _n] + + if PY_VER_MAJOR == 3: + with self.assertRaisesRegex(RestError, + "barqux"): + self._rest_client.request("GET","foo","bar","baz","qux") + else: + with self.assertRaisesRegexp(RestError, + "barqux"): + self._rest_client.request("GET","foo","bar","baz","qux") + + _m.find_res = _mock + + if PY_VER_MAJOR == 3: + with self.assertRaisesRegex(RestError, + ERROR_TEMPLATE.format("bar", "qux")): + self._rest_client.request("GET","foo","bar","baz","qux") + else: + with self.assertRaisesRegexp(RestError, + ERROR_TEMPLATE.format("bar", "qux")): + self._rest_client.request("GET","foo","bar","baz","qux") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_sip_peers.py b/tests/test_sip_peers.py new file mode 100644 index 0000000..40dec32 --- /dev/null +++ b/tests/test_sip_peers.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_SIP_PEER_GET = ( + b"" + b"500651" + b"Somethingfalse" + b"SMPP" + b"" +) + +XML_RESPONSE_SIP_PEER_TNS = ( + b"" + b"" + b"8183386251" + b"" + b"8183386252" + b"" +) + +XML_RESPONSE_SIP_PEER_TNS_TOTAL = ( + b"" + b"" + b"4" + b"" +) + +XML_RESPONSE_SIP_PEERS_LIST = ( + b"" + b"500709" + b"Test4 Peertrue" + b"SMPP" + b"192.168.181.94" + b"192.168.181.94" + b"" + b"192.168.181.940" + b"DOMESTIC" + b"true" + b"" +) + +class ClassSitesTest(TestCase): + + """Test sites""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + cls._site = cls._account.sites.create({"id": "1337"}, False) + cls._sip_peers = cls._site.sip_peers + + @classmethod + def tearDownClass(cls): + del cls._sip_peers + del cls._site + del cls._account + del cls._client + + def test_get_tns(self): + + peer = self._sip_peers.create({"peer_id": "2489"}, False) + tns = peer.tns + + with requests_mock.Mocker() as m: + + url = self._client.config.url + tns.get_xpath() + m.get(url, content=XML_RESPONSE_SIP_PEER_TNS) + + phones = tns.list() + + self.assertEqual(len(phones.items), 2) + self.assertEqual(phones.items[0].full_number, "8183386251") + + def test_movetns(self): + + peer = self._sip_peers.create({"peer_id": "2489"}, False) + movetns = peer.movetns + + with requests_mock.Mocker() as m: + + url = self._client.config.url + movetns.get_xpath() + m.post(url) + + movetns.add("123") + movetns.add("456") + + movetns() + + def test_peer_create(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._sip_peers.get_xpath() + m.post(url, headers={"location": ".../9999"}) + + peer = self._sip_peers.create({ + "peer_name": "foo", + "is_default_peer": "true", + "short_messaging_protocol": "SMPP", + "voice_hosts": { + "host": [{ + "host_name": "192.168.181.90" + }] + }, + "sms_hosts": { + "host": [{ + "host_name": "192.168.181.90" + }] + }, + "termination_hosts": { + "termination_host": [{ + "host_name": "192.168.181.90", + "port": "0", + "customer_traffic_allowed": "DOMESTIC", + "data_allowed": "true" + }] + } + }) + + self.assertEqual(peer.id, "9999") + + def test_peer_get(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._sip_peers.get_xpath() +\ + "/500651" + m.get(url, content=XML_RESPONSE_SIP_PEER_GET) + + peer = self._sip_peers.get("500651") + + self.assertEqual(peer.id, "500651") + self.assertEqual(peer.name, "Something") + + def test_peers_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._sip_peers.get_xpath() + m.get(url, content=XML_RESPONSE_SIP_PEERS_LIST) + + peers = self._sip_peers.list() + + self.assertEqual(len(peers.items), 1) + self.assertEqual(peers.items[0].id, "500709") + + def test_tn_options(self): + + peer = self._sip_peers.create({"peer_id": "2489"}, False) + tn = peer.tns.create({"full_number": "8183386251"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + tn.get_xpath() + m.put(url) + + tn.call_forward = "9194394706" + tn.rpid_format = "e164" + tn.save() + + def test_totaltns(self): + + peer = self._sip_peers.create({"peer_id": "2489"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + peer.totaltns.get_xpath() + m.get(url, content=XML_RESPONSE_SIP_PEER_TNS_TOTAL) + + count = peer.totaltns.get().count + + self.assertEqual(count, "4") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_sites.py b/tests/test_sites.py new file mode 100644 index 0000000..69c21d2 --- /dev/null +++ b/tests/test_sites.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_PORTINS_LIST = ( + b"" + b"4" + b"" + b"1System" + b"2015-06-03T15:06:36.234Z" + b"2015-06-03T15:06:35.533Z" + b"535ba91e-5363-474e-8c97-c374a4aa6a02" + b"port_in" + b"9193491234" + b"1537" + b"Test Losing Carrier L3" + b"SUBMITTED" + b"2015-06-03T15:30:00.000Z" + b"49Bandwidth CLEC" + b"BWC1433343996123" + b"1" + b"byo_dev" + b"2015-06-03T15:10:13.384Z" + b"2015-06-03T15:10:12.808Z" + b"98939562-90b0-40e9-8335-5526432d9741" + b"port_in" + b"7576768750" + b"1537" + b"Test Losing Carrier L3" + b"SUBMITTED" + b"2015-06-03T15:30:00.000Z" + b"49Bandwidth CLEC" + b"BWC1433344213212" + b"" +) + +XML_RESPONSE_SITES_LIST = ( + b"" + b"2297API Test Site" + b"2301My First Site" + b"A Site From Node SDK Examples" + b"" +) + +XML_RESPONSE_TOTAL_TNS = ( + b"60" + b"" +) + +class ClassSitesTest(TestCase): + + """Test sites""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_portins_get(self): + + site = self._account.sites.create({"id": "1337"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + site.portins.get_xpath() + m.get(url, content=XML_RESPONSE_PORTINS_LIST) + + portins = site.portins.list({"page": 1, "size": 10}) + pi = portins.items[0] + + self.assertEqual(len(portins.items), 2) + self.assertEqual(pi.count_of_tns, "1") + self.assertEqual(pi.last_modified_date,"2015-06-03T15:06:36.234Z") + self.assertEqual(pi.order_date, "2015-06-03T15:06:35.533Z") + self.assertEqual(pi.order_type, "port_in") + self.assertEqual(pi.lnp_losing_carrier_id, "1537") + self.assertEqual(pi.lnp_losing_carrier_name, + "Test Losing Carrier L3") + self.assertEqual(pi.requested_foc_date,"2015-06-03T15:30:00.000Z") + self.assertEqual(pi.vendor_id, "49") + self.assertEqual(pi.vendor_name, "Bandwidth CLEC") + self.assertEqual(pi.pon, "BWC1433343996123") + self.assertEqual(pi.order_id, + "535ba91e-5363-474e-8c97-c374a4aa6a02") + self.assertEqual(pi.processing_status, "SUBMITTED") + + def test_site_create(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.sites.get_xpath() + m.post(url, headers={"location": ".../2489"}) + + site = self._account.sites.create({ + "name": "Foo", + "address": { + "city": "Raleigh" + } + }) + + self.assertEqual(site.id, "2489") + self.assertEqual(site.name, "Foo") + self.assertEqual(site.address.city, "Raleigh") + + def test_site_delete(self): + + site = self._account.sites.create({"id": "1337"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + site.get_xpath() + m.delete(url) + + site.delete() + + def test_site_orders(self): + + orders = self._account.sites.create({"id": "1337"}, False).orders + + with requests_mock.Mocker() as m: + + url = self._client.config.url + orders.get_xpath() + m.get(url) + + orders_list = orders.list({"page": 1, "size": 5}) + + def test_site_orders_tns(self): + + site = self._account.sites.create({"id": "1337"}, False) + order = site.orders.create({"order_id": "1"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + order.tns.get_xpath() + m.get(url) + + order.tns.list() + + def test_site_total_tns(self): + + site = self._account.sites.create({"id": "1337"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + site.totaltns.get_xpath() + m.get(url, content=XML_RESPONSE_TOTAL_TNS) + + cnt = site.totaltns.get().total_count + + self.assertEqual(cnt, "60") + + def test_site_update(self): + + site = self._account.sites.create({"id": "1337"}, False) + + with requests_mock.Mocker() as m: + + url = self._client.config.url + site.get_xpath() + m.put(url) + + site.save() + + def test_sites_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.sites.get_xpath() + m.get(url, content=XML_RESPONSE_SITES_LIST) + + sites = self._account.sites.list() + + self.assertEqual(len(sites.items), 2) + self.assertEqual(sites.items[0].id, "2297") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_strings.py b/tests/test_strings.py new file mode 100644 index 0000000..5527bec --- /dev/null +++ b/tests/test_strings.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +from iris_sdk.utils.strings import Converter + +class ClassStringsConverterTest(TestCase): + + """Test string conversion""" + + @classmethod + def setUp(cls): + cls._converter = Converter() + + @classmethod + def tearDown(cls): + del cls._converter + + def test_to_camelcase(self): + tests = [ + ("foo_bar", "FooBar"), + ("FooBar", "FooBar"), + ("_foo_bar", "FooBar"), + ("_foo__bar", "Foo_Bar"), + # Url needs to be treated as special for XML serialization + ('url', 'URL')] + + for input, output in tests: + self.assertEqual(self._converter.to_camelcase(input), output) + + def test_to_underscore(self): + tests = [ + ("foobar", "foobar"), + ("foo_bar", "foo_bar"), + ("FooBar", "foo_bar"), + ("_foo__bar", "_foo__bar"), + ("FOOBAR", "foobar")] + + for input, output in tests: + self.assertEqual(self._converter.to_underscore(input), output) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_subscriptions.py b/tests/test_subscriptions.py new file mode 100644 index 0000000..95c31dd --- /dev/null +++ b/tests/test_subscriptions.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_SUBSCRIPTIONS_LIST = ( + b"" + b"" + b"1orders" + b"8684b1c8-7d41-4877-bfc2-6bd8ea4dc89f" + b"test@test" + b"NONE" + b"" +) + +class ClassSubscriptionsTest(TestCase): + + """Notification subscriptions tests""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._client + del cls._account + + def test_subscriptions_create(self): + + subscription = self._account.subscriptions.create({ + "order_type": "portins", + "order_id": "98939562-90b0-40e9-8335-5526432d9741", + "email_subscription": { + "email": "foo@bar.baz", + "digest_requested": "DAILY" + } + }, False) + + self.assertEqual(subscription.order_type, "portins") + self.assertEqual(subscription.order_id, + "98939562-90b0-40e9-8335-5526432d9741") + self.assertEqual(subscription.email_subscription.email, "foo@bar.baz") + self.assertEqual(subscription.email_subscription.digest_requested, + "DAILY") + + with requests_mock.Mocker() as m: + + url = self._client.config.url + \ + self._account.subscriptions.get_xpath() + m.post(url, headers={"location": ".../777"}) + + subscription.save() + + self.assertEqual(subscription.id, "777") + + def test_subscriptions_create_for_orders(self): + + subscription = self._account.subscriptions.create({ + "order_type": "orders", + "callback_subscription": { + "url": "https://someurl", + "expiry": "86400", + } + }, False) + + self.assertEqual(subscription.order_type, "orders") + self.assertEqual(subscription.callback_subscription.url, "https://someurl") + self.assertEqual(subscription.callback_subscription.expiry, '86400') + + with requests_mock.Mocker() as m: + + url = self._client.config.url + \ + self._account.subscriptions.get_xpath() + m.post(url, headers={"location": ".../777"}) + + subscription.save() + + self.assertEqual(subscription.id, "777") + + def test_subscriptions_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + \ + self._account.subscriptions.get_xpath() + m.get(url, content=XML_RESPONSE_SUBSCRIPTIONS_LIST) + + subs = self._account.subscriptions.list({"orderType": "portins"}) + sub = subs.items[0] + + self.assertEqual(len(subs.items), 1) + self.assertEqual(sub.order_id, + "8684b1c8-7d41-4877-bfc2-6bd8ea4dc89f") + + def test_subscriptions_update(self): + + subscription = self._account.subscriptions.create({ + "subscription_id": "1c59e661-8c90-4cb5-aab1-00547ea45ecb", + "order_type": "portins", + "order_id": "98939562-90b0-40e9-8335-5526432d9741", + "email_subscription": { + "email": "foo@bar.baz", + "digest_requested": "DAILY" + } + }, False); + + self.assertEqual(subscription.subscription_id, + "1c59e661-8c90-4cb5-aab1-00547ea45ecb") + self.assertEqual(subscription.order_type, "portins") + self.assertEqual(subscription.order_id, + "98939562-90b0-40e9-8335-5526432d9741") + + with requests_mock.Mocker() as m: + url = self._client.config.url + subscription.get_xpath() + m.put(requests_mock.ANY) + subscription.save() + + self.assertEqual(m.request_history[0].url, url) + + def test_subscriptions_delete(self): + + subscription = self._account.subscriptions.create( + {"subscription_id": "1c59e661"}, False); + + with requests_mock.Mocker() as m: + url = self._client.config.url + subscription.get_xpath() + m.delete(requests_mock.ANY) + subscription.delete() + + self.assertEqual(m.request_history[0].url, url) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_tn_option_orders.py b/tests/test_tn_option_orders.py new file mode 100644 index 0000000..38fb304 --- /dev/null +++ b/tests/test_tn_option_orders.py @@ -0,0 +1,257 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account + +XML_RESPONSE_CREATE_TN_OPTION_ORDER = ( + b"" + b"" + b" " + b" 2016-01-15T12:01:14.324Z" + b" 14" + b" jbm" + b" ddbdc72e-dc27-490c-904e-d0c11291b095" + b" 2016-01-15T12:01:14.324Z" + b" RECEIVED" + b" " + b" " + b" 10digit" + b" 10digit" + b" testUser1" + b" 6042661720" + b" on" + b" true" + b" on" + b" " + b" 2018551020" + b" " + b" " + b" " + b" off" + b" false" + b" off" + b" " + b" 2018551025" + b" " + b" " + b" " + b" " + b" " + b"" +) + +XML_RESPONSE_LIST_TN_OPTION_ORDER_SUMMARY = ( + b"" + b"" + b" 2" + b" " + b" 14" + b" 2" + b" jbm" + b" 2016-01-15T12:01:14.363Z" + b" 2016-01-15T12:01:14.324Z" + b" tn_option" + b" FAILED" + b" ddbdc72e-dc27-490c-904e-d0c11291b095" + b" " + b" " + b" 14" + b" 3" + b" jbm" + b" 2016-01-15T11:22:58.969Z" + b" 2016-01-15T11:22:58.789Z" + b" tn_option" + b" COMPLETE" + b" 409033ee-88ec-43e3-85f3-538f30733963" + b" " + b"" +) + +XML_RESPONSE_LIST_TN_OPTION_ORDER = ( + b"" + b"" + b" 2" + b" " + b" 2016-01-15T12:01:14.324Z" + b" 14" + b" jbm" + b" ddbdc72e-dc27-490c-904e-d0c11291b095" + b" 2016-01-15T12:01:14.363Z" + b" FAILED" + b" " + b" " + b" 10digit" + b" 10digit" + b" testUser1" + b" 6042661720" + b" on" + b" true" + b" on" + b" sip:+12345678901@1.2.3.4:5060" + b" " + b" 2018551020" + b" " + b" " + b" " + b" off" + b" false" + b" off" + b" " + b" 2018551025" + b" " + b" " + b" " + b" " + b" " + b" 5076" + b" Telephone number is not available." + b" 2018551025" + b" " + b" " + b" 5076" + b" Telephone number is not available." + b" 2018551020" + b" " + b" " + b" " + b" " + b" 2016-01-15T11:22:58.789Z" + b" 14" + b" jbm" + b" 409033ee-88ec-43e3-85f3-538f30733963" + b" 2016-01-15T11:22:58.969Z" + b" COMPLETE" + b" " + b" " + b" on" + b" " + b" 2174101601" + b" " + b" " + b" " + b" off" + b" " + b" 2174101602" + b" " + b" " + b" " + b" systemdefault" + b" " + b" 2174101603" + b" " + b" " + b" " + b" " + b" " + b"" +) + +XML_RESPONSE_GET_TN_OPTION_ORDER = ( + b"" + b"" + b" 2016-01-15T11:22:58.789Z" + b" 14" + b" jbm" + b" 409033ee-88ec-43e3-85f3-538f30733963" + b" 2016-01-15T11:22:58.969Z" + b" COMPLETE" + b" " + b" " + b" on" + b" on" + b" " + b" 2174101601" + b" " + b" " + b" " + b" off" + b" " + b" 2174101602" + b" " + b" " + b" " + b" systemdefault" + b" sip:+12345678901@1.2.3.4:5060" + b" " + b" 2174101603" + b" " + b" " + b" " + b" " + b" " + b" " + b" 2174101601" + b" SMS is already Enabled or number is in processing." + b" " + b" " + b"" +) + +class TnOptionOrdersTest(TestCase): + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._account + + def test_create_tn_option_order(self): + with requests_mock.Mocker() as m: + url = self._client.config.url + self._account._tn_option_orders.get_xpath() + m.post(url, content=XML_RESPONSE_CREATE_TN_OPTION_ORDER) + order = self._account.tn_option_orders.create({ + "customer_order_id": "12345", + "tn_option_groups": { + "tn_option_group": [ + { + "number_format": "10digit" + } + ] + } + }) + + self.assertEqual(order.account_id, '14') + self.assertEqual(order.order_create_date, "2016-01-15T12:01:14.324Z") + + def test_get_tn_option_orders_summary(self): + with requests_mock.Mocker() as m: + url = self._client.config.url + self._account._tn_option_orders.get_xpath() + m.get(url, content=XML_RESPONSE_LIST_TN_OPTION_ORDER_SUMMARY) + order = self._account.tn_option_orders.list() + + self.assertEqual(order.total_count, '2') + self.assertEqual(order.tn_option_order_summary.items[0].account_id, '14') + + def test_get_tn_option_orders(self): + with requests_mock.Mocker() as m: + url = self._client.config.url + self._account._tn_option_orders.get_xpath() + m.get(url, content=XML_RESPONSE_LIST_TN_OPTION_ORDER) + order = self._account.tn_option_orders.list() + + self.assertEqual(order.total_count, '2') + self.assertEqual(order.tn_option_order.items[0].account_id, '14') + self.assertEqual(order.tn_option_order.items[0].tn_option_groups.tn_option_group.items[0].number_format, '10digit') + + def test_get_tn_option_order(self): + with requests_mock.Mocker() as m: + url = self._client.config.url + self._account._tn_option_orders.get_xpath() + "/id" + m.get(url, content=XML_RESPONSE_GET_TN_OPTION_ORDER) + order = self._account.tn_option_orders.get("id") + + self.assertEqual(order.order_create_date, "2016-01-15T11:22:58.789Z") + self.assertEqual(order.warnings.warning.items[0].telephone_number, "2174101601") diff --git a/tests/test_tns.py b/tests/test_tns.py new file mode 100644 index 0000000..86fb56a --- /dev/null +++ b/tests/test_tns.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account +from iris_sdk.models.tns import Tns + +XML_RESPONSE_LCA_GET = ( + b"" + b"240206" + b"240228" + b"MDMILLERSVLSEVERNA PK" + b"" +) + +XML_RESPONSE_TN_GET = ( + b"" + b"7576768750" + b"PortInPendingFoc" + b"2015-06-03T15:10:13.000Z" + b"2015-06-03T15:10:12.808Z" + b"98939562-90b0-40e9" + b"PORT_NUMBER_ORDER" + b"2297" + b"9500249" +) + +XML_RESPONSE_TN_HISTORY_GET = ( + b"" + b"" + b"753" + b"2014-07-29T13:42:49.789Z" + b"2014-07-29T13:42:33.000Z" + b"58ee5da9-6357-4626-86fd-6faf4bf819b3" + b"Availablejbm" + b"IMPORT_AVAILABLE_ORDER" + b"14" + b"2014-07-30T11:07:10.585Z" + b"2014-07-30T11:07:10.537Z" + b"90d7f38d-03fc-43f4-85f6-ed2608411775" + b"Inservicejbm" + b"NEW_NUMBER_ORDER" + b"" +) + +XML_RESPONSE_TN_LIST = ( + b"" + b"78" + b"" + b"MILLERSVILLE238MD" + b"41092354360" + b"49Bandwidth CLEC" + b"MILLERSVLPortInPendingFoc" + b"9500249" + b"2015-07-14T13:53:58.000Z" + b"MILLERSVILLE238" + b"MD41092354370" + b"49Bandwidth CLEC" + b"MILLERSVLPortInPendingFoc" + b"9500249" + b"2015-07-14T19:13:57.000Z" + b"" +) + +XML_RESPONSE_SIP_PEER_GET = ( + b"" + b"500651Something" +) + +XML_RESPONSE_SITE_GET = ( + b"" + b"2297API Test Site" +) + +XML_RESPONSE_TN_LATA_GET = ( + b"" + b"252" + b"" +) + +XML_RESPONSE_TN_RC_GET = ( + b"" + b"VA" + b"NRFOLKZON1" + b"" +) + +XML_RESPONSE_TNDETAILS_GET = ( + b"" + b"" + b"JERSEY CITY224NJ" + b"20189810230" + b"49Bandwidth CLEC" + b"JERSEYCITYInservice" + b"14" + b"2014-07-30T11:29:37.000Z" + b"Success" + b"Pending" + b"Fred" + b"BUSINESSPUBLIC" + b"Success" + b"BUSINESS" + b"LISTED" + b"JoeSmith" + b"true
" + b"12ELM" + b"New YorkNY10007" + b"United StatesDlda" + b"
" + b"Protected" + b"
" +) + +XML_RESPONSE_TNRESERVATION_GET = ( + b"" + b"123" + b"1110" + b"6136211234" +) + +class ClassTnsTest(TestCase): + + """Telephone number tests""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + cls._tns = Tns(client=cls._client) + cls._url = cls._client.config.url +cls._tns.get_xpath() +"/7576768750" + + @classmethod + def tearDownClass(cls): + del cls._account + del cls._tns + del cls._client + + def test_history(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.history.get_xpath() + m.get(url, content=XML_RESPONSE_TN_HISTORY_GET) + + hs = tn.history.list().items[0] + + self.assertEqual(hs.account_id, "753") + self.assertEqual(hs.last_modified_date, + "2014-07-29T13:42:49.789Z") + self.assertEqual(hs.order_create_date, + "2014-07-29T13:42:33.000Z") + self.assertEqual(hs.order_id, + "58ee5da9-6357-4626-86fd-6faf4bf819b3") + self.assertEqual(hs.order_type, "IMPORT_AVAILABLE_ORDER") + self.assertEqual(hs.status, "Available") + + def test_lca(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.lca.get_xpath() + m.get(url, content=XML_RESPONSE_LCA_GET) + + lca = tn.lca.get() + + self.assertEqual(lca.listof_npanxx.npanxx.items[0], "240206") + self.assertEqual(lca.listof_npanxx.npanxx.items[1], "240228") + self.assertEqual( + lca.location.rate_centers.items[0].state, "MD") + self.assertEqual( + lca.location.rate_centers.items[0].rcs.rc.items[0], + "MILLERSVL") + self.assertEqual( + lca.location.rate_centers.items[0].rcs.rc.items[1], + "SEVERNA PK") + + def test_sip_peer(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url+self._tns.get_xpath()+"/7576768750" + m.get(url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.sip_peer.get_xpath() + m.get(url, content=XML_RESPONSE_SIP_PEER_GET) + + sip_peer = tn.sip_peer.get() + + self.assertEqual(sip_peer.id, "500651") + self.assertEqual(sip_peer.peer_name, "Something") + + def test_site(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.site.get_xpath() + m.get(url, content=XML_RESPONSE_SITE_GET) + + site = tn.site.get() + + self.assertEqual(site.id, "2297") + self.assertEqual(site.name, "API Test Site") + + def test_tn(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + self.assertEqual(tn.status, "PortInPendingFoc") + self.assertEqual(tn.order_id, "98939562-90b0-40e9") + + def test_tn_lata(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.tn_lata.get_xpath() + m.get(url, content=XML_RESPONSE_TN_LATA_GET) + + lata = tn.tn_lata.get() + + self.assertEqual(lata.lata, "252") + + def test_tn_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._tns.get_xpath() + m.get(url, content=XML_RESPONSE_TN_LIST) + + tns = self._tns.list({"page": 1, "size": 10}) + + self.assertEqual(len(tns.items), 2) + self.assertEqual(tns.items[0].full_number, "4109235436") + + def test_tn_rate_center(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.tn_rate_center.get_xpath() + m.get(url, content=XML_RESPONSE_TN_RC_GET) + + rc = tn.tn_rate_center.get() + + self.assertEqual(rc.rate_center, "NRFOLKZON1") + self.assertEqual(rc.state, "VA") + + def test_tndetails(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.tndetails.get_xpath() + m.get(url, content=XML_RESPONSE_TNDETAILS_GET) + + tnd = tn.tndetails.get() + + self.assertEqual(tnd.city, "JERSEY CITY") + self.assertEqual(tnd.lata, "224") + self.assertEqual(tnd.state, "NJ") + self.assertEqual(tnd.full_number, "2018981023") + self.assertEqual(tnd.tier, "0") + self.assertEqual(tnd.vendor_id, "49") + self.assertEqual(tnd.vendor_name, "Bandwidth CLEC") + self.assertEqual(tnd.rate_center, "JERSEYCITY") + self.assertEqual(tnd.status, "Inservice") + self.assertEqual(tnd.account_id, "14") + self.assertEqual(tnd.last_modified, "2014-07-30T11:29:37.000Z") + self.assertEqual(tnd.features.lidb.status, "Pending") + + def test_tnreservation(self): + + with requests_mock.Mocker() as m: + + m.get(self._url, content=XML_RESPONSE_TN_GET) + + tn = self._tns.get("7576768750") + + url = self._client.config.url + tn.tnreservation.get_xpath() + m.get(url, content=XML_RESPONSE_TNRESERVATION_GET) + + tnr = tn.tnreservation.get() + + self.assertEqual(tnr.id, "123") + self.assertEqual(tnr.reserved_tn, "6136211234") + self.assertEqual(tnr.reservation_expires, "0") + self.assertEqual(tnr.account_id, "111") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/test_users.py b/tests/test_users.py new file mode 100644 index 0000000..49d3549 --- /dev/null +++ b/tests/test_users.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python + +import os +import sys + +# For coverage. +if __package__ is None: + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") + +from unittest import main, TestCase + +import requests +import requests_mock + +from iris_sdk.client import Client +from iris_sdk.models.account import Account +from iris_sdk.models.users import Users + +XML_RESPONSE_USERS_LIST = ( + b"" + b"byo_dev" + b"testtest" + b"jsommerset@bandwidth.com" + b"5413637598" + b"ROLE_USER" + b"UPDATE" + b"VIEW" + b"ROLE_BDR" + b"UPDATE" + b"VIEW" + b"ROLE_API_HISTORY" + b"UPDATE" + b"VIEW" + b"ROLE_API_SITE" + b"UPDATE" + b"VIEW" + b"" + b"ROLE_API_SEARCH" + b"VIEW" + b"ROLE_API_ORDERING" + b"UPDATE" + b"VIEW" + b"" + b"ROLE_API_PROFILE" + b"UPDATE" + b"VIEW" + b"ROLE_API_LNP" + b"UPDATE" + b"VIEW" + b"ROLE_API_ACCOUNT" + b"VIEW" + b"" + b"ROLE_API_DLDA" + b"UPDATE" + b"VIEW" + b"ROLE_API_CNAMLIDB" + b"UPDATE" + b"VIEW" + b"" +) + +class ClassUsersTest(TestCase): + + """Test the Users directory""" + + @classmethod + def setUpClass(cls): + cls._client = Client("http://foo", "bar", "bar", "qux") + cls._account = Account(client=cls._client) + + @classmethod + def tearDownClass(cls): + del cls._account + del cls._client + + def test_change_pass(self): + + with requests_mock.Mocker() as m: + + users = Users(client=self._client) + + url = self._client.config.url + users.password.get_xpath() + m.put(url) + + users.password.change("foobar") + + def test_users_list(self): + + with requests_mock.Mocker() as m: + + url = self._client.config.url + self._account.users.get_xpath() + m.get(url, content=XML_RESPONSE_USERS_LIST) + + user = self._account.users.list().items[0] + + self.assertEqual(user.username, "byo_dev") + self.assertEqual(user.first_name, "test") + self.assertEqual(user.last_name, "test") + self.assertEqual(user.email_address, "jsommerset@bandwidth.com") + self.assertEqual(user.telephone_number, "5413637598") + self.assertEqual(user.roles.role.items[0].role_name, "ROLE_USER") + self.assertEqual( + user.roles.role.items[0].permissions.\ + permission.items[0].permission_name, + "UPDATE") + +if __name__ == "__main__": + main() \ No newline at end of file