├── .converagerc ├── .gitignore ├── .travis.yml ├── LICENSE ├── Makefile ├── Pipfile ├── Pipfile.lock ├── README.md ├── ___future___ └── __init__.py ├── example.txt ├── setup.py ├── tests ├── __init__.py └── test_print_function.py └── tox.ini /.converagerc: -------------------------------------------------------------------------------- 1 | [run] 2 | include = ./___future___ 3 | omit = 4 | *tests* 5 | *__init__* -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | \.vscode/ 3 | 4 | print_function/__pycache__/ 5 | 6 | \.python-version 7 | 8 | \build/ 9 | 10 | \dist/ 11 | 12 | \.egg-info/ 13 | 14 | print_function\.egg-info/ 15 | 16 | ___future___/__pycache__/ 17 | 18 | \.tox/ 19 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | matrix: 4 | include: 5 | - python: 3.4 6 | env: TOXENV=py34 7 | - python: 3.5 8 | env: TOXENV=py35 9 | - python: 3.6 10 | env: TOXENV=py36 11 | - python: 3.7 12 | env: TOXENV=py37 13 | - python: 3.8 14 | env: TOXENV=py38 15 | 16 | before_install: 17 | - echo "before_install" 18 | 19 | install: 20 | - echo "install" 21 | - pip install --upgrade pip 22 | - pip install tox 23 | - pip install pytest 24 | - pip install pytest-cov 25 | 26 | before_script: 27 | - echo "before_script" 28 | 29 | script: 30 | - tox -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 RayWu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | compile :: 2 | python setup.py sdist bdist_wheel 3 | 4 | push :: 5 | python -m twine upload dist/* -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | pylint = "*" 8 | pytest = "*" 9 | pytest-cov = "*" 10 | 11 | [packages] 12 | setuptools = "*" 13 | wheel = "*" 14 | tox = "*" 15 | twine = "*" 16 | 17 | [requires] 18 | python_version = "3.6" 19 | -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "c1bccd41edb409ad6a42a56ba5b72f61d02f723df4c32c59809ef929237cc800" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.6" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "bleach": { 20 | "hashes": [ 21 | "sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16", 22 | "sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa" 23 | ], 24 | "version": "==3.1.0" 25 | }, 26 | "certifi": { 27 | "hashes": [ 28 | "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", 29 | "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" 30 | ], 31 | "version": "==2019.11.28" 32 | }, 33 | "cffi": { 34 | "hashes": [ 35 | "sha256:0b49274afc941c626b605fb59b59c3485c17dc776dc3cc7cc14aca74cc19cc42", 36 | "sha256:0e3ea92942cb1168e38c05c1d56b0527ce31f1a370f6117f1d490b8dcd6b3a04", 37 | "sha256:135f69aecbf4517d5b3d6429207b2dff49c876be724ac0c8bf8e1ea99df3d7e5", 38 | "sha256:19db0cdd6e516f13329cba4903368bff9bb5a9331d3410b1b448daaadc495e54", 39 | "sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba", 40 | "sha256:291f7c42e21d72144bb1c1b2e825ec60f46d0a7468f5346841860454c7aa8f57", 41 | "sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396", 42 | "sha256:2e9c80a8c3344a92cb04661115898a9129c074f7ab82011ef4b612f645939f12", 43 | "sha256:32a262e2b90ffcfdd97c7a5e24a6012a43c61f1f5a57789ad80af1d26c6acd97", 44 | "sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43", 45 | "sha256:415bdc7ca8c1c634a6d7163d43fb0ea885a07e9618a64bda407e04b04333b7db", 46 | "sha256:42194f54c11abc8583417a7cf4eaff544ce0de8187abaf5d29029c91b1725ad3", 47 | "sha256:4424e42199e86b21fc4db83bd76909a6fc2a2aefb352cb5414833c030f6ed71b", 48 | "sha256:4a43c91840bda5f55249413037b7a9b79c90b1184ed504883b72c4df70778579", 49 | "sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346", 50 | "sha256:5c4fae4e9cdd18c82ba3a134be256e98dc0596af1e7285a3d2602c97dcfa5159", 51 | "sha256:5ecfa867dea6fabe2a58f03ac9186ea64da1386af2159196da51c4904e11d652", 52 | "sha256:62f2578358d3a92e4ab2d830cd1c2049c9c0d0e6d3c58322993cc341bdeac22e", 53 | "sha256:6471a82d5abea994e38d2c2abc77164b4f7fbaaf80261cb98394d5793f11b12a", 54 | "sha256:6d4f18483d040e18546108eb13b1dfa1000a089bcf8529e30346116ea6240506", 55 | "sha256:71a608532ab3bd26223c8d841dde43f3516aa5d2bf37b50ac410bb5e99053e8f", 56 | "sha256:74a1d8c85fb6ff0b30fbfa8ad0ac23cd601a138f7509dc617ebc65ef305bb98d", 57 | "sha256:7b93a885bb13073afb0aa73ad82059a4c41f4b7d8eb8368980448b52d4c7dc2c", 58 | "sha256:7d4751da932caaec419d514eaa4215eaf14b612cff66398dd51129ac22680b20", 59 | "sha256:7f627141a26b551bdebbc4855c1157feeef18241b4b8366ed22a5c7d672ef858", 60 | "sha256:8169cf44dd8f9071b2b9248c35fc35e8677451c52f795daa2bb4643f32a540bc", 61 | "sha256:aa00d66c0fab27373ae44ae26a66a9e43ff2a678bf63a9c7c1a9a4d61172827a", 62 | "sha256:ccb032fda0873254380aa2bfad2582aedc2959186cce61e3a17abc1a55ff89c3", 63 | "sha256:d754f39e0d1603b5b24a7f8484b22d2904fa551fe865fd0d4c3332f078d20d4e", 64 | "sha256:d75c461e20e29afc0aee7172a0950157c704ff0dd51613506bd7d82b718e7410", 65 | "sha256:dcd65317dd15bc0451f3e01c80da2216a31916bdcffd6221ca1202d96584aa25", 66 | "sha256:e570d3ab32e2c2861c4ebe6ffcad6a8abf9347432a37608fe1fbd157b3f0036b", 67 | "sha256:fd43a88e045cf992ed09fa724b5315b790525f2676883a6ea64e3263bae6549d" 68 | ], 69 | "version": "==1.13.2" 70 | }, 71 | "chardet": { 72 | "hashes": [ 73 | "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", 74 | "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" 75 | ], 76 | "version": "==3.0.4" 77 | }, 78 | "cryptography": { 79 | "hashes": [ 80 | "sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c", 81 | "sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595", 82 | "sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad", 83 | "sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651", 84 | "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2", 85 | "sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff", 86 | "sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d", 87 | "sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42", 88 | "sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d", 89 | "sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e", 90 | "sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912", 91 | "sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793", 92 | "sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13", 93 | "sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7", 94 | "sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0", 95 | "sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879", 96 | "sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f", 97 | "sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9", 98 | "sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2", 99 | "sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf", 100 | "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8" 101 | ], 102 | "version": "==2.8" 103 | }, 104 | "docutils": { 105 | "hashes": [ 106 | "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af", 107 | "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc" 108 | ], 109 | "version": "==0.16" 110 | }, 111 | "filelock": { 112 | "hashes": [ 113 | "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", 114 | "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836" 115 | ], 116 | "version": "==3.0.12" 117 | }, 118 | "idna": { 119 | "hashes": [ 120 | "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", 121 | "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" 122 | ], 123 | "version": "==2.8" 124 | }, 125 | "importlib-metadata": { 126 | "hashes": [ 127 | "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", 128 | "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b" 129 | ], 130 | "markers": "python_version < '3.8'", 131 | "version": "==1.5.0" 132 | }, 133 | "jeepney": { 134 | "hashes": [ 135 | "sha256:0ba6d8c597e9bef1ebd18aaec595f942a264e25c1a48f164d46120eacaa2e9bb", 136 | "sha256:6f45dce1125cf6c58a1c88123d3831f36a789f9204fbad3172eac15f8ccd08d0" 137 | ], 138 | "markers": "sys_platform == 'linux'", 139 | "version": "==0.4.2" 140 | }, 141 | "keyring": { 142 | "hashes": [ 143 | "sha256:1f393f7466314068961c7e1d508120c092bd71fa54e3d93b76180b526d4abc56", 144 | "sha256:24ae23ab2d6adc59138339e56843e33ec7b0a6b2f06302662477085c6c0aca00" 145 | ], 146 | "version": "==21.1.0" 147 | }, 148 | "packaging": { 149 | "hashes": [ 150 | "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73", 151 | "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334" 152 | ], 153 | "version": "==20.1" 154 | }, 155 | "pkginfo": { 156 | "hashes": [ 157 | "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb", 158 | "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32" 159 | ], 160 | "version": "==1.5.0.1" 161 | }, 162 | "pluggy": { 163 | "hashes": [ 164 | "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", 165 | "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" 166 | ], 167 | "version": "==0.13.1" 168 | }, 169 | "py": { 170 | "hashes": [ 171 | "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa", 172 | "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0" 173 | ], 174 | "version": "==1.8.1" 175 | }, 176 | "pycparser": { 177 | "hashes": [ 178 | "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" 179 | ], 180 | "version": "==2.19" 181 | }, 182 | "pygments": { 183 | "hashes": [ 184 | "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", 185 | "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe" 186 | ], 187 | "version": "==2.5.2" 188 | }, 189 | "pyparsing": { 190 | "hashes": [ 191 | "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", 192 | "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec" 193 | ], 194 | "version": "==2.4.6" 195 | }, 196 | "readme-renderer": { 197 | "hashes": [ 198 | "sha256:bb16f55b259f27f75f640acf5e00cf897845a8b3e4731b5c1a436e4b8529202f", 199 | "sha256:c8532b79afc0375a85f10433eca157d6b50f7d6990f337fa498c96cd4bfc203d" 200 | ], 201 | "version": "==24.0" 202 | }, 203 | "requests": { 204 | "hashes": [ 205 | "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", 206 | "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" 207 | ], 208 | "version": "==2.22.0" 209 | }, 210 | "requests-toolbelt": { 211 | "hashes": [ 212 | "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f", 213 | "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0" 214 | ], 215 | "version": "==0.9.1" 216 | }, 217 | "secretstorage": { 218 | "hashes": [ 219 | "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6", 220 | "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b" 221 | ], 222 | "markers": "sys_platform == 'linux'", 223 | "version": "==3.1.2" 224 | }, 225 | "six": { 226 | "hashes": [ 227 | "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", 228 | "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" 229 | ], 230 | "version": "==1.14.0" 231 | }, 232 | "toml": { 233 | "hashes": [ 234 | "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", 235 | "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" 236 | ], 237 | "version": "==0.10.0" 238 | }, 239 | "tox": { 240 | "hashes": [ 241 | "sha256:06ba73b149bf838d5cd25dc30c2dd2671ae5b2757cf98e5c41a35fe449f131b3", 242 | "sha256:806d0a9217584558cc93747a945a9d9bff10b141a5287f0c8429a08828a22192" 243 | ], 244 | "index": "pypi", 245 | "version": "==3.14.3" 246 | }, 247 | "tqdm": { 248 | "hashes": [ 249 | "sha256:251ee8440dbda126b8dfa8a7c028eb3f13704898caaef7caa699b35e119301e2", 250 | "sha256:fe231261cfcbc6f4a99165455f8f6b9ef4e1032a6e29bccf168b4bf42012f09c" 251 | ], 252 | "version": "==4.42.1" 253 | }, 254 | "twine": { 255 | "hashes": [ 256 | "sha256:c1af8ca391e43b0a06bbc155f7f67db0bf0d19d284bfc88d1675da497a946124", 257 | "sha256:d561a5e511f70275e5a485a6275ff61851c16ffcb3a95a602189161112d9f160" 258 | ], 259 | "index": "pypi", 260 | "version": "==3.1.1" 261 | }, 262 | "urllib3": { 263 | "hashes": [ 264 | "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", 265 | "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc" 266 | ], 267 | "version": "==1.25.8" 268 | }, 269 | "virtualenv": { 270 | "hashes": [ 271 | "sha256:0d62c70883c0342d59c11d0ddac0d954d0431321a41ab20851facf2b222598f3", 272 | "sha256:55059a7a676e4e19498f1aad09b8313a38fcc0cdbe4fdddc0e9b06946d21b4bb" 273 | ], 274 | "version": "==16.7.9" 275 | }, 276 | "webencodings": { 277 | "hashes": [ 278 | "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", 279 | "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" 280 | ], 281 | "version": "==0.5.1" 282 | }, 283 | "wheel": { 284 | "hashes": [ 285 | "sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96", 286 | "sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e" 287 | ], 288 | "index": "pypi", 289 | "version": "==0.34.2" 290 | }, 291 | "zipp": { 292 | "hashes": [ 293 | "sha256:ccc94ed0909b58ffe34430ea5451f07bc0c76467d7081619a454bf5c98b89e28", 294 | "sha256:feae2f18633c32fc71f2de629bfb3bd3c9325cd4419642b1f1da42ee488d9b98" 295 | ], 296 | "version": "==2.1.0" 297 | } 298 | }, 299 | "develop": { 300 | "astroid": { 301 | "hashes": [ 302 | "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a", 303 | "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42" 304 | ], 305 | "version": "==2.3.3" 306 | }, 307 | "attrs": { 308 | "hashes": [ 309 | "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", 310 | "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" 311 | ], 312 | "version": "==19.3.0" 313 | }, 314 | "coverage": { 315 | "hashes": [ 316 | "sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3", 317 | "sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c", 318 | "sha256:1e44a022500d944d42f94df76727ba3fc0a5c0b672c358b61067abb88caee7a0", 319 | "sha256:25dbf1110d70bab68a74b4b9d74f30e99b177cde3388e07cc7272f2168bd1477", 320 | "sha256:3230d1003eec018ad4a472d254991e34241e0bbd513e97a29727c7c2f637bd2a", 321 | "sha256:3dbb72eaeea5763676a1a1efd9b427a048c97c39ed92e13336e726117d0b72bf", 322 | "sha256:5012d3b8d5a500834783689a5d2292fe06ec75dc86ee1ccdad04b6f5bf231691", 323 | "sha256:51bc7710b13a2ae0c726f69756cf7ffd4362f4ac36546e243136187cfcc8aa73", 324 | "sha256:527b4f316e6bf7755082a783726da20671a0cc388b786a64417780b90565b987", 325 | "sha256:722e4557c8039aad9592c6a4213db75da08c2cd9945320220634f637251c3894", 326 | "sha256:76e2057e8ffba5472fd28a3a010431fd9e928885ff480cb278877c6e9943cc2e", 327 | "sha256:77afca04240c40450c331fa796b3eab6f1e15c5ecf8bf2b8bee9706cd5452fef", 328 | "sha256:7afad9835e7a651d3551eab18cbc0fdb888f0a6136169fbef0662d9cdc9987cf", 329 | "sha256:9bea19ac2f08672636350f203db89382121c9c2ade85d945953ef3c8cf9d2a68", 330 | "sha256:a8b8ac7876bc3598e43e2603f772d2353d9931709345ad6c1149009fd1bc81b8", 331 | "sha256:b0840b45187699affd4c6588286d429cd79a99d509fe3de0f209594669bb0954", 332 | "sha256:b26aaf69713e5674efbde4d728fb7124e429c9466aeaf5f4a7e9e699b12c9fe2", 333 | "sha256:b63dd43f455ba878e5e9f80ba4f748c0a2156dde6e0e6e690310e24d6e8caf40", 334 | "sha256:be18f4ae5a9e46edae3f329de2191747966a34a3d93046dbdf897319923923bc", 335 | "sha256:c312e57847db2526bc92b9bfa78266bfbaabac3fdcd751df4d062cd4c23e46dc", 336 | "sha256:c60097190fe9dc2b329a0eb03393e2e0829156a589bd732e70794c0dd804258e", 337 | "sha256:c62a2143e1313944bf4a5ab34fd3b4be15367a02e9478b0ce800cb510e3bbb9d", 338 | "sha256:cc1109f54a14d940b8512ee9f1c3975c181bbb200306c6d8b87d93376538782f", 339 | "sha256:cd60f507c125ac0ad83f05803063bed27e50fa903b9c2cfee3f8a6867ca600fc", 340 | "sha256:d513cc3db248e566e07a0da99c230aca3556d9b09ed02f420664e2da97eac301", 341 | "sha256:d649dc0bcace6fcdb446ae02b98798a856593b19b637c1b9af8edadf2b150bea", 342 | "sha256:d7008a6796095a79544f4da1ee49418901961c97ca9e9d44904205ff7d6aa8cb", 343 | "sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af", 344 | "sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52", 345 | "sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37", 346 | "sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0" 347 | ], 348 | "version": "==5.0.3" 349 | }, 350 | "importlib-metadata": { 351 | "hashes": [ 352 | "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", 353 | "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b" 354 | ], 355 | "markers": "python_version < '3.8'", 356 | "version": "==1.5.0" 357 | }, 358 | "isort": { 359 | "hashes": [ 360 | "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", 361 | "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" 362 | ], 363 | "version": "==4.3.21" 364 | }, 365 | "lazy-object-proxy": { 366 | "hashes": [ 367 | "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d", 368 | "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449", 369 | "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08", 370 | "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a", 371 | "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50", 372 | "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd", 373 | "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239", 374 | "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb", 375 | "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea", 376 | "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e", 377 | "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156", 378 | "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142", 379 | "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442", 380 | "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62", 381 | "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db", 382 | "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531", 383 | "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383", 384 | "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a", 385 | "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357", 386 | "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4", 387 | "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0" 388 | ], 389 | "version": "==1.4.3" 390 | }, 391 | "mccabe": { 392 | "hashes": [ 393 | "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", 394 | "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" 395 | ], 396 | "version": "==0.6.1" 397 | }, 398 | "more-itertools": { 399 | "hashes": [ 400 | "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c", 401 | "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507" 402 | ], 403 | "version": "==8.2.0" 404 | }, 405 | "packaging": { 406 | "hashes": [ 407 | "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73", 408 | "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334" 409 | ], 410 | "version": "==20.1" 411 | }, 412 | "pluggy": { 413 | "hashes": [ 414 | "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", 415 | "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" 416 | ], 417 | "version": "==0.13.1" 418 | }, 419 | "py": { 420 | "hashes": [ 421 | "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa", 422 | "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0" 423 | ], 424 | "version": "==1.8.1" 425 | }, 426 | "pylint": { 427 | "hashes": [ 428 | "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd", 429 | "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4" 430 | ], 431 | "index": "pypi", 432 | "version": "==2.4.4" 433 | }, 434 | "pyparsing": { 435 | "hashes": [ 436 | "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", 437 | "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec" 438 | ], 439 | "version": "==2.4.6" 440 | }, 441 | "pytest": { 442 | "hashes": [ 443 | "sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d", 444 | "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6" 445 | ], 446 | "index": "pypi", 447 | "version": "==5.3.5" 448 | }, 449 | "pytest-cov": { 450 | "hashes": [ 451 | "sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b", 452 | "sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626" 453 | ], 454 | "index": "pypi", 455 | "version": "==2.8.1" 456 | }, 457 | "six": { 458 | "hashes": [ 459 | "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", 460 | "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" 461 | ], 462 | "version": "==1.14.0" 463 | }, 464 | "typed-ast": { 465 | "hashes": [ 466 | "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355", 467 | "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919", 468 | "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa", 469 | "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652", 470 | "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75", 471 | "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01", 472 | "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d", 473 | "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1", 474 | "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907", 475 | "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c", 476 | "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3", 477 | "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b", 478 | "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614", 479 | "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb", 480 | "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b", 481 | "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41", 482 | "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6", 483 | "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34", 484 | "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe", 485 | "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4", 486 | "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7" 487 | ], 488 | "markers": "implementation_name == 'cpython' and python_version < '3.8'", 489 | "version": "==1.4.1" 490 | }, 491 | "wcwidth": { 492 | "hashes": [ 493 | "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603", 494 | "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8" 495 | ], 496 | "version": "==0.1.8" 497 | }, 498 | "wrapt": { 499 | "hashes": [ 500 | "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" 501 | ], 502 | "version": "==1.11.2" 503 | }, 504 | "zipp": { 505 | "hashes": [ 506 | "sha256:ccc94ed0909b58ffe34430ea5451f07bc0c76467d7081619a454bf5c98b89e28", 507 | "sha256:feae2f18633c32fc71f2de629bfb3bd3c9325cd4419642b1f1da42ee488d9b98" 508 | ], 509 | "version": "==2.1.0" 510 | } 511 | } 512 | } 513 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # print-function 2 | [![image](https://img.shields.io/pypi/v/print-function.svg)](https://python.org/pypi/print-function) 3 | [![image](https://img.shields.io/pypi/dm/print-function.svg)](https://python.org/pypi/print-function) 4 | [![Build Status](https://travis-ci.org/raywu60kg/print-function.svg?branch=master)](https://travis-ci.org/raywu60kg/print-function) 5 | [![image](https://img.shields.io/pypi/pyversions/print-function.svg)](https://python.org/pypi/print-function) 6 | ### Install 7 | ``` 8 | $ pip install print-function 9 | ``` 10 | 11 | ### Usage 12 | If we put `from ___future___ import *` on our python script, it will overwrite our print and become like 13 | 14 | ```python 15 | from ___future___ import * 16 | print("123") 17 | print("BabyRage!", flush=True) 18 | 19 | # output 20 | b'\xe5\xa4\xa9\xe7\x8e\x89\xe8\x8a\xb1\xe8\xa5\xbf\xe7\xbe\x8e' 21 | ' ╭─────────╮' 22 | ' |BabyRage!|' 23 | ' ╯─────────╯' 24 | ' ███]▄▄▄▄▄▄▄▃~~~' 25 | ' ▂▄▅█████████▅▄▃▂' 26 | '[████████████████]' 27 | '◥ ⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙ ◤ ' 28 | ``` 29 | 30 | The normal `print` will be the unicode from random nonsense word and with the option `flush=True`, it will be a tank(嬰靈戰車) help you to log things 31 | -------------------------------------------------------------------------------- /___future___/__init__.py: -------------------------------------------------------------------------------- 1 | import pprint 2 | import random 3 | import sys 4 | random_candidate = [ 5 | '如', 6 | '來', 7 | '佛', 8 | '祖', 9 | '玉', 10 | '皇', 11 | '大', 12 | '帝', 13 | '觀', 14 | '音', 15 | '菩', 16 | '薩', 17 | '指', 18 | '定', 19 | '取', 20 | '西', 21 | '經', 22 | '特', 23 | '派', 24 | '使', 25 | '者', 26 | '花', 27 | '果', 28 | '山', 29 | '水', 30 | '簾', 31 | '洞', 32 | '美', 33 | '猴', 34 | '王', 35 | '齊', 36 | '天', 37 | '大', 38 | '聖' 39 | ] 40 | def print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False): 41 | if flush == True: 42 | str_len = len(str(*objects)) 43 | blank_str = " " 44 | line_str = "" 45 | for _ in range(str_len): 46 | line_str += "─" 47 | 48 | pprint.pprint(blank_str + "╭" + line_str + "╮") 49 | pprint.pprint(blank_str + "|" + str(*objects) + "|") 50 | pprint.pprint(blank_str + "╯" + line_str + "╯") 51 | pprint.pprint(" ███]▄▄▄▄▄▄▄▃~~~") 52 | pprint.pprint(" ▂▄▅█████████▅▄▃▂") 53 | pprint.pprint("[████████████████]") 54 | pprint.pprint("◥ ⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙ ◤ ") 55 | 56 | else: 57 | pprint.pprint("".join(random.sample(random_candidate,5)).encode("utf-8")) 58 | -------------------------------------------------------------------------------- /example.txt: -------------------------------------------------------------------------------- 1 | ╭───────────╮ 2 | │BabyRage! │ 3 | ╯───────────╯ 4 | ███]▄▄▄▄▄▄▄▃~~~ 5 | ▂▄▅█████████▅▄▃▂ 6 | [████████████████] 7 | ◥ ⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙ ◤ -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | import os 3 | import codecs 4 | 5 | here = os.path.abspath(os.path.dirname(__file__)) 6 | 7 | with codecs.open(os.path.join(here, "README.md"), encoding="utf-8") as f: 8 | long_description = "\n" + f.read() 9 | 10 | setup(name='print-function', 11 | version='1.0.2', 12 | description='Best python print function', 13 | long_description=long_description, 14 | long_description_content_type='text/markdown', 15 | url='https://github.com/raywu60kg/print-function', 16 | author='raywu60kg', 17 | author_email='wuhaohsiang1992@gmail.com', 18 | packages=['___future___'], 19 | license="MIT", 20 | python_requires=">=3.4", 21 | classifiers=[ 22 | "Programming Language :: Python :: 3.4", 23 | "Programming Language :: Python :: 3.5", 24 | "Programming Language :: Python :: 3.6", 25 | "Programming Language :: Python :: 3.7", 26 | "Programming Language :: Python :: 3.8" 27 | ]) -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raywu60kg/print-function/3a2265f4fd67c184779c0b56afc4a39ae2c3f714/tests/__init__.py -------------------------------------------------------------------------------- /tests/test_print_function.py: -------------------------------------------------------------------------------- 1 | from ___future___ import * 2 | import io 3 | import sys 4 | import pprint 5 | 6 | def test_with_flush(): 7 | capture_output = io.StringIO() 8 | sys.stdout = capture_output 9 | print(123, flush=True) 10 | sys.stdout = sys.__stdout__ 11 | assert capture_output.getvalue().find("◥ ⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲⊙ ◤") is not -1 12 | 13 | def test_without_flush(): 14 | capture_output = io.StringIO() 15 | sys.stdout = capture_output 16 | print(123, flush=True) 17 | sys.stdout = sys.__stdout__ 18 | assert len(capture_output.getvalue()) == 147 -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | # tox (https://tox.readthedocs.io/) is a tool for running tests 2 | # in multiple virtualenvs. This configuration file will run the 3 | # test suite on all supported python versions. To use it, "pip install tox" 4 | # and then run "tox" from this directory. 5 | 6 | [tox] 7 | envlist = py34, py35, py36, py37, py38 8 | 9 | [testenv] 10 | deps = pipenv 11 | commands= 12 | pytest --cov 13 | --------------------------------------------------------------------------------