{"id":"469a8c9b-3c00-4b50-a262-4201cf6abf22","shortId":"wLTdtA","kind":"skill","title":"azure-storage-blob-py","tagline":"Azure Blob Storage SDK for Python. Use for uploading, downloading, listing blobs, managing containers, and blob lifecycle.","description":"# Azure Blob Storage SDK for Python\n\nClient library for Azure Blob Storage — object storage for unstructured data.\n\n## Installation\n\n```bash\npip install azure-storage-blob azure-identity\n```\n\n## Environment Variables\n\n```bash\nAZURE_STORAGE_ACCOUNT_NAME=<your-storage-account>\n# Or use full URL\nAZURE_STORAGE_ACCOUNT_URL=https://<account>.blob.core.windows.net\n```\n\n## Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.storage.blob import BlobServiceClient\n\ncredential = DefaultAzureCredential()\naccount_url = \"https://<account>.blob.core.windows.net\"\n\nblob_service_client = BlobServiceClient(account_url, credential=credential)\n```\n\n## Client Hierarchy\n\n| Client | Purpose | Get From |\n|--------|---------|----------|\n| `BlobServiceClient` | Account-level operations | Direct instantiation |\n| `ContainerClient` | Container operations | `blob_service_client.get_container_client()` |\n| `BlobClient` | Single blob operations | `container_client.get_blob_client()` |\n\n## Core Workflow\n\n### Create Container\n\n```python\ncontainer_client = blob_service_client.get_container_client(\"mycontainer\")\ncontainer_client.create_container()\n```\n\n### Upload Blob\n\n```python\n# From file path\nblob_client = blob_service_client.get_blob_client(\n    container=\"mycontainer\",\n    blob=\"sample.txt\"\n)\n\nwith open(\"./local-file.txt\", \"rb\") as data:\n    blob_client.upload_blob(data, overwrite=True)\n\n# From bytes/string\nblob_client.upload_blob(b\"Hello, World!\", overwrite=True)\n\n# From stream\nimport io\nstream = io.BytesIO(b\"Stream content\")\nblob_client.upload_blob(stream, overwrite=True)\n```\n\n### Download Blob\n\n```python\nblob_client = blob_service_client.get_blob_client(\n    container=\"mycontainer\",\n    blob=\"sample.txt\"\n)\n\n# To file\nwith open(\"./downloaded.txt\", \"wb\") as file:\n    download_stream = blob_client.download_blob()\n    file.write(download_stream.readall())\n\n# To memory\ndownload_stream = blob_client.download_blob()\ncontent = download_stream.readall()  # bytes\n\n# Read into existing buffer\nstream = io.BytesIO()\nnum_bytes = blob_client.download_blob().readinto(stream)\n```\n\n### List Blobs\n\n```python\ncontainer_client = blob_service_client.get_container_client(\"mycontainer\")\n\n# List all blobs\nfor blob in container_client.list_blobs():\n    print(f\"{blob.name} - {blob.size} bytes\")\n\n# List with prefix (folder-like)\nfor blob in container_client.list_blobs(name_starts_with=\"logs/\"):\n    print(blob.name)\n\n# Walk blob hierarchy (virtual directories)\nfor item in container_client.walk_blobs(delimiter=\"/\"):\n    if item.get(\"prefix\"):\n        print(f\"Directory: {item['prefix']}\")\n    else:\n        print(f\"Blob: {item.name}\")\n```\n\n### Delete Blob\n\n```python\nblob_client.delete_blob()\n\n# Delete with snapshots\nblob_client.delete_blob(delete_snapshots=\"include\")\n```\n\n## Performance Tuning\n\n```python\n# Configure chunk sizes for large uploads/downloads\nblob_client = BlobClient(\n    account_url=account_url,\n    container_name=\"mycontainer\",\n    blob_name=\"large-file.zip\",\n    credential=credential,\n    max_block_size=4 * 1024 * 1024,  # 4 MiB blocks\n    max_single_put_size=64 * 1024 * 1024  # 64 MiB single upload limit\n)\n\n# Parallel upload\nblob_client.upload_blob(data, max_concurrency=4)\n\n# Parallel download\ndownload_stream = blob_client.download_blob(max_concurrency=4)\n```\n\n## SAS Tokens\n\n```python\nfrom datetime import datetime, timedelta, timezone\nfrom azure.storage.blob import generate_blob_sas, BlobSasPermissions\n\nsas_token = generate_blob_sas(\n    account_name=\"<account>\",\n    container_name=\"mycontainer\",\n    blob_name=\"sample.txt\",\n    account_key=\"<account-key>\",  # Or use user delegation key\n    permission=BlobSasPermissions(read=True),\n    expiry=datetime.now(timezone.utc) + timedelta(hours=1)\n)\n\n# Use SAS token\nblob_url = f\"https://<account>.blob.core.windows.net/mycontainer/sample.txt?{sas_token}\"\n```\n\n## Blob Properties and Metadata\n\n```python\n# Get properties\nproperties = blob_client.get_blob_properties()\nprint(f\"Size: {properties.size}\")\nprint(f\"Content-Type: {properties.content_settings.content_type}\")\nprint(f\"Last modified: {properties.last_modified}\")\n\n# Set metadata\nblob_client.set_blob_metadata(metadata={\"category\": \"logs\", \"year\": \"2024\"})\n\n# Set content type\nfrom azure.storage.blob import ContentSettings\nblob_client.set_http_headers(\n    content_settings=ContentSettings(content_type=\"application/json\")\n)\n```\n\n## Async Client\n\n```python\nfrom azure.identity.aio import DefaultAzureCredential\nfrom azure.storage.blob.aio import BlobServiceClient\n\nasync def upload_async():\n    credential = DefaultAzureCredential()\n    \n    async with BlobServiceClient(account_url, credential=credential) as client:\n        blob_client = client.get_blob_client(\"mycontainer\", \"sample.txt\")\n        \n        with open(\"./file.txt\", \"rb\") as data:\n            await blob_client.upload_blob(data, overwrite=True)\n\n# Download async\nasync def download_async():\n    async with BlobServiceClient(account_url, credential=credential) as client:\n        blob_client = client.get_blob_client(\"mycontainer\", \"sample.txt\")\n        \n        stream = await blob_client.download_blob()\n        data = await stream.readall()\n```\n\n## Best Practices\n\n1. **Use DefaultAzureCredential** instead of connection strings\n2. **Use context managers** for async clients\n3. **Set `overwrite=True`** explicitly when re-uploading\n4. **Use `max_concurrency`** for large file transfers\n5. **Prefer `readinto()`** over `readall()` for memory efficiency\n6. **Use `walk_blobs()`** for hierarchical listing\n7. **Set appropriate content types** for web-served blobs\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","storage","blob","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-storage-blob-py","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-storage-blob-py","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (6,010 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:34.260Z","embedding":null,"createdAt":"2026-04-18T21:33:11.199Z","updatedAt":"2026-04-24T18:50:34.260Z","lastSeenAt":"2026-04-24T18:50:34.260Z","tsv":"'/downloaded.txt':194 '/file.txt':509 '/local-file.txt':146 '/mycontainer/sample.txt?':417 '1':408,550 '1024':329,330,339,340 '2':557 '2024':457 '3':564 '4':328,331,353,362,573 '5':581 '6':589 '64':338,341 '7':596 'account':56,64,79,86,98,313,315,384,392,494,528 'account-level':97 'action':618 'applic':612 'application/json':473 'appropri':598 'ask':656 'async':474,485,488,491,520,521,524,525,562 'authent':67 'await':513,542,546 'azur':2,6,23,32,45,49,54,62 'azure-ident':48 'azure-storage-blob':44 'azure-storage-blob-pi':1 'azure.identity':70 'azure.identity.aio':478 'azure.storage.blob':74,373,462 'azure.storage.blob.aio':482 'b':159,170 'bash':41,53 'best':548 'blob':4,7,17,21,24,33,47,82,111,114,130,135,138,142,151,158,174,179,181,184,188,201,209,222,226,236,238,241,254,257,265,273,286,289,292,297,310,320,349,359,376,382,389,412,420,429,451,500,503,515,534,537,544,592,605 'blob.core.windows.net':66,81,416 'blob.core.windows.net/mycontainer/sample.txt?':415 'blob.name':244,263 'blob.size':245 'blob_client.delete':291,296 'blob_client.download':200,208,221,358,543 'blob_client.get':428 'blob_client.set':450,465 'blob_client.upload':150,157,173,348,514 'blob_service_client.get':106,123,137,183,230 'blobclient':109,312 'blobsaspermiss':378,400 'blobservicecli':76,85,96,484,493,527 'block':326,333 'boundari':664 'buffer':216 'byte':212,220,246 'bytes/string':156 'categori':454 'chunk':305 'clarif':658 'clear':631 'client':29,84,90,92,108,115,122,125,136,139,182,185,229,232,311,475,499,501,504,533,535,538,563 'client.get':502,536 'concurr':352,361,576 'configur':304 'connect':555 'contain':19,104,107,119,121,124,128,140,186,228,231,317,386 'container_client.create':127 'container_client.get':113 'container_client.list':240,256 'container_client.walk':272 'containercli':103 'content':172,210,438,459,468,471,599 'content-typ':437 'contentset':464,470 'context':559 'core':116 'creat':118 'credenti':77,88,89,323,324,489,496,497,530,531 'criteria':667 'data':39,149,152,350,512,516,545 'datetim':367,369 'datetime.now':404 'def':486,522 'defaultazurecredenti':72,78,480,490,552 'deleg':397 'delet':288,293,298 'delimit':274 'describ':619,635 'direct':101 'directori':268,280 'download':15,178,198,206,355,356,519,523 'download_stream.readall':203,211 'effici':588 'els':283 'environ':51,647 'environment-specif':646 'execut':614 'exist':215 'expert':652 'expiri':403 'explicit':568 'f':243,279,285,414,432,436,443 'file':133,191,197,579 'file.write':202 'folder':251 'folder-lik':250 'full':60 'generat':375,381 'get':94,425 'header':467 'hello':160 'hierarch':594 'hierarchi':91,266 'hour':407 'http':466 'ident':50 'import':71,75,166,368,374,463,479,483 'includ':300 'input':661 'instal':40,43 'instanti':102 'instead':553 'io':167 'io.bytesio':169,218 'item':270,281 'item.get':276 'item.name':287 'key':393,398 'larg':308,578 'large-file.zip':322 'last':444 'level':99 'librari':30 'lifecycl':22 'like':252 'limit':345,623 'list':16,225,234,247,595 'log':261,455 'manag':18,560 'match':632 'max':325,334,351,360,575 'memori':205,587 'metadata':423,449,452,453 'mib':332,342 'miss':669 'modifi':445,447 'mycontain':126,141,187,233,319,388,505,539 'name':57,258,318,321,385,387,390 'num':219 'object':35 'open':145,193,508 'oper':100,105,112 'output':641 'overview':622 'overwrit':153,162,176,517,566 'parallel':346,354 'path':134 'perform':301 'permiss':399,662 'pip':42 'practic':549 'prefer':582 'prefix':249,277,282 'print':242,262,278,284,431,435,442 'properti':421,426,427,430 'properties.content_settings.content':440 'properties.last':446 'properties.size':434 'purpos':93 'put':336 'py':5 'python':11,28,68,120,131,180,227,290,303,365,424,476 'rb':147,510 're':571 're-upload':570 'read':213,401 'readal':585 'readinto':223,583 'requir':660 'review':653 'safeti':663 'sample.txt':143,189,391,506,540 'sas':363,377,379,383,410,418 'scope':634 'sdk':9,26 'serv':604 'servic':83 'set':448,458,469,565,597 'singl':110,335,343 'size':306,327,337,433 'skill':610,626 'skill-azure-storage-blob-py' 'snapshot':295,299 'source-sickn33' 'specif':648 'start':259 'stop':654 'storag':3,8,25,34,36,46,55,63 'stream':165,168,171,175,199,207,217,224,357,541 'stream.readall':547 'string':556 'substitut':644 'success':666 'task':630 'test':650 'timedelta':370,406 'timezon':371 'timezone.utc':405 'token':364,380,411,419 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'transfer':580 'treat':639 'true':154,163,177,402,518,567 'tune':302 'type':439,441,460,472,600 'unstructur':38 'upload':14,129,344,347,487,572 'uploads/downloads':309 'url':61,65,80,87,314,316,413,495,529 'use':12,59,395,409,551,558,574,590,608,624 'user':396 'valid':649 'variabl':52 'virtual':267 'walk':264,591 'wb':195 'web':603 'web-serv':602 'workflow':117,616 'world':161 'year':456","prices":[{"id":"ffcf0f22-a6de-4cb2-be6e-626e8bb1184a","listingId":"469a8c9b-3c00-4b50-a262-4201cf6abf22","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:33:11.199Z"}],"sources":[{"listingId":"469a8c9b-3c00-4b50-a262-4201cf6abf22","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-storage-blob-py","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-storage-blob-py","isPrimary":false,"firstSeenAt":"2026-04-18T21:33:11.199Z","lastSeenAt":"2026-04-24T18:50:34.260Z"}],"details":{"listingId":"469a8c9b-3c00-4b50-a262-4201cf6abf22","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-storage-blob-py","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"faf33461e3571ca520d5e51730e1b4bd229d9b12","skill_md_path":"skills/azure-storage-blob-py/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-storage-blob-py"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-storage-blob-py","description":"Azure Blob Storage SDK for Python. Use for uploading, downloading, listing blobs, managing containers, and blob lifecycle."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-storage-blob-py"},"updatedAt":"2026-04-24T18:50:34.260Z"}}