codext 1.15.4__tar.gz → 1.15.7__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 (129) hide show
  1. {codext-1.15.4 → codext-1.15.7}/.github/workflows/python-package.yml +40 -8
  2. {codext-1.15.4 → codext-1.15.7}/PKG-INFO +4 -7
  3. codext-1.15.7/docs/coverage.svg +1 -0
  4. {codext-1.15.4 → codext-1.15.7}/pyproject.toml +1 -5
  5. codext-1.15.7/src/codext/VERSION.txt +1 -0
  6. {codext-1.15.4 → codext-1.15.7}/src/codext/__common__.py +7 -6
  7. {codext-1.15.4 → codext-1.15.7}/src/codext/hashing/crypt.py +4 -1
  8. {codext-1.15.4 → codext-1.15.7}/src/codext.egg-info/PKG-INFO +4 -7
  9. {codext-1.15.4 → codext-1.15.7}/src/codext.egg-info/SOURCES.txt +0 -1
  10. codext-1.15.7/src/codext.egg-info/requires.txt +4 -0
  11. {codext-1.15.4 → codext-1.15.7}/tests/test_manual.py +4 -1
  12. codext-1.15.4/.github/workflows/pypi-publish.yml +0 -37
  13. codext-1.15.4/docs/coverage.svg +0 -1
  14. codext-1.15.4/src/codext/VERSION.txt +0 -1
  15. codext-1.15.4/src/codext.egg-info/requires.txt +0 -1
  16. {codext-1.15.4 → codext-1.15.7}/.coveragerc +0 -0
  17. {codext-1.15.4 → codext-1.15.7}/.gitignore +0 -0
  18. {codext-1.15.4 → codext-1.15.7}/.readthedocs.yml +0 -0
  19. {codext-1.15.4 → codext-1.15.7}/LICENSE +0 -0
  20. {codext-1.15.4 → codext-1.15.7}/README.md +0 -0
  21. {codext-1.15.4 → codext-1.15.7}/docs/mkdocs.yml +0 -0
  22. {codext-1.15.4 → codext-1.15.7}/docs/pages/cli.md +0 -0
  23. {codext-1.15.4 → codext-1.15.7}/docs/pages/css/extra.css +0 -0
  24. {codext-1.15.4 → codext-1.15.7}/docs/pages/demos/using-bases.gif +0 -0
  25. {codext-1.15.4 → codext-1.15.7}/docs/pages/demos/using-codext.gif +0 -0
  26. {codext-1.15.4 → codext-1.15.7}/docs/pages/demos/using-debase.gif +0 -0
  27. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/base.md +0 -0
  28. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/binary.md +0 -0
  29. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/common.md +0 -0
  30. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/compressions.md +0 -0
  31. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/crypto.md +0 -0
  32. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/hashing.md +0 -0
  33. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/languages.md +0 -0
  34. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/others.md +0 -0
  35. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/stegano.md +0 -0
  36. {codext-1.15.4 → codext-1.15.7}/docs/pages/enc/web.md +0 -0
  37. {codext-1.15.4 → codext-1.15.7}/docs/pages/features.md +0 -0
  38. {codext-1.15.4 → codext-1.15.7}/docs/pages/guessing.md +0 -0
  39. {codext-1.15.4 → codext-1.15.7}/docs/pages/howto.md +0 -0
  40. {codext-1.15.4 → codext-1.15.7}/docs/pages/img/banner.png +0 -0
  41. {codext-1.15.4 → codext-1.15.7}/docs/pages/img/icon.png +0 -0
  42. {codext-1.15.4 → codext-1.15.7}/docs/pages/img/logo.png +0 -0
  43. {codext-1.15.4 → codext-1.15.7}/docs/pages/index.md +0 -0
  44. {codext-1.15.4 → codext-1.15.7}/docs/pages/manipulations.md +0 -0
  45. {codext-1.15.4 → codext-1.15.7}/docs/requirements.txt +0 -0
  46. {codext-1.15.4 → codext-1.15.7}/pytest.ini +0 -0
  47. {codext-1.15.4 → codext-1.15.7}/requirements.txt +0 -0
  48. {codext-1.15.4 → codext-1.15.7}/setup.cfg +0 -0
  49. {codext-1.15.4 → codext-1.15.7}/src/codext/__info__.py +0 -0
  50. {codext-1.15.4 → codext-1.15.7}/src/codext/__init__.py +0 -0
  51. {codext-1.15.4 → codext-1.15.7}/src/codext/base/__init__.py +0 -0
  52. {codext-1.15.4 → codext-1.15.7}/src/codext/base/_base.py +0 -0
  53. {codext-1.15.4 → codext-1.15.7}/src/codext/base/_base2n.py +0 -0
  54. {codext-1.15.4 → codext-1.15.7}/src/codext/base/base100.py +0 -0
  55. {codext-1.15.4 → codext-1.15.7}/src/codext/base/base122.py +0 -0
  56. {codext-1.15.4 → codext-1.15.7}/src/codext/base/base45.py +0 -0
  57. {codext-1.15.4 → codext-1.15.7}/src/codext/base/base85.py +0 -0
  58. {codext-1.15.4 → codext-1.15.7}/src/codext/base/base91.py +0 -0
  59. {codext-1.15.4 → codext-1.15.7}/src/codext/base/baseN.py +0 -0
  60. {codext-1.15.4 → codext-1.15.7}/src/codext/binary/__init__.py +0 -0
  61. {codext-1.15.4 → codext-1.15.7}/src/codext/binary/baudot.py +0 -0
  62. {codext-1.15.4 → codext-1.15.7}/src/codext/binary/bcd.py +0 -0
  63. {codext-1.15.4 → codext-1.15.7}/src/codext/binary/excess3.py +0 -0
  64. {codext-1.15.4 → codext-1.15.7}/src/codext/binary/gray.py +0 -0
  65. {codext-1.15.4 → codext-1.15.7}/src/codext/binary/manchester.py +0 -0
  66. {codext-1.15.4 → codext-1.15.7}/src/codext/binary/rotate.py +0 -0
  67. {codext-1.15.4 → codext-1.15.7}/src/codext/common/__init__.py +0 -0
  68. {codext-1.15.4 → codext-1.15.7}/src/codext/common/a1z26.py +0 -0
  69. {codext-1.15.4 → codext-1.15.7}/src/codext/common/cases.py +0 -0
  70. {codext-1.15.4 → codext-1.15.7}/src/codext/common/dummy.py +0 -0
  71. {codext-1.15.4 → codext-1.15.7}/src/codext/common/octal.py +0 -0
  72. {codext-1.15.4 → codext-1.15.7}/src/codext/common/ordinal.py +0 -0
  73. {codext-1.15.4 → codext-1.15.7}/src/codext/compressions/__init__.py +0 -0
  74. {codext-1.15.4 → codext-1.15.7}/src/codext/compressions/gzipp.py +0 -0
  75. {codext-1.15.4 → codext-1.15.7}/src/codext/compressions/lz77.py +0 -0
  76. {codext-1.15.4 → codext-1.15.7}/src/codext/compressions/lz78.py +0 -0
  77. {codext-1.15.4 → codext-1.15.7}/src/codext/compressions/pkzip.py +0 -0
  78. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/__init__.py +0 -0
  79. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/affine.py +0 -0
  80. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/atbash.py +0 -0
  81. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/bacon.py +0 -0
  82. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/barbie.py +0 -0
  83. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/citrix.py +0 -0
  84. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/railfence.py +0 -0
  85. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/rot.py +0 -0
  86. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/scytale.py +0 -0
  87. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/shift.py +0 -0
  88. {codext-1.15.4 → codext-1.15.7}/src/codext/crypto/xor.py +0 -0
  89. {codext-1.15.4 → codext-1.15.7}/src/codext/hashing/__init__.py +0 -0
  90. {codext-1.15.4 → codext-1.15.7}/src/codext/hashing/blake.py +0 -0
  91. {codext-1.15.4 → codext-1.15.7}/src/codext/hashing/checksums.py +0 -0
  92. {codext-1.15.4 → codext-1.15.7}/src/codext/hashing/md.py +0 -0
  93. {codext-1.15.4 → codext-1.15.7}/src/codext/hashing/sha.py +0 -0
  94. {codext-1.15.4 → codext-1.15.7}/src/codext/hashing/shake.py +0 -0
  95. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/__init__.py +0 -0
  96. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/braille.py +0 -0
  97. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/galactic.py +0 -0
  98. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/ipsum.py +0 -0
  99. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/leetspeak.py +0 -0
  100. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/morse.py +0 -0
  101. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/navajo.py +0 -0
  102. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/radio.py +0 -0
  103. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/southpark.py +0 -0
  104. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/tap.py +0 -0
  105. {codext-1.15.4 → codext-1.15.7}/src/codext/languages/tomtom.py +0 -0
  106. {codext-1.15.4 → codext-1.15.7}/src/codext/macros.json +0 -0
  107. {codext-1.15.4 → codext-1.15.7}/src/codext/others/__init__.py +0 -0
  108. {codext-1.15.4 → codext-1.15.7}/src/codext/others/dna.py +0 -0
  109. {codext-1.15.4 → codext-1.15.7}/src/codext/others/kbshift.py +0 -0
  110. {codext-1.15.4 → codext-1.15.7}/src/codext/others/letters.py +0 -0
  111. {codext-1.15.4 → codext-1.15.7}/src/codext/others/markdown.py +0 -0
  112. {codext-1.15.4 → codext-1.15.7}/src/codext/others/uuencode.py +0 -0
  113. {codext-1.15.4 → codext-1.15.7}/src/codext/stegano/__init__.py +0 -0
  114. {codext-1.15.4 → codext-1.15.7}/src/codext/stegano/hexagram.py +0 -0
  115. {codext-1.15.4 → codext-1.15.7}/src/codext/stegano/klopf.py +0 -0
  116. {codext-1.15.4 → codext-1.15.7}/src/codext/stegano/resistor.py +0 -0
  117. {codext-1.15.4 → codext-1.15.7}/src/codext/stegano/rick.py +0 -0
  118. {codext-1.15.4 → codext-1.15.7}/src/codext/stegano/sms.py +0 -0
  119. {codext-1.15.4 → codext-1.15.7}/src/codext/stegano/whitespace.py +0 -0
  120. {codext-1.15.4 → codext-1.15.7}/src/codext/web/__init__.py +0 -0
  121. {codext-1.15.4 → codext-1.15.7}/src/codext/web/html.py +0 -0
  122. {codext-1.15.4 → codext-1.15.7}/src/codext/web/url.py +0 -0
  123. {codext-1.15.4 → codext-1.15.7}/src/codext.egg-info/dependency_links.txt +0 -0
  124. {codext-1.15.4 → codext-1.15.7}/src/codext.egg-info/entry_points.txt +0 -0
  125. {codext-1.15.4 → codext-1.15.7}/src/codext.egg-info/top_level.txt +0 -0
  126. {codext-1.15.4 → codext-1.15.7}/tests/__init__.py +0 -0
  127. {codext-1.15.4 → codext-1.15.7}/tests/test_base.py +0 -0
  128. {codext-1.15.4 → codext-1.15.7}/tests/test_common.py +0 -0
  129. {codext-1.15.4 → codext-1.15.7}/tests/test_generated.py +0 -0
