Skip to content

Commit 2249c6f

Browse files
authored
Deprecation notice on imp, Subscription now one class (#5)
1 parent e9cad5c commit 2249c6f

File tree

13 files changed

+166
-128
lines changed

13 files changed

+166
-128
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,26 +185,26 @@ chartmogul.Plan.destroy(config, uuid='')
185185
```python
186186
import chartmogul.imp
187187

188-
chartmogul.imp.Invoice.create(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb', data={})
189-
chartmogul.imp.Invoice.all(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb', page=2, per_page=10)
188+
chartmogul.Invoice.create(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb', data={})
189+
chartmogul.Invoice.all(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb', page=2, per_page=10)
190190
```
191191

192192
#### [Transactions](https://dev.chartmogul.com/docs/transactions)
193193

194194
```python
195195
import chartmogul.imp
196196

197-
chartmogul.imp.Transaction.create(config, uuid='inv_745df1d4-819f-48ee-873d-b5204801e021', data={})
197+
chartmogul.Transaction.create(config, uuid='inv_745df1d4-819f-48ee-873d-b5204801e021', data={})
198198
```
199199

200200
#### [Subscriptions](https://dev.chartmogul.com/docs/subscriptions)
201201

202202
```python
203203
import chartmogul.imp
204204

205-
chartmogul.imp.Subscription.all(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb')
206-
chartmogul.imp.Subscription.cancel(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb' data={'cancelled_at': ''})
207-
chartmogul.imp.Subscription.modify(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb' data={'cancellation_dates': []})
205+
chartmogul.Subscription.list_imported(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb')
206+
chartmogul.Subscription.cancel(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb' data={'cancelled_at': ''})
207+
chartmogul.Subscription.modify(config, uuid='cus_5915ee5a-babd-406b-b8ce-d207133fb4cb' data={'cancellation_dates': []})
208208
```
209209

210210
### [Metrics API](https://dev.chartmogul.com/docs/introduction-metrics-api)

chartmogul/__init__.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22
from .api.config import Config
33
from .errors import APIError, ConfigurationError, ArgumentMissingError
44

5-
from .api.ping import Ping
5+
from .api.activity import Activity
6+
from .api.attributes import Attributes
7+
from .api.custom_attrs import CustomAttributes
8+
from .api.customer import Customer
69
from .api.data_source import DataSource
10+
from .api.invoice import Invoice
11+
from .api.metrics import Metrics
12+
from .api.ping import Ping
713
from .api.plan import Plan
8-
from .api.customer import Customer
9-
from .api.attributes import Attributes
10-
from .api.tags import Tags
11-
from .api.activity import Activity
1214
from .api.subscription import Subscription
13-
from .api.metrics import Metrics
14-
from .api.custom_attrs import CustomAttributes
15+
from .api.tags import Tags
16+
from .api.transaction import Transaction
1517

16-
# Can't merge modules, because of Subscription clash.
18+
# Deprecated
1719
import imp
1820

1921

@@ -27,7 +29,7 @@
2729
"""
2830

2931
__title__ = 'chartmogul'
30-
__version__ = '1.0.3'
32+
__version__ = '1.1.0'
3133
__build__ = 0x000000
3234
__author__ = 'ChartMogul Ltd'
3335
__license__ = 'MIT'

chartmogul/api/invoice.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from marshmallow import Schema, fields, post_load
2+
from ..resource import Resource, DataObject
3+
from .transaction import Transaction
4+
from collections import namedtuple
5+
6+
7+
class LineItem(DataObject):
8+
9+
class _Schema(Schema):
10+
uuid = fields.String()
11+
external_id = fields.String(allow_none=True)
12+
type = fields.String()
13+
subscription_uuid = fields.String()
14+
subscription_external_id = fields.String()
15+
plan_uuid = fields.String()
16+
prorated = fields.Boolean()
17+
service_period_start = fields.DateTime()
18+
service_period_end = fields.DateTime()
19+
amount_in_cents = fields.Int()
20+
quantity = fields.Int()
21+
discount_code = fields.String(allow_none=True)
22+
discount_amount_in_cents = fields.Int()
23+
tax_amount_in_cents = fields.Int()
24+
account_code = fields.String(allow_none=True)
25+
26+
@post_load
27+
def make(self, data):
28+
return LineItem(**data)
29+
30+
31+
class Invoice(Resource):
32+
"""
33+
https://dev.chartmogul.com/v1.0/reference#invoices
34+
"""
35+
_path = "/import/customers{/uuid}/invoices"
36+
_root_key = 'invoices'
37+
_many = namedtuple('Invoices', [_root_key, "current_page", "total_pages", "customer_uuid"])
38+
_many.__new__.__defaults__ = (None,) * len(_many._fields)
39+
40+
class _Schema(Schema):
41+
uuid = fields.String()
42+
external_id = fields.String(allow_none=True)
43+
date = fields.DateTime()
44+
due_date = fields.DateTime()
45+
currency = fields.String()
46+
line_items = fields.Nested(LineItem._Schema, many=True)
47+
transactions = fields.Nested(Transaction._Schema, many=True)
48+
49+
@post_load
50+
def make(self, data):
51+
return Invoice(**data)
52+
53+
_schema = _Schema(strict=True)

chartmogul/api/subscription.py

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,52 @@
66
class Subscription(Resource):
77
"""
88
https://dev.chartmogul.com/v1.0/reference#list-customer-subscriptions
9+
https://dev.chartmogul.com/v1.0/reference#list-a-customers-subscriptions
910
"""
1011
_path = "/customers{/uuid}/subscriptions"
1112
_root_key = 'entries'
1213
_many = namedtuple('Subscriptions', [_root_key, "has_more", "per_page", "page"])
1314

1415
class _Schema(Schema):
15-
id = fields.Int()
16-
plan = fields.String()
17-
quantity = fields.Int()
18-
mrr = fields.Number()
19-
arr = fields.Number()
20-
status = fields.String()
21-
billing_cycle = fields.String(load_from='billing-cycle')
22-
billing_cycle_count = fields.Number(load_from='billing-cycle-count')
23-
start_date = fields.DateTime(load_from='start-date')
24-
end_date = fields.DateTime(load_from='end-date')
25-
currency = fields.String()
26-
currency_sign = fields.String(load_from='currency-sign')
16+
id = fields.Int(allow_none=True)
17+
plan = fields.String(allow_none=True)
18+
quantity = fields.Int(allow_none=True)
19+
mrr = fields.Number(allow_none=True)
20+
arr = fields.Number(allow_none=True)
21+
status = fields.String(allow_none=True)
22+
billing_cycle = fields.String(load_from='billing-cycle', allow_none=True)
23+
billing_cycle_count = fields.Number(load_from='billing-cycle-count', allow_none=True)
24+
start_date = fields.DateTime(load_from='start-date', allow_none=True)
25+
end_date = fields.DateTime(load_from='end-date', allow_none=True)
26+
currency = fields.String(allow_none=True)
27+
currency_sign = fields.String(load_from='currency-sign', allow_none=True)
28+
29+
# /import namespace
30+
uuid = fields.String(allow_none=True)
31+
external_id = fields.String(allow_none=True)
32+
plan_uuid = fields.String(allow_none=True)
33+
customer_uuid = fields.String(allow_none=True)
34+
data_source_uuid = fields.String(allow_none=True)
35+
cancellation_dates = fields.List(fields.DateTime(), allow_none=True)
2736

2837
@post_load
2938
def make(self, data):
3039
return Subscription(**data)
3140

3241
_schema = _Schema(strict=True)
42+
43+
# /import has different paging
44+
@classmethod
45+
def _loadJSON(cls, jsonObj):
46+
if "subscriptions" in jsonObj:
47+
_many = namedtuple('Subscriptions', ["subscriptions", "current_page", "total_pages"])
48+
return _many(cls._schema.load(jsonObj["subscriptions"], many=True).data,
49+
jsonObj["current_page"],
50+
jsonObj["total_pages"])
51+
else:
52+
return super(Subscription, cls)._loadJSON(jsonObj)
53+
54+
# /import namespace
55+
Subscription.list_imported = Subscription._method('list_imported', 'get', "/import/customers{/uuid}/subscriptions")
56+
Subscription.cancel = Subscription._method('cancel', 'patch', "/import/subscriptions{/uuid}")
57+
Subscription.modify = Subscription._method('modify', 'patch', "/import/subscriptions{/uuid}")

chartmogul/api/transaction.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from marshmallow import Schema, fields, post_load
2+
from ..resource import Resource
3+
from collections import namedtuple
4+
5+
6+
class Transaction(Resource):
7+
"""
8+
https://dev.chartmogul.com/v1.0/reference#transactions
9+
"""
10+
_path = "/import/invoices{/uuid}/transactions"
11+
12+
class _Schema(Schema):
13+
uuid = fields.String()
14+
external_id = fields.String(allow_none=True)
15+
type = fields.String()
16+
date = fields.DateTime()
17+
result = fields.String()
18+
19+
@post_load
20+
def make(self, data):
21+
return Transaction(**data)
22+
23+
_schema = _Schema(strict=True)

chartmogul/imp/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# In future versions this might be merged into api
1+
# Deprecated
22
from .invoice import Invoice
33
from .transaction import Transaction
44
from .subscription import Subscription

chartmogul/imp/invoice.py

Lines changed: 11 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,14 @@
1-
from marshmallow import Schema, fields, post_load
2-
from ..resource import Resource, DataObject
3-
from .transaction import Transaction
4-
from collections import namedtuple
1+
from ..api.invoice import Invoice as InvoiceNew
2+
from warnings import warn
53

64

7-
class LineItem(DataObject):
5+
class Invoice(InvoiceNew):
6+
@classmethod
7+
def create(cls, *args, **kwargs):
8+
warn("chartmogul.imp namespace is deprecated, use chartmogul.Invoice.create!")
9+
return super(Invoice, cls).create(*args, **kwargs)
810

9-
class _Schema(Schema):
10-
uuid = fields.String()
11-
external_id = fields.String(allow_none=True)
12-
type = fields.String()
13-
subscription_uuid = fields.String()
14-
plan_uuid = fields.String()
15-
prorated = fields.Boolean()
16-
service_period_start = fields.DateTime()
17-
service_period_end = fields.DateTime()
18-
amount_in_cents = fields.Int()
19-
quantity = fields.Int()
20-
discount_code = fields.String(allow_none=True)
21-
discount_amount_in_cents = fields.Int()
22-
tax_amount_in_cents = fields.Int()
23-
account_code = fields.String(allow_none=True)
24-
25-
@post_load
26-
def make(self, data):
27-
return LineItem(**data)
28-
29-
30-
class Invoice(Resource):
31-
"""
32-
https://dev.chartmogul.com/v1.0/reference#invoices
33-
"""
34-
_path = "/import/customers{/uuid}/invoices"
35-
_root_key = 'invoices'
36-
_many = namedtuple('Invoices', [_root_key, "current_page", "total_pages", "customer_uuid"])
37-
_many.__new__.__defaults__ = (None,) * len(_many._fields)
38-
39-
class _Schema(Schema):
40-
uuid = fields.String()
41-
external_id = fields.String(allow_none=True)
42-
date = fields.DateTime()
43-
due_date = fields.DateTime()
44-
currency = fields.String()
45-
line_items = fields.Nested(LineItem._Schema, many=True)
46-
transactions = fields.Nested(Transaction._Schema, many=True)
47-
48-
@post_load
49-
def make(self, data):
50-
return Invoice(**data)
51-
52-
_schema = _Schema(strict=True)
11+
@classmethod
12+
def all(cls, *args, **kwargs):
13+
warn("chartmogul.imp namespace is deprecated, use chartmogul.Invoice.all!")
14+
return super(Invoice, cls).all(*args, **kwargs)

chartmogul/imp/subscription.py

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
1-
from marshmallow import Schema, fields, post_load
2-
from ..resource import Resource
3-
from collections import namedtuple
1+
from ..api.subscription import Subscription as SubsNew
2+
from warnings import warn
43

54

6-
class Subscription(Resource):
7-
"""
8-
https://dev.chartmogul.com/v1.0/reference#subscriptions
9-
"""
10-
_path = "/import/customers{/uuid}/subscriptions"
11-
_root_key = 'subscriptions'
12-
_many = namedtuple('Subscriptions', [_root_key, "current_page", "total_pages", "customer_uuid"])
5+
class Subscription(SubsNew):
6+
@classmethod
7+
def all(cls, *args, **kwargs):
8+
warn("chartmogul.imp namespace is deprecated, use chartmogul.Subscription.list_imported!")
9+
return super(Subscription, cls).list_imported(*args, **kwargs)
1310

14-
class _Schema(Schema):
15-
uuid = fields.String()
16-
external_id = fields.String()
17-
plan_uuid = fields.String()
18-
customer_uuid = fields.String()
19-
data_source_uuid = fields.String()
20-
cancellation_dates = fields.List(fields.DateTime())
21-
22-
@post_load
23-
def make(self, data):
24-
return Subscription(**data)
25-
26-
_schema = _Schema(strict=True)
27-
28-
29-
Subscription.cancel = Subscription._method('cancel', 'patch', "/import/subscriptions{/uuid}")
30-
Subscription.modify = Subscription._method('modify', 'patch', "/import/subscriptions{/uuid}")
11+
@classmethod
12+
def cancel(cls, *args, **kwargs):
13+
warn("chartmogul.imp namespace is deprecated, use chartmogul.Subscription.cancel!")
14+
return super(Subscription, cls).cancel(*args, **kwargs)

chartmogul/imp/transaction.py

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,9 @@
1-
from marshmallow import Schema, fields, post_load
2-
from ..resource import Resource
3-
from collections import namedtuple
1+
from ..api.transaction import Transaction as TransactionNew
2+
from warnings import warn
43

54

6-
class Transaction(Resource):
7-
"""
8-
https://dev.chartmogul.com/v1.0/reference#transactions
9-
"""
10-
_path = "/import/invoices{/uuid}/transactions"
11-
12-
class _Schema(Schema):
13-
uuid = fields.String()
14-
external_id = fields.String(allow_none=True)
15-
type = fields.String()
16-
date = fields.DateTime()
17-
result = fields.String()
18-
19-
@post_load
20-
def make(self, data):
21-
return Transaction(**data)
22-
23-
_schema = _Schema(strict=True)
5+
class Transaction(TransactionNew):
6+
@classmethod
7+
def create(cls, *args, **kwargs):
8+
warn("chartmogul.imp namespace is deprecated, use chartmogul.Transaction.create!")
9+
return super(Transaction, cls).create(*args, **kwargs)

chartmogul/resource.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
}
3434

3535

36-
class DataObject:
36+
class DataObject(object):
3737

3838
def __init__(self, **kwargs):
3939
"""
@@ -89,7 +89,10 @@ def _load(cls, response):
8989
jsonObj = response.json()
9090
except ValueError: # Couldn't parse JSON, probably just text message.
9191
return response.content
92+
return cls._loadJSON(jsonObj)
9293

94+
@classmethod
95+
def _loadJSON(cls, jsonObj):
9396
# has load_many capability & is many entries result?
9497
if '_root_key' in dir(cls) is not None and cls._root_key in jsonObj:
9598
return cls._many(cls._schema.load(jsonObj[cls._root_key], many=True).data,

0 commit comments

Comments
 (0)