{"id":24138,"library":"olot","title":"olot","description":"OCI layers on top — a Python library for building and manipulating OCI container images at the layer level. Current version 0.1.17, active development, monthly releases.","status":"active","version":"0.1.17","language":"python","source_language":"en","source_url":"https://github.com/someuser/olot","tags":["OCI","container","images","layers","registry","docker"],"install":[{"cmd":"pip install olot","lang":"bash","label":"default"}],"dependencies":[{"reason":"HTTP requests to container registries","package":"requests","optional":false},{"reason":"YAML parsing for OCI manifests","package":"pyyaml","optional":false}],"imports":[{"note":"RegistryClient is exposed at package level, not in submodule","wrong":"from olot.client import RegistryClient","symbol":"RegistryClient","correct":"from olot import RegistryClient"},{"note":"Blob is part of public API, import from package root","wrong":"from olot.blob import Blob","symbol":"Blob","correct":"from olot import Blob"},{"note":"Manifest is a top-level export","symbol":"Manifest","correct":"from olot import Manifest"}],"quickstart":{"code":"import os\nfrom olot import RegistryClient\n\n# Use environment variables for auth\nregistry = os.environ.get('REGISTRY_URL', 'https://index.docker.io/v1/')\nusername = os.environ.get('REGISTRY_USERNAME', '')\npassword = os.environ.get('REGISTRY_PASSWORD', '')\n\nclient = RegistryClient(registry, username, password)\nprint('Connected to registry:', registry)","lang":"python","description":"Initialize a registry client for OCI operations."},"warnings":[{"fix":"Replace `insecure=True` with `tls_verify=False`.","message":"RegistryClient constructor changed signature in 0.1.15: removed `insecure` parameter, added `tls_verify`.","severity":"breaking","affected_versions":">=0.1.15"},{"fix":"Migrate to RegistryClient.push(manifest, blobs).","message":"olot.push_layer() is deprecated since 0.1.16, use RegistryClient.push() instead.","severity":"deprecated","affected_versions":">=0.1.16"},{"fix":"Use `content = b''.join(blob.content)` for reliable reuse.","message":"Blob.content is a generator by default; calling it multiple times yields empty after first iteration. Always consume or convert to bytes once.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Run `pip install --upgrade olot` or `pip install olot`.","cause":"Outdated pip or missing installation.","error":"ModuleNotFoundError: No module named 'olot'"},{"fix":"Replace `insecure` with `tls_verify`.","cause":"Using old parameter that was removed in 0.1.15.","error":"TypeError: RegistryClient.__init__() got an unexpected keyword argument 'insecure'"},{"fix":"Convert to list or bytes: `data = list(blob.content)` or `data = b''.join(blob.content)` and reuse the variable.","cause":"Iterating over Blob.content more than once (generator exhausted).","error":"StopIteration during blob content iteration"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}