@@ -19,25 +19,21 @@ jobs:
19
19
  fail-fast: false
20
20
  matrix:
21
21
  os: [ubuntu-latest]
22
- python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
22
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
23
23
  steps:
24
24
  - uses: actions/checkout@v3
25
25
  - name: Set up Python ${{ matrix.python-version }}
26
26
  uses: actions/setup-python@v4
27
27
  with:
28
28
  python-version: ${{ matrix.python-version }}
29
+ - name: Install pandoc
30
+ run: sudo apt-get install -y pandoc
29
31
  - name: Install ${{ env.package }}
30
32
  run: |
31
33
  python -m pip install --upgrade pip
32
- python -m pip install flake8 pytest pytest-cov pytest-pythonpath coverage
34
+ python -m pip install pytest pytest-cov pytest-pythonpath coverage
33
35
  pip install -r requirements.txt
34
36
  pip install .
35
- - name: Lint with flake8
36
- run: |
37
- # stop the build if there are Python syntax errors or undefined names
38
- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
39
- # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
40
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
41
37
  - name: Test ${{ env.package }} with pytest
42
38
  run: |
43
39
  pytest --cov=$package
@@ -48,6 +44,12 @@ jobs:
48
44
  cov_badge_path: docs/coverage.svg
49
45
  steps:
