reproto 0.1.3__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. reproto-0.1.4/.git/COMMIT_EDITMSG +1 -0
  2. {reproto-0.1.3 → reproto-0.1.4}/.git/index +0 -0
  3. {reproto-0.1.3 → reproto-0.1.4}/.git/logs/HEAD +1 -0
  4. {reproto-0.1.3 → reproto-0.1.4}/.git/logs/refs/heads/iyue +1 -0
  5. {reproto-0.1.3 → reproto-0.1.4}/.git/logs/refs/remotes/gitlab/iyue +1 -0
  6. {reproto-0.1.3 → reproto-0.1.4}/.git/logs/refs/remotes/origin/iyue +1 -0
  7. reproto-0.1.4/.git/objects/08/760c38a9f9a4b5d4de0a1df0d197b27c1592d6 +0 -0
  8. reproto-0.1.4/.git/objects/22/316ec4a32601c236f997552e9600b7b40e3162 +0 -0
  9. reproto-0.1.4/.git/objects/3f/ac4973433ec0116d2348fe7a748a0002702efb +0 -0
  10. reproto-0.1.4/.git/objects/40/c6c8816b3ebd8cac4fa36f20454c84aa5929d1 +0 -0
  11. reproto-0.1.4/.git/objects/5d/3e5b3d75b03eba63deda0dcac7ca304d41e4da +0 -0
  12. reproto-0.1.4/.git/objects/90/6b05fdb9211a7d32515bb2da31e58e4ca89916 +0 -0
  13. reproto-0.1.4/.git/objects/b2/a941b669991d7e0f9bdc35f1014897a933f4e2 +1 -0
  14. reproto-0.1.4/.git/objects/e6/5ff9bea681f0b8f409ec27761935883c1f0cc9 +0 -0
  15. reproto-0.1.4/.git/refs/heads/iyue +1 -0
  16. reproto-0.1.4/.git/refs/remotes/gitlab/iyue +1 -0
  17. reproto-0.1.4/.git/refs/remotes/origin/iyue +1 -0
  18. {reproto-0.1.3 → reproto-0.1.4}/PKG-INFO +2 -1
  19. {reproto-0.1.3 → reproto-0.1.4}/main.py +8 -2
  20. {reproto-0.1.3 → reproto-0.1.4}/pyproject.toml +2 -1
  21. {reproto-0.1.3 → reproto-0.1.4}/requirements.txt +3 -1
  22. {reproto-0.1.3 → reproto-0.1.4}/utils/__init__.py +16 -1
  23. reproto-0.1.4/utils/version_checker.py +311 -0
  24. reproto-0.1.3/.git/COMMIT_EDITMSG +0 -29
  25. reproto-0.1.3/.git/refs/heads/iyue +0 -1
  26. reproto-0.1.3/.git/refs/remotes/gitlab/iyue +0 -1
  27. reproto-0.1.3/.git/refs/remotes/origin/iyue +0 -1
  28. {reproto-0.1.3 → reproto-0.1.4}/.git/FETCH_HEAD +0 -0
  29. {reproto-0.1.3 → reproto-0.1.4}/.git/HEAD +0 -0
  30. {reproto-0.1.3 → reproto-0.1.4}/.git/config +0 -0
  31. {reproto-0.1.3 → reproto-0.1.4}/.git/description +0 -0
  32. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/applypatch-msg.sample +0 -0
  33. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/commit-msg.sample +0 -0
  34. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/fsmonitor-watchman.sample +0 -0
  35. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/post-update.sample +0 -0
  36. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/pre-applypatch.sample +0 -0
  37. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/pre-commit.sample +0 -0
  38. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/pre-merge-commit.sample +0 -0
  39. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/pre-push.sample +0 -0
  40. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/pre-rebase.sample +0 -0
  41. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/pre-receive.sample +0 -0
  42. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/prepare-commit-msg.sample +0 -0
  43. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/push-to-checkout.sample +0 -0
  44. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/sendemail-validate.sample +0 -0
  45. {reproto-0.1.3 → reproto-0.1.4}/.git/hooks/update.sample +0 -0
  46. {reproto-0.1.3 → reproto-0.1.4}/.git/info/exclude +0 -0
  47. {reproto-0.1.3 → reproto-0.1.4}/.git/logs/refs/remotes/origin/HEAD +0 -0
  48. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/00/81a7e1ec3251cc192ed2b73d5be897593fb872 +0 -0
  49. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/00/885cebf557ff261574deb93cb96449d06db01c +0 -0
  50. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/02/33f5b60263e5dc6d041c0b223a0724eb650faa +0 -0
  51. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/03/3fab23ccc74b707a31f6f37dc5df42c100aac0 +0 -0
  52. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/07/557fbd1d149ce51af8e98e8ca8590757a89dfa +0 -0
  53. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/07/b71df33935c14ddf99e3480c04eca4685028bc +0 -0
  54. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/09/a92517fe9eeb33d2fd7c979e01d163665f7abc +0 -0
  55. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/0b/e20ea749c6ae1075ae98f9426e00b0a4a235af +0 -0
  56. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/0c/7b11b535a18f311aedadbe91e14fc9fe6b50d9 +0 -0
  57. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/12/f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f +0 -0
  58. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/13/5f50fea51c72f977f48d06a7584aba0f61e260 +0 -0
  59. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/14/d323d58fb90c209a730c17e23fd82a6c735fc1 +0 -0
  60. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/15/eb3f02479e633439ec83c143e703f8448043a1 +0 -0
  61. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/18/89a4fb55eb3abdc528ce87f0cea039278c06fd +0 -0
  62. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/1a/4435c23bdf5543e3270aa69361c9c68f205efb +0 -0
  63. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/1b/97584ebada3e93d7a2cfa4a1aae0b79c414d20 +0 -0
  64. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/1b/f0c1ad9586578e8332d061f7648dcb041ec063 +0 -0
  65. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/1e/46816d16e7c9db7575f1964403c3daa105be5c +0 -0
  66. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/20/cf56ec106bcd66420dd000279f983571b918b6 +0 -0
  67. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/21/55b64d52922c88527c102d62f23e5c2abbae79 +0 -0
  68. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/23/bfbca38e177bcbb423dd782c35b19d127a5ab0 +0 -0
  69. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/24/d78e796570a8572a03bc1dd26608a7cfb506f8 +0 -0
  70. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/26/1f67f3b731b32f6d77de9dd7be2d61e2a14ace +0 -0
  71. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/27/24208ca2442e8ab9b453d0eb230fa41243b270 +0 -0
  72. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/29/4708b82b343e04e7a6685f5cd1287f3d17f7a9 +0 -0
  73. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2a/fe93d8bcbeab9e136d8b6766604c32b3610314 +0 -0
  74. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2b/64656ce2df6259c822733b03f26eb828fe9269 +0 -0
  75. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2c/fcddd7eebeb4eee0562dc384a79366bc7b04bb +0 -0
  76. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2d/2b812ca27c477f9e1b2c2706a5eb795ffcf8eb +0 -0
  77. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2d/8a0da260a710010ae62be134ac1cea6ceecfd1 +0 -0
  78. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2d/a515dbb88d31400d5b84d41caf270e9309232d +0 -0
  79. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2d/e8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 +0 -0
  80. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/2e/2c1c42f5ac5d665cc672d3792078b756d9ab0e +0 -0
  81. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/30/9347e5681d80bd3c7949882e27090dd9070d16 +0 -0
  82. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/33/181441ab38eded005db356da89b54c7d29f452 +0 -0
  83. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/33/52dfa8f5d9eb46cc98ea7ccecf02e4d9df95f7 +0 -0
  84. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/33/633c9df669ff8cf38638717937a54990814268 +0 -0
  85. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/34/192f0df5f5b694c881d086019eda349608d222 +0 -0
  86. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/35/8bace20b731ff1bbb256d2a0158dfc84720978 +0 -0
  87. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/38/907894973091f8e9b224a13fe596e1cb309cf5 +0 -0
  88. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/39/993e3600bf4ab82aa361b738ee97a108787450 +0 -0
  89. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/3b/ab663710fd6b43d9372313fced9043c4cb07dd +0 -0
  90. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/3c/6f0120229cc2cd8123efbeb7f186eb0a485f29 +0 -0
  91. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/3c/c3ca375694d43e35cdc88d4a5d067e510df427 +0 -0
  92. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/3d/3cc6aab4eefed46c77dda27503bebcce88962c +0 -0
  93. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/3e/b3f1273caf6814dfa69325ccbd9fd1340cf20a +0 -0
  94. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/3e/d953d5ed2c66722045f5e39d068696a0853b4f +0 -0
  95. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/3f/b8830f516342a0ae1cb7c34b65016827cb9570 +0 -0
  96. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/40/84f4567d983a977c49598b7d886e46b13ff50b +0 -0
  97. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/41/f40c22247de377be99e30784229f3f128508a2 +0 -0
  98. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/44/4af3a0d68ba81976f67c7b638c9b0db4640709 +0 -0
  99. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/45/fbc774dedb61c7c205ea732f59a8dca8d13555 +0 -0
  100. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/48/369b05749e384be9be58e5f943f3a0040d0f37 +0 -0
  101. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/48/cb11e75518a53be14146018214110986fade67 +0 -0
  102. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/4b/43f5f577e1cdc35f8e06d178d8f5c892034061 +0 -0
  103. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/4b/442fccf86631bf5196ee5b48ab8d58228ab59c +0 -0
  104. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/4c/16984be6ef7b24d01604821e9728cb579acd69 +0 -0
  105. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/4d/6d457bfabc4af842e5ddc2d56eb059d5dfdc9d +0 -0
  106. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/4f/c6dc41f9c0a1a8e0eedd3ba49c43d78d0dbaba +0 -0
  107. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/55/6723fdd4f525eed41c52fa80defca3f0c81c47 +0 -0
  108. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/56/79064a3138031d3a92d60aa629b82009fd0d1d +0 -0
  109. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/58/0d8f872aa869e42ba608f64888b1349f8b3ff4 +0 -0
  110. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/59/4c23f158ccbd0a4288f9ea046d06160195afbf +0 -0
  111. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/5a/11f9d70791e06a0570e01d3dcbbae39cde55db +0 -0
  112. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/5b/d4d87753b79e9157817f0c2e6964a731052854 +0 -0
  113. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/5c/715dcb05e32db7a7a3b030f07524bdd8a56849 +0 -0
  114. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/5d/e2e9d536c2c0b78e8f9b3b61daa531a55332dc +0 -0
  115. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/5e/9daac72a48ce60688ab2eeddcc3d9152329e20 +0 -0
  116. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/60/5cb6fd6a9f8894ad4d43a9b8e4785c1b3b0e17 +0 -0
  117. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/60/f61a0ea50091eac8d344c86597375cbdfc2785 +0 -0
  118. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/63/ddda2a403efaab3f4c6597b3a73a7b1147adb5 +0 -0
  119. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/65/0189fe083bd711e45d463b229a72be619abad2 +0 -0
  120. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/65/a4f0ada7519f8b1e6a7c7e287541b8effde9fd +0 -0
  121. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/66/663db35bfec8ef5f1a5b1c840fde1bb62a0eb8 +0 -0
  122. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/66/6c5c5fc30435228116fa08c9d821bebaaa8926 +0 -0
  123. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/66/7291e131d4769e7d028346a0cc7a0c05d500e5 +0 -0
  124. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/67/f27f77274917580e687fd00ca18da0660215c1 +0 -0
  125. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/67/f54a4a3ede6749acc7c718ad97a86634215b5e +0 -0
  126. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/6f/90fcf9eacdc794313471f54279011a787c8760 +0 -0
  127. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/70/ded03ee69f30850c938a8129be308cb30772d9 +0 -0
  128. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/76/311aa8e59d780763e0d66787067cc5d9613a67 +0 -0
  129. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/78/3e7e252c20e73e33615c703174766036546ff6 +0 -0
  130. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/7c/00eec7ae9ef5f94fc337e5c8f9793a2a48810d +0 -0
  131. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/7c/ef0adfb28fd774bc78061c6f088e1ef9b050f6 +0 -0
  132. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/7d/dc129188a10c68ab756ef2cacb292c76920403 +0 -0
  133. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/7e/5935774ee7a85f2523427c9100f9c578ac172f +0 -0
  134. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/80/17038e0f7818a44a742f77c86f4f88ed768fcd +0 -0
  135. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/87/c7db6c91c17a2df84b56d30bd24a0f6b9dbdd9 +0 -0
  136. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/8a/0ed0ed8886fbc823e8d2258fa6d18699e94e25 +0 -0
  137. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/8c/809c42c7ae13007fd885ee7bcffae7acf2c520 +0 -0
  138. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/8d/44142ae2d6dbb59d4ebed8587bccd051e5766b +0 -0
  139. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/8d/4a5767bef0c342f1660526f9671c0944922c40 +0 -0
  140. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/8d/d857b3d0ab3f5cd2e9173d532ef86e30df8eda +0 -0
  141. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/92/984cf67b2c25d435468a8218daa26ba0466054 +0 -0
  142. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/92/c6018b4fb8e3b6c2f3f3054a56f2bfaca27470 +0 -0
  143. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/93/140b54b1fb9116ee214afee8abf2c72a232487 +0 -0
  144. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/93/68f2c32f83054ab072b7c9686d8baa0bad7f12 +0 -0
  145. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/94/ce01b61b90d1fb21d2d339fbeb22e821b6f413 +0 -0
  146. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/95/295a15779ebefd563ec777c3d3cced7e8d0209 +0 -0
  147. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/97/56fe0931216a7c40cbf250e1ab8a6dfd589f13 +0 -0
  148. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/97/71dd4958faa94d3db229c129f6af35b508905a +0 -0
  149. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/9a/5ad062be9f6e001f4237a598a08981aba731e6 +0 -0
  150. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/9a/e313cdf64cd82416c1238eb493e6396f799f12 +0 -0
  151. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/9e/23448ac58f907d9d123c32bdccedbb3d6741b5 +0 -0
  152. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/9e/9978522bc8ca79133d7c11ef8ca3fe3c7eed0a +0 -0
  153. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/9f/b57064e0c53ed80af8507acaab718a1e80184e +0 -0
  154. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a0/d192999af7e2cbfa6a9ccd04d720a04e5a06d5 +0 -0
  155. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a0/d630c3f6024b196d4ee933ab13a32905efdaaa +0 -0
  156. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a1/655e0cb323c300562f97dcc67d5a446908c8ec +0 -0
  157. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a3/cedc28e563a1845a7860161b39b0fe58d5f0d3 +0 -0
  158. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a5/38cc82cef7c49500d3522220f0f60a9ebc1ae6 +0 -0
  159. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a5/b7e4e1b63bfb65288f6553687aaabcfb4d51b1 +0 -0
  160. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a9/41063a7ce89c353fa24378ec7c3f12f08f9df8 +0 -0
  161. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/a9/cc7923c34a4c97c5711d6309672f41d46c612a +0 -0
  162. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/ac/5c983d949d8c928bb022badf801e45e75e785e +0 -0
  163. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/ae/046e08176523e8a98dc7294436319f724db13c +0 -0
  164. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/af/c9cc15629847447063e86a82b8b56abb4fc08f +0 -0
  165. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/b0/7a43f0462bf25a8b1f4c0ca60c1b533dae1dde +0 -0
  166. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/b0/82ca2c1b5a03edff25da3c2b2b573d049877e9 +0 -0
  167. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/b1/db1c131cf32916028342c0037ce8eb57a8eb26 +0 -0
  168. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/b2/8334b94392b8af397a05ed702690fa6c9ab1ca +0 -0
  169. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/b3/28dc445ee33220db9359370fc0089a77174101 +0 -0
  170. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/b3/d2b3037bede44e7e4d18dc99419f8c712c9c62 +0 -0
  171. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/b8/7c89dcfce9e244ff5ef6a4bd394de12e8c8092 +0 -0
  172. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/bc/e98bdb71c8681acb460195fdcbbe5d36290976 +0 -0
  173. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c1/87d5e047eca86cfd8d444be2987aaa3f62c4d6 +0 -0
  174. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c3/93db4841dbbb8acf54e9af12b6705c9f5ecde9 +0 -0
  175. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c3/c8594874dd9ff9c21662fd06cac9b5baadbba0 +0 -0
  176. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c4/c2da96b0bb8db2acb0e6615cf340c7e51af26b +0 -0
  177. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c5/13a96e7584636b20b12280c029750d5bc3da1e +0 -0
  178. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c7/c34283697bd3cce07db53953eda25ee7cc371e +0 -0
  179. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c8/2a656fe6b5d479b327cdf5fe3bf60db987a2a2 +0 -0
  180. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c8/cb3bb9552dcf6a368a1418996c4b925db2d8ab +0 -0
  181. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c9/a6ca8f8efee4a5632e9a655ced29f1b708f35e +0 -0
  182. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c9/cdef9ab627b874ffe6455a47583a75bf16496d +0 -0
  183. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/c9/d60d922a04b87587cd67b0abf9fe5a7b7b76cd +0 -0
  184. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/cd/2d6c229438c6b1c694b9392a85888d89ef49c1 +0 -0
  185. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/d0/9c84ad2142a187bf26a1714b7041b62e404c8f +0 -0
  186. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/d2/69b1676dbf32f76a7c405d0b4ea6a70ac3a626 +0 -0
  187. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/d3/5a918b1d9125ad35d60e08b181323df3246f1a +0 -0
  188. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/d8/eaf86669fbfd10497570c1784db1ed2696b588 +0 -0
  189. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/d9/3bd435c8c7ad4efb83dff04d5450fabb9e3faf +0 -0
  190. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/d9/6d7456245232b3e159dcf691f11e51224c557a +0 -0
  191. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/d9/90e6d553577d37ebce8b28b3015ecbde038b42 +0 -0
  192. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/da/13cc15bcd8ee39c81f36dee7f179a569ecab0b +0 -0
  193. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/db/beedb30613f79ae3ff67df1428cf8ade223711 +0 -0
  194. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/df/f8f64cee2b97df7d86f73207c5e690f98f0208 +0 -0
  195. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e2/b7433fbfbfac5bc800a962be2f4adbed145b42 +0 -0
  196. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e3/27755808d88c7ae5c06c229cf18bd0519646df +0 -0
  197. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e4/1e5aa2bc3074c2014d01ab1f603f69c327a83f +0 -0
  198. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e4/4c1d8a90207ac082d8ab7ff0db66708e2ebc31 +0 -0
  199. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e5/83e7c40be934d16a1fa2e973487b395d930f42 +0 -0
  200. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e8/1433b6ad92206cdadbee1f474b4f99383314cb +0 -0
  201. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e8/2f42ea26b8bf4f0bc92c0648ac8f190f14226d +0 -0
  202. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/e9/a15996cb55ac72aeb6611d26e8d22246589943 +0 -0
  203. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/eb/528f06c622d54e411e9e05b3a200b4ac624a90 +0 -0
  204. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/ed/1ae867d5e63195845afc58d88c38ecbdea97df +0 -0
  205. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/ed/fb5bbf938de738d1f658f80e23c675bb8b3fae +0 -0
  206. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/ef/4844af55f7f64b8dd24b81b5a8322a8c80208e +0 -0
  207. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/ef/f44e5099da27f7fb1ef14bb34902ccf4250b89 +0 -0
  208. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/f2/2bfffda9fb6a7f37bed04b7c40c9466ef09454 +0 -0
  209. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/f5/18c69a6e1bf3052b79da01502b2837ea58f0f4 +0 -0
  210. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/f5/1be495b96272fa2e47f30071aed35ac1f0dd2c +0 -0
  211. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/f7/25a430eb3364460ba854dbc8809edc21dc6c70 +0 -0
  212. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/f8/ed595d25bd9d500e765a792c513878f7ddb1f7 +0 -0
  213. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/fa/fc981b0d80d8d0323c04365785f66996ed5211 +0 -0
  214. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/fc/e15b9dbffd9f37b1f2d46944ee2d0394df6565 +0 -0
  215. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/fd/0bc07dc3c95e6168ab6d367d9eca139ac1e539 +0 -0
  216. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/fd/267d9de63212db235135fa6834f62572224fc6 +0 -0
  217. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.idx +0 -0
  218. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.pack +0 -0
  219. {reproto-0.1.3 → reproto-0.1.4}/.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.rev +0 -0
  220. {reproto-0.1.3 → reproto-0.1.4}/.git/packed-refs +0 -0
  221. {reproto-0.1.3 → reproto-0.1.4}/.git/refs/remotes/origin/HEAD +0 -0
  222. {reproto-0.1.3 → reproto-0.1.4}/.gitignore +0 -0
  223. {reproto-0.1.3 → reproto-0.1.4}/.python-version +0 -0
  224. {reproto-0.1.3 → reproto-0.1.4}/ARCHITECTURE.md +0 -0
  225. {reproto-0.1.3 → reproto-0.1.4}/README.md +0 -0
  226. {reproto-0.1.3 → reproto-0.1.4}/core/__init__.py +0 -0
  227. {reproto-0.1.3 → reproto-0.1.4}/core/info_decoder.py +0 -0
  228. {reproto-0.1.3 → reproto-0.1.4}/core/reconstructor.py +0 -0
  229. {reproto-0.1.3 → reproto-0.1.4}/generation/__init__.py +0 -0
  230. {reproto-0.1.3 → reproto-0.1.4}/generation/proto_generator.py +0 -0
  231. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/any.proto +0 -0
  232. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/api.proto +0 -0
  233. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/compiler/plugin.proto +0 -0
  234. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/cpp_features.proto +0 -0
  235. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/descriptor.proto +0 -0
  236. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/duration.proto +0 -0
  237. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/empty.proto +0 -0
  238. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/field_mask.proto +0 -0
  239. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/go_features.proto +0 -0
  240. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/java_features.proto +0 -0
  241. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/source_context.proto +0 -0
  242. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/struct.proto +0 -0
  243. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/timestamp.proto +0 -0
  244. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/type.proto +0 -0
  245. {reproto-0.1.3 → reproto-0.1.4}/include/google/protobuf/wrappers.proto +0 -0
  246. {reproto-0.1.3 → reproto-0.1.4}/models/__init__.py +0 -0
  247. {reproto-0.1.3 → reproto-0.1.4}/models/message_definition.py +0 -0
  248. {reproto-0.1.3 → reproto-0.1.4}/parsing/__init__.py +0 -0
  249. {reproto-0.1.3 → reproto-0.1.4}/parsing/enum_parser.py +0 -0
  250. {reproto-0.1.3 → reproto-0.1.4}/parsing/java_parser.py +0 -0
  251. {reproto-0.1.3 → reproto-0.1.4}/utils/builtin_proto.py +0 -0
  252. {reproto-0.1.3 → reproto-0.1.4}/utils/file_cache.py +0 -0
  253. {reproto-0.1.3 → reproto-0.1.4}/utils/file_utils.py +0 -0
  254. {reproto-0.1.3 → reproto-0.1.4}/utils/logger.py +0 -0
  255. {reproto-0.1.3 → reproto-0.1.4}/utils/report_utils.py +0 -0
  256. {reproto-0.1.3 → reproto-0.1.4}/utils/type_index.py +0 -0
  257. {reproto-0.1.3 → reproto-0.1.4}/utils/type_utils.py +0 -0
