A tiny project to avoid a major head ache.
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| __pycache__/ | ||||
| dist/ | ||||
| .* | ||||
| !.gitignore | ||||
							
								
								
									
										40
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| # URL-safe Base64 for Python | ||||
|  | ||||
| A simple module for encoding without padding, fixing Python standard library's flaws. | ||||
|  | ||||
| Replaces the standard library's `base64.urlsafe_b64encode` and `base64.urlsafe_b64decode` with a cleaner implementation that returns strings instead of bytes and avoids unnecessary padding. | ||||
|  | ||||
| ## Features | ||||
|  | ||||
| - **URL safe**: Uses only characters that are safe for URLs and filenames | ||||
| - **No padding**: Removes trailing `=` characters for cleaner output | ||||
| - **String output**: Returns proper strings instead of bytes (unlike Python's standard library) | ||||
| - **Fast**: Based on Python stdlib, with constant-time padding restoration | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| ```sh | ||||
| pip install base64url | ||||
| ``` | ||||
|  | ||||
| Or for your project using [uv](https://docs.astral.sh/uv/): | ||||
| ```sh | ||||
| uv add base64url | ||||
| ``` | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
| ```python | ||||
| import base64url | ||||
|  | ||||
| text = base64url.enc(bytes(4)) # Returns "AAAAAA" | ||||
| data = base64url.dec(text)     # Recovers the bytes | ||||
| ``` | ||||
|  | ||||
| ### `enc(data: bytes) -> str` | ||||
|  | ||||
| Base64 encode bytes to a URL-safe string without padding. | ||||
|  | ||||
| ### `dec(s: str) -> bytes` | ||||
|  | ||||
| Decode URL-safe Base64 into bytes. Padding optional. | ||||
							
								
								
									
										31
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| [project] | ||||
| name = "base64url" | ||||
| version = "1.0.0" | ||||
| description = "Base64 encoding without Python's base64 flaws. No padding, str types." | ||||
| readme = "README.md" | ||||
| requires-python = ">=3.8" | ||||
| dependencies = [] | ||||
| authors = [ | ||||
|     {name = "Leo Vasanko"}, | ||||
| ] | ||||
| keywords = ["base64", "b64url", "urlsafe_b64encode", "urlsafe_b64decode"] | ||||
| classifiers = [ | ||||
|     "Development Status :: 5 - Production/Stable", | ||||
|     "Intended Audience :: Developers", | ||||
|     "License :: OSI Approved :: MIT License", | ||||
|     "License :: Public Domain", | ||||
|     "Programming Language :: Python :: 3", | ||||
|     "Topic :: Software Development :: Libraries :: Python Modules", | ||||
|     "Topic :: Utilities", | ||||
| ] | ||||
|  | ||||
| [project.urls] | ||||
| Homepage = "https://git.zi.fi/leo/base64url-python" | ||||
| Repository = "https://github.com/LeoVasanko/base64url-python" | ||||
|  | ||||
| [build-system] | ||||
| requires = ["hatchling"] | ||||
| build-backend = "hatchling.build" | ||||
|  | ||||
| [tool.hatch.build.targets.wheel] | ||||
| packages = ["base64url.py"] | ||||
		Reference in New Issue
	
	Block a user
	 Leo Vasanko
					Leo Vasanko