50
46
  - uses: actions/checkout@v3
47
+ - name: Set up Python ${{ matrix.python-version }}
48
+ uses: actions/setup-python@v4
49
+ with:
50
+ python-version: "3.12"
51
+ - name: Install pandoc
52
+ run: sudo apt-get install -y pandoc notification-daemon
51
53
  - name: Install ${{ env.package }}
52
54
  run: |
53
55
  python -m pip install --upgrade pip
@@ -77,3 +79,33 @@ jobs:
77
79
  with:
78
80
  github_token: ${{ secrets.github_token }}
79
81
  branch: ${{ github.ref }}
82
+ deploy:
83
+ runs-on: ubuntu-latest
84
+ needs: coverage
85
+ steps:
86
+ - uses: actions/checkout@v3
87
+ with:
88
+ fetch-depth: 0
89
+ - name: Check for version change
90
+ uses: dorny/paths-filter@v2
91
+ id: filter
92
+ with:
93
+ filters: |
94
+ version:
95
+ - '**/VERSION.txt'
96
+ - if: steps.filter.outputs.version == 'true'
97
+ name: Cleanup README
98
+ run: |
99
+ sed -ri 's/^(##*)\s*:.*:\s*/\1 /g' README.md
100
+ awk '{if (match($0,"## Supporters")) exit; print}' README.md > README
101
+ mv -f README README.md
102
+ - if: steps.filter.outputs.version == 'true'
103
+ name: Build ${{ env.package }} package
104
+ run: python3 -m pip install --upgrade build && python3 -m build
105
+ - if: steps.filter.outputs.version == 'true'
106
+ name: Upload ${{ env.package }} to PyPi
107
+ uses: pypa/gh-action-pypi-publish@release/v1
108
+ with:
109
+ password: ${{ secrets.PYPI_API_TOKEN }}
110
+ verbose: true
111
+ verify_metadata: false
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: codext
3
- Version: 1.15.4
3
+ Version: 1.15.7
4
4
  Summary: Native codecs extension