@@ -0,0 +1 @@
1
+ feat(version): :fire: check version
@@ -16,3 +16,4 @@ b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962
16
16
  07b71df33935c14ddf99e3480c04eca4685028bc 12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f iyue <ys1231@126.com> 1751096494 +0800 commit: feat: 代码优化
17
17
  12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f 9368f2c32f83054ab072b7c9686d8baa0bad7f12 iyue <ys1231@126.com> 1751101028 +0800 commit: 重构: 将print_results_summary函数移动到utils.report_utils模块
18
18
  9368f2c32f83054ab072b7c9686d8baa0bad7f12 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 iyue <ys1231@126.com> 1751103208 +0800 commit: feat: 实施智能导入系统并优化README
19
+ 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 b2a941b669991d7e0f9bdc35f1014897a933f4e2 iyue <ys1231@126.com> 1751105571 +0800 commit: feat(version): :fire: check version
@@ -16,3 +16,4 @@ b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962
16
16
  07b71df33935c14ddf99e3480c04eca4685028bc 12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f iyue <ys1231@126.com> 1751096494 +0800 commit: feat: 代码优化
17
17
  12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f 9368f2c32f83054ab072b7c9686d8baa0bad7f12 iyue <ys1231@126.com> 1751101028 +0800 commit: 重构: 将print_results_summary函数移动到utils.report_utils模块
