🚀 Impact Significantly expands the capabilities of **Antigravity Awesome Skills** by integrating official skill collections from **Microsoft** and **Google Gemini**. This update increases the total skill count to **845+**, making the library even more comprehensive for AI coding assistants. ✨ Key Changes 1. New Official Skills - **Microsoft Skills**: Added a massive collection of official skills from [microsoft/skills](https://github.com/microsoft/skills). - Includes Azure, .NET, Python, TypeScript, and Semantic Kernel skills. - Preserves the original directory structure under `skills/official/microsoft/`. - Includes plugin skills from the `.github/plugins` directory. - **Gemini Skills**: Added official Gemini API development skills under `skills/gemini-api-dev/`. 2. New Scripts & Tooling - **`scripts/sync_microsoft_skills.py`**: A robust synchronization script that: - Clones the official Microsoft repository. - Preserves the original directory heirarchy. - Handles symlinks and plugin locations. - Generates attribution metadata. - **`scripts/tests/inspect_microsoft_repo.py`**: Debug tool to inspect the remote repository structure. - **`scripts/tests/test_comprehensive_coverage.py`**: Verification script to ensure 100% of skills are captured during sync. 3. Core Improvements - **`scripts/generate_index.py`**: Enhanced frontmatter parsing to safely handle unquoted values containing `@` symbols and commas (fixing issues with some Microsoft skill descriptions). - **`package.json`**: Added `sync:microsoft` and `sync:all-official` scripts for easy maintenance. 4. Documentation - Updated `README.md` to reflect the new skill counts (845+) and added Microsoft/Gemini to the provider list. - Updated `CATALOG.md` and `skills_index.json` with the new skills. 🧪 Verification - Ran `scripts/tests/test_comprehensive_coverage.py` to verify all Microsoft skills are detected. - Validated `generate_index.py` fixes by successfully indexing the new skills.
239 lines
4.9 KiB
Markdown
239 lines
4.9 KiB
Markdown
---
|
|
name: azure-storage-file-share-py
|
|
description: |
|
|
Azure Storage File Share SDK for Python. Use for SMB file shares, directories, and file operations in the cloud.
|
|
Triggers: "azure-storage-file-share", "ShareServiceClient", "ShareClient", "file share", "SMB".
|
|
---
|
|
|
|
# Azure Storage File Share SDK for Python
|
|
|
|
Manage SMB file shares for cloud-native and lift-and-shift scenarios.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install azure-storage-file-share
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
```bash
|
|
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...
|
|
# Or
|
|
AZURE_STORAGE_ACCOUNT_URL=https://<account>.file.core.windows.net
|
|
```
|
|
|
|
## Authentication
|
|
|
|
### Connection String
|
|
|
|
```python
|
|
from azure.storage.fileshare import ShareServiceClient
|
|
|
|
service = ShareServiceClient.from_connection_string(
|
|
os.environ["AZURE_STORAGE_CONNECTION_STRING"]
|
|
)
|
|
```
|
|
|
|
### Entra ID
|
|
|
|
```python
|
|
from azure.storage.fileshare import ShareServiceClient
|
|
from azure.identity import DefaultAzureCredential
|
|
|
|
service = ShareServiceClient(
|
|
account_url=os.environ["AZURE_STORAGE_ACCOUNT_URL"],
|
|
credential=DefaultAzureCredential()
|
|
)
|
|
```
|
|
|
|
## Share Operations
|
|
|
|
### Create Share
|
|
|
|
```python
|
|
share = service.create_share("my-share")
|
|
```
|
|
|
|
### List Shares
|
|
|
|
```python
|
|
for share in service.list_shares():
|
|
print(f"{share.name}: {share.quota} GB")
|
|
```
|
|
|
|
### Get Share Client
|
|
|
|
```python
|
|
share_client = service.get_share_client("my-share")
|
|
```
|
|
|
|
### Delete Share
|
|
|
|
```python
|
|
service.delete_share("my-share")
|
|
```
|
|
|
|
## Directory Operations
|
|
|
|
### Create Directory
|
|
|
|
```python
|
|
share_client = service.get_share_client("my-share")
|
|
share_client.create_directory("my-directory")
|
|
|
|
# Nested directory
|
|
share_client.create_directory("my-directory/sub-directory")
|
|
```
|
|
|
|
### List Directories and Files
|
|
|
|
```python
|
|
directory_client = share_client.get_directory_client("my-directory")
|
|
|
|
for item in directory_client.list_directories_and_files():
|
|
if item["is_directory"]:
|
|
print(f"[DIR] {item['name']}")
|
|
else:
|
|
print(f"[FILE] {item['name']} ({item['size']} bytes)")
|
|
```
|
|
|
|
### Delete Directory
|
|
|
|
```python
|
|
share_client.delete_directory("my-directory")
|
|
```
|
|
|
|
## File Operations
|
|
|
|
### Upload File
|
|
|
|
```python
|
|
file_client = share_client.get_file_client("my-directory/file.txt")
|
|
|
|
# From string
|
|
file_client.upload_file("Hello, World!")
|
|
|
|
# From file
|
|
with open("local-file.txt", "rb") as f:
|
|
file_client.upload_file(f)
|
|
|
|
# From bytes
|
|
file_client.upload_file(b"Binary content")
|
|
```
|
|
|
|
### Download File
|
|
|
|
```python
|
|
file_client = share_client.get_file_client("my-directory/file.txt")
|
|
|
|
# To bytes
|
|
data = file_client.download_file().readall()
|
|
|
|
# To file
|
|
with open("downloaded.txt", "wb") as f:
|
|
data = file_client.download_file()
|
|
data.readinto(f)
|
|
|
|
# Stream chunks
|
|
download = file_client.download_file()
|
|
for chunk in download.chunks():
|
|
process(chunk)
|
|
```
|
|
|
|
### Get File Properties
|
|
|
|
```python
|
|
properties = file_client.get_file_properties()
|
|
print(f"Size: {properties.size}")
|
|
print(f"Content type: {properties.content_settings.content_type}")
|
|
print(f"Last modified: {properties.last_modified}")
|
|
```
|
|
|
|
### Delete File
|
|
|
|
```python
|
|
file_client.delete_file()
|
|
```
|
|
|
|
### Copy File
|
|
|
|
```python
|
|
source_url = "https://account.file.core.windows.net/share/source.txt"
|
|
dest_client = share_client.get_file_client("destination.txt")
|
|
dest_client.start_copy_from_url(source_url)
|
|
```
|
|
|
|
## Range Operations
|
|
|
|
### Upload Range
|
|
|
|
```python
|
|
# Upload to specific range
|
|
file_client.upload_range(data=b"content", offset=0, length=7)
|
|
```
|
|
|
|
### Download Range
|
|
|
|
```python
|
|
# Download specific range
|
|
download = file_client.download_file(offset=0, length=100)
|
|
data = download.readall()
|
|
```
|
|
|
|
## Snapshot Operations
|
|
|
|
### Create Snapshot
|
|
|
|
```python
|
|
snapshot = share_client.create_snapshot()
|
|
print(f"Snapshot: {snapshot['snapshot']}")
|
|
```
|
|
|
|
### Access Snapshot
|
|
|
|
```python
|
|
snapshot_client = service.get_share_client(
|
|
"my-share",
|
|
snapshot=snapshot["snapshot"]
|
|
)
|
|
```
|
|
|
|
## Async Client
|
|
|
|
```python
|
|
from azure.storage.fileshare.aio import ShareServiceClient
|
|
from azure.identity.aio import DefaultAzureCredential
|
|
|
|
async def upload_file():
|
|
credential = DefaultAzureCredential()
|
|
service = ShareServiceClient(account_url, credential=credential)
|
|
|
|
share = service.get_share_client("my-share")
|
|
file_client = share.get_file_client("test.txt")
|
|
|
|
await file_client.upload_file("Hello!")
|
|
|
|
await service.close()
|
|
await credential.close()
|
|
```
|
|
|
|
## Client Types
|
|
|
|
| Client | Purpose |
|
|
|--------|---------|
|
|
| `ShareServiceClient` | Account-level operations |
|
|
| `ShareClient` | Share operations |
|
|
| `ShareDirectoryClient` | Directory operations |
|
|
| `ShareFileClient` | File operations |
|
|
|
|
## Best Practices
|
|
|
|
1. **Use connection string** for simplest setup
|
|
2. **Use Entra ID** for production with RBAC
|
|
3. **Stream large files** using chunks() to avoid memory issues
|
|
4. **Create snapshots** before major changes
|
|
5. **Set quotas** to prevent unexpected storage costs
|
|
6. **Use ranges** for partial file updates
|
|
7. **Close async clients** explicitly
|