Organize test-cases into folders, extract compatibility test into proper test, support adding test-case specific tests
This commit is contained in:
parent
3546f55146
commit
b12f1e4e61
2
Pipfile
2
Pipfile
@ -20,6 +20,8 @@ stringcase = "*"
|
|||||||
black = "*"
|
black = "*"
|
||||||
backports-datetime-fromisoformat = "*"
|
backports-datetime-fromisoformat = "*"
|
||||||
dataclasses = "*"
|
dataclasses = "*"
|
||||||
|
betterproto = {editable = true,path = "."}
|
||||||
|
pytest-asyncio = "*"
|
||||||
|
|
||||||
[requires]
|
[requires]
|
||||||
python_version = "3.6"
|
python_version = "3.6"
|
||||||
|
284
Pipfile.lock
generated
284
Pipfile.lock
generated
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "b8fc738d4e14598e36269ce0d849489f95562ba047e5663caca9ac02550893ef"
|
"sha256": "9d2ee95f2c962097d22375cb461ceaefc40467919d53d80f7ed2541794d8fd6b"
|
||||||
},
|
},
|
||||||
"pipfile-spec": 6,
|
"pipfile-spec": 6,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -18,10 +18,10 @@
|
|||||||
"default": {
|
"default": {
|
||||||
"appdirs": {
|
"appdirs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
|
"sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41",
|
||||||
"sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
|
"sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"
|
||||||
],
|
],
|
||||||
"version": "==1.4.3"
|
"version": "==1.4.4"
|
||||||
},
|
},
|
||||||
"attrs": {
|
"attrs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -37,6 +37,10 @@
|
|||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==1.0.0"
|
"version": "==1.0.0"
|
||||||
},
|
},
|
||||||
|
"betterproto": {
|
||||||
|
"editable": true,
|
||||||
|
"path": "."
|
||||||
|
},
|
||||||
"black": {
|
"black": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b",
|
"sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b",
|
||||||
@ -47,18 +51,18 @@
|
|||||||
},
|
},
|
||||||
"click": {
|
"click": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc",
|
"sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a",
|
||||||
"sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a"
|
"sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"
|
||||||
],
|
],
|
||||||
"version": "==7.1.1"
|
"version": "==7.1.2"
|
||||||
},
|
},
|
||||||
"dataclasses": {
|
"dataclasses": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:454a69d788c7fda44efd71e259be79577822f5e3f53f029a22d08004e951dc9f",
|
"sha256:3459118f7ede7c8bea0fe795bff7c6c2ce287d01dd226202f7c9ebc0610a7836",
|
||||||
"sha256:6988bd2b895eef432d562370bb707d540f32f7360ab13da45340101bc2307d84"
|
"sha256:494a6dcae3b8bcf80848eea2ef64c0cc5cd307ffc263e17cdf42f3e5420808e6"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.6"
|
"version": "==0.7"
|
||||||
},
|
},
|
||||||
"grpclib": {
|
"grpclib": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -88,6 +92,14 @@
|
|||||||
],
|
],
|
||||||
"version": "==5.2.0"
|
"version": "==5.2.0"
|
||||||
},
|
},
|
||||||
|
"importlib-metadata": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f",
|
||||||
|
"sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"
|
||||||
|
],
|
||||||
|
"markers": "python_version < '3.8'",
|
||||||
|
"version": "==1.6.0"
|
||||||
|
},
|
||||||
"jinja2": {
|
"jinja2": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:c10142f819c2d22bdcd17548c46fa9b77cf4fda45097854c689666bf425e7484",
|
"sha256:c10142f819c2d22bdcd17548c46fa9b77cf4fda45097854c689666bf425e7484",
|
||||||
@ -123,27 +135,41 @@
|
|||||||
],
|
],
|
||||||
"version": "==2.0.0a1"
|
"version": "==2.0.0a1"
|
||||||
},
|
},
|
||||||
|
"more-itertools": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:558bb897a2232f5e4f8e2399089e35aecb746e1f9191b6584a151647e89267be",
|
||||||
|
"sha256:7818f596b1e87be009031c7653d01acc46ed422e6656b394b0f765ce66ed4982"
|
||||||
|
],
|
||||||
|
"version": "==8.3.0"
|
||||||
|
},
|
||||||
"multidict": {
|
"multidict": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:317f96bc0950d249e96d8d29ab556d01dd38888fbe68324f46fd834b430169f1",
|
"sha256:1ece5a3369835c20ed57adadc663400b5525904e53bae59ec854a5d36b39b21a",
|
||||||
"sha256:42f56542166040b4474c0c608ed051732033cd821126493cf25b6c276df7dd35",
|
"sha256:275ca32383bc5d1894b6975bb4ca6a7ff16ab76fa622967625baeebcf8079000",
|
||||||
"sha256:4b7df040fb5fe826d689204f9b544af469593fb3ff3a069a6ad3409f742f5928",
|
"sha256:3750f2205b800aac4bb03b5ae48025a64e474d2c6cc79547988ba1d4122a09e2",
|
||||||
"sha256:544fae9261232a97102e27a926019100a9db75bec7b37feedd74b3aa82f29969",
|
"sha256:4538273208e7294b2659b1602490f4ed3ab1c8cf9dbdd817e0e9db8e64be2507",
|
||||||
"sha256:620b37c3fea181dab09267cd5a84b0f23fa043beb8bc50d8474dd9694de1fa6e",
|
"sha256:5141c13374e6b25fe6bf092052ab55c0c03d21bd66c94a0e3ae371d3e4d865a5",
|
||||||
"sha256:6e6fef114741c4d7ca46da8449038ec8b1e880bbe68674c01ceeb1ac8a648e78",
|
"sha256:51a4d210404ac61d32dada00a50ea7ba412e6ea945bbe992e4d7a595276d2ec7",
|
||||||
"sha256:7774e9f6c9af3f12f296131453f7b81dabb7ebdb948483362f5afcaac8a826f1",
|
"sha256:5cf311a0f5ef80fe73e4f4c0f0998ec08f954a6ec72b746f3c179e37de1d210d",
|
||||||
"sha256:85cb26c38c96f76b7ff38b86c9d560dea10cf3459bb5f4caf72fc1bb932c7136",
|
"sha256:6513728873f4326999429a8b00fc7ceddb2509b01d5fd3f3be7881a257b8d463",
|
||||||
"sha256:a326f4240123a2ac66bb163eeba99578e9d63a8654a59f4688a79198f9aa10f8",
|
"sha256:7388d2ef3c55a8ba80da62ecfafa06a1c097c18032a501ffd4cabbc52d7f2b19",
|
||||||
"sha256:ae402f43604e3b2bc41e8ea8b8526c7fa7139ed76b0d64fc48e28125925275b2",
|
"sha256:9456e90649005ad40558f4cf51dbb842e32807df75146c6d940b6f5abb4a78f3",
|
||||||
"sha256:aee283c49601fa4c13adc64c09c978838a7e812f85377ae130a24d7198c0331e",
|
"sha256:c026fe9a05130e44157b98fea3ab12969e5b60691a276150db9eda71710cd10b",
|
||||||
"sha256:b51249fdd2923739cd3efc95a3d6c363b67bbf779208e9f37fd5e68540d1a4d4",
|
"sha256:d14842362ed4cf63751648e7672f7174c9818459d169231d03c56e84daf90b7c",
|
||||||
"sha256:bb519becc46275c594410c6c28a8a0adc66fe24fef154a9addea54c1adb006f5",
|
"sha256:e0d072ae0f2a179c375f67e3da300b47e1a83293c554450b29c900e50afaae87",
|
||||||
"sha256:c2c37185fb0af79d5c117b8d2764f4321eeb12ba8c141a95d0aa8c2c1d0a11dd",
|
"sha256:f07acae137b71af3bb548bd8da720956a3bc9f9a0b87733e0899226a2317aeb7",
|
||||||
"sha256:dc561313279f9d05a3d0ffa89cd15ae477528ea37aa9795c4654588a3287a9ab",
|
"sha256:fbb77a75e529021e7c4a8d4e823d88ef4d23674a202be4f5addffc72cbb91430",
|
||||||
"sha256:e439c9a10a95cb32abd708bb8be83b2134fa93790a4fb0535ca36db3dda94d20",
|
"sha256:fcfbb44c59af3f8ea984de67ec7c306f618a3ec771c2843804069917a8f2e255",
|
||||||
"sha256:fc3b4adc2ee8474cb3cd2a155305d5f8eda0a9c91320f83e55748e1fcb68f8e3"
|
"sha256:feed85993dbdb1dbc29102f50bca65bdc68f2c0c8d352468c25b54874f23c39d"
|
||||||
],
|
],
|
||||||
"version": "==4.7.5"
|
"version": "==4.7.6"
|
||||||
|
},
|
||||||
|
"packaging": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8",
|
||||||
|
"sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"
|
||||||
|
],
|
||||||
|
"version": "==20.4"
|
||||||
},
|
},
|
||||||
"pathspec": {
|
"pathspec": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -152,62 +178,95 @@
|
|||||||
],
|
],
|
||||||
"version": "==0.8.0"
|
"version": "==0.8.0"
|
||||||
},
|
},
|
||||||
|
"pluggy": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
|
||||||
|
"sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
|
||||||
|
],
|
||||||
|
"version": "==0.13.1"
|
||||||
|
},
|
||||||
"protobuf": {
|
"protobuf": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0bae429443cc4748be2aadfdaf9633297cfaeb24a9a02d0ab15849175ce90fab",
|
"sha256:04d0b2bd99050d09393875a5a25fd12337b17f3ac2e29c0c1b8e65b277cbfe72",
|
||||||
"sha256:24e3b6ad259544d717902777b33966a1a069208c885576254c112663e6a5bb0f",
|
"sha256:05288e44638e91498f13127a3699a6528dec6f9d3084d60959d721bfb9ea5b98",
|
||||||
"sha256:310a7aca6e7f257510d0c750364774034272538d51796ca31d42c3925d12a52a",
|
"sha256:175d85370947f89e33b3da93f4ccdda3f326bebe3e599df5915ceb7f804cd9df",
|
||||||
"sha256:52e586072612c1eec18e1174f8e3bb19d08f075fc2e3f91d3b16c919078469d0",
|
"sha256:440a8c77531b3652f24999b249256ed01fd44c498ab0973843066681bd276685",
|
||||||
"sha256:73152776dc75f335c476d11d52ec6f0f6925774802cd48d6189f4d5d7fe753f4",
|
"sha256:49fb6fab19cd3f30fa0e976eeedcbf2558e9061e5fa65b4fe51ded1f4002e04d",
|
||||||
"sha256:7774bbbaac81d3ba86de646c39f154afc8156717972bf0450c9dbfa1dc8dbea2",
|
"sha256:4c7cae1f56056a4a2a2e3b00b26ab8550eae738bd9548f4ea0c2fcb88ed76ae5",
|
||||||
"sha256:82d7ac987715d8d1eb4068bf997f3053468e0ce0287e2729c30601feb6602fee",
|
"sha256:519abfacbb421c3591d26e8daf7a4957763428db7267f7207e3693e29f6978db",
|
||||||
"sha256:8eb9c93798b904f141d9de36a0ba9f9b73cc382869e67c9e642c0aba53b0fc07",
|
"sha256:60f32af25620abc4d7928d8197f9f25d49d558c5959aa1e08c686f974ac0b71a",
|
||||||
"sha256:adf0e4d57b33881d0c63bb11e7f9038f98ee0c3e334c221f0858f826e8fb0151",
|
"sha256:613ac49f6db266fba243daf60fb32af107cfe3678e5c003bb40a381b6786389d",
|
||||||
"sha256:c40973a0aee65422d8cb4e7d7cbded95dfeee0199caab54d5ab25b63bce8135a",
|
"sha256:954bb14816edd24e746ba1a6b2d48c43576393bbde2fb8e1e3bd6d4504c7feac",
|
||||||
"sha256:c77c974d1dadf246d789f6dad1c24426137c9091e930dbf50e0a29c1fcf00b1f",
|
"sha256:9b1462c033a2cee7f4e8eb396905c69de2c532c3b835ff8f71f8e5fb77c38023",
|
||||||
"sha256:dd9aa4401c36785ea1b6fff0552c674bdd1b641319cb07ed1fe2392388e9b0d7",
|
"sha256:c0767f4d93ce4288475afe0571663c78870924f1f8881efd5406c10f070c75e4",
|
||||||
"sha256:e11df1ac6905e81b815ab6fd518e79be0a58b5dc427a2cf7208980f30694b956",
|
"sha256:c45f5980ce32879391144b5766120fd7b8803129f127ce36bd060dd38824801f",
|
||||||
"sha256:e2f8a75261c26b2f5f3442b0525d50fd79a71aeca04b5ec270fc123536188306",
|
"sha256:eeb7502f59e889a88bcb59f299493e215d1864f3d75335ea04a413004eb4fe24",
|
||||||
"sha256:e512b7f3a4dd780f59f1bf22c302740e27b10b5c97e858a6061772668cd6f961",
|
"sha256:fdb1742f883ee4662e39fcc5916f2725fec36a5191a52123fec60f8c53b70495",
|
||||||
"sha256:ef2c2e56aaf9ee914d3dccc3408d42661aaf7d9bb78eaa8f17b2e6282f214481",
|
"sha256:fe554066c4962c2db0a1d4752655223eb948d2bfa0fb1c4a7f2c00ec07324f1c"
|
||||||
"sha256:fac513a9dc2a74b99abd2e17109b53945e364649ca03d9f7a0b96aa8d1807d0a",
|
|
||||||
"sha256:fdfb6ad138dbbf92b5dbea3576d7c8ba7463173f7d2cb0ca1bd336ec88ddbd80"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==3.11.3"
|
"version": "==3.12.1"
|
||||||
|
},
|
||||||
|
"py": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
|
||||||
|
"sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
|
||||||
|
],
|
||||||
|
"version": "==1.8.1"
|
||||||
|
},
|
||||||
|
"pyparsing": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:67199f0c41a9c702154efb0e7a8cc08accf830eb003b4d9fa42c4059002e2492",
|
||||||
|
"sha256:700d17888d441604b0bd51535908dcb297561b040819cccde647a92439db5a2a"
|
||||||
|
],
|
||||||
|
"version": "==3.0.0a1"
|
||||||
|
},
|
||||||
|
"pytest": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:95c710d0a72d91c13fae35dce195633c929c3792f54125919847fdcdf7caa0d3",
|
||||||
|
"sha256:eb2b5e935f6a019317e455b6da83dd8650ac9ffd2ee73a7b657a30873d67a698"
|
||||||
|
],
|
||||||
|
"version": "==5.4.2"
|
||||||
|
},
|
||||||
|
"pytest-asyncio": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:475bd2f3dc0bc11d2463656b3cbaafdbec5a47b47508ea0b329ee693040eebd2"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==0.12.0"
|
||||||
},
|
},
|
||||||
"regex": {
|
"regex": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:08119f707f0ebf2da60d2f24c2f39ca616277bb67ef6c92b72cbf90cbe3a556b",
|
"sha256:1386e75c9d1574f6aa2e4eb5355374c8e55f9aac97e224a8a5a6abded0f9c927",
|
||||||
"sha256:0ce9537396d8f556bcfc317c65b6a0705320701e5ce511f05fc04421ba05b8a8",
|
"sha256:27ff7325b297fb6e5ebb70d10437592433601c423f5acf86e5bc1ee2919b9561",
|
||||||
"sha256:1cbe0fa0b7f673400eb29e9ef41d4f53638f65f9a2143854de6b1ce2899185c3",
|
"sha256:329ba35d711e3428db6b45a53b1b13a0a8ba07cbbcf10bbed291a7da45f106c3",
|
||||||
"sha256:2294f8b70e058a2553cd009df003a20802ef75b3c629506be20687df0908177e",
|
"sha256:3a9394197664e35566242686d84dfd264c07b20f93514e2e09d3c2b3ffdf78fe",
|
||||||
"sha256:23069d9c07e115537f37270d1d5faea3e0bdded8279081c4d4d607a2ad393683",
|
"sha256:51f17abbe973c7673a61863516bdc9c0ef467407a940f39501e786a07406699c",
|
||||||
"sha256:24f4f4062eb16c5bbfff6a22312e8eab92c2c99c51a02e39b4eae54ce8255cd1",
|
"sha256:579ea215c81d18da550b62ff97ee187b99f1b135fd894a13451e00986a080cad",
|
||||||
"sha256:295badf61a51add2d428a46b8580309c520d8b26e769868b922750cf3ce67142",
|
"sha256:70c14743320a68c5dac7fc5a0f685be63bc2024b062fe2aaccc4acc3d01b14a1",
|
||||||
"sha256:2a3bf8b48f8e37c3a40bb3f854bf0121c194e69a650b209628d951190b862de3",
|
"sha256:7e61be8a2900897803c293247ef87366d5df86bf701083b6c43119c7c6c99108",
|
||||||
"sha256:4385f12aa289d79419fede43f979e372f527892ac44a541b5446617e4406c468",
|
"sha256:8044d1c085d49673aadb3d7dc20ef5cb5b030c7a4fa253a593dda2eab3059929",
|
||||||
"sha256:5635cd1ed0a12b4c42cce18a8d2fb53ff13ff537f09de5fd791e97de27b6400e",
|
"sha256:89d76ce33d3266173f5be80bd4efcbd5196cafc34100fdab814f9b228dee0fa4",
|
||||||
"sha256:5bfed051dbff32fd8945eccca70f5e22b55e4148d2a8a45141a3b053d6455ae3",
|
"sha256:99568f00f7bf820c620f01721485cad230f3fb28f57d8fbf4a7967ec2e446994",
|
||||||
"sha256:7e1037073b1b7053ee74c3c6c0ada80f3501ec29d5f46e42669378eae6d4405a",
|
"sha256:a7c37f048ec3920783abab99f8f4036561a174f1314302ccfa4e9ad31cb00eb4",
|
||||||
"sha256:90742c6ff121a9c5b261b9b215cb476eea97df98ea82037ec8ac95d1be7a034f",
|
"sha256:c2062c7d470751b648f1cacc3f54460aebfc261285f14bc6da49c6943bd48bdd",
|
||||||
"sha256:a58dd45cb865be0ce1d5ecc4cfc85cd8c6867bea66733623e54bd95131f473b6",
|
"sha256:c9bce6e006fbe771a02bda468ec40ffccbf954803b470a0345ad39c603402577",
|
||||||
"sha256:c087bff162158536387c53647411db09b6ee3f9603c334c90943e97b1052a156",
|
"sha256:ce367d21f33e23a84fb83a641b3834dd7dd8e9318ad8ff677fbfae5915a239f7",
|
||||||
"sha256:c162a21e0da33eb3d31a3ac17a51db5e634fc347f650d271f0305d96601dc15b",
|
"sha256:ce450ffbfec93821ab1fea94779a8440e10cf63819be6e176eb1973a6017aff5",
|
||||||
"sha256:c9423a150d3a4fc0f3f2aae897a59919acd293f4cb397429b120a5fcd96ea3db",
|
"sha256:ce5cc53aa9fbbf6712e92c7cf268274eaff30f6bd12a0754e8133d85a8fb0f5f",
|
||||||
"sha256:ccccdd84912875e34c5ad2d06e1989d890d43af6c2242c6fcfa51556997af6cd",
|
"sha256:d466967ac8e45244b9dfe302bbe5e3337f8dc4dec8d7d10f5e950d83b140d33a",
|
||||||
"sha256:e91ba11da11cf770f389e47c3f5c30473e6d85e06d7fd9dcba0017d2867aab4a",
|
"sha256:d881c2e657c51d89f02ae4c21d9adbef76b8325fe4d5cf0e9ad62f850f3a98fd",
|
||||||
"sha256:ea4adf02d23b437684cd388d557bf76e3afa72f7fed5bbc013482cc00c816948",
|
"sha256:e565569fc28e3ba3e475ec344d87ed3cd8ba2d575335359749298a0899fe122e",
|
||||||
"sha256:fb95debbd1a824b2c4376932f2216cc186912e389bdb0e27147778cf6acb3f89"
|
"sha256:ea55b80eb0d1c3f1d8d784264a6764f931e172480a2f1868f2536444c5f01e01"
|
||||||
],
|
],
|
||||||
"version": "==2020.4.4"
|
"version": "==2020.5.14"
|
||||||
},
|
},
|
||||||
"six": {
|
"six": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
|
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
|
||||||
"sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
|
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
|
||||||
],
|
],
|
||||||
"version": "==1.14.0"
|
"version": "==1.15.0"
|
||||||
},
|
},
|
||||||
"stringcase": {
|
"stringcase": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -218,10 +277,10 @@
|
|||||||
},
|
},
|
||||||
"toml": {
|
"toml": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
|
"sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f",
|
||||||
"sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
|
"sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"
|
||||||
],
|
],
|
||||||
"version": "==0.10.0"
|
"version": "==0.10.1"
|
||||||
},
|
},
|
||||||
"typed-ast": {
|
"typed-ast": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -248,6 +307,20 @@
|
|||||||
"sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"
|
"sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"
|
||||||
],
|
],
|
||||||
"version": "==1.4.1"
|
"version": "==1.4.1"
|
||||||
|
},
|
||||||
|
"wcwidth": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1",
|
||||||
|
"sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"
|
||||||
|
],
|
||||||
|
"version": "==0.1.9"
|
||||||
|
},
|
||||||
|
"zipp": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
|
||||||
|
"sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
|
||||||
|
],
|
||||||
|
"version": "==3.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"develop": {
|
"develop": {
|
||||||
@ -258,20 +331,13 @@
|
|||||||
],
|
],
|
||||||
"version": "==19.3.0"
|
"version": "==19.3.0"
|
||||||
},
|
},
|
||||||
"entrypoints": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19",
|
|
||||||
"sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"
|
|
||||||
],
|
|
||||||
"version": "==0.3"
|
|
||||||
},
|
|
||||||
"flake8": {
|
"flake8": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb",
|
"sha256:6c1193b0c3f853ef763969238f6c81e9e63ace9d024518edc020d5f1d6d93195",
|
||||||
"sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"
|
"sha256:ea6623797bf9a52f4c9577d780da0bb17d65f870213f7b5bcc9fca82540c31d5"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==3.7.9"
|
"version": "==3.8.1"
|
||||||
},
|
},
|
||||||
"importlib-metadata": {
|
"importlib-metadata": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -298,10 +364,10 @@
|
|||||||
},
|
},
|
||||||
"more-itertools": {
|
"more-itertools": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c",
|
"sha256:558bb897a2232f5e4f8e2399089e35aecb746e1f9191b6584a151647e89267be",
|
||||||
"sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"
|
"sha256:7818f596b1e87be009031c7653d01acc46ed422e6656b394b0f765ce66ed4982"
|
||||||
],
|
],
|
||||||
"version": "==8.2.0"
|
"version": "==8.3.0"
|
||||||
},
|
},
|
||||||
"mypy": {
|
"mypy": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -332,10 +398,10 @@
|
|||||||
},
|
},
|
||||||
"packaging": {
|
"packaging": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3",
|
"sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8",
|
||||||
"sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"
|
"sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"
|
||||||
],
|
],
|
||||||
"version": "==20.3"
|
"version": "==20.4"
|
||||||
},
|
},
|
||||||
"pluggy": {
|
"pluggy": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -353,17 +419,17 @@
|
|||||||
},
|
},
|
||||||
"pycodestyle": {
|
"pycodestyle": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56",
|
"sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367",
|
||||||
"sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"
|
"sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"
|
||||||
],
|
],
|
||||||
"version": "==2.5.0"
|
"version": "==2.6.0"
|
||||||
},
|
},
|
||||||
"pyflakes": {
|
"pyflakes": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
|
"sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92",
|
||||||
"sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
|
"sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"
|
||||||
],
|
],
|
||||||
"version": "==2.1.1"
|
"version": "==2.2.0"
|
||||||
},
|
},
|
||||||
"pyparsing": {
|
"pyparsing": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -374,35 +440,31 @@
|
|||||||
},
|
},
|
||||||
"pytest": {
|
"pytest": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172",
|
"sha256:95c710d0a72d91c13fae35dce195633c929c3792f54125919847fdcdf7caa0d3",
|
||||||
"sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970"
|
"sha256:eb2b5e935f6a019317e455b6da83dd8650ac9ffd2ee73a7b657a30873d67a698"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"version": "==5.4.2"
|
||||||
"version": "==5.4.1"
|
|
||||||
},
|
},
|
||||||
"pytest-asyncio": {
|
"pytest-asyncio": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:9fac5100fd716cbecf6ef89233e8590a4ad61d729d1732e0a96b84182df1daaf",
|
"sha256:475bd2f3dc0bc11d2463656b3cbaafdbec5a47b47508ea0b329ee693040eebd2"
|
||||||
"sha256:d734718e25cfc32d2bf78d346e99d33724deeba774cc4afdf491530c6184b63b"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.10.0"
|
"version": "==0.12.0"
|
||||||
},
|
},
|
||||||
"rope": {
|
"rope": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:52423a7eebb5306a6d63bdc91a7c657db51ac9babfb8341c9a1440831ecf3203",
|
"sha256:658ad6705f43dcf3d6df379da9486529cf30e02d9ea14c5682aa80eb33b649e1"
|
||||||
"sha256:ae1fa2fd56f64f4cc9be46493ce54bed0dd12dee03980c61a4393d89d84029ad",
|
|
||||||
"sha256:d2830142c2e046f5fc26a022fe680675b6f48f81c7fc1f03a950706e746e9dfe"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.16.0"
|
"version": "==0.17.0"
|
||||||
},
|
},
|
||||||
"six": {
|
"six": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
|
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
|
||||||
"sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
|
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
|
||||||
],
|
],
|
||||||
"version": "==1.14.0"
|
"version": "==1.15.0"
|
||||||
},
|
},
|
||||||
"typed-ast": {
|
"typed-ast": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
2
betterproto/plugin.bat
Normal file
2
betterproto/plugin.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@SET plugin_dir=%~dp0
|
||||||
|
@python %plugin_dir%/plugin.py %*
|
@ -1,84 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
import os
|
|
||||||
|
|
||||||
# Force pure-python implementation instead of C++, otherwise imports
|
|
||||||
# break things because we can't properly reset the symbol database.
|
|
||||||
os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"
|
|
||||||
|
|
||||||
import importlib
|
|
||||||
import json
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
from typing import Generator, Tuple
|
|
||||||
|
|
||||||
from google.protobuf import symbol_database
|
|
||||||
from google.protobuf.descriptor_pool import DescriptorPool
|
|
||||||
from google.protobuf.json_format import MessageToJson, Parse
|
|
||||||
|
|
||||||
|
|
||||||
root = os.path.dirname(os.path.realpath(__file__))
|
|
||||||
|
|
||||||
|
|
||||||
def get_files(end: str) -> Generator[str, None, None]:
|
|
||||||
for r, dirs, files in os.walk(root):
|
|
||||||
for filename in [f for f in files if f.endswith(end)]:
|
|
||||||
yield os.path.join(r, filename)
|
|
||||||
|
|
||||||
|
|
||||||
def get_base(filename: str) -> str:
|
|
||||||
return os.path.splitext(os.path.basename(filename))[0]
|
|
||||||
|
|
||||||
|
|
||||||
def ensure_ext(filename: str, ext: str) -> str:
|
|
||||||
if not filename.endswith(ext):
|
|
||||||
return filename + ext
|
|
||||||
return filename
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
os.chdir(root)
|
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
|
||||||
proto_files = [ensure_ext(f, ".proto") for f in sys.argv[1:]]
|
|
||||||
bases = {get_base(f) for f in proto_files}
|
|
||||||
json_files = [
|
|
||||||
f for f in get_files(".json") if get_base(f).split("-")[0] in bases
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
proto_files = get_files(".proto")
|
|
||||||
json_files = get_files(".json")
|
|
||||||
|
|
||||||
for filename in proto_files:
|
|
||||||
print(f"Generating code for {os.path.basename(filename)}")
|
|
||||||
subprocess.run(
|
|
||||||
f"protoc --python_out=. {os.path.basename(filename)}", shell=True
|
|
||||||
)
|
|
||||||
subprocess.run(
|
|
||||||
f"protoc --plugin=protoc-gen-custom=../plugin.py --custom_out=. {os.path.basename(filename)}",
|
|
||||||
shell=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
for filename in json_files:
|
|
||||||
# Reset the internal symbol database so we can import the `Test` message
|
|
||||||
# multiple times. Ugh.
|
|
||||||
sym = symbol_database.Default()
|
|
||||||
sym.pool = DescriptorPool()
|
|
||||||
|
|
||||||
parts = get_base(filename).split("-")
|
|
||||||
out = filename.replace(".json", ".bin")
|
|
||||||
print(f"Using {parts[0]}_pb2 to generate {os.path.basename(out)}")
|
|
||||||
|
|
||||||
imported = importlib.import_module(f"{parts[0]}_pb2")
|
|
||||||
input_json = open(filename).read()
|
|
||||||
parsed = Parse(input_json, imported.Test())
|
|
||||||
serialized = parsed.SerializeToString()
|
|
||||||
preserve = "casing" not in filename
|
|
||||||
serialized_json = MessageToJson(parsed, preserving_proto_field_name=preserve)
|
|
||||||
|
|
||||||
s_loaded = json.loads(serialized_json)
|
|
||||||
in_loaded = json.loads(input_json)
|
|
||||||
|
|
||||||
if s_loaded != in_loaded:
|
|
||||||
raise AssertionError("Expected JSON to be equal:", s_loaded, in_loaded)
|
|
||||||
|
|
||||||
open(out, "wb").write(serialized)
|
|
8
betterproto/tests/inputs/bool/test.py
Normal file
8
betterproto/tests/inputs/bool/test.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from betterproto.tests.output_betterproto.bool.bool import Test
|
||||||
|
from betterproto.tests.util import read_relative
|
||||||
|
|
||||||
|
|
||||||
|
def test_value():
|
||||||
|
message = Test().from_json(read_relative(__file__, 'bool.json'))
|
||||||
|
assert message.value
|
||||||
|
|
@ -9,4 +9,9 @@ enum my_enum {
|
|||||||
message Test {
|
message Test {
|
||||||
int32 camelCase = 1;
|
int32 camelCase = 1;
|
||||||
my_enum snake_case = 2;
|
my_enum snake_case = 2;
|
||||||
|
snake_case_message snake_case_message = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message snake_case_message {
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "google/protobuf/wrappers.proto";
|
||||||
|
|
||||||
|
service Test {
|
||||||
|
rpc GetInt32 (Input) returns (google.protobuf.Int32Value);
|
||||||
|
rpc GetAnotherInt32 (Input) returns (google.protobuf.Int32Value);
|
||||||
|
rpc GetInt64 (Input) returns (google.protobuf.Int64Value);
|
||||||
|
rpc GetOutput (Input) returns (Output);
|
||||||
|
}
|
||||||
|
|
||||||
|
message Input {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
message Output {
|
||||||
|
google.protobuf.Int64Value int64 = 1;
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from betterproto.tests.output_betterproto.googletypes_response.googletypes_response import TestStub
|
||||||
|
|
||||||
|
|
||||||
|
class TestStubChild(TestStub):
|
||||||
|
async def _unary_unary(self, route, request, response_type, **kwargs):
|
||||||
|
self.response_type = response_type
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test():
|
||||||
|
pytest.skip('todo')
|
||||||
|
stub = TestStubChild(None)
|
||||||
|
await stub.get_int64()
|
||||||
|
assert stub.response_type != Optional[int]
|
@ -0,0 +1,11 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package repeatedmessage;
|
||||||
|
|
||||||
|
message Test {
|
||||||
|
repeated Sub greetings = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Sub {
|
||||||
|
string greeting = 1;
|
||||||
|
}
|
@ -1,32 +1,99 @@
|
|||||||
import importlib
|
import importlib
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from .generate import get_base, get_files
|
# Force pure-python implementation instead of C++, otherwise imports
|
||||||
|
# break things because we can't properly reset the symbol database.
|
||||||
|
os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"
|
||||||
|
|
||||||
inputs = get_files(".bin")
|
from google.protobuf import symbol_database
|
||||||
|
from google.protobuf.descriptor_pool import DescriptorPool
|
||||||
|
from google.protobuf.json_format import Parse
|
||||||
|
|
||||||
|
import betterproto
|
||||||
|
from betterproto.tests.util import get_directories, inputs_path
|
||||||
|
|
||||||
|
excluded_test_cases = {'googletypes_response', 'service'}
|
||||||
|
test_case_names = {*get_directories(inputs_path)} - excluded_test_cases
|
||||||
|
|
||||||
|
plugin_output_package = 'betterproto.tests.output_betterproto'
|
||||||
|
reference_output_package = 'betterproto.tests.output_reference'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("filename", inputs)
|
@pytest.mark.parametrize("test_case_name", test_case_names)
|
||||||
def test_sample(filename: str) -> None:
|
def test_message_can_be_imported(test_case_name: str) -> None:
|
||||||
module = get_base(filename).split("-")[0]
|
importlib.import_module(f"{plugin_output_package}.{test_case_name}.{test_case_name}")
|
||||||
imported = importlib.import_module(f"betterproto.tests.{module}")
|
|
||||||
data_binary = open(filename, "rb").read()
|
|
||||||
data_dict = json.loads(open(filename.replace(".bin", ".json")).read())
|
|
||||||
t1 = imported.Test().parse(data_binary)
|
|
||||||
t2 = imported.Test().from_dict(data_dict)
|
|
||||||
print(t1)
|
|
||||||
print(t2)
|
|
||||||
|
|
||||||
# Equality should automagically work for dataclasses!
|
|
||||||
assert t1 == t2
|
|
||||||
|
|
||||||
# Generally this can't be relied on, but here we are aiming to match the
|
@pytest.mark.parametrize("test_case_name", test_case_names)
|
||||||
# existing Python implementation and aren't doing anything tricky.
|
def test_message_can_instantiated(test_case_name: str) -> None:
|
||||||
# https://developers.google.com/protocol-buffers/docs/encoding#implications
|
plugin_module = importlib.import_module(f"{plugin_output_package}.{test_case_name}.{test_case_name}")
|
||||||
assert bytes(t1) == data_binary
|
plugin_module.Test()
|
||||||
assert bytes(t2) == data_binary
|
|
||||||
|
|
||||||
assert t1.to_dict() == data_dict
|
|
||||||
assert t2.to_dict() == data_dict
|
@pytest.mark.parametrize("test_case_name", test_case_names)
|
||||||
|
def test_message_equality(test_case_name: str) -> None:
|
||||||
|
plugin_module = importlib.import_module(f"{plugin_output_package}.{test_case_name}.{test_case_name}")
|
||||||
|
message1 = plugin_module.Test()
|
||||||
|
message2 = plugin_module.Test()
|
||||||
|
assert message1 == message2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("test_case_name", test_case_names)
|
||||||
|
def test_message_json(test_case_name: str) -> None:
|
||||||
|
plugin_module = importlib.import_module(f"{plugin_output_package}.{test_case_name}.{test_case_name}")
|
||||||
|
message: betterproto.Message = plugin_module.Test()
|
||||||
|
reference_json_data = get_test_case_json_data(test_case_name)
|
||||||
|
|
||||||
|
message.from_json(reference_json_data)
|
||||||
|
message_json = message.to_json(0)
|
||||||
|
|
||||||
|
assert json.loads(message_json) == json.loads(reference_json_data)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("test_case_name", test_case_names)
|
||||||
|
def test_binary_compatibility(test_case_name: str) -> None:
|
||||||
|
# Reset the internal symbol database so we can import the `Test` message
|
||||||
|
# multiple times. Ugh.
|
||||||
|
sym = symbol_database.Default()
|
||||||
|
sym.pool = DescriptorPool()
|
||||||
|
|
||||||
|
reference_module_root = os.path.join(*reference_output_package.split('.'), test_case_name)
|
||||||
|
|
||||||
|
print(f'Appending {reference_module_root}')
|
||||||
|
sys.path.append(reference_module_root)
|
||||||
|
|
||||||
|
# import reference message
|
||||||
|
reference_module = importlib.import_module(f"{reference_output_package}.{test_case_name}.{test_case_name}_pb2")
|
||||||
|
plugin_module = importlib.import_module(f"{plugin_output_package}.{test_case_name}.{test_case_name}")
|
||||||
|
|
||||||
|
test_data = get_test_case_json_data(test_case_name)
|
||||||
|
|
||||||
|
reference_instance = Parse(test_data, reference_module.Test())
|
||||||
|
reference_binary_output = reference_instance.SerializeToString()
|
||||||
|
|
||||||
|
plugin_instance_from_json: betterproto.Message = plugin_module.Test().from_json(test_data)
|
||||||
|
plugin_instance_from_binary = plugin_module.Test.FromString(reference_binary_output)
|
||||||
|
|
||||||
|
# # Generally this can't be relied on, but here we are aiming to match the
|
||||||
|
# # existing Python implementation and aren't doing anything tricky.
|
||||||
|
# # https://developers.google.com/protocol-buffers/docs/encoding#implications
|
||||||
|
assert plugin_instance_from_json == plugin_instance_from_binary
|
||||||
|
assert plugin_instance_from_json.to_dict() == plugin_instance_from_binary.to_dict()
|
||||||
|
|
||||||
|
sys.path.remove(reference_module_root)
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
helper methods
|
||||||
|
'''
|
||||||
|
|
||||||
|
def get_test_case_json_data(test_case_name):
|
||||||
|
test_data_path = os.path.join(inputs_path, test_case_name, f'{test_case_name}.json')
|
||||||
|
if not os.path.exists(test_data_path):
|
||||||
|
return None
|
||||||
|
|
||||||
|
with open(test_data_path) as fh:
|
||||||
|
return fh.read()
|
||||||
|
@ -3,8 +3,8 @@ import grpclib
|
|||||||
from grpclib.testing import ChannelFor
|
from grpclib.testing import ChannelFor
|
||||||
import pytest
|
import pytest
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from .service import DoThingResponse, DoThingRequest, ExampleServiceStub
|
|
||||||
|
|
||||||
|
from betterproto.tests.output_betterproto.service.service import DoThingResponse, DoThingRequest, ExampleServiceStub
|
||||||
|
|
||||||
class ExampleService:
|
class ExampleService:
|
||||||
def __init__(self, test_hook=None):
|
def __init__(self, test_hook=None):
|
||||||
|
5
pytest.ini
Normal file
5
pytest.ini
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[pytest]
|
||||||
|
python_files = test*.py
|
||||||
|
python_classes =
|
||||||
|
norecursedirs = **/output_*
|
||||||
|
addopts = -p no:warnings
|
Loading…
x
Reference in New Issue
Block a user