18
18
  9368f2c32f83054ab072b7c9686d8baa0bad7f12 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 iyue <ys1231@126.com> 1751103208 +0800 commit: feat: 实施智能导入系统并优化README
19
+ 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 b2a941b669991d7e0f9bdc35f1014897a933f4e2 iyue <ys1231@126.com> 1751105571 +0800 commit: feat(version): :fire: check version
@@ -15,3 +15,4 @@ b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962
15
15
  07b71df33935c14ddf99e3480c04eca4685028bc 12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f iyue <ys1231@126.com> 1751096510 +0800 update by push
16
16
  12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f 9368f2c32f83054ab072b7c9686d8baa0bad7f12 iyue <ys1231@126.com> 1751101083 +0800 update by push
17
17
  9368f2c32f83054ab072b7c9686d8baa0bad7f12 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 iyue <ys1231@126.com> 1751103234 +0800 update by push
18
+ 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 b2a941b669991d7e0f9bdc35f1014897a933f4e2 iyue <ys1231@126.com> 1751105581 +0800 update by push
@@ -15,3 +15,4 @@ b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962
15
15
  07b71df33935c14ddf99e3480c04eca4685028bc 12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f iyue <ys1231@126.com> 1751096519 +0800 update by push
16
16
  12f9cc4ad0b4f0af4f7bae379f281b2cebe7cc7f 9368f2c32f83054ab072b7c9686d8baa0bad7f12 iyue <ys1231@126.com> 1751101033 +0800 update by push
