masstack-python-client 0.0.4__py3-none-any.whl → 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- __version__ = "0.0.4"
1
+ __version__ = "0.1.0"
2
2
  __homepage__ = "https://somconnexio.coop/"
3
3
  __author__ = "Borja Gimeno <borja.gimeno@somconnexio.coop>"
4
4
  __license__ = "GPL-3.0-only"
@@ -0,0 +1,59 @@
1
+ from typing import Optional, Union
2
+ from masstack_python_client.client import MasstackClient
3
+
4
+
5
+ class BaseResource:
6
+ __abstract__ = True
7
+
8
+ required_class_attributes = (
9
+ "_api_path",
10
+ "_api_domain",
11
+ "_version",
12
+ )
13
+
14
+ def __init_subclass__(cls, **kwargs):
15
+ super().__init_subclass__(**kwargs)
16
+
17
+ if cls.__dict__.get("__abstract__", False):
18
+ return
19
+
20
+ missing = [
21
+ attr for attr in cls.required_class_attributes if not hasattr(cls, attr)
22
+ ]
23
+
24
+ if missing:
25
+ raise TypeError(
26
+ f"{cls.__name__} missing required class attributes: "
27
+ f"{', '.join(missing)}"
28
+ )
29
+
30
+ @classmethod
31
+ def _get_endpoint(cls, suffix: str = "") -> str:
32
+ parts = [
33
+ cls._api_path,
34
+ getattr(cls, "_api_subpath", ""),
35
+ suffix,
36
+ ]
37
+ return "/".join(part.strip("/") for part in parts if part)
38
+
39
+ @classmethod
40
+ def _request(
41
+ cls,
42
+ *,
43
+ method: str,
44
+ suffix: Optional[str] = "",
45
+ header: Optional[dict] = None,
46
+ data: Optional[dict] = None,
47
+ params: Optional[dict] = None,
48
+ ) -> Union[dict, list]:
49
+ client = MasstackClient()
50
+ func = getattr(client, method)
51
+
52
+ return func(
53
+ api=cls._api_domain,
54
+ version=cls._version,
55
+ endpoint=cls._get_endpoint(suffix),
56
+ params=params,
57
+ data=data,
58
+ header=header,
59
+ )
@@ -1,5 +1,9 @@
1
1
  from typing import Optional, List
2
- from masstack_python_client.client import MasstackClient
2
+ from masstack_python_client.resources.base import BaseResource
3
+ from masstack_python_client.resources.enums.customer_type_name import CustomerTypeName
4
+ from masstack_python_client.resources.enums.sale_type_name import SaleTypeName
5
+ from masstack_python_client.resources.enums.technology_name import TechnologyName
6
+ from masstack_python_client.resources.models.bundled import BundledProduct
3
7
  from masstack_python_client.resources.enums.bundled_product_category import (
4
8
  BundleCategory,
5
9
  )
