1# coding: utf-8
2
3"""
4    API Specification
5
6    # Introduction Welcome to gridscales API documentation.  A REST API is a programming interface that allows you to access and send data directly to our systems using HTTPS requests, without the need to use a web GUI. All the functionality you are already familiar with in your control panel is accessible through the API, including expert methods that are only available through the API. Allowing you to script any actions you require, regardless of their complexity.  First we will start with a general overview about how the API works, followed by an extensive list of each endpoint, describing them in great detail.  ## Requests  For security, gridscale requires all API requests are made through the HTTPS protocol so that traffic is encrypted. The following table displays the different type of requests that the interface responds to, depending on the action you require.  | Method | Description | | --- | --- | | GET | A simple search of information. The response is a JSON object. Requests using GET are always read-only. | | POST | Adds new objects and object relations. The POST request must contain all the required parameters in the form of a JSON object. | | PATCH | Changes an object or an object relation. The parameters in PATCH requests are usually optional, so only the changed parameters must be specified in a JSON object. | | DELETE | Deletes an object or object relation. The object is deleted if it exists. | | OPTIONS | Get an extensive list of the servers support methods and characteristics. We will not give example OPTION requests on each endpoint, as they are extensive and self-descriptive. |  <aside class=\"notice\"> The methods PATCH and DELETE are idempotent - that is, a request with identical parameters can be sent several times, and it doesn't change the result. </aside>  ## Status Codes  | HTTP Status | `Message` | Description | | --- | --- | --- | | 200 | `OK` | The request has been successfully processed and the result of the request is transmitted in the response. | | 202 | `Accepted` | The request has been accepted, but will run at a later date. Meaning we can not guarantee the success of the request. You should poll the request to be notified once the resource has been provisioned - see the requests endpoint on how to poll. | | 204 | `No Content` | The request was successful, but the answer deliberately contains no data. | | 400 | `Bad Request` | The request message was built incorrectly. | | 401 | `Unauthorised` | The request can not be performed without a valid authentication. X-Auth UserId or X-Auth token HTTP header is not set or the userID / token is invalid. | | 402 | `Payment Required` | Action can not be executed - not provided any or invalid payment methods. | | 403 | `Forbidden` | The request was not carried out due to lack of authorization of the user or because an impossible action was requested. | | 404 | `Not Found` | The requested resource was not found. Will also be used if you do a resource exists, but the user does not have permission for it. | | 405 | `Method Not Allowed` | The request may be made only with other HTTP methods (eg GET rather than POST). | | 409 | `Conflict` | The request was made under false assumptions. For example, a user can not be created twice with the same email. | | 415 | `Unsupported Media Type` | The contents of the request have been submitted with an invalid media type. All POST or PATCH requests must have \"Content-Type : application / json\" as a header, and send a JSON object as a payload. | | 416 | `Requested Range Not Satisfiable` | The request could not be fulfilled. It is possible that a resource limit was reached or an IPv4 address pool is exhausted. | | 424 | `Failed Dependency` | The request could not be performed because the object is in the wrong status. | | 429 | `Too Many Requests` | The request has been rejected because rate limits have been exceeded. |  <aside class=\"success\"> Status 200-204 indicates that the request has been accepted and is processed. </aside> <aside class=\"notice\"> Status 400-429 indicates that there was a problem with the request that originated on the client. You will find more information about the problem in the body of 4xx response. </aside> <aside class=\"warning\"> A status 500 means that there was a server-side problem and your request can not be processed now. </aside>  ## Request Headers  | Header | Description | | --- | --- | | Content-Type | Always \"application/json\". | | X-Auth-userId | The user UUID. This can be found in the panel under \"API\" and will never change ( even after the change of user e-mail). | | X-Auth-Token | Is generated from the API hash and must be sent with all API requests. Both the token and its permissions can be configured in the panel.|  ## Response Headers  | Header | Description | | --- | --- | | Content-Type | Always \"application/json\". | | X-Time-Provisioning | The time taken to process the request (in ms). | | X-Api-Identity | The currently active Provisioning API version. Useful when reporting bugs to us. | | X-Request-Id  | The unique identifier of the request, be sure to include it when referring to a request. | | RateLimit-Limit | The number of requests that can be made per minute. | | RateLimit-Remaining | The number of requests that still remain before you hit your request limit. | | RateLimit-Reset | A [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) in milliseconds of when the rate limit will reset, or the time at which a request no longer will return 429 - Too Many Requests. |  ## Timestamp Format  All timestamps follow <a href=\"https://de.wikipedia.org/wiki/ISO_8601\" target=\"_blank_\">ISO 8601</a> and issued in <a href=\"https://www.timeanddate.de/zeitzonen/utc-gmt\" target=\"_blank_\">UTC</a>  ## CORS  ### Cross Origin Resource Sharing  To allow API access from other domains that supports the API CORS (Cross Origin Resource Sharing). See: enable-cors.org/ .  This allows direct use the API in the browser running a JavaScript web control panel.  All this is done in the background by the browser. The following HTTP headers are set by the API:  Header | Parameter | Description --- | --- | --- Access-Control-Allow-Methods   | GET, POST, PUT, PATCH, DELETE, OPTIONS | Contains all available methods that may be used for queries. Access-Control-Allow-Credentials | true | Is set to \"true\". Allows the browser to send the authentication data via X-Auth HTTP header. Access-Control-Allow-Headers | Origin, X-Requested-With, Content-Type, Accept, X-Auth-UserId, X-Auth-Token, X-Exec-Time, X-API-Version, X-Api-Client | The HTTP headers available for requests. Access-Control-Allow-Origin | * | The domain sent by the browser as a source of demand. Access-Control-Expose-Headers | X-Exec-Time, X-Api-Version | The HTTP headers that can be used by a browser application.  ## Rate Limits  The number of requests that can be made through our API is currently limited to 210 requests per 60 seconds. The current state of rate limiting is returned within the response headers of each request. The relevant response headers are  - RateLimit-Limit - RateLimit-Remaining - RateLimit-Reset  See the Response Headers section for details.  As long as the `RateLimit-Remaining` count is above zero, you will be able to make further requests. As soon as the `RateLimit-Remaining` header value is zero, subsequent requests will return the 429 status code. This will stay until the timestamp given in `RateLimit-Reset` has been reached.  ### Example rate limiting response  ```shell HTTP/1.0 429 TOO MANY REQUESTS Content-Length: 66 Content-Type: application/json; charset=utf-8 Date: Mon, 11 Nov 2019 11:11:33 GMT RateLimit-Limit: 210 RateLimit-Remaining: 0 RateLimit-Reset: 1573468299256  {     \"id\": \"too_many_requests\",     \"message\": \"API Rate limit exceeded.\" } ```  It is important to understand how rate limits are reset in order to use the API efficiently. Rate limits are reset for all counted requests at once. This means that that once the timestamp `RateLimit-Remaining` has arrived all counted request are reset and you can again start sending requests to the API.  This allows for short burst of traffic. The downside is once you have hit the request limit no more requests are allowed until the rate limit duration is reset.  ## Object Relations Relationships describe resource objects (storages, networks, IPs, etc.) that are connected to a server. These relationships are treated like objects themselves and can have properties specific to this relation.  One example would be, that the MAC address of a private network connected to a server (Server-to-Network relation) can be found as property of the relation itself - the relation is the _network interface_ in the server.  Another example is storage, where the SCSI LUN is also part of the Server-to-Storage relation object.  This information is especially interesting if some kind of network boot is used on the servers, where the properties of the server need to be known beforehand.  ## Deleted Objects Objects that are deleted are no longer visible on their *regular* endpoints. For historical reasons these objects are still available read-only on a special endpoint named /deleted. If objects have been deleted but have not yet been billed in the current period, the yet-to-be-billed price is still shown.  <!-- #strip_js --> ## Node.js Library  We have a JavaScript library for you to use our API with ease.  <a href=\"https://www.npmjs.com/package/@gridscale/api\" target=\"_blank\"><img src=\"https://badge.fury.io/js/%40gridscale%2Fapi.svg\" alt=\"npm badge\"></a>  <aside class=\"success\"> We want to make it even easier for you to manage your Infrastructure via our API - so feel free to contact us with any ideas, or languages you would like to see included. </aside>  Requests with our Node.js lib return a little differently. Everything is the same except it allows you to add URL parameters to customize your requests.  To get started <a href=\"https://www.npmjs.com/package/@gridscale/api\" target=\"_blank\">click here</a> .  <!-- #strip_js_end -->  <!-- #strip_go --> ## Golang Library We also have a Golang library for Gophers.  Requests with our Golang lib return a little differently. Everything is the same except it allows you to add URL parameters to customize your requests.  To get started <a href=\"https://github.com/gridscale/gsclient-go\" target=\"_blank\">click here</a> .  <!-- #strip_go_end -->  <!-- #strip_python --> ## Python Library  We have a Python library, that optionally also simplifies handling of asynchronous requests by mimicking synchronous blocking behaviour.  To get started <a href=\"https://pypi.org/project/gs-api-client/\" target=\"_blank\">click here</a> .  <!-- #strip_python_end -->  # Authentication  In order to use the API, the User-UUID and an API_Token are required. Both are available via the web GUI which can be found here on <a href=\"https://my.gridscale.io/APIs/\" target=\"_blank\">Your Account</a>  <aside class=\"success\"> If you are logged in, your UUID and Token will be pulled dynamically from your account, so you can copy request examples straight into your code. </aside>  The User-UUID remains the same, even if the users email address is changed. The API_Token is a randomly generated hash that allows read/write access.  ## API_Token  <table class=\"security-details\"><tbody><tr><th> Security scheme type: </th><td> API Key </td></tr><tr><th> header parameter name:</th><td> X-Auth-Token </td></tr></tbody></table>  ## User_UUID  <table class=\"security-details\"><tbody><tr><th> Security scheme type: </th><td> API Key </td></tr><tr><th> header parameter name:</th><td> X-Auth-UserId </td></tr></tbody></table>  ## Examples  <!-- #strip_js --> > Node.js ``` // to get started // read the docs @ https://www.npmjs.com/package/@gs_js_auth/api var gs_js_auth = require('@gs_js_auth/api').gs_js_auth; var client = new gs_js_auth.Client(\"##API_TOKEN##\",\"##USER_UUID##\"); ``` <!-- #strip_js_end -->  <!-- #strip_go --> > Golang ``` // to get started // read the docs @ https://github.com/gridscale/gsclient-go config := gsclient.NewConfiguration(   \"https://api.gridscale.io\",   \"##USER_UUID##\",   \"##API_TOKEN##\",   false, //set debug mode ) client := gsclient.NewClient(config) ``` <!-- #strip_go_end -->  > Shell Authentication Headers ```   -H \"X-Auth-UserId: ##USER_UUID##\" \\   -H \"X-Auth-Token: ##API_TOKEN##\" \\ ```  > Setting Authentication in your Environment variables ``` export API_TOKEN=\"##API_TOKEN##\" USER_UUID=\"##USER_UUID##\" ```  <aside class=\"notice\"> You must replace <code>USER_UUID</code> and <code>API_Token</code> with your personal UUID and API key respectively. </aside>   # noqa: E501
7
8    OpenAPI spec version: 1.0.16
9
10    Generated by: https://github.com/swagger-api/swagger-codegen.git
11"""
12
13
14import pprint
15import re  # noqa: F401
16
17import six
18
19from gs_api_client.swagger.models.ip_relation import IpRelation  # noqa: F401,E501
20
21
22class IpBrief(object):
23    """NOTE: This class is auto generated by the swagger code generator program.
24
25    Do not edit the class manually.
26    """
27
28    """
29    Attributes:
30      swagger_types (dict): The key is attribute name
31                            and the value is attribute type.
32      attribute_map (dict): The key is attribute name
33                            and the value is json key in definition.
34    """
35    swagger_types = {
36        'create_time': 'datetime',
37        'status': 'str',
38        'relations': 'IpRelation',
39        'object_uuid': 'str',
40        'location_country': 'str',
41        'prefix': 'str',
42        'delete_block': 'bool',
43        'failover': 'bool',
44        'location_uuid': 'str',
45        'location_name': 'str',
46        'labels': 'list[str]',
47        'change_time': 'datetime',
48        'ip': 'str',
49        'family': 'str',
50        'location_iata': 'str',
51        'reverse_dns': 'str',
52        'current_price': 'float',
53        'usage_in_minutes': 'int',
54        'name': 'str',
55        'partner_uuid': 'str'
56    }
57
58    attribute_map = {
59        'create_time': 'create_time',
60        'status': 'status',
61        'relations': 'relations',
62        'object_uuid': 'object_uuid',
63        'location_country': 'location_country',
64        'prefix': 'prefix',
65        'delete_block': 'delete_block',
66        'failover': 'failover',
67        'location_uuid': 'location_uuid',
68        'location_name': 'location_name',
69        'labels': 'labels',
70        'change_time': 'change_time',
71        'ip': 'ip',
72        'family': 'family',
73        'location_iata': 'location_iata',
74        'reverse_dns': 'reverse_dns',
75        'current_price': 'current_price',
76        'usage_in_minutes': 'usage_in_minutes',
77        'name': 'name',
78        'partner_uuid': 'partner_uuid'
79    }
80
81    def __init__(self, create_time=None, status=None, relations=None, object_uuid=None, location_country=None, prefix=None, delete_block=None, failover=None, location_uuid=None, location_name=None, labels=None, change_time=None, ip=None, family=None, location_iata=None, reverse_dns=None, current_price=None, usage_in_minutes=None, name=None, partner_uuid=None):  # noqa: E501
82        """IpBrief - a model defined in Swagger"""  # noqa: E501
83
84        self._create_time = None
85        self._status = None
86        self._relations = None
87        self._object_uuid = None
88        self._location_country = None
89        self._prefix = None
90        self._delete_block = None
91        self._failover = None
92        self._location_uuid = None
93        self._location_name = None
94        self._labels = None
95        self._change_time = None
96        self._ip = None
97        self._family = None
98        self._location_iata = None
99        self._reverse_dns = None
100        self._current_price = None
101        self._usage_in_minutes = None
102        self._name = None
103        self._partner_uuid = None
104        self.discriminator = None
105
106        if create_time is not None:
107            self.create_time = create_time
108        if status is not None:
109            self.status = status
110        if relations is not None:
111            self.relations = relations
112        if object_uuid is not None:
113            self.object_uuid = object_uuid
114        if location_country is not None:
115            self.location_country = location_country
116        if prefix is not None:
117            self.prefix = prefix
118        if delete_block is not None:
119            self.delete_block = delete_block
120        if failover is not None:
121            self.failover = failover
122        if location_uuid is not None:
123            self.location_uuid = location_uuid
124        if location_name is not None:
125            self.location_name = location_name
126        if labels is not None:
127            self.labels = labels
128        if change_time is not None:
129            self.change_time = change_time
130        if ip is not None:
131            self.ip = ip
132        if family is not None:
133            self.family = family
134        if location_iata is not None:
135            self.location_iata = location_iata
136        if reverse_dns is not None:
137            self.reverse_dns = reverse_dns
138        if current_price is not None:
139            self.current_price = current_price
140        if usage_in_minutes is not None:
141            self.usage_in_minutes = usage_in_minutes
142        if name is not None:
143            self.name = name
144        if partner_uuid is not None:
145            self.partner_uuid = partner_uuid
146
147    @property
148    def create_time(self):
149        """Gets the create_time of this IpBrief.  # noqa: E501
150
151        Defines the date and time the object was initially created.  # noqa: E501
152
153        :return: The create_time of this IpBrief.  # noqa: E501
154        :rtype: datetime
155        """
156        return self._create_time
157
158    @create_time.setter
159    def create_time(self, create_time):
160        """Sets the create_time of this IpBrief.
161
162        Defines the date and time the object was initially created.  # noqa: E501
163
164        :param create_time: The create_time of this IpBrief.  # noqa: E501
165        :type: datetime
166        """
167
168        self._create_time = create_time
169
170    @property
171    def status(self):
172        """Gets the status of this IpBrief.  # noqa: E501
173
174        Status indicates the status of the object.  # noqa: E501
175
176        :return: The status of this IpBrief.  # noqa: E501
177        :rtype: str
178        """
179        return self._status
180
181    @status.setter
182    def status(self, status):
183        """Sets the status of this IpBrief.
184
185        Status indicates the status of the object.  # noqa: E501
186
187        :param status: The status of this IpBrief.  # noqa: E501
188        :type: str
189        """
190
191        self._status = status
192
193    @property
194    def relations(self):
195        """Gets the relations of this IpBrief.  # noqa: E501
196
197
198        :return: The relations of this IpBrief.  # noqa: E501
199        :rtype: IpRelation
200        """
201        return self._relations
202
203    @relations.setter
204    def relations(self, relations):
205        """Sets the relations of this IpBrief.
206
207
208        :param relations: The relations of this IpBrief.  # noqa: E501
209        :type: IpRelation
210        """
211
212        self._relations = relations
213
214    @property
215    def object_uuid(self):
216        """Gets the object_uuid of this IpBrief.  # noqa: E501
217
218        The UUID of an object is always unique, and refers to a specific object.  # noqa: E501
219
220        :return: The object_uuid of this IpBrief.  # noqa: E501
221        :rtype: str
222        """
223        return self._object_uuid
224
225    @object_uuid.setter
226    def object_uuid(self, object_uuid):
227        """Sets the object_uuid of this IpBrief.
228
229        The UUID of an object is always unique, and refers to a specific object.  # noqa: E501
230
231        :param object_uuid: The object_uuid of this IpBrief.  # noqa: E501
232        :type: str
233        """
234
235        self._object_uuid = object_uuid
236
237    @property
238    def location_country(self):
239        """Gets the location_country of this IpBrief.  # noqa: E501
240
241        The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters.  # noqa: E501
242
243        :return: The location_country of this IpBrief.  # noqa: E501
244        :rtype: str
245        """
246        return self._location_country
247
248    @location_country.setter
249    def location_country(self, location_country):
250        """Sets the location_country of this IpBrief.
251
252        The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters.  # noqa: E501
253
254        :param location_country: The location_country of this IpBrief.  # noqa: E501
255        :type: str
256        """
257
258        self._location_country = location_country
259
260    @property
261    def prefix(self):
262        """Gets the prefix of this IpBrief.  # noqa: E501
263
264        The IP prefix.  # noqa: E501
265
266        :return: The prefix of this IpBrief.  # noqa: E501
267        :rtype: str
268        """
269        return self._prefix
270
271    @prefix.setter
272    def prefix(self, prefix):
273        """Sets the prefix of this IpBrief.
274
275        The IP prefix.  # noqa: E501
276
277        :param prefix: The prefix of this IpBrief.  # noqa: E501
278        :type: str
279        """
280
281        self._prefix = prefix
282
283    @property
284    def delete_block(self):
285        """Gets the delete_block of this IpBrief.  # noqa: E501
286
287        Defines if the object is administratively blocked. If true, it can not be deleted by the user.  # noqa: E501
288
289        :return: The delete_block of this IpBrief.  # noqa: E501
290        :rtype: bool
291        """
292        return self._delete_block
293
294    @delete_block.setter
295    def delete_block(self, delete_block):
296        """Sets the delete_block of this IpBrief.
297
298        Defines if the object is administratively blocked. If true, it can not be deleted by the user.  # noqa: E501
299
300        :param delete_block: The delete_block of this IpBrief.  # noqa: E501
301        :type: bool
302        """
303
304        self._delete_block = delete_block
305
306    @property
307    def failover(self):
308        """Gets the failover of this IpBrief.  # noqa: E501
309
310        Sets failover mode for this IP. If true, then this IP is no longer available for DHCP and can no longer be related to any server.  # noqa: E501
311
312        :return: The failover of this IpBrief.  # noqa: E501
313        :rtype: bool
314        """
315        return self._failover
316
317    @failover.setter
318    def failover(self, failover):
319        """Sets the failover of this IpBrief.
320
321        Sets failover mode for this IP. If true, then this IP is no longer available for DHCP and can no longer be related to any server.  # noqa: E501
322
323        :param failover: The failover of this IpBrief.  # noqa: E501
324        :type: bool
325        """
326
327        self._failover = failover
328
329    @property
330    def location_uuid(self):
331        """Gets the location_uuid of this IpBrief.  # noqa: E501
332
333        Helps to identify which data-center an object belongs to.  # noqa: E501
334
335        :return: The location_uuid of this IpBrief.  # noqa: E501
336        :rtype: str
337        """
338        return self._location_uuid
339
340    @location_uuid.setter
341    def location_uuid(self, location_uuid):
342        """Sets the location_uuid of this IpBrief.
343
344        Helps to identify which data-center an object belongs to.  # noqa: E501
345
346        :param location_uuid: The location_uuid of this IpBrief.  # noqa: E501
347        :type: str
348        """
349
350        self._location_uuid = location_uuid
351
352    @property
353    def location_name(self):
354        """Gets the location_name of this IpBrief.  # noqa: E501
355
356        The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters.  # noqa: E501
357
358        :return: The location_name of this IpBrief.  # noqa: E501
359        :rtype: str
360        """
361        return self._location_name
362
363    @location_name.setter
364    def location_name(self, location_name):
365        """Sets the location_name of this IpBrief.
366
367        The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters.  # noqa: E501
368
369        :param location_name: The location_name of this IpBrief.  # noqa: E501
370        :type: str
371        """
372
373        self._location_name = location_name
374
375    @property
376    def labels(self):
377        """Gets the labels of this IpBrief.  # noqa: E501
378
379        List of labels.  # noqa: E501
380
381        :return: The labels of this IpBrief.  # noqa: E501
382        :rtype: list[str]
383        """
384        return self._labels
385
386    @labels.setter
387    def labels(self, labels):
388        """Sets the labels of this IpBrief.
389
390        List of labels.  # noqa: E501
391
392        :param labels: The labels of this IpBrief.  # noqa: E501
393        :type: list[str]
394        """
395
396        self._labels = labels
397
398    @property
399    def change_time(self):
400        """Gets the change_time of this IpBrief.  # noqa: E501
401
402        Defines the date and time of the last object change.  # noqa: E501
403
404        :return: The change_time of this IpBrief.  # noqa: E501
405        :rtype: datetime
406        """
407        return self._change_time
408
409    @change_time.setter
410    def change_time(self, change_time):
411        """Sets the change_time of this IpBrief.
412
413        Defines the date and time of the last object change.  # noqa: E501
414
415        :param change_time: The change_time of this IpBrief.  # noqa: E501
416        :type: datetime
417        """
418
419        self._change_time = change_time
420
421    @property
422    def ip(self):
423        """Gets the ip of this IpBrief.  # noqa: E501
424
425        Defines the IP Address (v4 or v6).  # noqa: E501
426
427        :return: The ip of this IpBrief.  # noqa: E501
428        :rtype: str
429        """
430        return self._ip
431
432    @ip.setter
433    def ip(self, ip):
434        """Sets the ip of this IpBrief.
435
436        Defines the IP Address (v4 or v6).  # noqa: E501
437
438        :param ip: The ip of this IpBrief.  # noqa: E501
439        :type: str
440        """
441
442        self._ip = ip
443
444    @property
445    def family(self):
446        """Gets the family of this IpBrief.  # noqa: E501
447
448        The IP Address family (v4 or v6).  # noqa: E501
449
450        :return: The family of this IpBrief.  # noqa: E501
451        :rtype: str
452        """
453        return self._family
454
455    @family.setter
456    def family(self, family):
457        """Sets the family of this IpBrief.
458
459        The IP Address family (v4 or v6).  # noqa: E501
460
461        :param family: The family of this IpBrief.  # noqa: E501
462        :type: str
463        """
464        allowed_values = ["4", "6"]  # noqa: E501
465        if family not in allowed_values:
466            raise ValueError(
467                "Invalid value for `family` ({0}), must be one of {1}"  # noqa: E501
468                .format(family, allowed_values)
469            )
470
471        self._family = family
472
473    @property
474    def location_iata(self):
475        """Gets the location_iata of this IpBrief.  # noqa: E501
476
477        Uses IATA airport code, which works as a location identifier.  # noqa: E501
478
479        :return: The location_iata of this IpBrief.  # noqa: E501
480        :rtype: str
481        """
482        return self._location_iata
483
484    @location_iata.setter
485    def location_iata(self, location_iata):
486        """Sets the location_iata of this IpBrief.
487
488        Uses IATA airport code, which works as a location identifier.  # noqa: E501
489
490        :param location_iata: The location_iata of this IpBrief.  # noqa: E501
491        :type: str
492        """
493
494        self._location_iata = location_iata
495
496    @property
497    def reverse_dns(self):
498        """Gets the reverse_dns of this IpBrief.  # noqa: E501
499
500        Defines the reverse DNS entry for the IP Address (PTR Resource Record).  # noqa: E501
501
502        :return: The reverse_dns of this IpBrief.  # noqa: E501
503        :rtype: str
504        """
505        return self._reverse_dns
506
507    @reverse_dns.setter
508    def reverse_dns(self, reverse_dns):
509        """Sets the reverse_dns of this IpBrief.
510
511        Defines the reverse DNS entry for the IP Address (PTR Resource Record).  # noqa: E501
512
513        :param reverse_dns: The reverse_dns of this IpBrief.  # noqa: E501
514        :type: str
515        """
516
517        self._reverse_dns = reverse_dns
518
519    @property
520    def current_price(self):
521        """Gets the current_price of this IpBrief.  # noqa: E501
522
523        The price for the current period since the last bill.  # noqa: E501
524
525        :return: The current_price of this IpBrief.  # noqa: E501
526        :rtype: float
527        """
528        return self._current_price
529
530    @current_price.setter
531    def current_price(self, current_price):
532        """Sets the current_price of this IpBrief.
533
534        The price for the current period since the last bill.  # noqa: E501
535
536        :param current_price: The current_price of this IpBrief.  # noqa: E501
537        :type: float
538        """
539
540        self._current_price = current_price
541
542    @property
543    def usage_in_minutes(self):
544        """Gets the usage_in_minutes of this IpBrief.  # noqa: E501
545
546        Total minutes the object has been running.  # noqa: E501
547
548        :return: The usage_in_minutes of this IpBrief.  # noqa: E501
549        :rtype: int
550        """
551        return self._usage_in_minutes
552
553    @usage_in_minutes.setter
554    def usage_in_minutes(self, usage_in_minutes):
555        """Sets the usage_in_minutes of this IpBrief.
556
557        Total minutes the object has been running.  # noqa: E501
558
559        :param usage_in_minutes: The usage_in_minutes of this IpBrief.  # noqa: E501
560        :type: int
561        """
562
563        self._usage_in_minutes = usage_in_minutes
564
565    @property
566    def name(self):
567        """Gets the name of this IpBrief.  # noqa: E501
568
569        The human-readable name of the object. It supports the full UTF-8 charset, with a maximum of 64 characters.  # noqa: E501
570
571        :return: The name of this IpBrief.  # noqa: E501
572        :rtype: str
573        """
574        return self._name
575
576    @name.setter
577    def name(self, name):
578        """Sets the name of this IpBrief.
579
580        The human-readable name of the object. It supports the full UTF-8 charset, with a maximum of 64 characters.  # noqa: E501
581
582        :param name: The name of this IpBrief.  # noqa: E501
583        :type: str
584        """
585
586        self._name = name
587
588    @property
589    def partner_uuid(self):
590        """Gets the partner_uuid of this IpBrief.  # noqa: E501
591
592        The UUID of the Storage used to create this Snapshot.  # noqa: E501
593
594        :return: The partner_uuid of this IpBrief.  # noqa: E501
595        :rtype: str
596        """
597        return self._partner_uuid
598
599    @partner_uuid.setter
600    def partner_uuid(self, partner_uuid):
601        """Sets the partner_uuid of this IpBrief.
602
603        The UUID of the Storage used to create this Snapshot.  # noqa: E501
604
605        :param partner_uuid: The partner_uuid of this IpBrief.  # noqa: E501
606        :type: str
607        """
608
609        self._partner_uuid = partner_uuid
610
611    def to_dict(self):
612        """Returns the model properties as a dict"""
613        result = {}
614
615        for attr, _ in six.iteritems(self.swagger_types):
616            value = getattr(self, attr)
617            if isinstance(value, list):
618                result[attr] = list(map(
619                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
620                    value
621                ))
622            elif hasattr(value, "to_dict"):
623                result[attr] = value.to_dict()
624            elif isinstance(value, dict):
625                result[attr] = dict(map(
626                    lambda item: (item[0], item[1].to_dict())
627                    if hasattr(item[1], "to_dict") else item,
628                    value.items()
629                ))
630            else:
631                result[attr] = value
632        if issubclass(IpBrief, dict):
633            for key, value in self.items():
634                result[key] = value
635
636        return result
637
638    def to_str(self):
639        """Returns the string representation of the model"""
640        return pprint.pformat(self.to_dict())
641
642    def __repr__(self):
643        """For `print` and `pprint`"""
644        return self.to_str()
645
646    def __eq__(self, other):
647        """Returns true if both objects are equal"""
648        if not isinstance(other, IpBrief):
649            return False
650
651        return self.__dict__ == other.__dict__
652
653    def __ne__(self, other):
654        """Returns true if both objects are not equal"""
655        return not self == other
656