5
5
  Author-email: Alexandre D'Hondt <alexandre.dhondt@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -688,16 +688,13 @@ Classifier: Environment :: Console
688
688
  Classifier: Intended Audience :: Developers
689
689
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
690
690
  Classifier: Programming Language :: Python :: 3
691
- Classifier: Programming Language :: Python :: 3.8
692
- Classifier: Programming Language :: Python :: 3.9
693
- Classifier: Programming Language :: Python :: 3.10
694
- Classifier: Programming Language :: Python :: 3.11
695
- Classifier: Programming Language :: Python :: 3.12
696
691
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
697
692
  Requires-Python: <4,>=3.8
698
693
  Description-Content-Type: text/markdown
699
694
  License-File: LICENSE
695
+ Requires-Dist: legacycrypt; python_version >= "3.13"
700
696
  Requires-Dist: markdown2>=2.4.0
697
+ Dynamic: license-file
701
698
 
702
699
  <p align="center"><img src="https://github.com/dhondta/python-codext/raw/main/docs/pages/img/logo.png"></p>
703
700
  <h1 align="center">CodExt <a href="https://twitter.com/intent/tweet?text=CodExt%20-%20Encoding%2Fdecoding%20anything.%0D%0APython%20library%20extending%20the%20native%20codecs%20library%20with%20many%20new%20encodings%20and%20providing%20CLI%20tools%20with%20a%20guess%20feature%20based%20on%20AI.%0D%0Ahttps%3a%2f%2fgithub%2ecom%2fdhondta%2fpython-codext%0D%0A&hashtags=python,programming,encodings,codecs,cryptography,morse,base,ctftools"><img src="https://img.shields.io/badge/Tweet--lightgrey?logo=twitter&style=social" alt="Tweet" height="20"/></a></h1>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 98.90%"><title>coverage: 98.90%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#4c1"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">98.90%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">98.90%</text></g></svg>
