spark: add word counter utility with tests
This commit is contained in:
1 parent
394de5374a
commit
bea6b75eec
243 files changed
+11095
No files matched your search
Executable
+69
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Quick Python environment validator.
|
||||
Checks pip, site-packages accessibility, and common import paths.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import importlib.util
|
||||
|
||||
def check_pip():
|
||||
"""Verify pip is accessible."""
|
||||
try:
|
||||
import pip
|
||||
return True, "pip available"
|
||||
except ImportError:
|
||||
try:
|
||||
import ensurepip
|
||||
return True, "pip can be bootstrapped via ensurepip"
|
||||
except ImportError:
|
||||
return False, "pip not available and cannot bootstrap"
|
||||
|
||||
def check_site_packages():
|
||||
"""Check site-packages directory exists and is writable."""
|
||||
import site
|
||||
paths = site.getsitepackages()
|
||||
for p in paths:
|
||||
if os.path.isdir(p):
|
||||
writable = os.access(p, os.W_OK)
|
||||
return True, f"site-packages found at {p}, writable={writable}"
|
||||
return False, "no site-packages directory found"
|
||||
|
||||
def check_stdlib_imports():
|
||||
"""Test critical stdlib modules."""
|
||||
modules = ['os', 'sys', 'json', 'urllib.request', 'pathlib', 'typing']
|
||||
failed = []
|
||||
for mod in modules:
|
||||
try:
|
||||
importlib.import_module(mod)
|
||||
except ImportError as e:
|
||||
failed.append((mod, str(e)))
|
||||
return len(failed) == 0, failed if failed else "all stdlib modules importable"
|
||||
|
||||
def main():
|
||||
print(f"Python environment check (py{sys.version_info.major}.{sys.version_info.minor})")
|
||||
print(f"Executable: {sys.executable}")
|
||||
print(f"Site-packages: {next((p for p in __import__('site').getsitepackages() if os.path.isdir(p)), 'none')}\n")
|
||||
|
||||
checks = [
|
||||
("pip", check_pip),
|
||||
("site-packages", check_site_packages),
|
||||
("stdlib imports", check_stdlib_imports),
|
||||
]
|
||||
|
||||
results = []
|
||||
for name, func in checks:
|
||||
passed, msg = func()
|
||||
results.append((name, passed, msg))
|
||||
|
||||
all_passed = all(p for _, p, _ in results)
|
||||
|
||||
for name, passed, msg in results:
|
||||
status = "PASS" if passed else "FAIL"
|
||||
print(f"[{status}] {name}: {msg}")
|
||||
|
||||
print(f"\n{'All checks passed!' if all_passed else 'Some checks failed.'}")
|
||||
return 0 if all_passed else 1
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
Reference in new issue
Block a user