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