@@ -23,14 +23,10 @@ classifiers = [
23
23
  "Intended Audience :: Developers",
24
24
  "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
25
25
  "Programming Language :: Python :: 3",
26
- "Programming Language :: Python :: 3.8",
27
- "Programming Language :: Python :: 3.9",
28
- "Programming Language :: Python :: 3.10",
29
- "Programming Language :: Python :: 3.11",
30
- "Programming Language :: Python :: 3.12",
31
26
  "Topic :: Software Development :: Libraries :: Python Modules",
32
27
  ]
33
28
  dependencies = [
29
+ "legacycrypt; python_version >= '3.13'",
34
30
  "markdown2>=2.4.0",
35
31
  ]
36
32
  dynamic = ["version"]
@@ -0,0 +1 @@
1
+ 1.15.7
@@ -200,8 +200,9 @@ def _input(infile):
200
200
 
201
201
  def _set_exc(name, etype="ValueError"):
202
202
  if not hasattr(builtins, name):
203
- exec(f"class {name}({etype}): __module__ = 'builtins'")
204
- setattr(builtins, name, locals()[name])
203
+ ns = {}
204
+ exec(f"class {name}({etype}): __module__ = 'builtins'", {}, ns)
205
+ setattr(builtins, name, ns[name])
205
206
  _set_exc("InputSizeLimitError")
206
207
  _set_exc("ParameterError")
207
208
 
@@ -369,7 +370,7 @@ def add_macro(mname, *encodings):
369
370
  :param mname: macro name
370
371
  :param encodings: encoding names of the encodings to be chained with the macro
371
372
  """
372
- global PERS_MACROS
373
+ global PERS_MACROS # noqa: F824
373
374
  # check for name clash with alreday existing macros and codecs
374
375
  if mname in MACROS or mname in PERS_MACROS:
375
376
  raise ValueError("Macro name already exists")
@@ -629,7 +630,7 @@ codecs.add_map = add_map
629
630
 
630
631
  def clear():
631
632
  """ Clear codext's local registry of search functions. """
632
- global __codecs_registry, MACROS, PERS_MACROS
633
+ global __codecs_registry, MACROS, PERS_MACROS # noqa: F824
633
634
  __codecs_registry, MACROS, PERS_MACROS = [], {}, {}
634
635
  codecs.clear = clear
635
636
 
@@ -732,7 +733,7 @@ def list_macros():
732
733
  def remove(name):
733
734
  """ Remove all search functions matching the input encoding name from codext's local registry or any macro with the
734
735
  given name. """
735
- global __codecs_registry, MACROS, PERS_MACROS
736
+ global __codecs_registry, MACROS, PERS_MACROS # noqa: F824
736
737
  tbr = []
737
738
  for search_function in __codecs_registry:
738
739
  if search_function(name) is not None:
@@ -763,7 +764,7 @@ codecs.remove = remove
763
764
 
764
765
  def reset():
765
766
  """ Reset codext's local registry of search functions and macros. """
766
- global __codecs_registry, CODECS_REGISTRY, MACROS, PERS_MACROS
767
+ global __codecs_registry, CODECS_REGISTRY, MACROS, PERS_MACROS # noqa: F824
767
768
  clear()
768
769
  d = os.path.dirname(__file__)
769
770
  for pkg in sorted(os.listdir(d)):
@@ -12,7 +12,10 @@ from ..__common__ import add, ensure_str, UNIX
12
12
 
13
13
 
14
14
  if UNIX:
15
- import crypt
15
+ try:
16
+ import crypt
17
+ except ImportError:
18
+ import legacycrypt as crypt
16
19
 
17
20
  METHODS = [x[7:].lower() for x in crypt.__dict__ if x.startswith("METHOD_")]
18
21
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: codext
3
- Version: 1.15.4
3
+ Version: 1.15.7
4
4
  Summary: Native codecs extension
5
5
  Author-email: Alexandre D'Hondt <alexandre.dhondt@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -688,16 +688,13 @@ Classifier: Environment :: Console
688
688
  Classifier: Intended Audience :: Developers
689
689
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
690
690
  Classifier: Programming Language :: Python :: 3
