codext 1.15.5__tar.gz → 1.15.8__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 (128) hide show
  1. {codext-1.15.5 → codext-1.15.8}/.github/workflows/python-package.yml +36 -8
  2. {codext-1.15.5 → codext-1.15.8}/PKG-INFO +4 -3
  3. codext-1.15.8/docs/coverage.svg +1 -0
  4. {codext-1.15.5 → codext-1.15.8}/pyproject.toml +1 -1
  5. codext-1.15.8/src/codext/VERSION.txt +1 -0
  6. {codext-1.15.5 → codext-1.15.8}/src/codext/__common__.py +5 -5
  7. {codext-1.15.5 → codext-1.15.8}/src/codext/hashing/crypt.py +1 -1
  8. {codext-1.15.5 → codext-1.15.8}/src/codext.egg-info/PKG-INFO +4 -3
  9. {codext-1.15.5 → codext-1.15.8}/src/codext.egg-info/SOURCES.txt +0 -1
  10. {codext-1.15.5 → codext-1.15.8}/src/codext.egg-info/requires.txt +1 -1
  11. {codext-1.15.5 → codext-1.15.8}/tests/test_manual.py +4 -1
  12. codext-1.15.5/.github/workflows/pypi-publish.yml +0 -37
  13. codext-1.15.5/docs/coverage.svg +0 -1
  14. codext-1.15.5/src/codext/VERSION.txt +0 -1
  15. {codext-1.15.5 → codext-1.15.8}/.coveragerc +0 -0
  16. {codext-1.15.5 → codext-1.15.8}/.gitignore +0 -0
  17. {codext-1.15.5 → codext-1.15.8}/.readthedocs.yml +0 -0
  18. {codext-1.15.5 → codext-1.15.8}/LICENSE +0 -0
  19. {codext-1.15.5 → codext-1.15.8}/README.md +0 -0
  20. {codext-1.15.5 → codext-1.15.8}/docs/mkdocs.yml +0 -0
  21. {codext-1.15.5 → codext-1.15.8}/docs/pages/cli.md +0 -0
  22. {codext-1.15.5 → codext-1.15.8}/docs/pages/css/extra.css +0 -0
  23. {codext-1.15.5 → codext-1.15.8}/docs/pages/demos/using-bases.gif +0 -0
  24. {codext-1.15.5 → codext-1.15.8}/docs/pages/demos/using-codext.gif +0 -0
  25. {codext-1.15.5 → codext-1.15.8}/docs/pages/demos/using-debase.gif +0 -0
  26. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/base.md +0 -0
  27. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/binary.md +0 -0
  28. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/common.md +0 -0
  29. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/compressions.md +0 -0
  30. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/crypto.md +0 -0
  31. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/hashing.md +0 -0
  32. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/languages.md +0 -0
  33. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/others.md +0 -0
  34. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/stegano.md +0 -0
  35. {codext-1.15.5 → codext-1.15.8}/docs/pages/enc/web.md +0 -0
  36. {codext-1.15.5 → codext-1.15.8}/docs/pages/features.md +0 -0
  37. {codext-1.15.5 → codext-1.15.8}/docs/pages/guessing.md +0 -0
  38. {codext-1.15.5 → codext-1.15.8}/docs/pages/howto.md +0 -0
  39. {codext-1.15.5 → codext-1.15.8}/docs/pages/img/banner.png +0 -0
  40. {codext-1.15.5 → codext-1.15.8}/docs/pages/img/icon.png +0 -0
  41. {codext-1.15.5 → codext-1.15.8}/docs/pages/img/logo.png +0 -0
  42. {codext-1.15.5 → codext-1.15.8}/docs/pages/index.md +0 -0
  43. {codext-1.15.5 → codext-1.15.8}/docs/pages/manipulations.md +0 -0
  44. {codext-1.15.5 → codext-1.15.8}/docs/requirements.txt +0 -0
  45. {codext-1.15.5 → codext-1.15.8}/pytest.ini +0 -0
  46. {codext-1.15.5 → codext-1.15.8}/requirements.txt +0 -0
  47. {codext-1.15.5 → codext-1.15.8}/setup.cfg +0 -0
  48. {codext-1.15.5 → codext-1.15.8}/src/codext/__info__.py +0 -0
  49. {codext-1.15.5 → codext-1.15.8}/src/codext/__init__.py +0 -0
  50. {codext-1.15.5 → codext-1.15.8}/src/codext/base/__init__.py +0 -0
  51. {codext-1.15.5 → codext-1.15.8}/src/codext/base/_base.py +0 -0
  52. {codext-1.15.5 → codext-1.15.8}/src/codext/base/_base2n.py +0 -0
  53. {codext-1.15.5 → codext-1.15.8}/src/codext/base/base100.py +0 -0
  54. {codext-1.15.5 → codext-1.15.8}/src/codext/base/base122.py +0 -0
  55. {codext-1.15.5 → codext-1.15.8}/src/codext/base/base45.py +0 -0
  56. {codext-1.15.5 → codext-1.15.8}/src/codext/base/base85.py +0 -0
  57. {codext-1.15.5 → codext-1.15.8}/src/codext/base/base91.py +0 -0
  58. {codext-1.15.5 → codext-1.15.8}/src/codext/base/baseN.py +0 -0
  59. {codext-1.15.5 → codext-1.15.8}/src/codext/binary/__init__.py +0 -0
  60. {codext-1.15.5 → codext-1.15.8}/src/codext/binary/baudot.py +0 -0
  61. {codext-1.15.5 → codext-1.15.8}/src/codext/binary/bcd.py +0 -0
  62. {codext-1.15.5 → codext-1.15.8}/src/codext/binary/excess3.py +0 -0
  63. {codext-1.15.5 → codext-1.15.8}/src/codext/binary/gray.py +0 -0
  64. {codext-1.15.5 → codext-1.15.8}/src/codext/binary/manchester.py +0 -0
  65. {codext-1.15.5 → codext-1.15.8}/src/codext/binary/rotate.py +0 -0
  66. {codext-1.15.5 → codext-1.15.8}/src/codext/common/__init__.py +0 -0
  67. {codext-1.15.5 → codext-1.15.8}/src/codext/common/a1z26.py +0 -0
  68. {codext-1.15.5 → codext-1.15.8}/src/codext/common/cases.py +0 -0
  69. {codext-1.15.5 → codext-1.15.8}/src/codext/common/dummy.py +0 -0
  70. {codext-1.15.5 → codext-1.15.8}/src/codext/common/octal.py +0 -0
  71. {codext-1.15.5 → codext-1.15.8}/src/codext/common/ordinal.py +0 -0
  72. {codext-1.15.5 → codext-1.15.8}/src/codext/compressions/__init__.py +0 -0
  73. {codext-1.15.5 → codext-1.15.8}/src/codext/compressions/gzipp.py +0 -0
  74. {codext-1.15.5 → codext-1.15.8}/src/codext/compressions/lz77.py +0 -0
  75. {codext-1.15.5 → codext-1.15.8}/src/codext/compressions/lz78.py +0 -0
  76. {codext-1.15.5 → codext-1.15.8}/src/codext/compressions/pkzip.py +0 -0
  77. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/__init__.py +0 -0
  78. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/affine.py +0 -0
  79. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/atbash.py +0 -0
  80. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/bacon.py +0 -0
  81. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/barbie.py +0 -0
  82. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/citrix.py +0 -0
  83. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/railfence.py +0 -0
  84. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/rot.py +0 -0
  85. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/scytale.py +0 -0
  86. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/shift.py +0 -0
  87. {codext-1.15.5 → codext-1.15.8}/src/codext/crypto/xor.py +0 -0
  88. {codext-1.15.5 → codext-1.15.8}/src/codext/hashing/__init__.py +0 -0
  89. {codext-1.15.5 → codext-1.15.8}/src/codext/hashing/blake.py +0 -0
  90. {codext-1.15.5 → codext-1.15.8}/src/codext/hashing/checksums.py +0 -0
  91. {codext-1.15.5 → codext-1.15.8}/src/codext/hashing/md.py +0 -0
  92. {codext-1.15.5 → codext-1.15.8}/src/codext/hashing/sha.py +0 -0
  93. {codext-1.15.5 → codext-1.15.8}/src/codext/hashing/shake.py +0 -0
  94. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/__init__.py +0 -0
  95. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/braille.py +0 -0
  96. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/galactic.py +0 -0
  97. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/ipsum.py +0 -0
  98. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/leetspeak.py +0 -0
  99. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/morse.py +0 -0
  100. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/navajo.py +0 -0
  101. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/radio.py +0 -0
  102. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/southpark.py +0 -0
  103. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/tap.py +0 -0
  104. {codext-1.15.5 → codext-1.15.8}/src/codext/languages/tomtom.py +0 -0
  105. {codext-1.15.5 → codext-1.15.8}/src/codext/macros.json +0 -0
  106. {codext-1.15.5 → codext-1.15.8}/src/codext/others/__init__.py +0 -0
  107. {codext-1.15.5 → codext-1.15.8}/src/codext/others/dna.py +0 -0
  108. {codext-1.15.5 → codext-1.15.8}/src/codext/others/kbshift.py +0 -0
  109. {codext-1.15.5 → codext-1.15.8}/src/codext/others/letters.py +0 -0
  110. {codext-1.15.5 → codext-1.15.8}/src/codext/others/markdown.py +0 -0
  111. {codext-1.15.5 → codext-1.15.8}/src/codext/others/uuencode.py +0 -0
  112. {codext-1.15.5 → codext-1.15.8}/src/codext/stegano/__init__.py +0 -0
  113. {codext-1.15.5 → codext-1.15.8}/src/codext/stegano/hexagram.py +0 -0
  114. {codext-1.15.5 → codext-1.15.8}/src/codext/stegano/klopf.py +0 -0
  115. {codext-1.15.5 → codext-1.15.8}/src/codext/stegano/resistor.py +0 -0
  116. {codext-1.15.5 → codext-1.15.8}/src/codext/stegano/rick.py +0 -0
  117. {codext-1.15.5 → codext-1.15.8}/src/codext/stegano/sms.py +0 -0
  118. {codext-1.15.5 → codext-1.15.8}/src/codext/stegano/whitespace.py +0 -0
  119. {codext-1.15.5 → codext-1.15.8}/src/codext/web/__init__.py +0 -0
  120. {codext-1.15.5 → codext-1.15.8}/src/codext/web/html.py +0 -0
  121. {codext-1.15.5 → codext-1.15.8}/src/codext/web/url.py +0 -0
  122. {codext-1.15.5 → codext-1.15.8}/src/codext.egg-info/dependency_links.txt +0 -0
  123. {codext-1.15.5 → codext-1.15.8}/src/codext.egg-info/entry_points.txt +0 -0
  124. {codext-1.15.5 → codext-1.15.8}/src/codext.egg-info/top_level.txt +0 -0
  125. {codext-1.15.5 → codext-1.15.8}/tests/__init__.py +0 -0
  126. {codext-1.15.5 → codext-1.15.8}/tests/test_base.py +0 -0
  127. {codext-1.15.5 → codext-1.15.8}/tests/test_common.py +0 -0
  128. {codext-1.15.5 → codext-1.15.8}/tests/test_generated.py +0 -0