17
17
  9368f2c32f83054ab072b7c9686d8baa0bad7f12 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 iyue <ys1231@126.com> 1751103218 +0800 update by push
18
+ 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8 b2a941b669991d7e0f9bdc35f1014897a933f4e2 iyue <ys1231@126.com> 1751105599 +0800 update by push
@@ -0,0 +1 @@
1
+ x��Mj�0��u�Y��F�~lB�U��7��A��}���}��W�e�;9O��TNJ3��Y;B\J�Gr�r��h���q�7dH���p�]�z����%I�ٔ���F󾁮����ov�"��E��
@@ -0,0 +1 @@
1
+ b2a941b669991d7e0f9bdc35f1014897a933f4e2
@@ -0,0 +1 @@
1
+ b2a941b669991d7e0f9bdc35f1014897a933f4e2
@@ -0,0 +1 @@
1
+ b2a941b669991d7e0f9bdc35f1014897a933f4e2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: reproto
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: 一个强大的逆向工程工具, 能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构.
5
5
  License: Proprietary
6
6
  Keywords: protobuf,reverse-engineering,android,jadx,proto
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Topic :: Software Development :: Code Generators
17
17
  Classifier: Topic :: Software Development :: Disassemblers
18
18
  Requires-Dist: loguru (>=0.7.3)
