masstack-python-client 0.0.3__py3-none-any.whl → 0.0.4__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.3"
1
+ __version__ = "0.0.4"
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,110 @@
1
+ from typing import Optional, List
2
+ from masstack_python_client.client import MasstackClient
3
+ from masstack_python_client.resources.enums.bundled_product_category import (
4
+ BundleCategory,
5
+ )
6
+ from masstack_python_client.resources.enums.commercial_segment_name import (
7
+ CommercialSegmentName,
8
+ )
9
+ from masstack_python_client.resources.enums.customer_segment_name import (
10
+ CustomerSegmentName,
11
+ )
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
+
17
+
18
+ class CatalogueResource:
19
+ """Support sales and post-sales operations from catalogue perspective
20
+ https://developers.masstack.com/en/docs/apis_catalogue_doc_swagger/2/apioverview/
21
+ """
22
+
23
+ _api_domain = "catalogue"
24
+
25
+
26
+ class BundledProducts(CatalogueResource):
27
+ _api_path = "bundled_products"
28
+ _version = "v2"
29
+
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
+
54
+ class Sellable(BundledProducts):
55
+
56
+ _api_subpath = "sellable"
57
+
58
+ @classmethod
59
+ def get(
60
+ cls,
61
+ commercial_profile_name: Optional[str] = None,
62
+ technology_name: Optional[TechnologyName] = None,
63
+ territory_owner_id: Optional[str] = None,
64
+ category: Optional[BundleCategory] = None,
65
+ customer_segment_name: Optional[CustomerSegmentName] = None,
66
+ commercial_segment_name: Optional[CommercialSegmentName] = None,
67
+ customer_type_name: Optional[CustomerTypeName] = None,
68
+ sale_type_name: Optional[SaleTypeName] = None,
69
+ ) -> List[BundledProduct]:
70
+ """Returns an array of sellable bundled products based on input criteria,
71
+ including the mandatory bundled commercial products for each bundled product.
72
+ Provides details for each bundled commercial product about the marketing name.
73
+
74
+ Args:
75
+ commercial_profile_name (str): commercial profile name
76
+ technology_name (TechnologyName): technology name
77
+ territory_owner_id (str): territory owner identifier
78
+ category (BundleCategory): bundled product category
79
+ customer_segment_name (CustomerSegmentName): customer segment name
80
+ commercial_segment_name(CommercialSegmentName): SmallMediumEnterprise or Consumer
81
+ customer_type_name(CustomerTypeName): customer type name
82
+ sale_type_name(SaleTypeName): sale type name
83
+
84
+ Returns:
85
+ BundledProduct
86
+
87
+ """
88
+ params = {
89
+ "commercial_profile_name": commercial_profile_name,
90
+ "technology_name": technology_name,
91
+ "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,
97
+ }
98
+ 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
+ },
106
+ )
107
+ return [
108
+ BundledProduct.from_dict(**sellable_bundled_product)
109
+ for sellable_bundled_product in sellable_bundled_products
110
+ ]
File without changes
@@ -0,0 +1,12 @@
1
+ from enum import Enum
2
+
3
+
4
+ class BundleCategory(Enum):
5
+ MOBILE = "Mobile"
6
+ TV = "TV"
7
+ FIXED_BROADBAND = "Fixed+Broadband"
8
+ FIXED_MOBILE = "Fixed+Mobile"
9
+ FIXED_BROADBAND_MOBILE = "Fixed+Broadband+Mobile"
10
+ FIXED_BROADBAND_TV = "Fixed+Broadband+TV"
11
+ FIXED_BROADBAND_MOBILE_NTX = "Fixed+Broadband+Mobile+Netflix"
12
+ FIXED_BROADBAND_MOBILE_TV = "Fixed+Broadband+Mobile+TV"
@@ -0,0 +1,6 @@
1
+ from enum import Enum
2
+
3
+
4
+ class CommercialSegmentName(Enum):
5
+ SME = "SME"
6
+ CONSUMER = "Consumer"
@@ -0,0 +1,8 @@
1
+ from enum import Enum
2
+
3
+
4
+ class CustomerSegmentName(Enum):
5
+ RESIDENTIAL = "RESIDENCIAL"
6
+ COMPANY = "EMPRESA"
7
+ AUTONOMOUS = "AUTONOMO"
8
+ HORECA = "HORECA"
@@ -0,0 +1,6 @@
1
+ from enum import Enum
2
+
3
+
4
+ class CustomerTypeName(Enum):
5
+ NEW = "Nuevo"
6
+ EXISTING = "Existente"
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+
4
+ class SaleTypeName(Enum):
5
+ SALE = "Venta"
6
+ MIGRATION = "Migración"
7
+ ADD_LINE = "Añadir Línea"
8
+ CROSS_SELL = "Cross Sell"
9
+ WALLET = "Cartera"
@@ -0,0 +1,6 @@
1
+ from enum import Enum
2
+
3
+
4
+ class TechnologyName(Enum):
5
+ ADSL = "ADSL"
6
+ FIBRA = "FIBRA"
@@ -0,0 +1,58 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass(frozen=True)
5
+ class SubsType:
6
+ id: str
7
+ name: str
8
+ description: str
9
+
10
+
11
+ @dataclass(frozen=True)
12
+ class ComercialProduct:
13
+ id: str
14
+ name: str
15
+
16
+ @classmethod
17
+ def from_dict(cls, commercial_product, **kwargs) -> "ComercialProduct":
18
+ return cls(commercial_product["id"], commercial_product["name"])
19
+
20
+
21
+ @dataclass(frozen=True)
22
+ class BundledProductSubtype:
23
+ id: str
24
+ bundled_commercial_products: list[ComercialProduct]
25
+ subs_type: SubsType
26
+
27
+ @classmethod
28
+ def from_dict(
29
+ cls, id, bundled_commercial_products, subs_type, **kwargs
30
+ ) -> "BundledProductSubtype":
31
+ return cls(
32
+ id,
33
+ bundled_commercial_products=[
34
+ ComercialProduct.from_dict(**bundled_commercial_product)
35
+ for bundled_commercial_product in bundled_commercial_products
36
+ ],
37
+ subs_type=SubsType(**subs_type),
38
+ )
39
+
40
+
41
+ @dataclass(frozen=True)
42
+ class BundledProduct:
43
+ id: str
44
+ name: str
45
+ bundled_product_subs_types: list[BundledProductSubtype]
46
+
47
+ @classmethod
48
+ def from_dict(
49
+ cls, id, name, bundled_product_subs_types, **kwargs
50
+ ) -> "BundledProduct":
51
+ return cls(
52
+ id,
53
+ name,
54
+ bundled_product_subs_types=[
55
+ BundledProductSubtype.from_dict(**bundled_product_subs_type)
56
+ for bundled_product_subs_type in bundled_product_subs_types
57
+ ],
58
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: masstack-python-client
3
- Version: 0.0.3
3
+ Version: 0.0.4
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
@@ -45,6 +45,10 @@ This Python API client provides access to masmovil core API domains.
45
45
  - returns customer tree data associated to a given document identification, email or number of the client.
46
46
  - returns user data by userId
47
47
 
48
+ * Catalogue
49
+ - bundled_products - access to bundled products
50
+ - get sellable bundled products
51
+
48
52
  ## Installation
49
53
 
50
54
  ```commandline
@@ -1,4 +1,4 @@
1
- masstack_python_client/__init__.py,sha256=ZGw_LqC_xbgEF9n0CyxrpBpNtc1-3gLH0fxTScbA7Bk,154
1
+ masstack_python_client/__init__.py,sha256=6TDc7ulFeITzFwqtn2Uqj3pBTqGRHYGHN43zbbpu5aY,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,10 +10,19 @@ 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
13
14
  masstack_python_client/resources/customers.py,sha256=9GTXQ5fiVosbAzK__uydZOBu9wXC9yO4pHufseHqD38,2924
14
15
  masstack_python_client/resources/feasibility.py,sha256=DbiPwWa9orSmITgcID7RVPKf7b50Pk8h1XQh0xxGYhw,7119
16
+ masstack_python_client/resources/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ masstack_python_client/resources/enums/bundled_product_category.py,sha256=0rEsOud4kyDVX07DQ15C_DPcw8hZy84bAVj8j7nT22k,388
18
+ masstack_python_client/resources/enums/commercial_segment_name.py,sha256=94yOXfHNCcZNCoR9ELQ-x2tarNin7gdYBVZ-CTzJsGA,101
19
+ masstack_python_client/resources/enums/customer_segment_name.py,sha256=NSQUUSUGL-vYEUe4w9deym9Vuez-QGn26hs_2fOojh0,163
20
+ masstack_python_client/resources/enums/customer_type_name.py,sha256=mMdZh0D7qLDMxe6QYVQLGMqHqQMBAnZaPkjgE8q_D9Q,99
15
21
  masstack_python_client/resources/enums/document_type_search.py,sha256=pniXpUA_odqeKyxS6yYiN2uje0-F1kKXXBLOk0F8UTQ,136
22
+ masstack_python_client/resources/enums/sale_type_name.py,sha256=NWl5j_SkbysOGVBn4-c7gVbzynOiE44Aqj34n_1v_sU,183
23
+ masstack_python_client/resources/enums/technology_name.py,sha256=7h8LUyZ-2XHAxOZXelUkkFifmk9dCcwmBbWueFABfQ4,90
16
24
  masstack_python_client/resources/models/address.py,sha256=hKnEUVVz8AfGjhaDngzQ0HuR4_Z6zhK6Xe8Aj6xJR7I,5451
25
+ masstack_python_client/resources/models/bundled.py,sha256=1zhWZFrQh15slaGSEZIDa1rURU76gRH5czppXYNSyow,1480
17
26
  masstack_python_client/resources/models/client_address.py,sha256=7WBiPTce2X6uZUVVZvZlTMgiohbVITUzmKgYYPvpM-w,204
18
27
  masstack_python_client/resources/models/client_attribute.py,sha256=rZlLjJeBVD6IpXbSEucujTqcmHhqoJGRTOV1wqyStak,697
19
28
  masstack_python_client/resources/models/client_payment.py,sha256=yMGMTuk_07-TzXWO89sCaaZv8soTO9cT0TzfV3xQa1o,262
@@ -21,8 +30,8 @@ masstack_python_client/resources/models/products.py,sha256=cIuUlEKs0OfvBXtYxxUwG
21
30
  masstack_python_client/resources/models/signup.py,sha256=Hvo5nZce1ikpUUMEoLt_2g2HipHwh4XRIz344X8_IJk,2018
22
31
  masstack_python_client/resources/models/user.py,sha256=N5mwuZN0Saxiro2UXYcCxLL6jrpIU83crHhmrdAcgE8,1080
23
32
  masstack_python_client/resources/utils/serialize.py,sha256=F6JxqR2M9HH0TpYKaJritnppWkYlpPztZ9ZC43FdPLg,251
24
- masstack_python_client-0.0.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
25
- masstack_python_client-0.0.3.dist-info/METADATA,sha256=lIkct6n2EgZkeXZ4u1GJv4UIqpJjk9KvMIc4KjEjPoU,3713
26
- masstack_python_client-0.0.3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
27
- masstack_python_client-0.0.3.dist-info/top_level.txt,sha256=q_iYlqJq22lhg_2O2iktARr7Mzz3QfjaW4l6J4vwyE8,23
28
- masstack_python_client-0.0.3.dist-info/RECORD,,
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,,