@@ -19,7 +19,7 @@ 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", "3.13"]
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 }}
@@ -29,15 +29,9 @@ jobs:
29
29
  - name: Install ${{ env.package }}
30
30
  run: |
31
31
  python -m pip install --upgrade pip
32
- python -m pip install flake8 pytest pytest-cov pytest-pythonpath coverage
32
+ python -m pip install pytest pytest-cov pytest-pythonpath coverage
33
33
  pip install -r requirements.txt
34
34
  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
35
  - name: Test ${{ env.package }} with pytest
42
36
  run: |
43
37
  pytest --cov=$package
@@ -48,6 +42,10 @@ jobs:
48
42
  cov_badge_path: docs/coverage.svg
49
43
  steps:
50
44
  - uses: actions/checkout@v3
45
+ - name: Set up Python ${{ matrix.python-version }}
46
+ uses: actions/setup-python@v4
47
+ with:
48
+ python-version: "3.12"
51
49
  - name: Install ${{ env.package }}
52
50
  run: |
53
51
  python -m pip install --upgrade pip
@@ -77,3 +75,33 @@ jobs:
77
75
  with:
78
76
  github_token: ${{ secrets.github_token }}
79
77
  branch: ${{ github.ref }}
78
+ deploy:
79
+ runs-on: ubuntu-latest
80
+ needs: coverage
81
+ steps:
82
+ - uses: actions/checkout@v3
83
+ with:
84
+ fetch-depth: 0
85
+ - name: Check for version change
86
+ uses: dorny/paths-filter@v2
87
+ id: filter
88
+ with:
89
+ filters: |
90
+ version:
91
+ - '**/VERSION.txt'
92
+ - if: steps.filter.outputs.version == 'true'
93
+ name: Cleanup README
94
+ run: |
95
+ sed -ri 's/^(##*)\s*:.*:\s*/\1 /g' README.md
96
+ awk '{if (match($0,"## Supporters")) exit; print}' README.md > README
97
+ mv -f README README.md
98
+ - if: steps.filter.outputs.version == 'true'
99
+ name: Build ${{ env.package }} package
100
+ run: python3 -m pip install --upgrade build && python3 -m build
101
+ - if: steps.filter.outputs.version == 'true'
102
+ name: Upload ${{ env.package }} to PyPi
103
+ uses: pypa/gh-action-pypi-publish@release/v1
104
+ with:
105
+ password: ${{ secrets.PYPI_API_TOKEN }}
106
+ verbose: true
107
+ 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.5
3
+ Version: 1.15.8
4
4
  Summary: Native codecs extension
