From 456ced85b10efc6d1a8a3394fcab8e6fc8c1c422 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 May 2025 01:45:01 +0000 Subject: [PATCH 01/31] chore(deps): bump setuptools from 78.1.0 to 78.1.1 Bumps [setuptools](https://github.com/pypa/setuptools) from 78.1.0 to 78.1.1. - [Release notes](https://github.com/pypa/setuptools/releases) - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/setuptools/compare/v78.1.0...v78.1.1) --- updated-dependencies: - dependency-name: setuptools dependency-version: 78.1.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 751c8dc..f3fcf09 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -167,12 +167,12 @@ }, "setuptools": { "hashes": [ - "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", - "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8" + "sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561", + "sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==78.1.0" + "version": "==78.1.1" }, "urllib3": { "hashes": [ From 79dac6c1f16bf0339868c0911e3057df5f0d1e82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 12:20:04 +0000 Subject: [PATCH 02/31] chore(deps): bump requests from 2.32.3 to 2.32.4 Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4) --- updated-dependencies: - dependency-name: requests dependency-version: 2.32.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 198 +++++++++++++++++++++++++-------------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 751c8dc..48f6477 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -18,109 +18,109 @@ "default": { "certifi": { "hashes": [ - "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", - "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" + "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", + "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3" ], "markers": "python_version >= '3.6'", - "version": "==2025.1.31" + "version": "==2025.4.26" }, "charset-normalizer": { "hashes": [ - "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", - "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", - "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", - "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", - "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", - "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", - "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", - "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", - "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", - "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", - "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", - "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", - "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", - "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", - "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", - "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", - "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", - "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", - "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", - "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", - "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", - "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", - "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", - "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", - "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", - "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", - "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", - "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", - "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", - "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", - "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", - "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", - "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", - "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", - "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", - "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", - "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", - "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", - "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", - "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", - "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", - "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", - "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", - "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", - "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", - "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", - "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", - "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", - "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", - "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", - "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", - "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", - "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", - "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", - "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", - "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", - "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", - "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", - "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", - "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", - "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", - "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", - "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", - "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", - "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", - "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", - "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", - "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", - "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", - "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", - "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", - "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", - "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", - "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", - "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", - "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", - "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", - "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", - "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", - "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", - "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", - "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", - "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", - "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", - "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", - "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", - "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", - "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", - "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", - "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", - "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", - "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4", + "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45", + "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", + "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", + "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", + "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", + "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d", + "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", + "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184", + "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", + "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b", + "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64", + "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", + "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", + "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", + "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344", + "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58", + "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", + "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471", + "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", + "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", + "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836", + "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", + "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", + "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", + "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1", + "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01", + "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", + "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58", + "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", + "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", + "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2", + "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a", + "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597", + "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", + "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5", + "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb", + "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f", + "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", + "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", + "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", + "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", + "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7", + "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7", + "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455", + "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", + "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4", + "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", + "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3", + "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", + "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", + "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", + "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", + "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", + "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", + "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", + "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12", + "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa", + "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", + "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", + "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f", + "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", + "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", + "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5", + "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02", + "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", + "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", + "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e", + "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", + "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", + "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", + "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", + "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681", + "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba", + "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", + "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a", + "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", + "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", + "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", + "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", + "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027", + "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7", + "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518", + "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", + "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", + "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", + "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", + "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da", + "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", + "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f", + "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", + "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f" ], "markers": "python_version >= '3.7'", - "version": "==3.4.1" + "version": "==3.4.2" }, "idna": { "hashes": [ @@ -158,12 +158,12 @@ }, "requests": { "hashes": [ - "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", - "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", + "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.32.3" + "version": "==2.32.4" }, "setuptools": { "hashes": [ From 3f506f3bd6602b116e83d280a2588dfcd399dfbc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 05:34:46 +0000 Subject: [PATCH 03/31] chore(deps): bump urllib3 from 2.4.0 to 2.5.0 Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.4.0 to 2.5.0. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.4.0...2.5.0) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.5.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 751c8dc..4b314b0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -176,11 +176,12 @@ }, "urllib3": { "hashes": [ - "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", - "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" + "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", + "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc" ], + "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2.4.0" + "version": "==2.5.0" } }, "develop": { From 067bd9a541a487675c44250ba108970344bebb49 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 16:09:36 -0400 Subject: [PATCH 04/31] chore: add sonar ci flow --- .github/workflows/sonar.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/sonar.yml diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml new file mode 100644 index 0000000..43e0de1 --- /dev/null +++ b/.github/workflows/sonar.yml @@ -0,0 +1,19 @@ +name: Build +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] +jobs: + sonarqube: + name: SonarQube + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: SonarQube Scan + uses: SonarSource/sonarqube-scan-action@v5 + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} From e048c4a50626b9184b13c4dbdde02a104624776c Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 16:13:09 -0400 Subject: [PATCH 05/31] chore: rename scan ci name --- .github/workflows/sonar.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 43e0de1..0c85835 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -1,4 +1,4 @@ -name: Build +name: Sonar Scan on: push: branches: From e2f84691fa366218682c51fb46f66c57bdcf0c13 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 16:14:15 -0400 Subject: [PATCH 06/31] chore: update properties in sonar properties files --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index af20d54..fc1ade0 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,4 +1,4 @@ -sonar.projectKey=transbank-sdk-python +sonar.projectKey=TransbankDevelopers_transbank-pos-sdk-python sonar.organization=transbankdevelopers # This is the name and version displayed in the SonarCloud UI. From b3b5325a4c65dc22bb415597bc950e97af9cada5 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 16:19:10 -0400 Subject: [PATCH 07/31] chore: add github token in the sonar fci flow --- .github/workflows/sonar.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 0c85835..1c0ec73 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -16,4 +16,5 @@ jobs: - name: SonarQube Scan uses: SonarSource/sonarqube-scan-action@v5 env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} From e90b23e47f0dbc2c0d606a2ddf50792340db3c02 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 17:04:53 -0400 Subject: [PATCH 08/31] chore: use tox in sonar ci flow --- .github/workflows/sonar.yml | 8 ++++++++ tox.ini | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tox.ini diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 1c0ec73..ab391d2 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -13,6 +13,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v5 + - name: Install tox + run: | + pip install tox + - name: Run Tox + run: | + tox -e cov - name: SonarQube Scan uses: SonarSource/sonarqube-scan-action@v5 env: diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..01d8792 --- /dev/null +++ b/tox.ini @@ -0,0 +1,26 @@ +[tox] +envlist = test, cov +skipsdist = true + +[testenv:test] +description = Ejecuta los tests unitarios sin coverage +deps = + marshmallow + requests +commands = + python -m unittest discover -s tests + +[testenv:cov] +description = Ejecuta los tests unitarios con coverage +deps = + marshmallow + requests + coverage +commands = + coverage run -m unittest discover -s tests + coverage xml + +[coverage:run] +relative_files = true +source = transbank +branch = true From b7243b564e463110e40d34216388bf9acf21feb7 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 17:07:56 -0400 Subject: [PATCH 09/31] chore: update project key --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index fc1ade0..ba64b38 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,4 +1,4 @@ -sonar.projectKey=TransbankDevelopers_transbank-pos-sdk-python +sonar.projectKey=TransbankDevelopers_transbank-sdk-python sonar.organization=transbankdevelopers # This is the name and version displayed in the SonarCloud UI. From 587b8180a61c0a28df613c7d6a036b273d82a8a6 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 17:08:14 -0400 Subject: [PATCH 10/31] chore: add project name property --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index ba64b38..24bf839 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.projectKey=TransbankDevelopers_transbank-sdk-python sonar.organization=transbankdevelopers # This is the name and version displayed in the SonarCloud UI. -#sonar.projectName=Transbank Python SDK +sonar.projectName=Transbank Python SDK #sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. From f9e9d054307ef74ddf86bbfaf2a1057178e9bb30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 21:18:03 +0000 Subject: [PATCH 11/31] chore(deps): bump setuptools from 78.1.0 to 78.1.1 --- updated-dependencies: - dependency-name: setuptools dependency-version: 78.1.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 751c8dc..f3fcf09 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -167,12 +167,12 @@ }, "setuptools": { "hashes": [ - "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", - "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8" + "sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561", + "sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==78.1.0" + "version": "==78.1.1" }, "urllib3": { "hashes": [ From 6ef33d0f2363f12b24b1d4cd79fa85f66b457b49 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Thu, 19 Jun 2025 17:25:36 -0400 Subject: [PATCH 12/31] chore: add coverage path in sonar ci flow --- sonar-project.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sonar-project.properties b/sonar-project.properties index 24bf839..6c5c915 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -10,3 +10,5 @@ sonar.projectName=Transbank Python SDK # Encoding of the source code. Default is default system encoding #sonar.sourceEncoding=UTF-8 + +sonar.python.coverage.reportPaths=coverage.xml From 986b4e8e4152ced48d1b4eaf7c2e35d5a2206dda Mon Sep 17 00:00:00 2001 From: Matias Vasquez Date: Mon, 26 May 2025 17:31:53 -0400 Subject: [PATCH 13/31] feat: add bin info query request --- transbank/webpay/oneclick/request/__init__.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/transbank/webpay/oneclick/request/__init__.py b/transbank/webpay/oneclick/request/__init__.py index 1b9472b..d50e3b8 100644 --- a/transbank/webpay/oneclick/request/__init__.py +++ b/transbank/webpay/oneclick/request/__init__.py @@ -97,3 +97,10 @@ def __init__(self, self.commerce_code = commerce_code self.detail_buy_order = detail_buy_order self.amount = amount + +class MallBinInfoQueryRequest(object): + def __init__(self, tbk_user: str): + self.tbk_user = tbk_user + + def __repr__(self): + return "MallBinInfoQueryRequest(tbk_user: {})".format(self.tbk_user) From 67f0f0e6a4a91095b6aa05019f06c00429d85e22 Mon Sep 17 00:00:00 2001 From: Matias Vasquez Date: Mon, 26 May 2025 17:32:08 -0400 Subject: [PATCH 14/31] feat: add bin info query request schema --- transbank/webpay/oneclick/schema.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/transbank/webpay/oneclick/schema.py b/transbank/webpay/oneclick/schema.py index d646aee..42edb51 100644 --- a/transbank/webpay/oneclick/schema.py +++ b/transbank/webpay/oneclick/schema.py @@ -35,3 +35,6 @@ class MallTransactionRefundRequestSchema(Schema): commerce_code = fields.Str() detail_buy_order = fields.Str() amount = fields.Str() + +class MallBinInfoQueryRequestSchema(Schema): + tbk_user = fields.Str() From 5fcfe363b530415c363becb243ed9664fa3bd336 Mon Sep 17 00:00:00 2001 From: Matias Vasquez Date: Mon, 26 May 2025 17:32:29 -0400 Subject: [PATCH 15/31] feat: add exception for bin info --- transbank/error/mall_bin_info_query_error.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 transbank/error/mall_bin_info_query_error.py diff --git a/transbank/error/mall_bin_info_query_error.py b/transbank/error/mall_bin_info_query_error.py new file mode 100644 index 0000000..b9cc097 --- /dev/null +++ b/transbank/error/mall_bin_info_query_error.py @@ -0,0 +1,5 @@ +from transbank.error.transbank_error import TransbankError + +class MallBinInfoQueryError(TransbankError): + def __init__(self, message="Mall bin info query could not be performed. Please verify given parameters", code=0): + super().__init__(message, code) From 2e1a4cda8e5a0d427803d360dbd584992ad48ec9 Mon Sep 17 00:00:00 2001 From: Matias Vasquez Date: Mon, 26 May 2025 17:32:54 -0400 Subject: [PATCH 16/31] feat: add bin info class --- transbank/webpay/oneclick/mall_bin_info.py | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 transbank/webpay/oneclick/mall_bin_info.py diff --git a/transbank/webpay/oneclick/mall_bin_info.py b/transbank/webpay/oneclick/mall_bin_info.py new file mode 100644 index 0000000..e5910a3 --- /dev/null +++ b/transbank/webpay/oneclick/mall_bin_info.py @@ -0,0 +1,36 @@ +from transbank.common.api_constants import ApiConstants +from transbank.common.webpay_transaction import WebpayTransaction +from transbank.common.validation_util import ValidationUtil +from transbank.common.api_constants import ApiConstants +from transbank.common.options import WebpayOptions +from transbank.common.request_service import RequestService +from transbank.error.transbank_error import TransbankError +from transbank.error.mall_bin_info_query_error import MallBinInfoQueryError +from transbank.webpay.oneclick.request import MallBinInfoQueryRequest +from transbank.webpay.oneclick.schema import MallBinInfoQueryRequestSchema + +class MallBinInfo(WebpayTransaction): + INFO_ENDPOINT = ApiConstants.ONECLICK_ENDPOINT + '/bin_info' + + def __init__(self, options: WebpayOptions): + super().__init__(options) + + def query_bin(self, tbk_user: str): + """ + Queries the BIN information for a given `tbk_user`. + + Args: + tbk_user (str): The `tbk_user` for which to query the BIN information. + Returns: + dict: The BIN information for the specified `tbk_user`. + Raises: + MallBinInfoQueryError: If there is an error querying the BIN information. + TransbankError: If `tbk_user` exceeds the max length + """ + ValidationUtil.has_text_with_max_length(tbk_user, ApiConstants.TBK_USER_LENGTH, "tbk_user") + try: + endpoint = MallBinInfo.INFO_ENDPOINT + request = MallBinInfoQueryRequest(tbk_user) + return RequestService.post(endpoint, MallBinInfoQueryRequestSchema().dumps(request), self.options) + except TransbankError as e: + raise MallBinInfoQueryError(e.message, e.code) From b3e728a5473e16f89f458302e4a9c04199666f02 Mon Sep 17 00:00:00 2001 From: Matias Vasquez Date: Mon, 26 May 2025 17:33:09 -0400 Subject: [PATCH 17/31] test: add tests for bin info --- tests/webpay/oneclick/test_mall_bin_info.py | 47 +++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/webpay/oneclick/test_mall_bin_info.py diff --git a/tests/webpay/oneclick/test_mall_bin_info.py b/tests/webpay/oneclick/test_mall_bin_info.py new file mode 100644 index 0000000..dddd241 --- /dev/null +++ b/tests/webpay/oneclick/test_mall_bin_info.py @@ -0,0 +1,47 @@ +import unittest +import json +from unittest.mock import Mock +from unittest.mock import patch +from transbank.error.transbank_error import TransbankError +from transbank.error.mall_bin_info_query_error import MallBinInfoQueryError +from transbank.webpay.oneclick.mall_bin_info import MallBinInfo + + +class MallBinInfoTestCase(unittest.TestCase): + + def setUp(self) -> None: + self.mock_response = Mock() + + @patch('transbank.common.request_service.requests.post') + def test_query_bin(self, mock_post): + response = {'bin_issuer': 'TEST COMMERCE BANK', 'bin_payment_type': 'Credito', 'bin_brand': 'Visa'} + self.mock_response.status_code = 200 + self.mock_response.text = json.dumps(response) + mock_post.return_value = self.mock_response + + mall_bin_info = MallBinInfo.build_for_integration('commerce_code', 'api_key') + result = mall_bin_info.query_bin('tbkUser') + + args, kwargs = mock_post.call_args + body = json.loads(kwargs['data']) + + self.assertEqual(result['bin_issuer'], 'TEST COMMERCE BANK') + self.assertEqual(result['bin_payment_type'], 'Credito') + self.assertEqual(result['bin_brand'], 'Visa') + self.assertEqual(body['tbk_user'], 'tbkUser') + + def test_query_bin_invalid_tbk_user(self): + mall_bin_info = MallBinInfo.build_for_integration('commerce_code', 'api_key') + with self.assertRaises(TransbankError): + mall_bin_info.query_bin('b134e1c5e9eeb134e1c5e9eeb134e1c5e9eeb134e1c5e9eeb134e1c5e9eeb134e1c5e9eeb134e1c5e9eeb134e1c5e9ee') + + @patch('transbank.common.request_service.requests.post') + def test_query_bin_throws_api_exception(self, mock_post): + self.mock_response.status_code = 400 + self.mock_response.text = '{"error": "Bad Request"}' + mock_post.return_value = self.mock_response + mall_bin_info = MallBinInfo.build_for_integration('commerce_code', 'api_key') + + with self.assertRaises(MallBinInfoQueryError): + mall_bin_info.query_bin('tbkUser') + \ No newline at end of file From 124c9a2997c799dd42339609275fcb25be11e0f7 Mon Sep 17 00:00:00 2001 From: Matias Vasquez Date: Mon, 26 May 2025 17:36:41 -0400 Subject: [PATCH 18/31] style: add empty line --- tests/webpay/oneclick/test_mall_bin_info.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/webpay/oneclick/test_mall_bin_info.py b/tests/webpay/oneclick/test_mall_bin_info.py index dddd241..d03291a 100644 --- a/tests/webpay/oneclick/test_mall_bin_info.py +++ b/tests/webpay/oneclick/test_mall_bin_info.py @@ -44,4 +44,3 @@ def test_query_bin_throws_api_exception(self, mock_post): with self.assertRaises(MallBinInfoQueryError): mall_bin_info.query_bin('tbkUser') - \ No newline at end of file From 405a625fa4d509071304ee92a727944d4fedcd8b Mon Sep 17 00:00:00 2001 From: Matias Vasquez Date: Thu, 19 Jun 2025 17:36:57 -0400 Subject: [PATCH 19/31] test: rename unused variable --- tests/webpay/oneclick/test_mall_bin_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/webpay/oneclick/test_mall_bin_info.py b/tests/webpay/oneclick/test_mall_bin_info.py index d03291a..c82839b 100644 --- a/tests/webpay/oneclick/test_mall_bin_info.py +++ b/tests/webpay/oneclick/test_mall_bin_info.py @@ -22,7 +22,7 @@ def test_query_bin(self, mock_post): mall_bin_info = MallBinInfo.build_for_integration('commerce_code', 'api_key') result = mall_bin_info.query_bin('tbkUser') - args, kwargs = mock_post.call_args + _, kwargs = mock_post.call_args body = json.loads(kwargs['data']) self.assertEqual(result['bin_issuer'], 'TEST COMMERCE BANK') From d8b9aec116fa1b005ccaa18240b4ca3814c08aa4 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Mon, 23 Jun 2025 17:18:22 -0400 Subject: [PATCH 20/31] chore: update dependencies --- Pipfile | 10 +- Pipfile.lock | 494 ++++++++++++++++++++++++--------------------------- 2 files changed, 239 insertions(+), 265 deletions(-) diff --git a/Pipfile b/Pipfile index 073e318..ed137d5 100644 --- a/Pipfile +++ b/Pipfile @@ -7,19 +7,19 @@ name = "pypi" python_version = "3.12" [dev-packages] -ipython = "<8.11.0" +ipython = ">=9.3.0" docutils = "*" coverage = "*" pylint = "*" -requests-mock = "<=1.5.2" +requests-mock = "<=1.12.1" pytest-cov = "*" pytest = "*" [packages] -marshmallow = ">3, <=3.26.1" -requests = ">=2.32.0" +marshmallow = ">=4.0.0" +requests = ">=2.32.4" mock = "*" -setuptools = ">=70.0.0" +setuptools = ">=80.9.0" [scripts] tests = "pytest" diff --git a/Pipfile.lock b/Pipfile.lock index d258826..f5ccbd2 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "983f8d732ad740010fded76edb88bac3b613c24b14ed9a142ff07f4670d740ef" + "sha256": "cdbb901a9aee9e883127f93025761642fd6a105eeea8a1307cb6eb4c4d349d37" }, "pipfile-spec": 6, "requires": { @@ -18,11 +18,11 @@ "default": { "certifi": { "hashes": [ - "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", - "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3" + "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", + "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b" ], - "markers": "python_version >= '3.6'", - "version": "==2025.4.26" + "markers": "python_version >= '3.7'", + "version": "==2025.6.15" }, "charset-normalizer": { "hashes": [ @@ -132,12 +132,12 @@ }, "marshmallow": { "hashes": [ - "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", - "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6" + "sha256:3b6e80aac299a7935cfb97ed01d1854fb90b5079430969af92118ea1b12a8d55", + "sha256:e7b0528337e9990fd64950f8a6b3a1baabed09ad17a0dfb844d701151f92d203" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==3.26.1" + "version": "==4.0.0" }, "mock": { "hashes": [ @@ -148,14 +148,6 @@ "markers": "python_version >= '3.6'", "version": "==5.2.0" }, - "packaging": { - "hashes": [ - "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", - "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" - ], - "markers": "python_version >= '3.8'", - "version": "==24.2" - }, "requests": { "hashes": [ "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", @@ -167,39 +159,30 @@ }, "setuptools": { "hashes": [ - "sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561", - "sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d" + "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", + "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==78.1.1" + "version": "==80.9.0" }, "urllib3": { "hashes": [ "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc" ], - "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.5.0" } }, "develop": { - "appnope": { - "hashes": [ - "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", - "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c" - ], - "markers": "python_version >= '3.6'", - "version": "==0.1.4" - }, "astroid": { "hashes": [ - "sha256:622cc8e3048684aa42c820d9d218978021c3c3d174fb03a9f0d615921744f550", - "sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248" + "sha256:104fb9cb9b27ea95e847a94c003be03a9e039334a8ebca5ee27dafaf5c5711eb", + "sha256:c332157953060c6deb9caa57303ae0d20b0fbdb2e59b4a4f2a6ba49d0a7961ce" ], "markers": "python_full_version >= '3.9.0'", - "version": "==3.3.9" + "version": "==3.3.10" }, "asttokens": { "hashes": [ @@ -209,191 +192,188 @@ "markers": "python_version >= '3.8'", "version": "==3.0.0" }, - "backcall": { - "hashes": [ - "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", - "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" - ], - "version": "==0.2.0" - }, "certifi": { "hashes": [ - "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", - "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" + "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", + "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b" ], - "markers": "python_version >= '3.6'", - "version": "==2025.1.31" + "markers": "python_version >= '3.7'", + "version": "==2025.6.15" }, "charset-normalizer": { "hashes": [ - "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", - "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", - "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", - "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", - "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", - "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", - "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", - "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", - "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", - "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", - "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", - "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", - "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", - "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", - "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", - "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", - "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", - "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", - "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", - "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", - "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", - "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", - "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", - "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", - "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", - "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", - "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", - "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", - "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", - "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", - "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", - "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", - "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", - "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", - "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", - "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", - "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", - "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", - "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", - "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", - "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", - "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", - "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", - "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", - "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", - "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", - "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", - "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", - "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", - "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", - "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", - "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", - "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", - "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", - "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", - "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", - "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", - "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", - "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", - "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", - "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", - "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", - "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", - "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", - "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", - "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", - "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", - "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", - "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", - "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", - "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", - "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", - "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", - "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", - "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", - "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", - "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", - "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", - "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", - "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", - "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", - "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", - "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", - "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", - "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", - "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", - "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", - "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", - "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", - "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", - "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", - "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4", + "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45", + "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", + "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", + "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", + "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", + "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d", + "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", + "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184", + "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", + "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b", + "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64", + "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", + "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", + "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", + "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344", + "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58", + "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", + "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471", + "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", + "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", + "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836", + "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", + "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", + "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", + "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1", + "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01", + "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", + "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58", + "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", + "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", + "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2", + "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a", + "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597", + "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", + "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5", + "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb", + "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f", + "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", + "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", + "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", + "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", + "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7", + "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7", + "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455", + "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", + "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4", + "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", + "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3", + "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", + "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", + "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", + "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", + "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", + "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", + "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", + "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12", + "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa", + "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", + "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", + "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f", + "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", + "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", + "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5", + "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02", + "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", + "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", + "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e", + "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", + "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", + "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", + "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", + "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681", + "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba", + "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", + "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a", + "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", + "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", + "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", + "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", + "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027", + "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7", + "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518", + "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", + "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", + "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", + "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", + "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da", + "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", + "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f", + "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", + "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f" ], "markers": "python_version >= '3.7'", - "version": "==3.4.1" + "version": "==3.4.2" }, "coverage": { "extras": [ "toml" ], "hashes": [ - "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f", - "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3", - "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05", - "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25", - "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe", - "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257", - "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78", - "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada", - "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64", - "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6", - "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28", - "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067", - "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733", - "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676", - "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23", - "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008", - "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd", - "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3", - "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82", - "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545", - "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00", - "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47", - "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501", - "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d", - "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814", - "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd", - "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a", - "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318", - "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3", - "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c", - "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42", - "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a", - "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6", - "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a", - "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7", - "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487", - "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4", - "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2", - "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9", - "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd", - "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73", - "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc", - "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f", - "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea", - "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899", - "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a", - "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543", - "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1", - "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", - "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d", - "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502", - "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b", - "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040", - "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c", - "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27", - "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c", - "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d", - "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4", - "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe", - "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323", - "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883", - "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f", - "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" + "sha256:02532fd3290bb8fa6bec876520842428e2a6ed6c27014eca81b031c2d30e3f71", + "sha256:0a4be2a28656afe279b34d4f91c3e26eccf2f85500d4a4ff0b1f8b54bf807338", + "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0", + "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f", + "sha256:0f16649a7330ec307942ed27d06ee7e7a38417144620bb3d6e9a18ded8a2d3e5", + "sha256:16aa0830d0c08a2c40c264cef801db8bc4fc0e1892782e45bcacbd5889270509", + "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c", + "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d", + "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f", + "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1", + "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8", + "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683", + "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e", + "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631", + "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43", + "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67", + "sha256:37ae0383f13cbdcf1e5e7014489b0d71cc0106458878ccde52e8a12ced4298ed", + "sha256:382e7ddd5289f140259b610e5f5c58f713d025cb2f66d0eb17e68d0a94278875", + "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029", + "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7", + "sha256:49f1d0788ba5b7ba65933f3a18864117c6506619f5ca80326b478f72acf3f385", + "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10", + "sha256:535fde4001b2783ac80865d90e7cc7798b6b126f4cd8a8c54acfe76804e54e58", + "sha256:56f5eb308b17bca3bbff810f55ee26d51926d9f89ba92707ee41d3c061257e55", + "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb", + "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74", + "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300", + "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d", + "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643", + "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c", + "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363", + "sha256:68cd53aec6f45b8e4724c0950ce86eacb775c6be01ce6e3669fe4f3a21e768ed", + "sha256:69aa417a030bf11ec46149636314c24c8d60fadb12fc0ee8f10fda0d918c879d", + "sha256:6ad935f0016be24c0e97fc8c40c465f9c4b85cbbe6eac48934c0dc4d2568321e", + "sha256:6b55ad10a35a21b8015eabddc9ba31eb590f54adc9cd39bcf09ff5349fd52125", + "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec", + "sha256:6f424507f57878e424d9a95dc4ead3fbdd72fd201e404e861e465f28ea469951", + "sha256:70760b4c5560be6ca70d11f8988ee6542b003f982b32f83d5ac0b72476607b70", + "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751", + "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f", + "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5", + "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd", + "sha256:95335095b6c7b1cc14c3f3f17d5452ce677e8490d101698562b2ffcacc304c8d", + "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d", + "sha256:95c765060e65c692da2d2f51a9499c5e9f5cf5453aeaf1420e3fc847cc060582", + "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898", + "sha256:9ca8e220006966b4a7b68e8984a6aee645a0384b0769e829ba60281fe61ec4f7", + "sha256:a39d18b3f50cc121d0ce3838d32d58bd1d15dab89c910358ebefc3665712256c", + "sha256:a66e8f628b71f78c0e0342003d53b53101ba4e00ea8dabb799d9dba0abbbcebe", + "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626", + "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342", + "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece", + "sha256:ba383dc6afd5ec5b7a0d0c23d38895db0e15bcba7fb0fa8901f245267ac30d86", + "sha256:bb4fbcab8764dc072cb651a4bcda4d11fb5658a1d8d68842a862a6610bd8cfa3", + "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a", + "sha256:bfa447506c1a52271f1b0de3f42ea0fa14676052549095e378d5bff1c505ff7b", + "sha256:cc94d7c5e8423920787c33d811c0be67b7be83c705f001f7180c7b186dcf10ca", + "sha256:cea0a27a89e6432705fffc178064503508e3c0184b4f061700e771a09de58187", + "sha256:cf95981b126f23db63e9dbe4cf65bd71f9a6305696fa5e2262693bc4e2183f5b", + "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86", + "sha256:db0f04118d1db74db6c9e1cb1898532c7dcc220f1d2718f058601f7c3f499514", + "sha256:dd24bd8d77c98557880def750782df77ab2b6885a18483dc8588792247174b32", + "sha256:e1b5191d1648acc439b24721caab2fd0c86679d8549ed2c84d5a7ec1bedcc244", + "sha256:e5532482344186c543c37bfad0ee6069e8ae4fc38d073b8bc836fc8f03c9e250", + "sha256:e980b53a959fa53b6f05343afbd1e6f44a23ed6c23c4b4c56c6662bbb40c82ce", + "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd", + "sha256:f05031cf21699785cd47cb7485f67df619e7bcdae38e0fde40d23d3d0210d3c3" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.8.0" + "version": "==7.9.1" }, "decorator": { "hashes": [ @@ -405,11 +385,11 @@ }, "dill": { "hashes": [ - "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", - "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c" + "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", + "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049" ], "markers": "python_version >= '3.8'", - "version": "==0.3.9" + "version": "==0.4.0" }, "docutils": { "hashes": [ @@ -446,12 +426,20 @@ }, "ipython": { "hashes": [ - "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e", - "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345" + "sha256:1a0b6dd9221a1f5dddf725b57ac0cb6fddc7b5f470576231ae9162b9b3455a04", + "sha256:79eb896f9f23f50ad16c3bc205f686f6e030ad246cc309c6279a242b14afe9d8" ], "index": "pypi", + "markers": "python_version >= '3.11'", + "version": "==9.3.0" + }, + "ipython-pygments-lexers": { + "hashes": [ + "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", + "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c" + ], "markers": "python_version >= '3.8'", - "version": "==8.10.0" + "version": "==1.1.1" }, "isort": { "hashes": [ @@ -487,11 +475,11 @@ }, "packaging": { "hashes": [ - "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", - "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", + "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" ], "markers": "python_version >= '3.8'", - "version": "==24.2" + "version": "==25.0" }, "parso": { "hashes": [ @@ -506,39 +494,32 @@ "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f" ], - "markers": "sys_platform != 'win32'", + "markers": "sys_platform != 'win32' and sys_platform != 'emscripten'", "version": "==4.9.0" }, - "pickleshare": { - "hashes": [ - "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", - "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" - ], - "version": "==0.7.5" - }, "platformdirs": { "hashes": [ - "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94", - "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351" + "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", + "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4" ], "markers": "python_version >= '3.9'", - "version": "==4.3.7" + "version": "==4.3.8" }, "pluggy": { "hashes": [ - "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", - "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" + "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", + "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746" ], - "markers": "python_version >= '3.8'", - "version": "==1.5.0" + "markers": "python_version >= '3.9'", + "version": "==1.6.0" }, "prompt-toolkit": { "hashes": [ - "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", - "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198" + "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", + "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed" ], - "markers": "python_full_version >= '3.8.0'", - "version": "==3.0.50" + "markers": "python_version >= '3.8'", + "version": "==3.0.51" }, "ptyprocess": { "hashes": [ @@ -556,63 +537,56 @@ }, "pygments": { "hashes": [ - "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", - "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c" + "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", + "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b" ], "markers": "python_version >= '3.8'", - "version": "==2.19.1" + "version": "==2.19.2" }, "pylint": { "hashes": [ - "sha256:8b7c2d3e86ae3f94fb27703d521dd0b9b6b378775991f504d7c3a6275aa0a6a6", - "sha256:b634a041aac33706d56a0d217e6587228c66427e20ec21a019bc4cdee48c040a" + "sha256:2b11de8bde49f9c5059452e0c310c079c746a0a8eeaa789e5aa966ecc23e4559", + "sha256:43860aafefce92fca4cf6b61fe199cdc5ae54ea28f9bf4cd49de267b5195803d" ], "index": "pypi", "markers": "python_full_version >= '3.9.0'", - "version": "==3.3.6" + "version": "==3.3.7" }, "pytest": { "hashes": [ - "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", - "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" + "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", + "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==8.3.5" + "markers": "python_version >= '3.9'", + "version": "==8.4.1" }, "pytest-cov": { "hashes": [ - "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a", - "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde" + "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", + "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==6.1.1" + "version": "==6.2.1" }, "requests": { "hashes": [ - "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", - "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", + "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.32.3" + "version": "==2.32.4" }, "requests-mock": { "hashes": [ - "sha256:7a5fa99db5e3a2a961b6f20ed40ee6baeff73503cf0a553cc4d679409e6170fb", - "sha256:8ca0628dc66d3f212878932fd741b02aa197ad53fd2228164800a169a4a826af" + "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563", + "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401" ], "index": "pypi", - "version": "==1.5.2" - }, - "six": { - "hashes": [ - "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", - "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.17.0" + "markers": "python_version >= '3.5'", + "version": "==1.12.1" }, "stack-data": { "hashes": [ @@ -623,11 +597,11 @@ }, "tomlkit": { "hashes": [ - "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", - "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79" + "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", + "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0" ], "markers": "python_version >= '3.8'", - "version": "==0.13.2" + "version": "==0.13.3" }, "traitlets": { "hashes": [ @@ -639,11 +613,11 @@ }, "urllib3": { "hashes": [ - "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", - "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" + "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", + "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc" ], "markers": "python_version >= '3.9'", - "version": "==2.4.0" + "version": "==2.5.0" }, "wcwidth": { "hashes": [ From d3a3a184a12c40f91ef1a5c68f63f36563e4ac9f Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Mon, 23 Jun 2025 17:19:43 -0400 Subject: [PATCH 21/31] test: add create transaction successful to api --- tests/webpay/plus/test_transaction.py | 64 +++++++++++++++++++-------- 1 file changed, 45 insertions(+), 19 deletions(-) diff --git a/tests/webpay/plus/test_transaction.py b/tests/webpay/plus/test_transaction.py index 2c2ee15..30485c2 100644 --- a/tests/webpay/plus/test_transaction.py +++ b/tests/webpay/plus/test_transaction.py @@ -23,7 +23,15 @@ def setUp(self) -> None: self.authorization_code_mock = '123456' self.capture_amount_mock = 150000 self.mock_response = Mock() - self.transaction = Transaction.build_for_integration(IntegrationCommerceCodes.WEBPAY_PLUS, IntegrationApiKeys.WEBPAY) + self.transaction = Transaction.build_for_integration( + IntegrationCommerceCodes.WEBPAY_PLUS, IntegrationApiKeys.WEBPAY) + + def test_create_transaction_successful_to_api(self): + response = self.transaction.create(self.buy_order_mock, self.session_id_mock, self.amount_mock, + self.return_url_mock) + + self.assertEqual( + response['url'], 'https://webpay3gint.transbank.cl/webpayserver/initTransaction') @patch('transbank.common.request_service.requests.post') def test_create_transaction_successful(self, mock_post): @@ -43,38 +51,47 @@ def test_create_exception_not_authorized(self, mock_post): mock_post.return_value = self.mock_response with self.assertRaises(TransactionCreateError) as context: - self.transaction.create(self.buy_order_mock, self.session_id_mock, self.amount_mock, self.return_url_mock) + self.transaction.create( + self.buy_order_mock, self.session_id_mock, self.amount_mock, self.return_url_mock) self.assertTrue('Not Authorized' in context.exception.message) self.assertEqual(context.exception.__class__, TransactionCreateError) def test_create_exception_buy_order_max_length(self): with self.assertRaises(TransbankError) as context: - self.transaction.create(self.token_mock, self.session_id_mock, self.amount_mock, self.return_url_mock) + self.transaction.create( + self.token_mock, self.session_id_mock, self.amount_mock, self.return_url_mock) - self.assertTrue('too long, the maximum length' in context.exception.message) + self.assertTrue( + 'too long, the maximum length' in context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) def test_create_exception_session_id_max_length(self): with self.assertRaises(TransbankError) as context: - self.transaction.create(self.buy_order_mock, self.token_mock, self.amount_mock, self.return_url_mock) + self.transaction.create( + self.buy_order_mock, self.token_mock, self.amount_mock, self.return_url_mock) - self.assertTrue("'session_id' is too long, the maximum length" in context.exception.message) + self.assertTrue( + "'session_id' is too long, the maximum length" in context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) def test_create_exception_return_url_max_length(self): valid_string = string.ascii_letters + string.digits + "-._~" - too_long_url = ''.join(secrets.choice(valid_string) for _ in range(ApiConstants.RETURN_URL_LENGTH + 1)) + too_long_url = ''.join(secrets.choice(valid_string) + for _ in range(ApiConstants.RETURN_URL_LENGTH + 1)) with self.assertRaises(TransbankError) as context: - self.transaction.create(self.buy_order_mock, self.session_id_mock, self.amount_mock, too_long_url) + self.transaction.create( + self.buy_order_mock, self.session_id_mock, self.amount_mock, too_long_url) - self.assertTrue("'return_url' is too long, the maximum length" in context.exception.message) + self.assertTrue( + "'return_url' is too long, the maximum length" in context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.put') def test_commit_transaction_successful(self, mock_put): self.mock_response.status_code = 200 - self.mock_response.text = json.dumps(responses['commit_status_response']) + self.mock_response.text = json.dumps( + responses['commit_status_response']) mock_put.return_value = self.mock_response response = self.transaction.commit(self.token_mock) @@ -91,7 +108,8 @@ def test_commit_exception_when_authorized(self, mock_put): with self.assertRaises(TransactionCommitError) as context: self.transaction.commit(self.token_mock) - self.assertTrue('transaction while authorizing' in context.exception.message) + self.assertTrue( + 'transaction while authorizing' in context.exception.message) self.assertEqual(context.exception.__class__, TransactionCommitError) def test_commit_exception_token_max_length(self): @@ -99,13 +117,15 @@ def test_commit_exception_token_max_length(self): with self.assertRaises(TransbankError) as context: self.transaction.commit(invalid_token) - self.assertTrue("'token' is too long, the maximum length" in context.exception.message) + self.assertTrue( + "'token' is too long, the maximum length" in context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.get') def test_status_transaction_successful(self, mock_get): self.mock_response.status_code = 200 - self.mock_response.text = json.dumps(responses['commit_status_response']) + self.mock_response.text = json.dumps( + responses['commit_status_response']) mock_get.return_value = self.mock_response response = self.transaction.status(self.token_mock) @@ -118,7 +138,8 @@ def test_status_exception_token_max_length(self): with self.assertRaises(TransbankError) as context: self.transaction.status(invalid_token) - self.assertTrue("'token' is too long, the maximum length" in context.exception.message) + self.assertTrue( + "'token' is too long, the maximum length" in context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.get') @@ -130,7 +151,8 @@ def test_status_exception_expired_token(self, mock_get): with self.assertRaises(TransactionStatusError) as context: self.transaction.status(self.token_mock) - self.assertTrue('has passed max time (7 days)' in context.exception.message) + self.assertTrue( + 'has passed max time (7 days)' in context.exception.message) self.assertEqual(context.exception.__class__, TransactionStatusError) @patch('transbank.common.request_service.requests.post') @@ -163,7 +185,8 @@ def test_refund_exception(self, mock_post): with self.assertRaises(TransactionRefundError) as context: self.transaction.refund(self.token_mock, self.invalid_amount) - self.assertTrue('Invalid value for parameter' in context.exception.message) + self.assertTrue( + 'Invalid value for parameter' in context.exception.message) self.assertEqual(context.exception.__class__, TransactionRefundError) def test_refund_exception_token_max_length(self): @@ -171,7 +194,8 @@ def test_refund_exception_token_max_length(self): with self.assertRaises(TransbankError) as context: self.transaction.refund(invalid_token, self.amount_mock) - self.assertTrue("'token' is too long, the maximum length" in context.exception.message) + self.assertTrue( + "'token' is too long, the maximum length" in context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.put') @@ -196,7 +220,8 @@ def test_capture_exception(self, mock_put): self.transaction.capture(self.token_mock, self.buy_order_mock, self.authorization_code_mock, self.invalid_amount) - self.assertTrue('Invalid value for parameter' in context.exception.message) + self.assertTrue( + 'Invalid value for parameter' in context.exception.message) self.assertEqual(context.exception.__class__, TransactionCaptureError) def test_capture_exception_authorization_code_max_length(self): @@ -205,5 +230,6 @@ def test_capture_exception_authorization_code_max_length(self): self.transaction.capture(self.token_mock, self.buy_order_mock, invalid_authorization_code, self.capture_amount_mock) - self.assertTrue("'authorization_code' is too long, the maximum length" in context.exception.message) + self.assertTrue( + "'authorization_code' is too long, the maximum length" in context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) From e2610581cded8b5bcb5dfd6b42ec4d041aac2477 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Mon, 23 Jun 2025 17:31:13 -0400 Subject: [PATCH 22/31] fix: sonar issues "consider using assertIn instead" --- tests/webpay/plus/test_transaction.py | 46 +++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/webpay/plus/test_transaction.py b/tests/webpay/plus/test_transaction.py index 30485c2..8ff9177 100644 --- a/tests/webpay/plus/test_transaction.py +++ b/tests/webpay/plus/test_transaction.py @@ -54,7 +54,7 @@ def test_create_exception_not_authorized(self, mock_post): self.transaction.create( self.buy_order_mock, self.session_id_mock, self.amount_mock, self.return_url_mock) - self.assertTrue('Not Authorized' in context.exception.message) + self.assertIn('Not Authorized', context.exception.message) self.assertEqual(context.exception.__class__, TransactionCreateError) def test_create_exception_buy_order_max_length(self): @@ -62,8 +62,8 @@ def test_create_exception_buy_order_max_length(self): self.transaction.create( self.token_mock, self.session_id_mock, self.amount_mock, self.return_url_mock) - self.assertTrue( - 'too long, the maximum length' in context.exception.message) + self.assertIn( + 'too long, the maximum length', context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) def test_create_exception_session_id_max_length(self): @@ -71,8 +71,8 @@ def test_create_exception_session_id_max_length(self): self.transaction.create( self.buy_order_mock, self.token_mock, self.amount_mock, self.return_url_mock) - self.assertTrue( - "'session_id' is too long, the maximum length" in context.exception.message) + self.assertIn( + "'session_id' is too long, the maximum length", context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) def test_create_exception_return_url_max_length(self): @@ -83,8 +83,8 @@ def test_create_exception_return_url_max_length(self): self.transaction.create( self.buy_order_mock, self.session_id_mock, self.amount_mock, too_long_url) - self.assertTrue( - "'return_url' is too long, the maximum length" in context.exception.message) + self.assertIn( + "'return_url' is too long, the maximum length", context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.put') @@ -108,8 +108,8 @@ def test_commit_exception_when_authorized(self, mock_put): with self.assertRaises(TransactionCommitError) as context: self.transaction.commit(self.token_mock) - self.assertTrue( - 'transaction while authorizing' in context.exception.message) + self.assertIn( + 'transaction while authorizing', context.exception.message) self.assertEqual(context.exception.__class__, TransactionCommitError) def test_commit_exception_token_max_length(self): @@ -117,8 +117,8 @@ def test_commit_exception_token_max_length(self): with self.assertRaises(TransbankError) as context: self.transaction.commit(invalid_token) - self.assertTrue( - "'token' is too long, the maximum length" in context.exception.message) + self.assertIn( + "'token' is too long, the maximum length", context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.get') @@ -138,8 +138,8 @@ def test_status_exception_token_max_length(self): with self.assertRaises(TransbankError) as context: self.transaction.status(invalid_token) - self.assertTrue( - "'token' is too long, the maximum length" in context.exception.message) + self.assertIn( + "'token' is too long, the maximum length", context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.get') @@ -151,8 +151,8 @@ def test_status_exception_expired_token(self, mock_get): with self.assertRaises(TransactionStatusError) as context: self.transaction.status(self.token_mock) - self.assertTrue( - 'has passed max time (7 days)' in context.exception.message) + self.assertIn( + 'has passed max time (7 days)', context.exception.message) self.assertEqual(context.exception.__class__, TransactionStatusError) @patch('transbank.common.request_service.requests.post') @@ -185,8 +185,8 @@ def test_refund_exception(self, mock_post): with self.assertRaises(TransactionRefundError) as context: self.transaction.refund(self.token_mock, self.invalid_amount) - self.assertTrue( - 'Invalid value for parameter' in context.exception.message) + self.assertIn( + 'Invalid value for parameter', context.exception.message) self.assertEqual(context.exception.__class__, TransactionRefundError) def test_refund_exception_token_max_length(self): @@ -194,8 +194,8 @@ def test_refund_exception_token_max_length(self): with self.assertRaises(TransbankError) as context: self.transaction.refund(invalid_token, self.amount_mock) - self.assertTrue( - "'token' is too long, the maximum length" in context.exception.message) + self.assertIn( + "'token' is too long, the maximum length", context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) @patch('transbank.common.request_service.requests.put') @@ -220,8 +220,8 @@ def test_capture_exception(self, mock_put): self.transaction.capture(self.token_mock, self.buy_order_mock, self.authorization_code_mock, self.invalid_amount) - self.assertTrue( - 'Invalid value for parameter' in context.exception.message) + self.assertIn( + 'Invalid value for parameter', context.exception.message) self.assertEqual(context.exception.__class__, TransactionCaptureError) def test_capture_exception_authorization_code_max_length(self): @@ -230,6 +230,6 @@ def test_capture_exception_authorization_code_max_length(self): self.transaction.capture(self.token_mock, self.buy_order_mock, invalid_authorization_code, self.capture_amount_mock) - self.assertTrue( - "'authorization_code' is too long, the maximum length" in context.exception.message) + self.assertIn( + "'authorization_code' is too long, the maximum length", context.exception.message) self.assertEqual(context.exception.__class__, TransbankError) From 553332b232ffdaed68412f90d85bc469b179a594 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:44:58 -0400 Subject: [PATCH 23/31] docs: update badges in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1043e6e..de1ea42 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -[![Build Status](https://travis-ci.org/TransbankDevelopers/transbank-sdk-python.svg?branch=master)](https://travis-ci.org/TransbankDevelopers/transbank-sdk-python) -[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=transbank-sdk-python&metric=alert_status)](https://sonarcloud.io/dashboard?id=transbank-sdk-python) +![Publish Status](https://github.com/TransbankDevelopers/transbank-sdk-python/actions/workflows/publish.yml/badge.svg) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=TransbankDevelopers_transbank-sdk-python&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=TransbankDevelopers_transbank-sdk-python) [![PyPI version](https://badge.fury.io/py/transbank-sdk.svg)](https://badge.fury.io/py/transbank-sdk) # Transbank Python SDK From 14c411e309b4fab83718afc256049a05e59c871b Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:45:36 -0400 Subject: [PATCH 24/31] docs: update requirements in readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index de1ea42..ecb73c5 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ SDK Oficial de Transbank ## Requisitos: -- Python 3.12+ +- Python 3.12+ +- [Pipenv](https://github.com/pypa/pipenv) +- Plugin de editorconfig para tu editor favorito. # Instalación From a2e73f644f3049a57e7616c03ff967b2fccf790f Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:45:57 -0400 Subject: [PATCH 25/31] docs: update test section in readme --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index ecb73c5..c19ad7d 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,16 @@ y luego ejecutar: pipenv install ``` +### Test + +Para ejecutar los test localmente debes usar los siguientes comandos en una terminal. + +```bash +pipenv install +pipenv install --dev +pipenv run tests +``` + ## Documentación Puedes encontrar toda la documentación de cómo usar este SDK en el sitio https://www.transbankdevelopers.cl. From 2a41d19f56edf2143bef1af8d834a9c7f6673ed9 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:46:20 -0400 Subject: [PATCH 26/31] docs: update installation instructions in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c19ad7d..cc83ca0 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ SDK Oficial de Transbank # Instalación -Puedes instalar el SDK directamente +Puedes instalar el SDK directamente utilizando pip mediante el comando: ```bash pip install transbank-sdk From 36b6e29203b15e97ca7d9ee5e3e2bda5eac0aa0d Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:48:24 -0400 Subject: [PATCH 27/31] docs: update contribution section in readme --- README.md | 104 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index cc83ca0..1a46f42 100644 --- a/README.md +++ b/README.md @@ -49,50 +49,72 @@ Puedes encontrar toda la documentación de cómo usar este SDK en el sitio https La documentación relevante para usar este SDK es: -- Documentación general sobre los productos y sus diferencias: - [Webpay](https://www.transbankdevelopers.cl/producto/webpay). -- Documentación sobre [ambientes, deberes del comercio, puesta en producción, - etc](https://www.transbankdevelopers.cl/documentacion/como_empezar#ambientes). -- Primeros pasos con [Webpay](https://www.transbankdevelopers.cl/documentacion/webpay). -- Referencia detallada sobre [Webpay](https://www.transbankdevelopers.cl/referencia/webpay). - -## Información para contribuir y desarrollar este SDK - -### Requerimientos -- [Pipenv](https://github.com/pypa/pipenv) -- Plugin de editorconfig para tu editor favorito. - -### Standares - -- Para los commits respetamos las siguientes normas: https://chris.beams.io/posts/git-commit/ -- Usamos ingles, para los mensajes de commit. -- Se pueden usar tokens como WIP, en el subject de un commit, separando el token con `:`, por ejemplo: -`WIP: This is a useful commit message` -- Para los nombres de ramas también usamos ingles. -- Se asume, que una rama de feature no mezclada, es un feature no terminado. -- El nombre de las ramas va en minúsculas. -- Las palabras se separan con `-`. -- Las ramas comienzan con alguno de los short lead tokens definidos, por ejemplo: `feat/tokens-configuration` - -#### Short lead tokens -##### Commits -- WIP = Trabajo en progreso. - -##### Ramas -- feat = Nuevos features -- chore = Tareas, que no son visibles al usuario. -- bug = Resolución de bugs. - -### Todas las mezclas a master se hacen mediante Pull Request. +- Documentación general sobre los productos y sus diferencias: + [Webpay](https://www.transbankdevelopers.cl/producto/webpay). +- Documentación sobre [ambientes, deberes del comercio, puesta en producción, + etc](https://www.transbankdevelopers.cl/documentacion/como_empezar#ambientes). +- Primeros pasos con [Webpay](https://www.transbankdevelopers.cl/documentacion/webpay). +- Referencia detallada sobre [Webpay](https://www.transbankdevelopers.cl/referencia/webpay). -### Test -Para ejecutar los test localmente debes usar el siguiente comando en una terminal. +## Información para contribuir a este proyecto -```bash -pipenv run tests -``` +### Forma de trabajo + +- Para los mensajes de commits, nos basamos en las [Git Commit Guidelines de Angular](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits). +- Usamos inglés para los nombres de ramas y mensajes de commit. +- Los mensajes de commit no deben llevar punto final. +- Los mensajes de commit deben usar un lenguaje imperativo y estar en tiempo presente, por ejemplo, usar "change" en lugar de "changed" o "changes". +- Los nombres de las ramas deben estar en minúsculas y las palabras deben separarse con guiones (-). +- Todas las fusiones a la rama principal se deben realizar mediante solicitudes de Pull Request(PR). ⬇️ +- Se debe emplear tokens como "WIP" en el encabezado de un commit, separados por dos puntos (:), por ejemplo, "WIP: this is a useful commit message". +- Una rama con nuevas funcionalidades que no tenga un PR, se considera que está en desarrollo. +- Los nombres de las ramas deben comenzar con uno de los tokens definidos. Por ejemplo: "feat/tokens-configurations". + +### Short lead tokens permitidos + +`WIP` = En progreso. + +`feat` = Nuevos features. + +`fix` = Corrección de un bug. + +`docs` = Cambios solo de documentación. + +`style` = Cambios que no afectan el significado del código. (espaciado, formateo de código, comillas faltantes, etc) + +`refactor` = Un cambio en el código que no arregla un bug ni agrega una funcionalidad. + +`perf` = Cambio que mejora el rendimiento. + +`test` = Agregar test faltantes o los corrige. + +`chore` = Cambios en el build o herramientas auxiliares y librerías. + +`revert` = Revierte un commit. + +`release` = Para liberar una nueva versión. + +### Creación de un Pull Request + +- El PR debe estar enfocado en un cambio en concreto, por ejemplo, agregar una nueva funcionalidad o solucionar un error, pero un solo PR no puede agregar una nueva funcionalidad y arreglar un error. +- El título del los PR y mensajes de commit no debe comenzar con una letra mayúscula. +- No se debe usar punto final en los títulos. +- El título del PR debe comenzar con el short lead token definido para la rama, seguido de ":"" y una breve descripción del cambio. +- La descripción del PR debe detallar los cambios que se están incorporando. +- La descripción del PR debe incluir evidencias de que los test se ejecutan de forma correcta o incluir evidencias de que los cambios funcionan y no afectan la funcionalidad previa del proyecto. +- Se pueden agregar capturas, gif o videos para complementar la descripción o demostrar el funcionamiento del PR. + +#### Flujo de trabajo + +1. Crea tu rama desde develop. +2. Haz un push de los commits y publica la nueva rama. +3. Abre un Pull Request apuntando tus cambios a develop. +4. Espera a la revisión de los demás integrantes del equipo. +5. Para poder mezclar los cambios se debe contar con 2 aprobaciones de los revisores y no tener alertas por parte de las herramientas de inspección. + +### Esquema de flujo con git -### Deploy de una nueva versión. +![gitflow](https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1324) Para generar una nueva versión, se debe crear un PR (con un título "Prepare release X.Y.Z" con los valores que correspondan para `X`, `Y` y `Z`). Se debe seguir el estándar semver para determinar si se incrementa el valor de `X` (si hay cambios no retrocompatibles), `Y` (para mejoras retrocompatibles) o `Z` (si sólo hubo correcciones a bugs). En ese PR deben incluirse los siguientes cambios: From f46f674f99006eca09b2e4418e79fd76e64eac61 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:48:35 -0400 Subject: [PATCH 28/31] docs: update release section in readme --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1a46f42..216affc 100644 --- a/README.md +++ b/README.md @@ -115,12 +115,15 @@ La documentación relevante para usar este SDK es: ### Esquema de flujo con git ![gitflow](https://wac-cdn.atlassian.com/dam/jcr:cc0b526e-adb7-4d45-874e-9bcea9898b4a/04%20Hotfix%20branches.svg?cdnVersion=1324) + +## Generar una nueva versión + Para generar una nueva versión, se debe crear un PR (con un título "Prepare release X.Y.Z" con los valores que correspondan para `X`, `Y` y `Z`). Se debe seguir el estándar semver para determinar si se incrementa el valor de `X` (si hay cambios no retrocompatibles), `Y` (para mejoras retrocompatibles) o `Z` (si sólo hubo correcciones a bugs). En ese PR deben incluirse los siguientes cambios: 1. Modificar el archivo `CHANGELOG.md` para incluir una nueva entrada (al comienzo) para `X.Y.Z` que explique en español los cambios **de cara al usuario del SDK**. -2. Modificar [__version__.py](./transbank/__version__.py) para que apunte a la nueva versión `X.Y.Z`. +2. Modificar [**version.py**](./transbank/__version__.py) para que apunte a la nueva versión `X.Y.Z`. Luego de obtener aprobación del pull request, debe mezclarse a master e inmediatamente generar un release en GitHub con el tag `vX.Y.Z`. En la descripción del release debes poner lo mismo que agregaste al changelog. From a90716c247f6a65f42d4e16e8f7b969159f746d5 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:53:32 -0400 Subject: [PATCH 29/31] docs: add release notes for version 6.1.0 --- CHANGELOG.md | 164 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 106 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3857f8f..8aafeda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,22 @@ # Changelog + Todos los cambios notables a este proyecto serán docuemntados en este archivo. El formato está basado en [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) y este proyecto adhiere a [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [6.1.0] - 2025-06-24 + +Esta versión agrega una clase para la nueva funcionalidad de la API de OneClick. Los métodos existentes no tienen cambios. + +### Agrega: + +- Se agrega la clase MallBinInfo , la cual contiene el método query_bin para la consulta de información de una tarjeta registrada en OneClick. + +### Actualiza: + +- Se actualizan las dependencias necesarias para construir el proyecto + ## [6.0.0] - 2025-05-05 Esta versión no tiene cambios en el comportamiento de las funcionalidades de la API. @@ -12,127 +25,162 @@ Esta versión no tiene cambios en el comportamiento de las funcionalidades de la El SDK ya no apunta por defecto al ambiente de integración. Ahora es necesario configurar de forma explícita las credenciales. Para esto se debe inicializar explícitamente los objetos de los distintos productos, ya sea utilizando la clase Options o a través de los nuevos métodos build_for_integration y build_for_production. ### Agrega -- Se agrega el parámetro timeout para las peticiones a la API para que pueda modificarse en todos los productos. -- Se agregan los métodos build_for_integration y build_for_production a todos los productos. - + +- Se agrega el parámetro timeout para las peticiones a la API para que pueda modificarse en todos los productos. +- Se agregan los métodos build_for_integration y build_for_production a todos los productos. + ### Actualiza -- Se configura por defecto el timeout a 600 segundos para todas las peticiones. -- Se actualizan las versiones de las dependencias. -- Se actualizan los test. - + +- Se configura por defecto el timeout a 600 segundos para todas las peticiones. +- Se actualizan las versiones de las dependencias. +- Se actualizan los test. + ### Elimina -- Se elimina el código que hace referencia al producto Webpay Modal. -- Se elimina el código que hace referencia al producto PatPass by Webpay. -- Se eliminan los métodos configure_for_integration, configure_for_production, configure_for_testing, configure_for_testing_deferred, configure_for_testing_sin_cvv, configure_for_testing_deferred_sin_cvv de todos los productos que los utilizaban. + +- Se elimina el código que hace referencia al producto Webpay Modal. +- Se elimina el código que hace referencia al producto PatPass by Webpay. +- Se eliminan los métodos configure_for_integration, configure_for_production, configure_for_testing, configure_for_testing_deferred, configure_for_testing_sin_cvv, configure_for_testing_deferred_sin_cvv de todos los productos que los utilizaban. ## [5.0.0] - 2024-02-28 + ### Changed -- Se hace downgrade al API de la versión 1.3 a la versión 1.2. + +- Se hace downgrade al API de la versión 1.3 a la versión 1.2. ### Fixed -- Retorna un boolean en el metodo delete para la Inscripción de Oneclick Mall. -- Se corrige error en el método 'refund' de Transaccion Completa. + +- Retorna un boolean en el metodo delete para la Inscripción de Oneclick Mall. +- Se corrige error en el método 'refund' de Transaccion Completa. ## [4.0.0] - 2022-09-20 + ### Changed -- Se migra el API desde la versión 1.2 a la versión 1.3 + +- Se migra el API desde la versión 1.2 a la versión 1.3 + ### Added -- Se agrega los métodos 'increaseAmount', 'increaseAuthorizationDate', 'reversePreAuthorizedAmount' y 'deferredCaptureHistory' a las versiones diferidas de WebpayPlus, WebpayPlus Mall, Oneclick Mall, Transaccion Completa y Transaccion Completa Mall -- Ahora los métodos status y commit de las versiones diferidas de WebpayPlus, WebpayPlus Mall, Transaccion Completa y Transaccion Completa Mall retornan el campo 'captureExpirationDate'. Para Oneclick Mall este campo también se agrega en los detalles de la autorización + +- Se agrega los métodos 'increaseAmount', 'increaseAuthorizationDate', 'reversePreAuthorizedAmount' y 'deferredCaptureHistory' a las versiones diferidas de WebpayPlus, WebpayPlus Mall, Oneclick Mall, Transaccion Completa y Transaccion Completa Mall +- Ahora los métodos status y commit de las versiones diferidas de WebpayPlus, WebpayPlus Mall, Transaccion Completa y Transaccion Completa Mall retornan el campo 'captureExpirationDate'. Para Oneclick Mall este campo también se agrega en los detalles de la autorización ## [3.0.1] - 2022-07-13 + ### Fixed -- Actualización de versión mínima requerida de dependencia Marshmallow. -- Se corrige el método 'has_text' de la clase 'ValidationUtil'. [PR #97](https://github.com/TransbankDevelopers/transbank-sdk-python/pull/97) de [@aduquehd](https://github.com/aduquehd) +- Actualización de versión mínima requerida de dependencia Marshmallow. +- Se corrige el método 'has_text' de la clase 'ValidationUtil'. [PR #97](https://github.com/TransbankDevelopers/transbank-sdk-python/pull/97) de [@aduquehd](https://github.com/aduquehd) ## [3.0.0] - 2022-01-27 ### Removed -- Se elimina Onepay +- Se elimina Onepay ### Changed -- Se refactoriza y migra todos los productos desde clases estáticas a clases instanciables -- Todas las respuestas de los métodos pasan a ser 'dictionaries' -- Se unifica 'Transaction' y 'DeferredTransaction' en WebpayPlus -- Se unifica 'MallTransaction' y 'MallDeferredTransaction' en WebpayPlus y Oneclick -- Se reordenan los parámetros del método refund de WebpayPlus Mall a 'refund(token: str, child_buy_order: str, child_commerce_code:str, amount: float)' -- Se reordenan los parámetros del método capture de WebpayPlus Mall a 'capture(child_commerce_code: str, token: str, buy_order: str, authorization_code: str, capture_amount: float)' -- Se reordenan los parámetros del método create de Transacción Completa a 'create(buy_order: str, session_id: str, amount: float, cvv: str, card_number: str, card_expiration_date: str) -- Se reordenan los parámetros del método create de Transacción Completa Mall a 'create(buy_order: str, session_id: str, card_number: str, card_expiration_date: str, details: list, cvv: str = None)' +- Se refactoriza y migra todos los productos desde clases estáticas a clases instanciables +- Todas las respuestas de los métodos pasan a ser 'dictionaries' +- Se unifica 'Transaction' y 'DeferredTransaction' en WebpayPlus +- Se unifica 'MallTransaction' y 'MallDeferredTransaction' en WebpayPlus y Oneclick +- Se reordenan los parámetros del método refund de WebpayPlus Mall a 'refund(token: str, child_buy_order: str, child_commerce_code:str, amount: float)' +- Se reordenan los parámetros del método capture de WebpayPlus Mall a 'capture(child_commerce_code: str, token: str, buy_order: str, authorization_code: str, capture_amount: float)' +- Se reordenan los parámetros del método create de Transacción Completa a 'create(buy_order: str, session_id: str, amount: float, cvv: str, card_number: str, card_expiration_date: str) +- Se reordenan los parámetros del método create de Transacción Completa Mall a 'create(buy_order: str, session_id: str, card_number: str, card_expiration_date: str, details: list, cvv: str = None)' ### Added -- Se agrega soporte a Webpay Modal -- Se agregan validaciones de obligatoriedad y tamaño de los parámetros a los métodos de WebpayPlus, Oneclick, Webpay Modal, Transacción Completa -- Se agrega una clase de constantes con los códigos de comercio de integración: 'IntegrationCommerceCodes' -- Se agrega una clase de constantes con las claves de comercio de integración: 'IntegrationApiKeys' -- Se agrega el método capture a Oneclick 'capture(child_commerce_code: str, child_buy_order: str, authorization_code: str, capture_amount: float)' +- Se agrega soporte a Webpay Modal +- Se agregan validaciones de obligatoriedad y tamaño de los parámetros a los métodos de WebpayPlus, Oneclick, Webpay Modal, Transacción Completa +- Se agrega una clase de constantes con los códigos de comercio de integración: 'IntegrationCommerceCodes' +- Se agrega una clase de constantes con las claves de comercio de integración: 'IntegrationApiKeys' +- Se agrega el método capture a Oneclick 'capture(child_commerce_code: str, child_buy_order: str, authorization_code: str, capture_amount: float)' ## [2.0.1] - 2021-10-28 + ### Fixed -- Actualización de versión mínima requerida de dependencia Marshmallow. + +- Actualización de versión mínima requerida de dependencia Marshmallow. ### Security -- Actualización de dependencia urllib3 a una versión libre de vulnerabilidades. +- Actualización de dependencia urllib3 a una versión libre de vulnerabilidades. ## [2.0.0] - 2021-10-19 + ### Added + Los métodos apuntan a la versión 1.2 del API de Transbank, por lo que ahora las redirecciones de vuelta en el returnUrl serán por GET en vez de POST. ## [1.5.0] - 2021-05-27 + ### Added -- Se agrega soporte para Captura Diferida en Transacción Completa modalidad normal y mall. + +- Se agrega soporte para Captura Diferida en Transacción Completa modalidad normal y mall. ## [1.4.0] - 2021-02-25 + ### Added -- Se agregan métodos para hacer más simple la configuración de Webpay Plus -- Se agregan tests en Webpay Plus + +- Se agregan métodos para hacer más simple la configuración de Webpay Plus +- Se agregan tests en Webpay Plus ### Fixed -- Se arregla acumulación en transacciones mall. Gracias @jalvaradosegura -- Se arreglan llamadas a estado en transacción inicializada -- Se arregla llamada a commit en pagos usando Onepay dentro de Webpay + +- Se arregla acumulación en transacciones mall. Gracias @jalvaradosegura +- Se arreglan llamadas a estado en transacción inicializada +- Se arregla llamada a commit en pagos usando Onepay dentro de Webpay ## [1.3.0] - 2020-11-12 + ### Added -- Se agrega soporte para: - - Webpay Plus Rest - - modalidad normal - - modalidad captura diferida - - modalidad mall - - modalidad mall captura diferida - - Patpass by Webpay Rest - - Patpass Comercio Rest - - Transacción completa Rest - - modalidad mall + +- Se agrega soporte para: + - Webpay Plus Rest + - modalidad normal + - modalidad captura diferida + - modalidad mall + - modalidad mall captura diferida + - Patpass by Webpay Rest + - Patpass Comercio Rest + - Transacción completa Rest + - modalidad mall + ### Fixed -- Se arregla constructor de Oneclick Inscription Finish para soportar parámetros opcionales al abortar pago. Gracias a @atpollmann + +- Se arregla constructor de Oneclick Inscription Finish para soportar parámetros opcionales al abortar pago. Gracias a @atpollmann ## [1.2.1] - 2020-10-08 + ### Fixed -- Se arregla error en la respuesta de OneClick Mall [PR #69](https://github.com/TransbankDevelopers/transbank-sdk-python/pull/69) de [@hsandovaltides](https://github.com/hsandovaltides) -- Ahora se lanza excepción si se pasa un valor que no sea integer en el campo amount. [PR 68](ttps://github.com/TransbankDevelopers/transbank-sdk-python/pull/68) + +- Se arregla error en la respuesta de OneClick Mall [PR #69](https://github.com/TransbankDevelopers/transbank-sdk-python/pull/69) de [@hsandovaltides](https://github.com/hsandovaltides) +- Ahora se lanza excepción si se pasa un valor que no sea integer en el campo amount. [PR 68](ttps://github.com/TransbankDevelopers/transbank-sdk-python/pull/68) ## [1.2.0] - 2019-12-26 + ### Added -- Se agrega soporte para Oneclick Mall y Transacción Completa en sus versiones REST. + +- Se agrega soporte para Oneclick Mall y Transacción Completa en sus versiones REST. ## [1.1.0] - 2019-04-04 + ### Added -- Se agregaron los parámetros `qr_width_height` y `commerce_logo_url` a Options, para especificar el tamaño del QR generado para la transacción, y especificar la ubicación del logo de comercio para ser mostrado en la aplicación móvil de Onepay. Puedes configurar estos parámetros globalmente o por transacción. + +- Se agregaron los parámetros `qr_width_height` y `commerce_logo_url` a Options, para especificar el tamaño del QR generado para la transacción, y especificar la ubicación del logo de comercio para ser mostrado en la aplicación móvil de Onepay. Puedes configurar estos parámetros globalmente o por transacción. ## [1.0.1] - 2018-11-07 + ### Fixed -- En Onepay, se corrige error que impedía crear una transacción desde iOS. + +- En Onepay, se corrige error que impedía crear una transacción desde iOS. ### Security -- Actualización de dependencia a una versión libre de vulnerabilidades. + +- Actualización de dependencia a una versión libre de vulnerabilidades. ## [1.0.0] - 2018-10-23 + ### Added -- Primera versión del SDK de Transbank, que contiene solamente las funcionalidades para implementar Onepay. + +- Primera versión del SDK de Transbank, que contiene solamente las funcionalidades para implementar Onepay. From 06605069f05d4c970645177f414250d77d91d4b1 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:54:41 -0400 Subject: [PATCH 30/31] docs: fix typos in changelog --- CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8aafeda..f9ecd63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -Todos los cambios notables a este proyecto serán docuemntados en este archivo. +Todos los cambios notables a este proyecto serán documentados en este archivo. El formato está basado en [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) y este proyecto adhiere a [Semantic Versioning](http://semver.org/spec/v2.0.0.html). @@ -49,8 +49,8 @@ El SDK ya no apunta por defecto al ambiente de integración. Ahora es necesario ### Fixed -- Retorna un boolean en el metodo delete para la Inscripción de Oneclick Mall. -- Se corrige error en el método 'refund' de Transaccion Completa. +- Retorna un boolean en el método delete para la Inscripción de Oneclick Mall. +- Se corrige error en el método 'refund' de Transacción Completa. ## [4.0.0] - 2022-09-20 @@ -60,8 +60,8 @@ El SDK ya no apunta por defecto al ambiente de integración. Ahora es necesario ### Added -- Se agrega los métodos 'increaseAmount', 'increaseAuthorizationDate', 'reversePreAuthorizedAmount' y 'deferredCaptureHistory' a las versiones diferidas de WebpayPlus, WebpayPlus Mall, Oneclick Mall, Transaccion Completa y Transaccion Completa Mall -- Ahora los métodos status y commit de las versiones diferidas de WebpayPlus, WebpayPlus Mall, Transaccion Completa y Transaccion Completa Mall retornan el campo 'captureExpirationDate'. Para Oneclick Mall este campo también se agrega en los detalles de la autorización +- Se agrega los métodos 'increaseAmount', 'increaseAuthorizationDate', 'reversePreAuthorizedAmount' y 'deferredCaptureHistory' a las versiones diferidas de WebpayPlus, WebpayPlus Mall, Oneclick Mall, Transacción Completa y Transacción Completa Mall +- Ahora los métodos status y commit de las versiones diferidas de WebpayPlus, WebpayPlus Mall, Transacción Completa y Transacción Completa Mall retornan el campo 'captureExpirationDate'. Para Oneclick Mall este campo también se agrega en los detalles de la autorización ## [3.0.1] - 2022-07-13 From 3e8b92e6dd6d53a46ab9b731732053ae5675ee41 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Tue, 24 Jun 2025 15:54:59 -0400 Subject: [PATCH 31/31] chore: update sdk version --- transbank/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transbank/__version__.py b/transbank/__version__.py index be56b5c..90b82ed 100644 --- a/transbank/__version__.py +++ b/transbank/__version__.py @@ -1,3 +1,3 @@ -VERSION = (6, 0, 0) +VERSION = (6, 1, 0) __version__ = '.'.join(map(str, VERSION))