From 84c2e9f19ca7652f24e3dccce2a75e5a6ff8b525 Mon Sep 17 00:00:00 2001 From: Saulo Perceval Date: Thu, 20 Feb 2025 11:45:07 -0300 Subject: [PATCH 1/4] Add new option parameter rule on DynamicBrcode entity --- CHANGELOG.md | 3 +++ starkbank/dynamicbrcode/__dynamicbrcode.py | 23 ++++++++++++++++++---- starkbank/dynamicbrcode/__init__.py | 1 + starkbank/dynamicbrcode/rule/__init__.py | 0 starkbank/dynamicbrcode/rule/__rule.py | 17 ++++++++++++++++ tests/utils/dynamicBrcode.py | 8 +++++++- 6 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 starkbank/dynamicbrcode/rule/__init__.py create mode 100644 starkbank/dynamicbrcode/rule/__rule.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 743e1d66..4aa4a0c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ Given a version number MAJOR.MINOR.PATCH, increment: ## [Unreleased] +### Added +- Rule parameter on DynamicBrcode resource + ### Added - MerchantSession and MerchantSessionPurchase resources diff --git a/starkbank/dynamicbrcode/__dynamicbrcode.py b/starkbank/dynamicbrcode/__dynamicbrcode.py index a0a7c376..53b522d8 100644 --- a/starkbank/dynamicbrcode/__dynamicbrcode.py +++ b/starkbank/dynamicbrcode/__dynamicbrcode.py @@ -1,8 +1,9 @@ # coding: utf-8 - -from ..utils import rest from starkcore.utils.resource import Resource +from starkcore.utils.api import from_api_json from starkcore.utils.checks import check_datetime, check_date, check_timedelta +from ..utils import rest +from .rule.__rule import _sub_resource as _rule_resource, Rule class DynamicBrcode(Resource): @@ -18,6 +19,7 @@ class DynamicBrcode(Resource): ## Parameters (optional): - expiration [integer or datetime.timedelta, default 3600 (1 hour)]: time interval in seconds between due date and expiration date. ex 123456789 - tags [list of strings, default []]: list of strings for tagging, these will be passed to the respective Deposit resource when paid + - rules [list of DynamicBrcode.Rules, default []]: list of DynamicBrcode.Rule objects for modifying invoice behavior. ex: [DynamicBrcode.Rule(key="allowedTaxIds", value=[ "012.345.678-90", "45.059.493/0001-73" ])] ## Attributes (return-only): - id [string]: id returned on creation, this is the BR code. ex: "00020126360014br.gov.bcb.pix0114+552840092118152040000530398654040.095802BR5915Jamie Lannister6009Sao Paulo620705038566304FC6C" - uuid [string]: unique uuid returned when the DynamicBrcode is created. ex: "4e2eab725ddd495f9c98ffd97440702d" @@ -26,21 +28,34 @@ class DynamicBrcode(Resource): - created [datetime.datetime]: creation datetime for the DynamicBrcode. ex: datetime.datetime(2020, 3, 10, 10, 30, 0, 0) """ - def __init__(self, amount, expiration=None, tags=None, id=None, uuid=None, picture_url=None, updated=None, created=None): + def __init__(self, amount, expiration=None, tags=None, rules=None, id=None, uuid=None, picture_url=None, + updated=None, created=None): Resource.__init__(self, id=id) self.amount = amount self.expiration = check_timedelta(expiration) + self.rules = _parse_rules(rules) self.tags = tags self.uuid = uuid self.picture_url = picture_url self.updated = check_datetime(updated) self.created = check_datetime(created) - _resource = {"class": DynamicBrcode, "name": "DynamicBrcode"} +def _parse_rules(rules): + if rules is None: + return None + parsed_rules = [] + for rule in rules: + if isinstance(rule, Rule): + parsed_rules.append(rule) + continue + parsed_rules.append(from_api_json(_rule_resource, rule)) + return parsed_rules + + def create(brcodes, user=None): """# Create DynamicBrcodes Send a list of DynamicBrcode objects for creation in the Stark Bank API diff --git a/starkbank/dynamicbrcode/__init__.py b/starkbank/dynamicbrcode/__init__.py index e8da2a34..8644de14 100644 --- a/starkbank/dynamicbrcode/__init__.py +++ b/starkbank/dynamicbrcode/__init__.py @@ -1 +1,2 @@ +from .rule.__rule import Rule from .__dynamicbrcode import create, get, query, page diff --git a/starkbank/dynamicbrcode/rule/__init__.py b/starkbank/dynamicbrcode/rule/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/starkbank/dynamicbrcode/rule/__rule.py b/starkbank/dynamicbrcode/rule/__rule.py new file mode 100644 index 00000000..a5384cad --- /dev/null +++ b/starkbank/dynamicbrcode/rule/__rule.py @@ -0,0 +1,17 @@ +from starkcore.utils.subresource import SubResource + + +class Rule(SubResource): + """# DynamicBrcode.Rule object + The DynamicBrcode.Rule object modifies the behavior of DynamicBrcode objects when passed as an argument upon their creation. + ## Parameters (required): + - key [string]: Rule to be customized, describes what DynamicBrcode behavior will be altered. ex: "allowedTaxIds" + - value [list of string]: Value of the rule. ex: ["012.345.678-90", "45.059.493/0001-73"] + """ + + def __init__(self, key, value): + self.key = key + self.value = value + + +_sub_resource = {"class": Rule, "name": "Rule"} diff --git a/tests/utils/dynamicBrcode.py b/tests/utils/dynamicBrcode.py index 83073f57..7b5d4912 100644 --- a/tests/utils/dynamicBrcode.py +++ b/tests/utils/dynamicBrcode.py @@ -2,13 +2,19 @@ from copy import deepcopy from random import randint from starkbank import DynamicBrcode - +from starkbank.dynamicbrcode import Rule example_brcode = DynamicBrcode( amount=400000, expiration=3600, tags=[ "python-SDK/test" + ], + rules=[ + Rule( + key="allowedTaxIds", + value=["012.345.678-90"] + ) ] ) From 44994117fb38e9d9ff934f69d10fd5b71961c011 Mon Sep 17 00:00:00 2001 From: Saulo Perceval Date: Mon, 24 Feb 2025 17:54:48 -0300 Subject: [PATCH 2/4] Add new option parameter display_description on DynamicBrcode entity --- CHANGELOG.md | 3 ++- starkbank/dynamicbrcode/__dynamicbrcode.py | 6 ++++-- tests/utils/dynamicBrcode.py | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aa4a0c5..fcd83b89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,8 @@ Given a version number MAJOR.MINOR.PATCH, increment: ## [Unreleased] ### Added -- Rule parameter on DynamicBrcode resource +- rule parameter on DynamicBrcode resource +- display_description parameter on DynamicBrcode resource ### Added - MerchantSession and MerchantSessionPurchase resources diff --git a/starkbank/dynamicbrcode/__dynamicbrcode.py b/starkbank/dynamicbrcode/__dynamicbrcode.py index 53b522d8..eddebfb2 100644 --- a/starkbank/dynamicbrcode/__dynamicbrcode.py +++ b/starkbank/dynamicbrcode/__dynamicbrcode.py @@ -19,6 +19,7 @@ class DynamicBrcode(Resource): ## Parameters (optional): - expiration [integer or datetime.timedelta, default 3600 (1 hour)]: time interval in seconds between due date and expiration date. ex 123456789 - tags [list of strings, default []]: list of strings for tagging, these will be passed to the respective Deposit resource when paid + - display_description [string, default None]: optional description to be shown in the payer bank interface. ex: "Payment for service #1234" - rules [list of DynamicBrcode.Rules, default []]: list of DynamicBrcode.Rule objects for modifying invoice behavior. ex: [DynamicBrcode.Rule(key="allowedTaxIds", value=[ "012.345.678-90", "45.059.493/0001-73" ])] ## Attributes (return-only): - id [string]: id returned on creation, this is the BR code. ex: "00020126360014br.gov.bcb.pix0114+552840092118152040000530398654040.095802BR5915Jamie Lannister6009Sao Paulo620705038566304FC6C" @@ -28,12 +29,13 @@ class DynamicBrcode(Resource): - created [datetime.datetime]: creation datetime for the DynamicBrcode. ex: datetime.datetime(2020, 3, 10, 10, 30, 0, 0) """ - def __init__(self, amount, expiration=None, tags=None, rules=None, id=None, uuid=None, picture_url=None, - updated=None, created=None): + def __init__(self, amount, expiration=None, tags=None, display_description=None, rules=None, id=None, uuid=None, + picture_url=None, updated=None, created=None): Resource.__init__(self, id=id) self.amount = amount self.expiration = check_timedelta(expiration) + self.display_description = display_description self.rules = _parse_rules(rules) self.tags = tags self.uuid = uuid diff --git a/tests/utils/dynamicBrcode.py b/tests/utils/dynamicBrcode.py index 7b5d4912..79098416 100644 --- a/tests/utils/dynamicBrcode.py +++ b/tests/utils/dynamicBrcode.py @@ -10,6 +10,7 @@ tags=[ "python-SDK/test" ], + display_description="Payment for service #1234", rules=[ Rule( key="allowedTaxIds", From ba0552b0f2db9808bf0b6875f5841a3a6bdc4f3d Mon Sep 17 00:00:00 2001 From: Saulo Perceval Date: Wed, 26 Feb 2025 18:02:34 -0300 Subject: [PATCH 3/4] Replace resource full description for website reference on DynamicBrcode docstring --- starkbank/dynamicbrcode/__dynamicbrcode.py | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/starkbank/dynamicbrcode/__dynamicbrcode.py b/starkbank/dynamicbrcode/__dynamicbrcode.py index eddebfb2..26acd53a 100644 --- a/starkbank/dynamicbrcode/__dynamicbrcode.py +++ b/starkbank/dynamicbrcode/__dynamicbrcode.py @@ -8,25 +8,7 @@ class DynamicBrcode(Resource): """# DynamicBrcode object - When you initialize a DynamicBrcode, the entity will not be automatically - sent to the Stark Bank API. The 'create' function sends the objects - to the Stark Bank API and returns the list of created objects. - DynamicBrcodes are conciliated BR Codes that can be used to receive Pix transactions in a convenient way. - When a DynamicBrcode is paid, a Deposit is created with the tags parameter containing the character “dynamic-brcode/” followed by the DynamicBrcode’s uuid "dynamic-brcode/{uuid}" for conciliation. - Additionally, all tags passed on the DynamicBrcode will be transferred to the respective Deposit resource. - ## Parameters (required): - - amount [integer]: DynamicBrcode value in cents. Minimum = 0 (any value will be accepted). ex: 1234 (= R$ 12.34) - ## Parameters (optional): - - expiration [integer or datetime.timedelta, default 3600 (1 hour)]: time interval in seconds between due date and expiration date. ex 123456789 - - tags [list of strings, default []]: list of strings for tagging, these will be passed to the respective Deposit resource when paid - - display_description [string, default None]: optional description to be shown in the payer bank interface. ex: "Payment for service #1234" - - rules [list of DynamicBrcode.Rules, default []]: list of DynamicBrcode.Rule objects for modifying invoice behavior. ex: [DynamicBrcode.Rule(key="allowedTaxIds", value=[ "012.345.678-90", "45.059.493/0001-73" ])] - ## Attributes (return-only): - - id [string]: id returned on creation, this is the BR code. ex: "00020126360014br.gov.bcb.pix0114+552840092118152040000530398654040.095802BR5915Jamie Lannister6009Sao Paulo620705038566304FC6C" - - uuid [string]: unique uuid returned when the DynamicBrcode is created. ex: "4e2eab725ddd495f9c98ffd97440702d" - - picture_url [string]: public QR Code (png image) URL. ex: "https://sandbox.api.starkbank.com/v2/dynamic-brcode/d3ebb1bd92024df1ab6e5a353ee799a4.png" - - updated [datetime.datetime]: latest update datetime for the DynamicBrcode. ex: datetime.datetime(2020, 3, 10, 10, 30, 0, 0) - - created [datetime.datetime]: creation datetime for the DynamicBrcode. ex: datetime.datetime(2020, 3, 10, 10, 30, 0, 0) + Check out our API Documentation at https://starkbank.com/docs/api#dynamic-brcode """ def __init__(self, amount, expiration=None, tags=None, display_description=None, rules=None, id=None, uuid=None, From e1ebc449e3d5935d7d6603c69d5177a859b6ff81 Mon Sep 17 00:00:00 2001 From: Saulo Perceval Date: Thu, 27 Feb 2025 13:57:11 -0300 Subject: [PATCH 4/4] Remove docstring from dynamicbrcode.Rule sub resource --- starkbank/dynamicbrcode/rule/__rule.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/starkbank/dynamicbrcode/rule/__rule.py b/starkbank/dynamicbrcode/rule/__rule.py index a5384cad..89e3e361 100644 --- a/starkbank/dynamicbrcode/rule/__rule.py +++ b/starkbank/dynamicbrcode/rule/__rule.py @@ -2,12 +2,6 @@ class Rule(SubResource): - """# DynamicBrcode.Rule object - The DynamicBrcode.Rule object modifies the behavior of DynamicBrcode objects when passed as an argument upon their creation. - ## Parameters (required): - - key [string]: Rule to be customized, describes what DynamicBrcode behavior will be altered. ex: "allowedTaxIds" - - value [list of string]: Value of the rule. ex: ["012.345.678-90", "45.059.493/0001-73"] - """ def __init__(self, key, value): self.key = key