5
5
  Author-email: Alexandre D'Hondt <alexandre.dhondt@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -692,8 +692,9 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
692
692
  Requires-Python: <4,>=3.8
693
693
  Description-Content-Type: text/markdown
694
694
  License-File: LICENSE
695
- Requires-Dist: crypt-r; python_version >= "3.13"
695
+ Requires-Dist: legacycrypt; python_version >= "3.13"
696
696
  Requires-Dist: markdown2>=2.4.0
697
+ Dynamic: license-file
697
698
 
698
699
  <p align="center"><img src="https://github.com/dhondta/python-codext/raw/main/docs/pages/img/logo.png"></p>
699
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>
@@ -26,7 +26,7 @@ classifiers = [
26
26
  "Topic :: Software Development :: Libraries :: Python Modules",
27
27
  ]
28
28
  dependencies = [
29
- "crypt-r; python_version >= '3.13'",
29
+ "legacycrypt; python_version >= '3.13'",
30
30
  "markdown2>=2.4.0",
31
31
  ]
32
32
  dynamic = ["version"]
@@ -0,0 +1 @@
1
+ 1.15.8
@@ -261,7 +261,7 @@ def add(ename, encode=None, decode=None, pattern=None, text=True, add_to_codecs=
261
261
  while True:
262
262
  try:
263
263
  g = m.group(i) or ""
264
- if g.isdigit() and not g.startswith("0") and "".join(set(g)) != "01":
264
+ if g.isdigit() and not g.startswith("0") and (re.match(r"10+", g) or "".join(set(g)) != "01"):
265
265
  g = int(g)
266
266
  args += [g]
267
267
  i += 1
@@ -370,7 +370,7 @@ def add_macro(mname, *encodings):
370
370
  :param mname: macro name
371
371
  :param encodings: encoding names of the encodings to be chained with the macro
372
372
  """
373
- global PERS_MACROS
373
+ global PERS_MACROS # noqa: F824
374
374
  # check for name clash with alreday existing macros and codecs
375
375
  if mname in MACROS or mname in PERS_MACROS:
376
376
  raise ValueError("Macro name already exists")
@@ -630,7 +630,7 @@ codecs.add_map = add_map
630
630
 
631
631
  def clear():
632
632
  """ Clear codext's local registry of search functions. """
633
- global __codecs_registry, MACROS, PERS_MACROS
633
+ global __codecs_registry, MACROS, PERS_MACROS # noqa: F824
634
634
  __codecs_registry, MACROS, PERS_MACROS = [], {}, {}
635
635
  codecs.clear = clear
636
636
 
@@ -733,7 +733,7 @@ def list_macros():
733
733
  def remove(name):
734
734
  """ Remove all search functions matching the input encoding name from codext's local registry or any macro with the
735
735
  given name. """
736
- global __codecs_registry, MACROS, PERS_MACROS
736
+ global __codecs_registry, MACROS, PERS_MACROS # noqa: F824
737
737
  tbr = []
738
738
  for search_function in __codecs_registry:
739
739
  if search_function(name) is not None:
@@ -764,7 +764,7 @@ codecs.remove = remove
764
764
 
765
765
  def reset():
766
766
  """ Reset codext's local registry of search functions and macros. """
767
- global __codecs_registry, CODECS_REGISTRY, MACROS, PERS_MACROS
767
+ global __codecs_registry, CODECS_REGISTRY, MACROS, PERS_MACROS # noqa: F824
768
768
  clear()
769
769
  d = os.path.dirname(__file__)
770
770
  for pkg in sorted(os.listdir(d)):
@@ -15,7 +15,7 @@ if UNIX:
15
15
  try:
16
16
  import crypt
17
17
  except ImportError:
18
- import crypt_r as crypt
18
+ import legacycrypt as crypt
19
19
 
20
20
  METHODS = [x[7:].lower() for x in crypt.__dict__ if x.startswith("METHOD_")]
21
21
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: codext
3
- Version: 1.15.5
3
+ Version: 1.15.8
4
4
  Summary: Native codecs extension
5
5
  Author-email: Alexandre D'Hondt <alexandre.dhondt@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -692,8 +692,9 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
692
692
  Requires-Python: <4,>=3.8
693
693
  Description-Content-Type: text/markdown
694
694
  License-File: LICENSE
695
- Requires-Dist: crypt-r; python_version >= "3.13"
695
+ Requires-Dist: legacycrypt; python_version >= "3.13"
696
696
  Requires-Dist: markdown2>=2.4.0
697
+ Dynamic: license-file
697
698
 
698
699
  <p align="center"><img src="https://github.com/dhondta/python-codext/raw/main/docs/pages/img/logo.png"></p>
699
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
@@ -1,4 +1,4 @@
1
1
  markdown2>=2.4.0
2
2
 
3
3
  [:python_version >= "3.13"]
4
- crypt-r
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.11%"><title>coverage: 99.11%</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.11%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">99.11%</text></g></svg>
@@ -1 +0,0 @@
1
- 1.15.5
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