19
+ Requires-Dist: packaging (>=25.0,<26.0)
19
20
  Project-URL: Homepage, https://github.com/ys1231/reproto
20
21
  Project-URL: Repository, https://github.com/ys1231/reproto.git
21
22
  Description-Content-Type: text/markdown
@@ -29,11 +29,13 @@ try:
29
29
  from .core.reconstructor import ProtoReconstructor
30
30
  from .utils.logger import setup_logger, get_logger
31
31
  from .utils.report_utils import print_results_summary
32
+ from .utils.version_checker import check_version_on_startup
32
33
  except ImportError:
33
34
  # 绝对导入(开发环境)
34
35
  from core.reconstructor import ProtoReconstructor
35
36
  from utils.logger import setup_logger, get_logger
36
37
  from utils.report_utils import print_results_summary
38
+ from utils.version_checker import check_version_on_startup
37
39
 
38
40
 
39
41
  def parse_arguments() -> argparse.Namespace:
@@ -143,8 +145,9 @@ def main() -> None:
143
145
  处理流程:
144
146
  1. 解析和验证命令行参数
145
147
  2. 初始化日志系统
146
- 3. 创建重构器并执行重构
147
- 4. 输出结果统计信息
148
+ 3. 启动版本检测(异步)
149
+ 4. 创建重构器并执行重构
150
+ 5. 输出结果统计信息
148
151
  """
149
152
  args = None
150
153
  try:
@@ -155,6 +158,9 @@ def main() -> None:
155
158
  setup_logger(args.log_dir)
156
159
  logger = get_logger("main")
157
160
 
161
+ # 启动版本检测(异步,不阻塞主程序)
162
+ check_version_on_startup()
163
+
158
164
  # 验证参数
159
165
  sources_dir, root_class, output_dir = validate_arguments(args)
160
166
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "reproto"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "一个强大的逆向工程工具, 能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构."
9
9
  readme = "README.md"
10
10
  license = "Proprietary"
@@ -37,6 +37,7 @@ packages = [
37
37
  [tool.poetry.dependencies]
38
38
  python = ">=3.12,<4.0"
39
39
  loguru = ">=0.7.3"
40
+ packaging = "^25.0"
40
41
 
41
42
  [tool.poetry.scripts]
42
43
  reproto = "main:main"
@@ -1,3 +1,5 @@
1
1
  # 项目依赖
2
2
  # 使用 loguru 库来提供强大且易于配置的日志记录功能。
3
- loguru
3
+ loguru
4
+ # 使用 packaging 库来进行版本号比较
5
+ packaging
@@ -7,6 +7,7 @@
7
7
  - 类型工具:类型转换和命名规范处理
8
8
  - 内置Proto:Google Protobuf标准类型支持
9
9
  - 报告工具:重构结果统计和展示
10
+ - 版本检测:通用版本更新检测系统
10
11
  """