@@ -9,50 +13,25 @@ from masstack_python_client.resources.enums.commercial_segment_name import (
9
13
  from masstack_python_client.resources.enums.customer_segment_name import (
10
14
  CustomerSegmentName,
11
15
  )
12
- from masstack_python_client.resources.enums.customer_type_name import CustomerTypeName
13
- from masstack_python_client.resources.enums.sale_type_name import SaleTypeName
14
- from masstack_python_client.resources.enums.technology_name import TechnologyName
15
- from masstack_python_client.resources.models.bundled import BundledProduct
16
+ from masstack_python_client.resources.utils.serialize import remove_none
16
17
 
17
18
 
18
- class CatalogueResource:
19
+ class CatalogueResource(BaseResource):
19
20
  """Support sales and post-sales operations from catalogue perspective
20
21
  https://developers.masstack.com/en/docs/apis_catalogue_doc_swagger/2/apioverview/
21
22
  """
22
23
 
24
+ __abstract__ = True
23
25
  _api_domain = "catalogue"
24
26
 
25
27
 
26
28
  class BundledProducts(CatalogueResource):
29
+ __abstract__ = True
27
30
  _api_path = "bundled_products"
28
31
  _version = "v2"
29
32
 
30
- @classmethod
31
- def _get_endpoint(cls, subpath: str) -> str:
32
- return f"{cls._api_path}/{subpath}"
33
-
34
- @classmethod
35
- def _request(
36
- cls,
37
- method: str,
38
- subpath: str,
39
- params: Optional[dict] = None,
40
- data: Optional[dict] = None,
41
- ) -> dict:
42
- client = MasstackClient()
43
- func = getattr(client, method)
44
-
45
- return func(
46
- api=cls._api_domain,
47
- version=cls._version,
48
- endpoint=cls._get_endpoint(subpath),
49
- params=params,
50
- data=data,
51
- )
52
-
53
33
 
54
34
  class Sellable(BundledProducts):
55
-
56
35
  _api_subpath = "sellable"
57
36
 
58
37
  @classmethod
@@ -87,22 +66,22 @@ class Sellable(BundledProducts):
87
66
  """
88
67
  params = {
89
68
  "commercial_profile_name": commercial_profile_name,
90
- "technology_name": technology_name,
69
+ "technology_name": technology_name.value if technology_name else None,
91
70
  "territory_owner_id": territory_owner_id,
92
- "category": category,
93
- "customer_segment_name": customer_segment_name,
94
- "commercial_segment_name": commercial_segment_name,
95
- "customer_type_name": customer_type_name,
96
- "sale_type_name": sale_type_name,
71
+ "category": category.value if category else None,
72
+ "customer_segment_name": (
73
+ customer_segment_name.value if customer_segment_name else None
74
+ ),
75
+ "commercial_segment_name": (
76
+ commercial_segment_name.value if commercial_segment_name else None
77
+ ),
78
+ "customer_type_name": (
79
+ customer_type_name.value if customer_type_name else None
80
+ ),
81
+ "sale_type_name": sale_type_name.value if sale_type_name else None,
97
82
  }
98
83
  sellable_bundled_products = cls._request(
99
- "get",
100
- cls._api_subpath,
101
- {
102
- k: (v.value if hasattr(v, "value") else v)
103
- for k, v in params.items()
104
- if v is not None
105
- },
84
+ method="get", params=remove_none(params)
106
85
  )
107
86
  return [
108
87
  BundledProduct.from_dict(**sellable_bundled_product)
@@ -1,7 +1,7 @@
1
- from typing import Optional
2
1
  from dataclasses import asdict
3
-
4
- from masstack_python_client.client import MasstackClient
2
+ from masstack_python_client.resources.base import BaseResource
3
+ from masstack_python_client.resources.models.user import UserData
4
+ from masstack_python_client.resources.utils.serialize import remove_none
5
5
  from masstack_python_client.resources.enums.document_type_search import (
6
6
  DocumentTypeSearch,
7
7
  )
@@ -9,37 +9,17 @@ from masstack_python_client.resources.models.signup import (
9
9
  SignupRequestData,
10
10
  SignupsResponseData,
11
11
  )
12
- from masstack_python_client.resources.models.user import UserData
13
- from masstack_python_client.resources.utils.serialize import remove_none
14
12
 
15
13
 
16
- class CustomersResource:
14
+ class CustomersResource(BaseResource):
17
15
  """Provide the necessary functionality to be able to give
18
16
  E2E coverage to the entire life-cycle of a client
19
17
  https://developers.masstack.com/en/docs/apis_customers_doc_swagger/2/apioverview
20
18
  """
21
19
 
20
+ __abstract__ = True
22
21
  _api_domain = "customers"
23
22
 
24
- @classmethod
25
- def _request(
26
- cls,
27
- method: str,
28
- endpoint: str,
29
- params: Optional[dict] = None,
30
- data: Optional[dict] = None,
31
- ) -> dict:
32
- client = MasstackClient()
33
- func = getattr(client, method)
34
-
35
- return func(
36
- api=cls._api_domain,
37
- version=cls._version,
38
- endpoint=endpoint,
39
- params=params,
40
- data=data,
41
- )
42
-
43
23
 
44
24
  class SignupsResource(CustomersResource):
45
25
  _api_path = "signups"
@@ -58,7 +38,6 @@ class SignupsResource(CustomersResource):
58
38
  payload = remove_none(asdict(customer_data))
59
39
  result = cls._request(
60
40
  method="post",
61
- endpoint=cls._api_path,
62
41
  data=payload,
63
42
  )
64
43
 
@@ -86,10 +65,7 @@ class Users(CustomersResource):
86
65
  user id.
87
66
  """
88
67
  data = {"document_type": doc_type.value, "document": doc}
89
-
90
- return cls._request(method="post", endpoint=f"{cls._api_path}/tree", data=data)[
91
- "id"
92
- ]
68
+ return cls._request(method="post", suffix="tree", data=data)["id"]
93
69
 
94
70
  @classmethod
95
71
  def get_user_by_id(cls, user_id: str) -> dict:
@@ -102,5 +78,5 @@ class Users(CustomersResource):
102
78
  Returns:
103
79
  UserData
104
80
  """
105
- user = cls._request(method="get", endpoint=f"{cls._api_path}/{user_id}")
81
+ user = cls._request(method="get", suffix=user_id)
106
82
  return UserData.from_dict(**user)
@@ -0,0 +1,7 @@
1
+ from enum import Enum
2
+
3
+
4
+ class Technology(Enum):
5
+ ADSL = "ADSL"
6
+ FTTH = "FTTH"
7
+ MIFIJO = "MIFIJO"
@@ -1,6 +1,8 @@
1
1
  import os
2
- from typing import Optional, List
3
- from masstack_python_client.client import MasstackClient
2
+ from typing import Optional, List, Union
3
+ from masstack_python_client.resources.base import BaseResource
4
+ from masstack_python_client.resources.enums.technology import Technology
5
+ from masstack_python_client.resources.models.portability import PortabilityData
4
6
  from masstack_python_client.resources.models.address import (
5
7
  BuildingData,
6
8
  ClarifierData,
@@ -9,17 +11,75 @@ from masstack_python_client.resources.models.address import (
9
11
  UnitData,
10
12
  )
11
13
 
14
+ """
15
+ BaseResource
16
+ └──FeasibilityResource
17
+ ├── Coverage
18
+ │ ├── Streets
19
+ │ ├── Buildings
20
+ │ └── Units
21
+ └── Portability
22
+ └── PortabilityCheck
23
+ """
12
24
 
13
- class FeasibilityResource:
25
+
26
+ class FeasibilityResource(BaseResource):
14
27
  """Resource for feasibility operations
15
28
  https://developers.masstack.com/en/docs/apis_feasibility_doc_swagger/1/apioverview
16
29
  """
17
30
 
31
+ __abstract__ = True
18
32
  _api_domain = "feasibility"
19
33
 
20
34
 
21
- class Coverage(FeasibilityResource):
35
+ class Portability(FeasibilityResource):
36
+ __abstract__ = True
37
+ _api_path = "portability"
38
+ _version = "v2"
39
+
40
+
41
+ class PortabilityCheck(Portability):
42
+ _api_subpath = "portabilityCheck"
43
+
44
+ @classmethod
45
+ def check(
46
+ cls,
47
+ number: str,
48
+ address_id: str,
49
+ territory_owner: Optional[str] = None,
50
+ technical_id: Optional[str] = None,
51
+ technology: Technology = Technology.FTTH,
52
+ ) -> PortabilityData:
53
+ """Returns whether the portability process can be carried out
54
+ and whether it requires a new installation
55
+
56
+ Args:
57
+ number (str): Fixed number to be ported
58
+ address_id (str): Unique address ID
59
+ territory_owner (str): Territory owner. Not mandatory if technology is MIFIJO
60
+ technical_id (str): Technical id. Not mandatory if technology is MIFIJO. g17 or g37
61
+ technology (Technology): Technology to be provided
62
+
63
+ Returns:
64
+ PortabilityData
65
+
66
+ """
22
67
 
68
+ portability = cls._request(
69
+ method="post",
70
+ data={
71
+ "number": number,
72
+ "territoryOwner": territory_owner,
73
+ "technicalId": technical_id,
74
+ "addressId": address_id,
75
+ "technology": technology.value,
76
+ },
77
+ )
78
+ return PortabilityData.from_dict(**portability)
79
+
80
+
81
+ class Coverage(FeasibilityResource):
82
+ __abstract__ = True
23
83
  _api_path = "coverage"
24
84
  _version = "v1"
25
85
 
@@ -31,10 +91,6 @@ class Coverage(FeasibilityResource):
31
91
  def _sf_channel() -> str:
32
92
  return os.environ.get("MASSTACK_COVERAGE_CHANNEL", "")
33
93
 
34
- @classmethod
35
- def _get_endpoint(cls, subpath: str) -> str:
36
- return f"{cls._api_path}/{subpath}"
37
-
38
94
  @classmethod
39
95
  def _get_header(cls, uuid: str) -> dict:
40
96
  return {
@@ -44,29 +100,11 @@ class Coverage(FeasibilityResource):
44
100
  }
45
101
 
46
102
  @classmethod
47
- def _request(
48
- cls,
49
- method: str,
50
- subpath: str,
51
- uuid: str,
52
- data: Optional[dict] = None,
53
- params: Optional[dict] = None,
54
- ) -> dict:
55
- client = MasstackClient()
56
- func = getattr(client, method)
57
-
58
- return func(
59
- api=cls._api_domain,
60
- version=cls._version,
61
- endpoint=cls._get_endpoint(subpath),
62
- params=params,
63
- data=data,
64
- header=cls._get_header(uuid),
65
- )
103
+ def _request(cls, *, uuid: str, **kwargs) -> Union[dict, list]:
104
+ return super()._request(header=cls._get_header(uuid), **kwargs)
66
105
 
67
106
 
68
107
  class Streets(Coverage):
69
-
70
108
  _api_subpath = "streets"
71
109
 
72
110
  @classmethod
@@ -83,9 +121,8 @@ class Streets(Coverage):
83
121
 
84
122
  """
85
123
  streets = cls._request(
86
- "get",
87
- cls._api_subpath,
88
- uuid,
124
+ method="get",
125
+ uuid=uuid,
89
126
  params={"search": text},
90
127
  )
91
128
  return [StreetData.from_dict(uuid, lang, **street) for street in streets]
@@ -104,16 +141,15 @@ class Streets(Coverage):
104
141
  ClarifierData
105
142
  """
106
143
  clarifiers = cls._request(
107
- "get",
108
- f"{cls._api_subpath}/clarifiers/{street_id}",
109
- uuid,
144
+ method="get",
145
+ suffix=f"clarifiers/{street_id}",
146
+ uuid=uuid,
110
147
  )
111
148
 
112
149
  return [ClarifierData(uuid, **clarifier) for clarifier in clarifiers]
113
150
 
114
151
 
115
152
  class Buildings(Coverage):
116
-
117
153
  _api_subpath = "buildings"
118
154
 
119
155
  @classmethod
@@ -129,9 +165,8 @@ class Buildings(Coverage):
129
165
  BuildingData
130
166
  """
131
167
  buildings = cls._request(
132
- "get",
133
- cls._api_subpath,
134
- uuid,
168
+ method="get",
169
+ uuid=uuid,
135
170
  params={"search": text},
136
171
  )
137
172
  return [
@@ -154,9 +189,9 @@ class Buildings(Coverage):
154
189
  BuildingData
155
190
  """
156
191
  building = cls._request(
157
- "get",
158
- f"{cls._api_subpath}/{id}",
159
- uuid,
192
+ method="get",
193
+ suffix=id,
194
+ uuid=uuid,
160
195
  params={"unit_to_data": unit_to_data},
161
196
  )
162
197
  return BuildingData.from_dict(
@@ -193,9 +228,9 @@ class Buildings(Coverage):
193
228
  """
194
229
 
195
230
  buildings = cls._request(
196
- "post",
197
- f"{cls._api_subpath}/search",
198
- uuid,
231
+ method="post",
232
+ suffix="search",
233
+ uuid=uuid,
199
234
  data={
200
235
  "way_name": way_name,
201
236
  "number": number,
@@ -210,7 +245,6 @@ class Buildings(Coverage):
210
245
 
211
246
 
212
247
  class Units(Coverage):
213
-
214
248
  _api_subpath = "units"
215
249
 
216
250
  @classmethod
@@ -229,9 +263,9 @@ class Units(Coverage):
229
263
  UnitData
230
264
  """
231
265
  unit = cls._request(
232
- "get",
233
- f"{cls._api_subpath}/{unit_id}",
234
- uuid,
266
+ method="get",
267
+ suffix=unit_id,
268
+ uuid=uuid,
235
269
  params={"parent_coverage": parent_coverage},
236
270
  )
237
271
  return UnitData.from_dict(
@@ -257,9 +291,9 @@ class Units(Coverage):
257
291
  CoverageData
258
292
  """
259
293
  unit = cls._request(
260
- "get",
261
- f"{cls._api_subpath}/extra",
262
- uuid,
294
+ method="get",
295
+ suffix="extra",
296
+ uuid=uuid,
263
297
  params={"id": unit_id, "territory_owner": territory_owner},
264
298
  )
265
299
  return CoverageData.from_dict(
@@ -0,0 +1,6 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass(frozen=True)
5
+ class FixedPhoneData:
6
+ number: str
@@ -0,0 +1,44 @@
1
+ from dataclasses import dataclass
2
+ from typing import Optional
3
+
4
+
5
+ @dataclass(frozen=True)
6
+ class InstallationInfoData:
7
+ internalAccess: bool
8
+ iua: str
9
+ brand: str
10
+ number: str
11
+ documentNumber: str
12
+ gescal: str
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class OperatorData:
17
+ code: str
18
+ name: str
19
+
20
+
21
+ @dataclass(frozen=True)
22
+ class PortabilityData:
23
+ internalPortability: bool
24
+ isPortable: bool
25
+ installationRequired: bool
26
+ operator: OperatorData
27
+ installationInfo: Optional[InstallationInfoData] = None
28
+
29
+ @classmethod
30
+ def from_dict(
31
+ cls,
32
+ operator,
33
+ installationInformation=None,
34
+ **kwargs,
35
+ ):
36
+ return cls(
37
+ operator=OperatorData(**operator),
38
+ installationInfo=(
39
+ InstallationInfoData(**installationInformation)
40
+ if installationInformation
41
+ else None
42
+ ),
43
+ **kwargs,
44
+ )
@@ -0,0 +1,38 @@
1
+ from masstack_python_client.resources.base import BaseResource
2
+ from masstack_python_client.resources.models.fixed_phone import FixedPhoneData
3
+
4
+
5
+ "https://provision-inventory-network.sta.masstack.com/v1/orgs/marblanca/fixed/number"
6
+
7
+
8
+ class ProvisionNetworkResource(BaseResource):
9
+ """not documented"""
10
+
11
+ __abstract__ = True
12
+ _api_domain = "provision-inventory-network"
13
+
14
+
15
+ class FixedPhone(ProvisionNetworkResource):
16
+ _api_path = "fixed"
17
+ _version = "v1"
18
+
19
+ @classmethod
20
+ def get_number(cls, postal_code: str, state: str = "new"):
21
+ """Obtain fixed numbering for sale.
22
+
23
+ Args:
24
+ postal_code (str): postal code
25
+ state (str): state
26
+ Returns:
27
+ FixedPhoneData
28
+
29
+ """
30
+ response = cls._request(
31
+ method="get",
32
+ suffix="number",
33
+ params={
34
+ "postal_code": postal_code,
35
+ "state": state,
36
+ },
37
+ )
38
+ return FixedPhoneData(response["number"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masstack-python-client
3
- Version: 0.0.4
3
+ Version: 0.1.0
4
4
  Summary: This Python API client provides access to masmovil core API domains
5
5
  Author-email: Borja Gimeno <borja.gimeno@somconnexio.coop>
6
6
  License: GPL-3.0-only
@@ -25,29 +25,38 @@ This Python API client provides access to masmovil core API domains.
25
25
 
26
26
  ## Resources
27
27
 
28
- * Feasibility
29
- - Coverage - find an address
30
- - Streets:
31
- - search: returns a list of street by text
32
- - get_building_info_by_street: returns a list of building info by street id
33
- - Buildings:
34
- - search: returns a list of buildings by text
35
- - multi_search: returns a list of buildings by request body
36
- - get: returns a building by id with a list of units
37
- - Units:
38
- - get: returns a unit by id with a list of coverages
39
- - get_coverage: returns coverage info for a unit id and territory_owner
40
-
41
- * Customers
42
- - Signups - access to signups new clients
43
- - post new client
44
- - Users
45
- - returns customer tree data associated to a given document identification, email or number of the client.
46
- - returns user data by userId
47
-
48
- * Catalogue
49
- - bundled_products - access to bundled products
50
- - get sellable bundled products
28
+ - **Feasibility**
29
+ - Coverage - find an address
30
+ - Streets:
31
+ - *search: returns a list of street by text*
32
+ - *get_building_info_by_street: returns a list of building info by street id*
33
+ - Buildings:
34
+ - *search: returns a list of buildings by text*
35
+ - *multi_search: returns a list of buildings by request body*
36
+ - *get: returns a building by id with a list of units*
37
+ - Units:
38
+ - *get: returns a unit by id with a list of coverages*
39
+ - *get_coverage: returns coverage info for a unit id and territory_owner*
40
+ - Portability - Checks if a landline portability or an access transfer is allowed
41
+ - PortabilityCheck:
42
+ - *check: Returns whether the portability process can be carried out and whether it requires a new* installation
43
+
44
+ - **Customers**
45
+ - Signups - access to signups new clients
46
+ - *post new client*
47
+ - Users
48
+ - *returns customer tree data associated to a given document identification, email or number of the client.*
49
+ - *returns user data by userId*
50
+
51
+ - **Catalogue**
52
+ - bundled_products - access to bundled products
53
+ - Sellable:
54
+ - *get: Returns sellable bundled products*
55
+
56
+ - **Provision inventory network**
57
+ - fixed - Obtain fixed numbering for sale
58
+ - *get number*
59
+
51
60
 
52
61
  ## Installation
53
62
 
@@ -1,4 +1,4 @@
1
- masstack_python_client/__init__.py,sha256=6TDc7ulFeITzFwqtn2Uqj3pBTqGRHYGHN43zbbpu5aY,154
1
+ masstack_python_client/__init__.py,sha256=7LRyRZxlhx4tNNUqgKyx1-kZVfZFo92ukT_0pRZ-gV8,154
2
2
  masstack_python_client/client.py,sha256=5b52Q2ekABi7DlZPsNobcmaJXOKzZfhKE_kHvNEqE9Q,2496
3
3
  masstack_python_client/exceptions.py,sha256=HkX1cP4Ryeas59CzIVW8N5gmnRE1x0yQUQwS3tm9QZQ,2115
4
4
  masstack_python_client/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -10,9 +10,11 @@ masstack_python_client/data/province_translation.csv,sha256=Jpd6jbjYaqeNOk9lUA3W
10
10
  masstack_python_client/data/street_type_translation.csv,sha256=2MGeTs0v6wVz2yRMyZUuoNOYA4NSqKGJCGYIRi9X8Ic,1791
11
11
  masstack_python_client/data/unit_translation.csv,sha256=34FPfaCC1eSmBfV0BbHSHJ-tktQk7YLlfT8tMxnfnys,194
12
12
  masstack_python_client/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- masstack_python_client/resources/catalogue.py,sha256=6evwB75NC2jRsTQ6Zz3-qmzNo9dFsQhdtAtYhwW9Zu0,4002
14
- masstack_python_client/resources/customers.py,sha256=9GTXQ5fiVosbAzK__uydZOBu9wXC9yO4pHufseHqD38,2924
15
- masstack_python_client/resources/feasibility.py,sha256=DbiPwWa9orSmITgcID7RVPKf7b50Pk8h1XQh0xxGYhw,7119
13
+ masstack_python_client/resources/base.py,sha256=yCzYXBjjyelWOF7lQsabtib662Goebx0h1OHJVv4OMs,1508
14
+ masstack_python_client/resources/catalogue.py,sha256=a-lIaI_XfwVMgCsNqeqnC7iPYuoiUa2co2LtfRuLgWk,3732
15
+ masstack_python_client/resources/customers.py,sha256=cCYAiYZuVrTd2XIdbVJdJJDcrVOHxo_pxCAHj_4oYOE,2401
16
+ masstack_python_client/resources/feasibility.py,sha256=eYGIUwMIkDIfrbgR69Um284UJh5KlR0HLOUp-0FcYKE,8425
17
+ masstack_python_client/resources/provision.py,sha256=SfMly7_19-yxXZRuqXaxRzpHUSVIjcxO_Oq7g_K5d2A,997
16
18
  masstack_python_client/resources/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
19
  masstack_python_client/resources/enums/bundled_product_category.py,sha256=0rEsOud4kyDVX07DQ15C_DPcw8hZy84bAVj8j7nT22k,388
18
20
  masstack_python_client/resources/enums/commercial_segment_name.py,sha256=94yOXfHNCcZNCoR9ELQ-x2tarNin7gdYBVZ-CTzJsGA,101
@@ -20,18 +22,21 @@ masstack_python_client/resources/enums/customer_segment_name.py,sha256=NSQUUSUGL
20
22
  masstack_python_client/resources/enums/customer_type_name.py,sha256=mMdZh0D7qLDMxe6QYVQLGMqHqQMBAnZaPkjgE8q_D9Q,99
21
23
  masstack_python_client/resources/enums/document_type_search.py,sha256=pniXpUA_odqeKyxS6yYiN2uje0-F1kKXXBLOk0F8UTQ,136
22
24
  masstack_python_client/resources/enums/sale_type_name.py,sha256=NWl5j_SkbysOGVBn4-c7gVbzynOiE44Aqj34n_1v_sU,183
25
+ masstack_python_client/resources/enums/technology.py,sha256=ipHLhdY2EMQgmeDzJ0LnvWvdiG_Oq-JHuEb5ZIx5x3g,106
23
26
  masstack_python_client/resources/enums/technology_name.py,sha256=7h8LUyZ-2XHAxOZXelUkkFifmk9dCcwmBbWueFABfQ4,90
24
27
  masstack_python_client/resources/models/address.py,sha256=hKnEUVVz8AfGjhaDngzQ0HuR4_Z6zhK6Xe8Aj6xJR7I,5451
25
28
  masstack_python_client/resources/models/bundled.py,sha256=1zhWZFrQh15slaGSEZIDa1rURU76gRH5czppXYNSyow,1480
26
29
  masstack_python_client/resources/models/client_address.py,sha256=7WBiPTce2X6uZUVVZvZlTMgiohbVITUzmKgYYPvpM-w,204
27
30
  masstack_python_client/resources/models/client_attribute.py,sha256=rZlLjJeBVD6IpXbSEucujTqcmHhqoJGRTOV1wqyStak,697
28
31
  masstack_python_client/resources/models/client_payment.py,sha256=yMGMTuk_07-TzXWO89sCaaZv8soTO9cT0TzfV3xQa1o,262
32
+ masstack_python_client/resources/models/fixed_phone.py,sha256=ihF-iICz89eVhkeyRsX3pXYkODlXRpYPGJLiFiTBilM,98
33
+ masstack_python_client/resources/models/portability.py,sha256=64WjYLyxDCNgwzmqiDgMHnfouwIyxPmQKcaBZGT50L0,926
29
34
  masstack_python_client/resources/models/products.py,sha256=cIuUlEKs0OfvBXtYxxUwG4vibfAlZL4uVBK7-nAL9rw,1831
30
35
  masstack_python_client/resources/models/signup.py,sha256=Hvo5nZce1ikpUUMEoLt_2g2HipHwh4XRIz344X8_IJk,2018
31
36
  masstack_python_client/resources/models/user.py,sha256=N5mwuZN0Saxiro2UXYcCxLL6jrpIU83crHhmrdAcgE8,1080
32
37
  masstack_python_client/resources/utils/serialize.py,sha256=F6JxqR2M9HH0TpYKaJritnppWkYlpPztZ9ZC43FdPLg,251
33
- masstack_python_client-0.0.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
34
- masstack_python_client-0.0.4.dist-info/METADATA,sha256=GJo4SVII_bljYCjkMAjrpbXHGYrX0YGSZk4Fz7uLYZ0,3818
35
- masstack_python_client-0.0.4.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
36
- masstack_python_client-0.0.4.dist-info/top_level.txt,sha256=q_iYlqJq22lhg_2O2iktARr7Mzz3QfjaW4l6J4vwyE8,23
37
- masstack_python_client-0.0.4.dist-info/RECORD,,
38
+ masstack_python_client-0.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
39
+ masstack_python_client-0.1.0.dist-info/METADATA,sha256=QFUhcDcoe8BWRK2r0MxxZVwY7eI03zlg1l19eXHbrEA,4076
40
+ masstack_python_client-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
41
+ masstack_python_client-0.1.0.dist-info/top_level.txt,sha256=q_iYlqJq22lhg_2O2iktARr7Mzz3QfjaW4l6J4vwyE8,23
42
+ masstack_python_client-0.1.0.dist-info/RECORD,,