add-function
bởi microsoft
Hướng dẫn thêm hàm mới vào thư viện. Sử dụng khi triển khai các wrapper API mới hoặc hàm tiện ích.
npx skills add https://github.com/microsoft/semantic-link-labs --skill add-functionAdding New Functions
This skill covers the workflow for adding new functions to the Semantic Link Labs library.
When to Use This Skill
Use this skill when you need to:
- Add a new API wrapper function
- Create a new utility function
- Extend existing functionality with new features
- Add functions to submodules (admin, report, lakehouse, etc.)
Function Categories
| Category | Location | Purpose |
|---|---|---|
| Top-level functions | src/sempy_labs/_*.py | Main library exports |
| Admin functions | src/sempy_labs/admin/ | Admin API operations |
| Report functions | src/sempy_labs/report/ | Report operations |
| Lakehouse functions | src/sempy_labs/lakehouse/ | Lakehouse operations |
| Direct Lake functions | src/sempy_labs/directlake/ | Direct Lake model operations |
| TOM methods | src/sempy_labs/tom/_model.py | TOMWrapper class methods |
Step 0: Find the API Documentation
Before implementing an API wrapper, find the relevant API documentation:
# Use the API search tool
cd .claude/skills/rest-api-patterns/scripts
python search_public_api_doc.py "your search query"
# Examples:
python search_public_api_doc.py "workspace users" --source fabric
python search_public_api_doc.py "dataset refresh" --source powerbi
See the REST API Patterns skill for more details.
Step 1: Choose the Right Location
Top-Level Function
For general-purpose functions exported from sempy_labs:
# src/sempy_labs/_my_feature.py
Submodule Function
For functions belonging to a specific domain:
# src/sempy_labs/admin/_my_admin_function.py
# src/sempy_labs/lakehouse/_my_lakehouse_function.py
# src/sempy_labs/report/_my_report_function.py
Step 2: Create the Function
Required Imports
import pandas as pd
from typing import Optional, List
from uuid import UUID
# Logging decorator from sempy
from sempy._utils._log import log
# Helper functions
from sempy_labs._helper_functions import (
resolve_workspace_name_and_id,
resolve_workspace_id,
_base_api,
_create_dataframe,
)
# Icons for user messages
import sempy_labs._icons as icons
Function Template
@log
def my_new_function(
item: str | UUID,
workspace: Optional[str | UUID] = None,
option: str = "default",
) -> pd.DataFrame:
"""
Short description of what the function does.
Extended description with more details about the function's behavior,
use cases, and any important notes.
This is a wrapper function for the following API: `API Name <https://learn.microsoft.com/rest/api/...>`_.
Service Principal Authentication is supported (see `here <https://github.com/microsoft/semantic-link-labs/blob/main/notebooks/Service%20Principal.ipynb>`_ for examples).
Parameters
----------
item : str | uuid.UUID
The name or ID of the item.
workspace : str | uuid.UUID, default=None
The Fabric workspace name or ID.
Defaults to None which resolves to the workspace of the attached lakehouse
or if no lakehouse attached, resolves to the workspace of the notebook.
option : str, default="default"
An option that controls function behavior.
Returns
-------
pandas.DataFrame
A pandas dataframe showing the results.
Columns include: 'Column1', 'Column2', 'Column3'.
Raises
------
ValueError
If the item does not exist.
FabricHTTPException
If the API request fails.
"""
# Resolve workspace
(workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
# Define result DataFrame structure
columns = {
"Column1": "string",
"Column2": "string",
"Column3": "int",
}
df = _create_dataframe(columns=columns)
# Make API call
responses = _base_api(
request=f"/v1/workspaces/{workspace_id}/items",
uses_pagination=True,
client="fabric_sp",
)
# Process responses
rows = []
for r in responses:
for item in r.get("value", []):
rows.append({
"Column1": item.get("id"),
"Column2": item.get("name"),
"Column3": item.get("count", 0),
})
if rows:
df = pd.DataFrame(rows)
return df
Step 3: Export the Function
From Module File
Add to the module's __init__.py:
# src/sempy_labs/admin/__init__.py (example for admin submodule)
from ._my_admin_function import my_new_function
__all__ = [
...,
"my_new_function",
]
From Main Package
For top-level functions, add to src/sempy_labs/__init__.py:
from ._my_feature import my_new_function
__all__ = [
...,
"my_new_function",
]
Common Patterns
Functions That Modify Resources
@log
def create_item(
name: str,
workspace: Optional[str | UUID] = None,
) -> None:
"""
Creates a new item.
...
"""
(workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
payload = {
"displayName": name,
}
_base_api(
request=f"/v1/workspaces/{workspace_id}/items",
method="post",
payload=payload,
status_codes=[201, 202],
client="fabric_sp",
)
print(
f"{icons.green_dot} The '{name}' item has been successfully created "
f"in the '{workspace_name}' workspace."
)
Functions That Delete Resources
@log
def delete_item(
item: str | UUID,
workspace: Optional[str | UUID] = None,
) -> None:
"""
Deletes an item.
...
"""
(workspace_name, workspace_id) = resolve_workspace_name_and_id(workspace)
item_id = resolve_item_id(item=item, type="ItemType", workspace=workspace_id)
_base_api(
request=f"/v1/workspaces/{workspace_id}/items/{item_id}",
method="delete",
client="fabric_sp",
)
print(
f"{icons.green_dot} The item has been successfully deleted "
f"from the '{workspace_name}' workspace."
)
Functions With Long-Running Operations
@log
def long_running_operation(
item: str | UUID,
workspace: Optional[str | UUID] = None,
) -> dict:
"""
Performs a long-running operation.
...
"""
workspace_id = resolve_workspace_id(workspace)
item_id = resolve_item_id(item=item, type="ItemType", workspace=workspace_id)
# lro_return_json handles polling for completion
result = _base_api(
request=f"/v1/workspaces/{workspace_id}/items/{item_id}/operation",
method="post",
lro_return_json=True,
client="fabric_sp",
)
return result
Step 4: Add Tests
Create tests for the new function:
# tests/test_my_feature.py
import pytest
import pandas as pd
def test_my_new_function_returns_dataframe():
"""Test that my_new_function returns a DataFrame."""
from sempy_labs import my_new_function
# This might require mocking for unit tests
result = my_new_function()
assert isinstance(result, pd.DataFrame)
def test_my_new_function_with_workspace():
"""Test my_new_function with specific workspace."""
from sempy_labs import my_new_function
result = my_new_function(workspace="Test Workspace")
assert isinstance(result, pd.DataFrame)
Step 5: Document the Function
Ensure the docstring follows numpydoc style:
- ✅ Short description (one line)
- ✅ Extended description (if needed)
- ✅ API reference link (for wrapper functions)
- ✅ Service Principal note (if supported)
- ✅ All parameters documented with types
- ✅ Return value documented
- ✅ Exceptions documented (if applicable)
Checklist Before Committing
- Function follows naming conventions (
list_,get_,create_, etc.) -
@logdecorator is applied - Complete docstring with numpydoc style
- Type hints for all parameters and return value
- Uses standard helper functions (
_base_api,resolve_*, etc.) - Function exported in
__init__.py - Tests written for the new function
- Code formatted with black
- No linting errors
- Documentation builds without warnings
Example: Complete New Function
See _workspaces.py for well-implemented examples:
list_workspace_users— List function returning DataFrameupdate_workspace_user— Update function with parametersdelete_user_from_workspace— Delete function with confirmation message
API Documentation Resources
When wrapping REST APIs, reference the official documentation:
| API | Documentation |
|---|---|
| Fabric Core API | https://learn.microsoft.com/rest/api/fabric/core/ |
| Fabric Admin API | https://learn.microsoft.com/rest/api/fabric/admin/ |
| Power BI REST API | https://learn.microsoft.com/rest/api/power-bi/ |
| Azure Management API | https://learn.microsoft.com/rest/api/resources/ |
Thêm skills từ microsoft
oss-growth
microsoft
Cá tính tăng trưởng OSS
official
microsoft-foundry
microsoft
Triển khai, đánh giá và quản lý các agent Foundry từ đầu đến cuối: xây dựng Docker, đẩy lên ACR, tạo agent lưu trữ/agent nhắc nhở, khởi động container, đánh giá hàng loạt, đánh giá liên tục, quy trình tối ưu hóa nhắc nhở, agent.yaml, quản lý bộ dữ liệu từ dấu vết. SỬ DỤNG CHO: triển khai agent lên Foundry, agent lưu trữ, tạo agent, gọi agent, đánh giá agent, chạy đánh giá hàng loạt, đánh giá liên tục, giám sát liên tục, trạng thái đánh giá liên tục, tối ưu hóa nhắc nhở, cải thiện nhắc nhở, trình tối
officialdevelopmentdevops
azure-ai
microsoft
Sử dụng cho Azure AI: Tìm kiếm, Giọng nói, OpenAI, Xử lý tài liệu. Hỗ trợ tìm kiếm, tìm kiếm vector/kết hợp, chuyển giọng nói thành văn bản, chuyển văn bản thành giọng nói, phiên âm, OCR. KHI: AI Search, truy vấn tìm kiếm, tìm kiếm vector, tìm kiếm kết hợp, tìm kiếm ngữ nghĩa, chuyển giọng nói thành văn bản, chuyển văn bản thành giọng nói, phiên âm, OCR, chuyển đổi văn bản thành giọng nói.
officialdevelopmentapi
azure-deploy
microsoft
Thực thi triển khai Azure cho các ứng dụng ĐÃ ĐƯỢC CHUẨN BỊ có sẵn tệp .azure/deployment-plan.md và tệp cơ sở hạ tầng. KHÔNG sử dụng kỹ năng này khi người dùng yêu cầu TẠO ứng dụng mới — hãy sử dụng azure-prepare thay thế. Kỹ năng này chạy các lệnh azd up, azd deploy, terraform apply và az deployment với khả năng phục hồi lỗi tích hợp. Yêu cầu .azure/deployment-plan.md từ azure-prepare và trạng thái đã xác thực từ azure-validate. KHI: "chạy azd up", "chạy azd deploy", "thực thi triển khai",...
officialdevopsaws
azure-storage
microsoft
Dịch vụ Lưu trữ Azure bao gồm Blob Storage, File Shares, Queue Storage, Table Storage và Data Lake. Trả lời các câu hỏi về các tầng truy cập lưu trữ (hot, cool, cold, archive), thời điểm sử dụng từng tầng và so sánh các tầng. Cung cấp lưu trữ đối tượng, chia sẻ tệp SMB, nhắn tin không đồng bộ, NoSQL key-value và phân tích dữ liệu lớn. Bao gồm quản lý vòng đời. SỬ DỤNG CHO: blob storage, file shares, queue storage, table storage, data lake, tải lên tệp, tải xuống blob, tài khoản lưu trữ, các tầng truy cập,...
officialdevelopmentdatabase
azure-diagnostics
microsoft
Gỡ lỗi các vấn đề sản xuất trên Azure bằng AppLens, Azure Monitor, tình trạng tài nguyên và phân loại an toàn. KHI: gỡ lỗi vấn đề sản xuất, khắc phục sự cố app service, app service CPU cao, lỗi triển khai app service, khắc phục sự cố container apps, khắc phục sự cố functions, khắc phục sự cố AKS, kubectl không kết nối được, lỗi kube-system/CoreDNS, pod đang chờ, crashloop, node chưa sẵn sàng, lỗi nâng cấp, phân tích nhật ký, KQL, thông tin chi tiết, lỗi kéo image, vấn đề khởi động nguội, lỗi health probe,...
officialdevopsdevelopment
azure-prepare
microsoft
Chuẩn bị ứng dụng Azure để triển khai (hạ tầng Bicep/Terraform, azure.yaml, Dockerfiles). Sử dụng để tạo/hiện đại hóa hoặc tạo+triển khai; không dùng cho di chuyển đa đám mây (sử dụng azure-cloud-migrate). KHÔNG DÙNG CHO: ứng dụng copilot-sdk (sử dụng azure-hosted-copilot-sdk). KHI: "tạo ứng dụng", "xây dựng ứng dụng web", "tạo API", "tạo HTTP API serverless", "tạo frontend", "tạo backend", "xây dựng dịch vụ", "hiện đại hóa ứng dụng", "cập nhật ứng dụng", "thêm xác thực", "thêm bộ nhớ đệm", "lưu trữ trên Azure", "tạo và...
officialdevelopmentdevops
azure-validate
microsoft
Kiểm tra trước khi triển khai để đảm bảo sẵn sàng trên Azure. Chạy kiểm tra sâu về cấu hình, hạ tầng (Bicep hoặc Terraform), phân công vai trò RBAC, quyền của managed identity và các điều kiện tiên quyết trước khi triển khai. KHI NÀO: xác thực ứng dụng của tôi, kiểm tra mức độ sẵn sàng triển khai, chạy kiểm tra trước khi triển khai, xác minh cấu hình, kiểm tra xem đã sẵn sàng triển khai chưa, xác thực azure.yaml, xác thực Bicep, kiểm tra trước khi triển khai, khắc phục lỗi triển khai, xác thực Azure Functions, xác thực function app, xác th
officialdevopstesting