11
12
 
12
13
  # 智能导入:同时支持相对导入(包环境)和绝对导入(开发环境)
@@ -18,6 +19,10 @@ try:
18
19
  from .builtin_proto import get_builtin_manager
19
20
  from .type_index import get_type_index
20
21
  from .report_utils import print_results_summary
22
+ from .version_checker import (
23
+ VersionChecker, create_version_checker, check_pypi_version,
24
+ check_reproto_version, check_version_on_startup, get_package_version
25
+ )
21
26
  except ImportError:
22
27
  # 绝对导入(开发环境)
23
28
  from utils.logger import setup_logger, get_logger
@@ -26,6 +31,10 @@ except ImportError:
26
31
  from utils.builtin_proto import get_builtin_manager
27
32
  from utils.type_index import get_type_index
28
33
  from utils.report_utils import print_results_summary
34
+ from utils.version_checker import (
35
+ VersionChecker, create_version_checker, check_pypi_version,
36
+ check_reproto_version, check_version_on_startup, get_package_version
37
+ )
29
38
 
30
39
  __all__ = [
31
40
  'setup_logger',
@@ -36,7 +45,13 @@ __all__ = [
36
45
  'field_name_processor',
37
46
  'get_builtin_manager',
38
47
  'get_type_index',
39
- 'print_results_summary'
48
+ 'print_results_summary',
49
+ 'VersionChecker',
50
+ 'create_version_checker',
51
+ 'check_pypi_version',
52
+ 'check_reproto_version',
53
+ 'check_version_on_startup',
54
+ 'get_package_version'
40
55
  ]
41
56
 
42
57
 
@@ -0,0 +1,311 @@
1
+ """
2
+ 通用版本检测模块
3
+
4
+ 支持检测Python包的新版本并提供用户友好的提示信息
5
+ 设计为通用模块,可以被其他Python库复用
6
+
7
+ 支持的版本源:
8
+ - PyPI (Python Package Index)
9
+
10
+ Author: AI Assistant
11
+ """
12
+
13
+ import json
14
+ import time
15
+ import threading
16
+ from typing import Optional, Callable
17
+ from pathlib import Path
18
+ from urllib.request import urlopen, Request
19
+ from urllib.error import URLError, HTTPError
20
+ from packaging import version
21
+ import tempfile
22
+ import importlib.metadata
23
+
24
+ # 智能导入:同时支持相对导入(包环境)和绝对导入(开发环境)
25
+ try:
26
+ # 相对导入(包环境)
27
+ from .logger import get_logger
28
+ except ImportError:
29
+ # 绝对导入(开发环境)
30
+ from utils.logger import get_logger
31
+
32
+
33
+ def get_package_version(package_name: str) -> Optional[str]:
34
+ """
35
+ 动态获取已安装包的版本号
36
+
37
+ Args:
38
+ package_name: 包名
39
+
40
+ Returns:
41
+ 包版本号,如果获取失败则返回None
42
+ """
43
+ try:
44
+ return importlib.metadata.version(package_name)
45
+ except importlib.metadata.PackageNotFoundError:
46
+ return None
47
+
48
+
49
+ class VersionChecker:
50
+ """
51
+ 通用版本检测器
52
+
53
+ 功能:
54
+ - 支持PyPI版本源
55
+ - 异步检测,不阻塞主程序
56
+ - 智能缓存,避免频繁请求
57
+ - 可配置的检测间隔和提示样式
58
+ - 动态获取当前版本
59
+ """
60
+
61
+ def __init__(self,
62
+ package_name: str,
63
+ current_version: Optional[str] = None,
64
+ cache_duration: int = 3600, # 缓存1小时
65
+ timeout: int = 5, # 请求超时5秒
66
+ silent_mode: bool = False): # 静默模式
67
+ """
68
+ 初始化版本检测器
69
+
70
+ Args:
71
+ package_name: 包名
72
+ current_version: 当前版本,如果为None则自动获取
73
+ cache_duration: 缓存持续时间(秒)
74
+ timeout: 网络请求超时时间(秒)
75
+ silent_mode: 是否启用静默模式(不打印日志)
76
+ """
77
+ self.package_name = package_name
78
+ self.current_version = current_version or get_package_version(package_name) or "0.0.0"
79
+ self.cache_duration = cache_duration
80
+ self.timeout = timeout
81
+ self.silent_mode = silent_mode
82
+
83
+ # 缓存配置
84
+ self.cache_dir = Path(tempfile.gettempdir()) / f".{package_name}_version_cache"
85
+ self.cache_file = self.cache_dir / "latest_version.json"
86
+
87
+ # 日志配置
88
+ self.logger = get_logger("version_checker") if not silent_mode else None
89
+
90
+ def check_version_async(self,
91
+ callback: Optional[Callable] = None,
92
+ show_notification: bool = True):
93
+ """
94
+ 异步检测版本更新
95
+
96
+ Args:
97
+ callback: 检测完成后的回调函数
98
+ show_notification: 是否显示更新提示
99
+ """
100
+ def _check():
101
+ try:
102
+ latest_version = self.check_version_sync()
103
+ if latest_version and self._is_newer_version(latest_version):
104
+ if show_notification:
105
+ self._show_update_notification(latest_version)
106
+ if callback:
107
+ callback(True, latest_version)
108
+ else:
109
+ if callback:
110
+ callback(False, latest_version)
111
+ except Exception as e:
112
+ if not self.silent_mode and self.logger:
113
+ self.logger.debug(f"版本检测失败: {e}")
114
+ if callback:
115
+ callback(False, None)
116
+
117
+ thread = threading.Thread(target=_check, daemon=True)
118
+ thread.start()
119
+
120
+ def check_version_sync(self) -> Optional[str]:
121
+ """
122
+ 同步检测版本更新
123
+
124
+ Returns:
125
+ 最新版本号,如果检测失败则返回None
126
+ """
127
+ # 检查缓存
128
+ cached_version = self._get_cached_version()
129
+ if cached_version:
130
+ return cached_version
131
+
132
+ # 从PyPI获取最新版本
133
+ try:
134
+ latest_version = self._check_pypi_version()
135
+ if latest_version:
136
+ self._cache_version(latest_version)
137
+ return latest_version
138
+ except Exception as e:
139
+ if not self.silent_mode and self.logger:
140
+ self.logger.debug(f"从PyPI检测版本失败: {e}")
141
+
142
+ return None
143
+
144
+ def _check_pypi_version(self) -> Optional[str]:
145
+ """从PyPI检测最新版本"""
146
+ url = f"https://pypi.org/pypi/{self.package_name}/json"
147
+
148
+ try:
149
+ request = Request(url, headers={'User-Agent': f'{self.package_name}-version-checker'})
150
+ with urlopen(request, timeout=self.timeout) as response:
151
+ data = json.loads(response.read().decode())
152
+ return data['info']['version']
153
+ except (URLError, HTTPError, KeyError, json.JSONDecodeError):
154
+ return None
155
+
156
+ def _is_newer_version(self, latest_version: str) -> bool:
157
+ """检查是否有新版本"""
158
+ try:
159
+ return version.parse(latest_version) > version.parse(self.current_version)
160
+ except Exception:
161
+ # 如果版本解析失败,使用字符串比较
162
+ return latest_version != self.current_version
163
+
164
+ def _get_cached_version(self) -> Optional[str]:
165
+ """获取缓存的版本信息"""
166
+ try:
167
+ if not self.cache_file.exists():
168
+ return None
169
+
170
+ with open(self.cache_file, 'r', encoding='utf-8') as f:
171
+ cache_data = json.load(f)
172
+
173
+ # 检查缓存是否过期
174
+ cache_time = cache_data.get('timestamp', 0)
175
+ if time.time() - cache_time > self.cache_duration:
176
+ return None
177
+
178
+ return cache_data.get('version')
179
+ except (FileNotFoundError, json.JSONDecodeError, KeyError):
180
+ return None
181
+
182
+ def _cache_version(self, latest_version: str):
183
+ """缓存版本信息"""
184
+ try:
185
+ self.cache_dir.mkdir(exist_ok=True)
186
+
187
+ cache_data = {
188
+ 'version': latest_version,
189
+ 'timestamp': time.time()
190
+ }
191
+
192
+ with open(self.cache_file, 'w', encoding='utf-8') as f:
193
+ json.dump(cache_data, f)
194
+ except Exception:
195
+ pass # 缓存失败不影响主功能
196
+
197
+ def _show_update_notification(self, latest_version: str):
198
+ """显示更新通知"""
199
+ if self.silent_mode:
200
+ return
201
+
202
+ print(f"\n🎉 {self.package_name} 有新版本可用!")
203
+ print(f" 当前版本: {self.current_version}")
204
+ print(f" 最新版本: {latest_version}")
205
+ print(f" 更新命令: pip install --upgrade {self.package_name}")
206
+ print()
207
+
208
+ def clear_cache(self):
209
+ """清除版本缓存"""
210
+ try:
211
+ if self.cache_file.exists():
212
+ self.cache_file.unlink()
213
+ except Exception:
214
+ pass
215
+
216
+
217
+ def create_version_checker(package_name: str,
218
+ current_version: Optional[str] = None,
219
+ **kwargs) -> VersionChecker:
220
+ """
221
+ 创建版本检测器的便捷函数
222
+
223
+ Args:
224
+ package_name: 包名
225
+ current_version: 当前版本,如果为None则自动获取
226
+ **kwargs: 其他配置参数
227
+
228
+ Returns:
229
+ VersionChecker实例
230
+ """
231
+ return VersionChecker(package_name, current_version, **kwargs)
232
+
233
+
234
+ def check_pypi_version(package_name: str,
235
+ current_version: Optional[str] = None,
236
+ show_notification: bool = True,
237
+ silent_mode: bool = False) -> Optional[str]:
238
+ """
239
+ 快速检测PyPI版本的便捷函数
240
+
241
+ Args:
242
+ package_name: 包名
243
+ current_version: 当前版本,如果为None则自动获取
244
+ show_notification: 是否显示通知
245
+ silent_mode: 是否静默模式
246
+
247
+ Returns:
248
+ 最新版本号,如果检测失败则返回None
249
+ """
250
+ checker = VersionChecker(package_name, current_version, silent_mode=silent_mode)
251
+ latest_version = checker.check_version_sync()
252
+
253
+ if latest_version and checker._is_newer_version(latest_version) and show_notification:
254
+ checker._show_update_notification(latest_version)
255
+
256
+ return latest_version
257
+
258
+
259
+ def check_reproto_version(current_version: Optional[str] = None,
260
+ show_notification: bool = True,
261
+ silent_mode: bool = False) -> Optional[str]:
262
+ """
263
+ 检测reproto包的PyPI版本更新
264
+
265
+ 这是专门为reproto项目设计的便捷函数,使用PyPI作为版本源
266
+
267
+ Args:
268
+ current_version: 当前版本,如果为None则自动获取
269
+ show_notification: 是否显示更新通知,默认True
270
+ silent_mode: 是否静默模式,默认False
271
+
272
+ Returns:
273
+ 最新版本号,如果检测失败则返回None
274
+ """
275
+ return check_pypi_version(
276
+ package_name="reproto",
277
+ current_version=current_version,
278
+ show_notification=show_notification,
279
+ silent_mode=silent_mode
280
+ )
281
+
282
+
283
+ def check_version_on_startup(current_version: Optional[str] = None):
284
+ """
285
+ 在程序启动时异步检测版本更新
286
+
287
+ 这个函数专门用于在reproto启动时进行版本检测,
288
+ 采用异步方式,不会阻塞主程序启动
289
+
290
+ Args:
291
+ current_version: 当前版本号,如果为None则自动获取
292
+ """
293
+ # 获取当前版本
294
+ actual_version = current_version or get_package_version("reproto") or "0.0.0"
295
+
296
+ def version_callback(has_update: bool, latest_version: Optional[str]):
297
+ if has_update and latest_version:
298
+ print(f"\n💡 提示:reproto有新版本 {latest_version} 可用")
299
+ print(f" 当前版本:{actual_version}")
300
+ print(f" 更新命令:pip install --upgrade reproto\n")
301
+
302
+ checker = create_version_checker(
303
+ package_name="reproto",
304
+ current_version=actual_version,
305
+ silent_mode=True # 静默模式,只在有更新时通过回调显示
306
+ )
307
+
308
+ checker.check_version_async(
309
+ callback=version_callback,
310
+ show_notification=False # 使用自定义回调,不使用默认通知
311
+ )
@@ -1,29 +0,0 @@
1
- feat: 实施智能导入系统并优化README
2
-
3
- 🚀 主要更新:
4
- - 实施智能导入方案,同时支持开发环境和包安装环境
5
- - 使用try/except块自动切换相对导入和绝对导入
6
- - 解决ModuleNotFoundError导入错误问题
7
-
8
- 📝 代码改进:
9
- - 所有模块文件添加智能导入语句
10
- - 统一导入格式,提升代码兼容性
11
- - 优化包结构,支持作为Python包使用
12
-
13
- 📖 文档优化:
14
- - 简化README内容,去除冗余技术细节
15
- - 突出核心使用方法和注意事项
16
- - 特别强调内部类()的正确使用方法
17
- - 移除特定应用相关内容,使用通用示例
18
-
19
- 🔧 技术特性:
20
- - 开发环境: 使用绝对导入 (from core import)
21
- - 包环境: 使用相对导入 (from .core import)
22
- - 自动检测环境并选择合适的导入方式
23
- - 完全向后兼容,无破坏性变更
24
-
25
- ✅ 测试验证:
26
- - 开发环境测试通过 ✅
27
- - 包安装环境测试通过 ✅
28
- - 命令行工具正常运行 ✅
29
- - 导入系统工作正常 ✅
@@ -1 +0,0 @@
1
- 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8
@@ -1 +0,0 @@
1
- 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8
@@ -1 +0,0 @@
1
- 2de8ecbb5ab5de1a032bef3f4606ce5fa7c6c4e8
File without changes
File without changes
File without changes
File without changes
File without changes