691
- Classifier: Programming Language :: Python :: 3.8
692
- Classifier: Programming Language :: Python :: 3.9
693
- Classifier: Programming Language :: Python :: 3.10
694
- Classifier: Programming Language :: Python :: 3.11
695
- Classifier: Programming Language :: Python :: 3.12
696
691
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
697
692
  Requires-Python: <4,>=3.8
698
693
  Description-Content-Type: text/markdown
699
694
  License-File: LICENSE
695
+ Requires-Dist: legacycrypt; python_version >= "3.13"
700
696
  Requires-Dist: markdown2>=2.4.0
697
+ Dynamic: license-file
701
698
 
702
699
  <p align="center"><img src="https://github.com/dhondta/python-codext/raw/main/docs/pages/img/logo.png"></p>
703
700
  <h1 align="center">CodExt <a href="https://twitter.com/intent/tweet?text=CodExt%20-%20Encoding%2Fdecoding%20anything.%0D%0APython%20library%20extending%20the%20native%20codecs%20library%20with%20many%20new%20encodings%20and%20providing%20CLI%20tools%20with%20a%20guess%20feature%20based%20on%20AI.%0D%0Ahttps%3a%2f%2fgithub%2ecom%2fdhondta%2fpython-codext%0D%0A&hashtags=python,programming,encodings,codecs,cryptography,morse,base,ctftools"><img src="https://img.shields.io/badge/Tweet--lightgrey?logo=twitter&style=social" alt="Tweet" height="20"/></a></h1>
@@ -6,7 +6,6 @@ README.md
6
6
  pyproject.toml
7
7
  pytest.ini
8
8
  requirements.txt
9
- .github/workflows/pypi-publish.yml
10
9
  .github/workflows/python-package.yml
11
10
  docs/coverage.svg
12
11
  docs/mkdocs.yml
@@ -0,0 +1,4 @@
1
+ markdown2>=2.4.0
2
+
3
+ [:python_version >= "3.13"]
4
+ legacycrypt
@@ -125,7 +125,10 @@ class ManualTestCase(TestCase):
125
125
  self.assertIsNotNone(codecs.encode(STR, h))
126
126
  self.assertRaises(NotImplementedError, codecs.decode, STR, h)
127
127
  if UNIX:
128
- import crypt
128
+ try:
129
+ import crypt
130
+ except ImportError:
131
+ import legacycrypt as crypt
129
132
  METHODS = [x[7:].lower() for x in crypt.__dict__ if x.startswith("METHOD_")]
130
133
  for m in METHODS:
131
134
  h = "crypt-" + m
@@ -1,37 +0,0 @@
1
- # This workflow will deploy the Python package to PyPi.org
2
-
3
- name: deploy
4
-
5
- env:
6
- package: codext
7
-
8
- on:
9
- push:
10
- branches:
11
- - main
12
- paths:
13
- - '**/VERSION.txt'
14
- workflow_run:
15
- workflows: ["build"]
16
- types: [completed]
17
-
18
- jobs:
19
- deploy:
20
- runs-on: ubuntu-latest
21
- if: ${{ github.event.workflow_run.conclusion == 'success' }}
22
- steps:
23
- - uses: actions/checkout@v3
24
- with:
25
- fetch-depth: 0
26
- - name: Cleanup README
27
- run: |
28
- sed -ri 's/^(##*)\s*:.*:\s*/\1 /g' README.md
29
- awk '{if (match($0,"## Supporters")) exit; print}' README.md > README
30
- mv -f README README.md
31
- - run: python3 -m pip install --upgrade build && python3 -m build
32
- - name: Upload ${{ env.package }} to PyPI
33
- uses: pypa/gh-action-pypi-publish@release/v1
34
- with:
35
- password: ${{ secrets.PYPI_API_TOKEN }}
36
- verbose: true
37
- verify_metadata: false
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="114" height="20" role="img" aria-label="coverage: 99.04%"><title>coverage: 99.04%</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#4c1"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">99.04%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">99.04%</text></g></svg>
@@ -1 +0,0 @@
1
- 1.15.4
@@ -1 +0,0 @@
1
- markdown2>=2.4.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes