Spaces:
Paused
Paused
Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +23 -0
- Dockerfile +19 -0
- main.py +183 -0
- requirements.txt +10 -0
- venv/bin/Activate.ps1 +247 -0
- venv/bin/activate +70 -0
- venv/bin/activate.csh +27 -0
- venv/bin/activate.fish +69 -0
- venv/bin/hf +8 -0
- venv/bin/httpx +8 -0
- venv/bin/huggingface-cli +8 -0
- venv/bin/markdown-it +8 -0
- venv/bin/pip +8 -0
- venv/bin/pip3 +8 -0
- venv/bin/pip3.12 +8 -0
- venv/bin/pygmentize +8 -0
- venv/bin/python +3 -0
- venv/bin/python3 +3 -0
- venv/bin/python3.12 +3 -0
- venv/bin/tiny-agents +8 -0
- venv/bin/tqdm +8 -0
- venv/bin/typer +8 -0
- venv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc +3 -0
- venv/lib/python3.12/site-packages/_yaml/__init__.py +33 -0
- venv/lib/python3.12/site-packages/_yaml/__pycache__/__init__.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/INSTALLER +1 -0
- venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/METADATA +145 -0
- venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/RECORD +11 -0
- venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/WHEEL +4 -0
- venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/entry_points.txt +4 -0
- venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/licenses/LICENSE +21 -0
- venv/lib/python3.12/site-packages/annotated_doc/__init__.py +3 -0
- venv/lib/python3.12/site-packages/annotated_doc/__pycache__/__init__.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/annotated_doc/__pycache__/main.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/annotated_doc/main.py +36 -0
- venv/lib/python3.12/site-packages/annotated_doc/py.typed +0 -0
- venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/INSTALLER +1 -0
- venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/METADATA +105 -0
- venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/RECORD +92 -0
- venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/WHEEL +5 -0
- venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/entry_points.txt +2 -0
- venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/licenses/LICENSE +20 -0
- venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/top_level.txt +1 -0
- venv/lib/python3.12/site-packages/anyio/__init__.py +111 -0
- venv/lib/python3.12/site-packages/anyio/__pycache__/__init__.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/anyio/__pycache__/from_thread.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/anyio/__pycache__/functools.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/anyio/__pycache__/lowlevel.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/anyio/__pycache__/pytest_plugin.cpython-312.pyc +0 -0
- venv/lib/python3.12/site-packages/anyio/__pycache__/to_interpreter.cpython-312.pyc +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,26 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
venv/bin/python filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
venv/bin/python3 filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
venv/bin/python3.12 filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
venv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
venv/lib/python3.12/site-packages/anyio/_backends/__pycache__/_asyncio.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
venv/lib/python3.12/site-packages/click/__pycache__/core.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
venv/lib/python3.12/site-packages/hf_xet/hf_xet.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
venv/lib/python3.12/site-packages/huggingface_hub/__pycache__/hf_api.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
venv/lib/python3.12/site-packages/huggingface_hub/inference/__pycache__/_client.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
venv/lib/python3.12/site-packages/huggingface_hub/inference/_generated/__pycache__/_async_client.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
venv/lib/python3.12/site-packages/idna/__pycache__/idnadata.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
venv/lib/python3.12/site-packages/idna/__pycache__/uts46data.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
venv/lib/python3.12/site-packages/pygments/lexers/__pycache__/lisp.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
venv/lib/python3.12/site-packages/rich/__pycache__/_emoji_codes.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
venv/lib/python3.12/site-packages/rich/__pycache__/console.cpython-312.pyc filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
venv/lib/python3.12/site-packages/yaml/_yaml.cpython-312-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.11-slim
|
| 2 |
+
|
| 3 |
+
# Set working directory
|
| 4 |
+
WORKDIR /app
|
| 5 |
+
|
| 6 |
+
# Copy requirements
|
| 7 |
+
COPY requirements.txt .
|
| 8 |
+
|
| 9 |
+
# Install dependencies
|
| 10 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 11 |
+
|
| 12 |
+
# Copy application code
|
| 13 |
+
COPY . .
|
| 14 |
+
|
| 15 |
+
# Expose port 7860 (default for HF Spaces)
|
| 16 |
+
EXPOSE 7860
|
| 17 |
+
|
| 18 |
+
# Run the application
|
| 19 |
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
|
main.py
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import uuid
|
| 3 |
+
from datetime import datetime
|
| 4 |
+
from typing import List, Optional, Dict, Any
|
| 5 |
+
|
| 6 |
+
import pandas as pd
|
| 7 |
+
from fastapi import FastAPI, HTTPException, Request
|
| 8 |
+
from fastapi.responses import HTMLResponse
|
| 9 |
+
from pydantic import BaseModel
|
| 10 |
+
from datasets import Dataset, load_dataset, Audio
|
| 11 |
+
from huggingface_hub import HfApi, login
|
| 12 |
+
from fastmcp import FastMCP
|
| 13 |
+
|
| 14 |
+
# Configuration
|
| 15 |
+
TOKEN = os.getenv("HF_TOKEN")
|
| 16 |
+
REPO_ID = "gebsunamy/MemoryAndSkills_Data" # We'll store data in a separate private dataset repo
|
| 17 |
+
# Note: If the user wants it in the same repo, we can, but usually data is in a Dataset repo.
|
| 18 |
+
# Let's use a dataset repo for clarity.
|
| 19 |
+
|
| 20 |
+
if TOKEN:
|
| 21 |
+
login(token=TOKEN)
|
| 22 |
+
|
| 23 |
+
api = HfApi()
|
| 24 |
+
|
| 25 |
+
# Initialize FastAPI and MCP
|
| 26 |
+
app = FastAPI(title="Memory & Skills API")
|
| 27 |
+
mcp = FastMCP("MemoryAndSkills")
|
| 28 |
+
|
| 29 |
+
# Models
|
| 30 |
+
class MemoryItem(BaseModel):
|
| 31 |
+
id: Optional[str] = None
|
| 32 |
+
text: str
|
| 33 |
+
metadata: Optional[Dict[str, Any]] = {}
|
| 34 |
+
timestamp: Optional[str] = None
|
| 35 |
+
|
| 36 |
+
class SearchQuery(BaseModel):
|
| 37 |
+
query: str
|
| 38 |
+
|
| 39 |
+
# Helper Functions
|
| 40 |
+
def get_dataset():
|
| 41 |
+
try:
|
| 42 |
+
# Load from HF Hub
|
| 43 |
+
ds = load_dataset(REPO_ID, split="train", token=TOKEN)
|
| 44 |
+
return ds.to_pandas()
|
| 45 |
+
except Exception as e:
|
| 46 |
+
# If dataset doesn't exist, create an empty one
|
| 47 |
+
print(f"Dataset not found or error: {e}. Creating new one.")
|
| 48 |
+
df = pd.DataFrame(columns=["id", "text", "metadata", "timestamp"])
|
| 49 |
+
return df
|
| 50 |
+
|
| 51 |
+
def save_dataset(df: pd.DataFrame):
|
| 52 |
+
ds = Dataset.from_pandas(df)
|
| 53 |
+
ds.push_to_hub(REPO_ID, token=TOKEN, private=True)
|
| 54 |
+
|
| 55 |
+
# API Endpoints & MCP Tools
|
| 56 |
+
|
| 57 |
+
@app.post("/create", response_model=MemoryItem)
|
| 58 |
+
@mcp.tool()
|
| 59 |
+
async def create_memory(text: str, metadata: Optional[Dict[str, Any]] = None):
|
| 60 |
+
"""Create a new memory entry. Useful for storing facts, skills, or observations."""
|
| 61 |
+
df = get_dataset()
|
| 62 |
+
new_item = {
|
| 63 |
+
"id": str(uuid.uuid4()),
|
| 64 |
+
"text": text,
|
| 65 |
+
"metadata": metadata or {},
|
| 66 |
+
"timestamp": datetime.utcnow().isoformat()
|
| 67 |
+
}
|
| 68 |
+
df = pd.concat([df, pd.DataFrame([new_item])], ignore_index=True)
|
| 69 |
+
save_dataset(df)
|
| 70 |
+
return new_item
|
| 71 |
+
|
| 72 |
+
@app.get("/get_all", response_model=List[MemoryItem])
|
| 73 |
+
@mcp.tool()
|
| 74 |
+
async def get_all_memories():
|
| 75 |
+
"""Retrieve all stored memories and skills."""
|
| 76 |
+
df = get_dataset()
|
| 77 |
+
return df.to_dict(orient="records")
|
| 78 |
+
|
| 79 |
+
@app.get("/get_once/{item_id}", response_model=MemoryItem)
|
| 80 |
+
@mcp.tool()
|
| 81 |
+
async def get_memory(item_id: str):
|
| 82 |
+
"""Retrieve a specific memory by its unique ID."""
|
| 83 |
+
df = get_dataset()
|
| 84 |
+
item = df[df["id"] == item_id]
|
| 85 |
+
if item.empty:
|
| 86 |
+
raise HTTPException(status_code=404, detail="Memory not found")
|
| 87 |
+
return item.iloc[0].to_dict()
|
| 88 |
+
|
| 89 |
+
@app.post("/search", response_model=List[MemoryItem])
|
| 90 |
+
@mcp.tool()
|
| 91 |
+
async def search_memories(query: str):
|
| 92 |
+
"""Search through memories using a keyword or phrase."""
|
| 93 |
+
df = get_dataset()
|
| 94 |
+
if df.empty:
|
| 95 |
+
return []
|
| 96 |
+
results = df[df["text"].str.contains(query, case=False, na=False)]
|
| 97 |
+
return results.to_dict(orient="records")
|
| 98 |
+
|
| 99 |
+
@app.put("/edit/{item_id}", response_model=MemoryItem)
|
| 100 |
+
@mcp.tool()
|
| 101 |
+
async def edit_memory(item_id: str, text: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None):
|
| 102 |
+
"""Update an existing memory entry."""
|
| 103 |
+
df = get_dataset()
|
| 104 |
+
if item_id not in df["id"].values:
|
| 105 |
+
raise HTTPException(status_code=404, detail="Memory not found")
|
| 106 |
+
|
| 107 |
+
idx = df[df["id"] == item_id].index[0]
|
| 108 |
+
if text:
|
| 109 |
+
df.at[idx, "text"] = text
|
| 110 |
+
if metadata:
|
| 111 |
+
current_meta = df.at[idx, "metadata"] or {}
|
| 112 |
+
current_meta.update(metadata)
|
| 113 |
+
df.at[idx, "metadata"] = current_meta
|
| 114 |
+
|
| 115 |
+
df.at[idx, "timestamp"] = datetime.utcnow().isoformat()
|
| 116 |
+
save_dataset(df)
|
| 117 |
+
return df.iloc[idx].to_dict()
|
| 118 |
+
|
| 119 |
+
@app.delete("/delete/{item_id}")
|
| 120 |
+
@mcp.tool()
|
| 121 |
+
async def delete_memory(item_id: str):
|
| 122 |
+
"""Delete a specific memory by its ID."""
|
| 123 |
+
df = get_dataset()
|
| 124 |
+
if item_id not in df["id"].values:
|
| 125 |
+
raise HTTPException(status_code=404, detail="Memory not found")
|
| 126 |
+
|
| 127 |
+
df = df[df["id"] != item_id]
|
| 128 |
+
save_dataset(df)
|
| 129 |
+
return {"message": "Memory deleted successfully"}
|
| 130 |
+
|
| 131 |
+
@app.delete("/delete_all")
|
| 132 |
+
@mcp.tool()
|
| 133 |
+
async def delete_all_memories():
|
| 134 |
+
"""Wipe all memories. Use with caution!"""
|
| 135 |
+
df = pd.DataFrame(columns=["id", "text", "metadata", "timestamp"])
|
| 136 |
+
save_dataset(df)
|
| 137 |
+
return {"message": "All memories deleted"}
|
| 138 |
+
|
| 139 |
+
# Root page
|
| 140 |
+
@app.get("/", response_class=HTMLResponse)
|
| 141 |
+
async def root(request: Request):
|
| 142 |
+
base_url = str(request.base_url).rstrip("/")
|
| 143 |
+
return f"""
|
| 144 |
+
<html>
|
| 145 |
+
<head><title>Memory & Skills API</title></head>
|
| 146 |
+
<body style="font-family: sans-serif; padding: 40px; line-height: 1.6;">
|
| 147 |
+
<h1>🧠 Memory & Skills API</h1>
|
| 148 |
+
<p>This is a FastAPI-based memory service integrated with Hugging Face Datasets and MCP.</p>
|
| 149 |
+
|
| 150 |
+
<h3>🔗 API Links</h3>
|
| 151 |
+
<ul>
|
| 152 |
+
<li><strong>Swagger UI Docs:</strong> <a href="{base_url}/docs">{base_url}/docs</a></li>
|
| 153 |
+
<li><strong>Redoc:</strong> <a href="{base_url}/redoc">{base_url}/redoc</a></li>
|
| 154 |
+
</ul>
|
| 155 |
+
|
| 156 |
+
<h3>🔌 MCP (Model Context Protocol)</h3>
|
| 157 |
+
<p>This API is MCP-ready. AI models can use these tools directly.</p>
|
| 158 |
+
<ul>
|
| 159 |
+
<li><strong>MCP Endpoint (SSE):</strong> <code>{base_url}/mcp</code></li>
|
| 160 |
+
</ul>
|
| 161 |
+
|
| 162 |
+
<h3>🛠 Tools Available (via MCP):</h3>
|
| 163 |
+
<ul>
|
| 164 |
+
<li><code>create_memory(text, metadata)</code></li>
|
| 165 |
+
<li><code>search_memories(query)</code></li>
|
| 166 |
+
<li><code>get_all_memories()</code></li>
|
| 167 |
+
<li><code>get_memory(item_id)</code></li>
|
| 168 |
+
<li><code>edit_memory(item_id, text, metadata)</code></li>
|
| 169 |
+
<li><code>delete_memory(item_id)</code></li>
|
| 170 |
+
<li><code>delete_all_memories()</code></li>
|
| 171 |
+
</ul>
|
| 172 |
+
</body>
|
| 173 |
+
</html>
|
| 174 |
+
"""
|
| 175 |
+
|
| 176 |
+
# Mount MCP
|
| 177 |
+
mcp_app = mcp.http_app(path="/mcp")
|
| 178 |
+
app.mount("/mcp", mcp_app)
|
| 179 |
+
|
| 180 |
+
if __name__ == "__main__":
|
| 181 |
+
import uvicorn
|
| 182 |
+
# Spaces use port 7860
|
| 183 |
+
uvicorn.run(app, host="0.0.0.0", port=7860)
|
requirements.txt
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastapi
|
| 2 |
+
uvicorn
|
| 3 |
+
datasets
|
| 4 |
+
huggingface_hub
|
| 5 |
+
pandas
|
| 6 |
+
pyarrow
|
| 7 |
+
mcp
|
| 8 |
+
fastmcp
|
| 9 |
+
python-dotenv
|
| 10 |
+
jinja2
|
venv/bin/Activate.ps1
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<#
|
| 2 |
+
.Synopsis
|
| 3 |
+
Activate a Python virtual environment for the current PowerShell session.
|
| 4 |
+
|
| 5 |
+
.Description
|
| 6 |
+
Pushes the python executable for a virtual environment to the front of the
|
| 7 |
+
$Env:PATH environment variable and sets the prompt to signify that you are
|
| 8 |
+
in a Python virtual environment. Makes use of the command line switches as
|
| 9 |
+
well as the `pyvenv.cfg` file values present in the virtual environment.
|
| 10 |
+
|
| 11 |
+
.Parameter VenvDir
|
| 12 |
+
Path to the directory that contains the virtual environment to activate. The
|
| 13 |
+
default value for this is the parent of the directory that the Activate.ps1
|
| 14 |
+
script is located within.
|
| 15 |
+
|
| 16 |
+
.Parameter Prompt
|
| 17 |
+
The prompt prefix to display when this virtual environment is activated. By
|
| 18 |
+
default, this prompt is the name of the virtual environment folder (VenvDir)
|
| 19 |
+
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
|
| 20 |
+
|
| 21 |
+
.Example
|
| 22 |
+
Activate.ps1
|
| 23 |
+
Activates the Python virtual environment that contains the Activate.ps1 script.
|
| 24 |
+
|
| 25 |
+
.Example
|
| 26 |
+
Activate.ps1 -Verbose
|
| 27 |
+
Activates the Python virtual environment that contains the Activate.ps1 script,
|
| 28 |
+
and shows extra information about the activation as it executes.
|
| 29 |
+
|
| 30 |
+
.Example
|
| 31 |
+
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
|
| 32 |
+
Activates the Python virtual environment located in the specified location.
|
| 33 |
+
|
| 34 |
+
.Example
|
| 35 |
+
Activate.ps1 -Prompt "MyPython"
|
| 36 |
+
Activates the Python virtual environment that contains the Activate.ps1 script,
|
| 37 |
+
and prefixes the current prompt with the specified string (surrounded in
|
| 38 |
+
parentheses) while the virtual environment is active.
|
| 39 |
+
|
| 40 |
+
.Notes
|
| 41 |
+
On Windows, it may be required to enable this Activate.ps1 script by setting the
|
| 42 |
+
execution policy for the user. You can do this by issuing the following PowerShell
|
| 43 |
+
command:
|
| 44 |
+
|
| 45 |
+
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
| 46 |
+
|
| 47 |
+
For more information on Execution Policies:
|
| 48 |
+
https://go.microsoft.com/fwlink/?LinkID=135170
|
| 49 |
+
|
| 50 |
+
#>
|
| 51 |
+
Param(
|
| 52 |
+
[Parameter(Mandatory = $false)]
|
| 53 |
+
[String]
|
| 54 |
+
$VenvDir,
|
| 55 |
+
[Parameter(Mandatory = $false)]
|
| 56 |
+
[String]
|
| 57 |
+
$Prompt
|
| 58 |
+
)
|
| 59 |
+
|
| 60 |
+
<# Function declarations --------------------------------------------------- #>
|
| 61 |
+
|
| 62 |
+
<#
|
| 63 |
+
.Synopsis
|
| 64 |
+
Remove all shell session elements added by the Activate script, including the
|
| 65 |
+
addition of the virtual environment's Python executable from the beginning of
|
| 66 |
+
the PATH variable.
|
| 67 |
+
|
| 68 |
+
.Parameter NonDestructive
|
| 69 |
+
If present, do not remove this function from the global namespace for the
|
| 70 |
+
session.
|
| 71 |
+
|
| 72 |
+
#>
|
| 73 |
+
function global:deactivate ([switch]$NonDestructive) {
|
| 74 |
+
# Revert to original values
|
| 75 |
+
|
| 76 |
+
# The prior prompt:
|
| 77 |
+
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
|
| 78 |
+
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
|
| 79 |
+
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
# The prior PYTHONHOME:
|
| 83 |
+
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
|
| 84 |
+
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
|
| 85 |
+
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
# The prior PATH:
|
| 89 |
+
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
|
| 90 |
+
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
|
| 91 |
+
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
# Just remove the VIRTUAL_ENV altogether:
|
| 95 |
+
if (Test-Path -Path Env:VIRTUAL_ENV) {
|
| 96 |
+
Remove-Item -Path env:VIRTUAL_ENV
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
# Just remove VIRTUAL_ENV_PROMPT altogether.
|
| 100 |
+
if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
|
| 101 |
+
Remove-Item -Path env:VIRTUAL_ENV_PROMPT
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
|
| 105 |
+
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
|
| 106 |
+
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
# Leave deactivate function in the global namespace if requested:
|
| 110 |
+
if (-not $NonDestructive) {
|
| 111 |
+
Remove-Item -Path function:deactivate
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
<#
|
| 116 |
+
.Description
|
| 117 |
+
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
|
| 118 |
+
given folder, and returns them in a map.
|
| 119 |
+
|
| 120 |
+
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
|
| 121 |
+
two strings separated by `=` (with any amount of whitespace surrounding the =)
|
| 122 |
+
then it is considered a `key = value` line. The left hand string is the key,
|
| 123 |
+
the right hand is the value.
|
| 124 |
+
|
| 125 |
+
If the value starts with a `'` or a `"` then the first and last character is
|
| 126 |
+
stripped from the value before being captured.
|
| 127 |
+
|
| 128 |
+
.Parameter ConfigDir
|
| 129 |
+
Path to the directory that contains the `pyvenv.cfg` file.
|
| 130 |
+
#>
|
| 131 |
+
function Get-PyVenvConfig(
|
| 132 |
+
[String]
|
| 133 |
+
$ConfigDir
|
| 134 |
+
) {
|
| 135 |
+
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
|
| 136 |
+
|
| 137 |
+
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
|
| 138 |
+
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
|
| 139 |
+
|
| 140 |
+
# An empty map will be returned if no config file is found.
|
| 141 |
+
$pyvenvConfig = @{ }
|
| 142 |
+
|
| 143 |
+
if ($pyvenvConfigPath) {
|
| 144 |
+
|
| 145 |
+
Write-Verbose "File exists, parse `key = value` lines"
|
| 146 |
+
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
|
| 147 |
+
|
| 148 |
+
$pyvenvConfigContent | ForEach-Object {
|
| 149 |
+
$keyval = $PSItem -split "\s*=\s*", 2
|
| 150 |
+
if ($keyval[0] -and $keyval[1]) {
|
| 151 |
+
$val = $keyval[1]
|
| 152 |
+
|
| 153 |
+
# Remove extraneous quotations around a string value.
|
| 154 |
+
if ("'""".Contains($val.Substring(0, 1))) {
|
| 155 |
+
$val = $val.Substring(1, $val.Length - 2)
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
$pyvenvConfig[$keyval[0]] = $val
|
| 159 |
+
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
|
| 160 |
+
}
|
| 161 |
+
}
|
| 162 |
+
}
|
| 163 |
+
return $pyvenvConfig
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
|
| 167 |
+
<# Begin Activate script --------------------------------------------------- #>
|
| 168 |
+
|
| 169 |
+
# Determine the containing directory of this script
|
| 170 |
+
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
| 171 |
+
$VenvExecDir = Get-Item -Path $VenvExecPath
|
| 172 |
+
|
| 173 |
+
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
|
| 174 |
+
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
|
| 175 |
+
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
|
| 176 |
+
|
| 177 |
+
# Set values required in priority: CmdLine, ConfigFile, Default
|
| 178 |
+
# First, get the location of the virtual environment, it might not be
|
| 179 |
+
# VenvExecDir if specified on the command line.
|
| 180 |
+
if ($VenvDir) {
|
| 181 |
+
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
|
| 182 |
+
}
|
| 183 |
+
else {
|
| 184 |
+
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
|
| 185 |
+
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
|
| 186 |
+
Write-Verbose "VenvDir=$VenvDir"
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
# Next, read the `pyvenv.cfg` file to determine any required value such
|
| 190 |
+
# as `prompt`.
|
| 191 |
+
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
|
| 192 |
+
|
| 193 |
+
# Next, set the prompt from the command line, or the config file, or
|
| 194 |
+
# just use the name of the virtual environment folder.
|
| 195 |
+
if ($Prompt) {
|
| 196 |
+
Write-Verbose "Prompt specified as argument, using '$Prompt'"
|
| 197 |
+
}
|
| 198 |
+
else {
|
| 199 |
+
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
|
| 200 |
+
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
|
| 201 |
+
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
|
| 202 |
+
$Prompt = $pyvenvCfg['prompt'];
|
| 203 |
+
}
|
| 204 |
+
else {
|
| 205 |
+
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
|
| 206 |
+
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
|
| 207 |
+
$Prompt = Split-Path -Path $venvDir -Leaf
|
| 208 |
+
}
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
Write-Verbose "Prompt = '$Prompt'"
|
| 212 |
+
Write-Verbose "VenvDir='$VenvDir'"
|
| 213 |
+
|
| 214 |
+
# Deactivate any currently active virtual environment, but leave the
|
| 215 |
+
# deactivate function in place.
|
| 216 |
+
deactivate -nondestructive
|
| 217 |
+
|
| 218 |
+
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
|
| 219 |
+
# that there is an activated venv.
|
| 220 |
+
$env:VIRTUAL_ENV = $VenvDir
|
| 221 |
+
|
| 222 |
+
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
| 223 |
+
|
| 224 |
+
Write-Verbose "Setting prompt to '$Prompt'"
|
| 225 |
+
|
| 226 |
+
# Set the prompt to include the env name
|
| 227 |
+
# Make sure _OLD_VIRTUAL_PROMPT is global
|
| 228 |
+
function global:_OLD_VIRTUAL_PROMPT { "" }
|
| 229 |
+
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
|
| 230 |
+
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
|
| 231 |
+
|
| 232 |
+
function global:prompt {
|
| 233 |
+
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
|
| 234 |
+
_OLD_VIRTUAL_PROMPT
|
| 235 |
+
}
|
| 236 |
+
$env:VIRTUAL_ENV_PROMPT = $Prompt
|
| 237 |
+
}
|
| 238 |
+
|
| 239 |
+
# Clear PYTHONHOME
|
| 240 |
+
if (Test-Path -Path Env:PYTHONHOME) {
|
| 241 |
+
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
|
| 242 |
+
Remove-Item -Path Env:PYTHONHOME
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
# Add the venv to the PATH
|
| 246 |
+
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
|
| 247 |
+
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
|
venv/bin/activate
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file must be used with "source bin/activate" *from bash*
|
| 2 |
+
# You cannot run it directly
|
| 3 |
+
|
| 4 |
+
deactivate () {
|
| 5 |
+
# reset old environment variables
|
| 6 |
+
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
|
| 7 |
+
PATH="${_OLD_VIRTUAL_PATH:-}"
|
| 8 |
+
export PATH
|
| 9 |
+
unset _OLD_VIRTUAL_PATH
|
| 10 |
+
fi
|
| 11 |
+
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
|
| 12 |
+
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
|
| 13 |
+
export PYTHONHOME
|
| 14 |
+
unset _OLD_VIRTUAL_PYTHONHOME
|
| 15 |
+
fi
|
| 16 |
+
|
| 17 |
+
# Call hash to forget past commands. Without forgetting
|
| 18 |
+
# past commands the $PATH changes we made may not be respected
|
| 19 |
+
hash -r 2> /dev/null
|
| 20 |
+
|
| 21 |
+
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
| 22 |
+
PS1="${_OLD_VIRTUAL_PS1:-}"
|
| 23 |
+
export PS1
|
| 24 |
+
unset _OLD_VIRTUAL_PS1
|
| 25 |
+
fi
|
| 26 |
+
|
| 27 |
+
unset VIRTUAL_ENV
|
| 28 |
+
unset VIRTUAL_ENV_PROMPT
|
| 29 |
+
if [ ! "${1:-}" = "nondestructive" ] ; then
|
| 30 |
+
# Self destruct!
|
| 31 |
+
unset -f deactivate
|
| 32 |
+
fi
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
# unset irrelevant variables
|
| 36 |
+
deactivate nondestructive
|
| 37 |
+
|
| 38 |
+
# on Windows, a path can contain colons and backslashes and has to be converted:
|
| 39 |
+
if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then
|
| 40 |
+
# transform D:\path\to\venv to /d/path/to/venv on MSYS
|
| 41 |
+
# and to /cygdrive/d/path/to/venv on Cygwin
|
| 42 |
+
export VIRTUAL_ENV=$(cygpath /home/ammar/Desktop/Projects/skills_and_memories/venv)
|
| 43 |
+
else
|
| 44 |
+
# use the path as-is
|
| 45 |
+
export VIRTUAL_ENV=/home/ammar/Desktop/Projects/skills_and_memories/venv
|
| 46 |
+
fi
|
| 47 |
+
|
| 48 |
+
_OLD_VIRTUAL_PATH="$PATH"
|
| 49 |
+
PATH="$VIRTUAL_ENV/"bin":$PATH"
|
| 50 |
+
export PATH
|
| 51 |
+
|
| 52 |
+
# unset PYTHONHOME if set
|
| 53 |
+
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
| 54 |
+
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
| 55 |
+
if [ -n "${PYTHONHOME:-}" ] ; then
|
| 56 |
+
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
|
| 57 |
+
unset PYTHONHOME
|
| 58 |
+
fi
|
| 59 |
+
|
| 60 |
+
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
| 61 |
+
_OLD_VIRTUAL_PS1="${PS1:-}"
|
| 62 |
+
PS1='(venv) '"${PS1:-}"
|
| 63 |
+
export PS1
|
| 64 |
+
VIRTUAL_ENV_PROMPT='(venv) '
|
| 65 |
+
export VIRTUAL_ENV_PROMPT
|
| 66 |
+
fi
|
| 67 |
+
|
| 68 |
+
# Call hash to forget past commands. Without forgetting
|
| 69 |
+
# past commands the $PATH changes we made may not be respected
|
| 70 |
+
hash -r 2> /dev/null
|
venv/bin/activate.csh
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file must be used with "source bin/activate.csh" *from csh*.
|
| 2 |
+
# You cannot run it directly.
|
| 3 |
+
|
| 4 |
+
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
| 5 |
+
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
|
| 6 |
+
|
| 7 |
+
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate'
|
| 8 |
+
|
| 9 |
+
# Unset irrelevant variables.
|
| 10 |
+
deactivate nondestructive
|
| 11 |
+
|
| 12 |
+
setenv VIRTUAL_ENV /home/ammar/Desktop/Projects/skills_and_memories/venv
|
| 13 |
+
|
| 14 |
+
set _OLD_VIRTUAL_PATH="$PATH"
|
| 15 |
+
setenv PATH "$VIRTUAL_ENV/"bin":$PATH"
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
set _OLD_VIRTUAL_PROMPT="$prompt"
|
| 19 |
+
|
| 20 |
+
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
| 21 |
+
set prompt = '(venv) '"$prompt"
|
| 22 |
+
setenv VIRTUAL_ENV_PROMPT '(venv) '
|
| 23 |
+
endif
|
| 24 |
+
|
| 25 |
+
alias pydoc python -m pydoc
|
| 26 |
+
|
| 27 |
+
rehash
|
venv/bin/activate.fish
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
|
| 2 |
+
# (https://fishshell.com/). You cannot run it directly.
|
| 3 |
+
|
| 4 |
+
function deactivate -d "Exit virtual environment and return to normal shell environment"
|
| 5 |
+
# reset old environment variables
|
| 6 |
+
if test -n "$_OLD_VIRTUAL_PATH"
|
| 7 |
+
set -gx PATH $_OLD_VIRTUAL_PATH
|
| 8 |
+
set -e _OLD_VIRTUAL_PATH
|
| 9 |
+
end
|
| 10 |
+
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
| 11 |
+
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
|
| 12 |
+
set -e _OLD_VIRTUAL_PYTHONHOME
|
| 13 |
+
end
|
| 14 |
+
|
| 15 |
+
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
| 16 |
+
set -e _OLD_FISH_PROMPT_OVERRIDE
|
| 17 |
+
# prevents error when using nested fish instances (Issue #93858)
|
| 18 |
+
if functions -q _old_fish_prompt
|
| 19 |
+
functions -e fish_prompt
|
| 20 |
+
functions -c _old_fish_prompt fish_prompt
|
| 21 |
+
functions -e _old_fish_prompt
|
| 22 |
+
end
|
| 23 |
+
end
|
| 24 |
+
|
| 25 |
+
set -e VIRTUAL_ENV
|
| 26 |
+
set -e VIRTUAL_ENV_PROMPT
|
| 27 |
+
if test "$argv[1]" != "nondestructive"
|
| 28 |
+
# Self-destruct!
|
| 29 |
+
functions -e deactivate
|
| 30 |
+
end
|
| 31 |
+
end
|
| 32 |
+
|
| 33 |
+
# Unset irrelevant variables.
|
| 34 |
+
deactivate nondestructive
|
| 35 |
+
|
| 36 |
+
set -gx VIRTUAL_ENV /home/ammar/Desktop/Projects/skills_and_memories/venv
|
| 37 |
+
|
| 38 |
+
set -gx _OLD_VIRTUAL_PATH $PATH
|
| 39 |
+
set -gx PATH "$VIRTUAL_ENV/"bin $PATH
|
| 40 |
+
|
| 41 |
+
# Unset PYTHONHOME if set.
|
| 42 |
+
if set -q PYTHONHOME
|
| 43 |
+
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
| 44 |
+
set -e PYTHONHOME
|
| 45 |
+
end
|
| 46 |
+
|
| 47 |
+
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
| 48 |
+
# fish uses a function instead of an env var to generate the prompt.
|
| 49 |
+
|
| 50 |
+
# Save the current fish_prompt function as the function _old_fish_prompt.
|
| 51 |
+
functions -c fish_prompt _old_fish_prompt
|
| 52 |
+
|
| 53 |
+
# With the original prompt function renamed, we can override with our own.
|
| 54 |
+
function fish_prompt
|
| 55 |
+
# Save the return status of the last command.
|
| 56 |
+
set -l old_status $status
|
| 57 |
+
|
| 58 |
+
# Output the venv prompt; color taken from the blue of the Python logo.
|
| 59 |
+
printf "%s%s%s" (set_color 4B8BBE) '(venv) ' (set_color normal)
|
| 60 |
+
|
| 61 |
+
# Restore the return status of the previous command.
|
| 62 |
+
echo "exit $old_status" | .
|
| 63 |
+
# Output the original/"old" prompt.
|
| 64 |
+
_old_fish_prompt
|
| 65 |
+
end
|
| 66 |
+
|
| 67 |
+
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
| 68 |
+
set -gx VIRTUAL_ENV_PROMPT '(venv) '
|
| 69 |
+
end
|
venv/bin/hf
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from huggingface_hub.cli.hf import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/httpx
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from httpx import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/huggingface-cli
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from huggingface_hub.cli.deprecated_cli import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/markdown-it
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from markdown_it.cli.parse import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/pip
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from pip._internal.cli.main import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/pip3
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from pip._internal.cli.main import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/pip3.12
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from pip._internal.cli.main import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/pygmentize
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from pygments.cmdline import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/python
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8295ee25cfdb239f3e165afceda7f46de73e2b606ff0e2e3d8623e3facd30acc
|
| 3 |
+
size 8020928
|
venv/bin/python3
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8295ee25cfdb239f3e165afceda7f46de73e2b606ff0e2e3d8623e3facd30acc
|
| 3 |
+
size 8020928
|
venv/bin/python3.12
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8295ee25cfdb239f3e165afceda7f46de73e2b606ff0e2e3d8623e3facd30acc
|
| 3 |
+
size 8020928
|
venv/bin/tiny-agents
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from huggingface_hub.inference._mcp.cli import app
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(app())
|
venv/bin/tqdm
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from tqdm.cli import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/bin/typer
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/home/ammar/Desktop/Projects/skills_and_memories/venv/bin/python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
import re
|
| 4 |
+
import sys
|
| 5 |
+
from typer.cli import main
|
| 6 |
+
if __name__ == '__main__':
|
| 7 |
+
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
| 8 |
+
sys.exit(main())
|
venv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:997d7f1ec9ffcc258074a99660cd0bca7a2d85fb40515d5ba1073fd7356afdf8
|
| 3 |
+
size 163767
|
venv/lib/python3.12/site-packages/_yaml/__init__.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This is a stub package designed to roughly emulate the _yaml
|
| 2 |
+
# extension module, which previously existed as a standalone module
|
| 3 |
+
# and has been moved into the `yaml` package namespace.
|
| 4 |
+
# It does not perfectly mimic its old counterpart, but should get
|
| 5 |
+
# close enough for anyone who's relying on it even when they shouldn't.
|
| 6 |
+
import yaml
|
| 7 |
+
|
| 8 |
+
# in some circumstances, the yaml module we imoprted may be from a different version, so we need
|
| 9 |
+
# to tread carefully when poking at it here (it may not have the attributes we expect)
|
| 10 |
+
if not getattr(yaml, '__with_libyaml__', False):
|
| 11 |
+
from sys import version_info
|
| 12 |
+
|
| 13 |
+
exc = ModuleNotFoundError if version_info >= (3, 6) else ImportError
|
| 14 |
+
raise exc("No module named '_yaml'")
|
| 15 |
+
else:
|
| 16 |
+
from yaml._yaml import *
|
| 17 |
+
import warnings
|
| 18 |
+
warnings.warn(
|
| 19 |
+
'The _yaml extension module is now located at yaml._yaml'
|
| 20 |
+
' and its location is subject to change. To use the'
|
| 21 |
+
' LibYAML-based parser and emitter, import from `yaml`:'
|
| 22 |
+
' `from yaml import CLoader as Loader, CDumper as Dumper`.',
|
| 23 |
+
DeprecationWarning
|
| 24 |
+
)
|
| 25 |
+
del warnings
|
| 26 |
+
# Don't `del yaml` here because yaml is actually an existing
|
| 27 |
+
# namespace member of _yaml.
|
| 28 |
+
|
| 29 |
+
__name__ = '_yaml'
|
| 30 |
+
# If the module is top-level (i.e. not a part of any specific package)
|
| 31 |
+
# then the attribute should be set to ''.
|
| 32 |
+
# https://docs.python.org/3.8/library/types.html
|
| 33 |
+
__package__ = ''
|
venv/lib/python3.12/site-packages/_yaml/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (879 Bytes). View file
|
|
|
venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/METADATA
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.4
|
| 2 |
+
Name: annotated-doc
|
| 3 |
+
Version: 0.0.4
|
| 4 |
+
Summary: Document parameters, class attributes, return types, and variables inline, with Annotated.
|
| 5 |
+
Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <tiangolo@gmail.com>
|
| 6 |
+
License-Expression: MIT
|
| 7 |
+
License-File: LICENSE
|
| 8 |
+
Classifier: Intended Audience :: Information Technology
|
| 9 |
+
Classifier: Intended Audience :: System Administrators
|
| 10 |
+
Classifier: Operating System :: OS Independent
|
| 11 |
+
Classifier: Programming Language :: Python :: 3
|
| 12 |
+
Classifier: Programming Language :: Python
|
| 13 |
+
Classifier: Topic :: Internet
|
| 14 |
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
| 15 |
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
| 16 |
+
Classifier: Topic :: Software Development :: Libraries
|
| 17 |
+
Classifier: Topic :: Software Development
|
| 18 |
+
Classifier: Typing :: Typed
|
| 19 |
+
Classifier: Development Status :: 4 - Beta
|
| 20 |
+
Classifier: Intended Audience :: Developers
|
| 21 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
| 22 |
+
Classifier: Programming Language :: Python :: 3.8
|
| 23 |
+
Classifier: Programming Language :: Python :: 3.9
|
| 24 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 25 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 26 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 27 |
+
Classifier: Programming Language :: Python :: 3.13
|
| 28 |
+
Classifier: Programming Language :: Python :: 3.14
|
| 29 |
+
Project-URL: Homepage, https://github.com/fastapi/annotated-doc
|
| 30 |
+
Project-URL: Documentation, https://github.com/fastapi/annotated-doc
|
| 31 |
+
Project-URL: Repository, https://github.com/fastapi/annotated-doc
|
| 32 |
+
Project-URL: Issues, https://github.com/fastapi/annotated-doc/issues
|
| 33 |
+
Project-URL: Changelog, https://github.com/fastapi/annotated-doc/release-notes.md
|
| 34 |
+
Requires-Python: >=3.8
|
| 35 |
+
Description-Content-Type: text/markdown
|
| 36 |
+
|
| 37 |
+
# Annotated Doc
|
| 38 |
+
|
| 39 |
+
Document parameters, class attributes, return types, and variables inline, with `Annotated`.
|
| 40 |
+
|
| 41 |
+
<a href="https://github.com/fastapi/annotated-doc/actions?query=workflow%3ATest+event%3Apush+branch%3Amain" target="_blank">
|
| 42 |
+
<img src="https://github.com/fastapi/annotated-doc/actions/workflows/test.yml/badge.svg?event=push&branch=main" alt="Test">
|
| 43 |
+
</a>
|
| 44 |
+
<a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/fastapi/annotated-doc" target="_blank">
|
| 45 |
+
<img src="https://coverage-badge.samuelcolvin.workers.dev/fastapi/annotated-doc.svg" alt="Coverage">
|
| 46 |
+
</a>
|
| 47 |
+
<a href="https://pypi.org/project/annotated-doc" target="_blank">
|
| 48 |
+
<img src="https://img.shields.io/pypi/v/annotated-doc?color=%2334D058&label=pypi%20package" alt="Package version">
|
| 49 |
+
</a>
|
| 50 |
+
<a href="https://pypi.org/project/annotated-doc" target="_blank">
|
| 51 |
+
<img src="https://img.shields.io/pypi/pyversions/annotated-doc.svg?color=%2334D058" alt="Supported Python versions">
|
| 52 |
+
</a>
|
| 53 |
+
|
| 54 |
+
## Installation
|
| 55 |
+
|
| 56 |
+
```bash
|
| 57 |
+
pip install annotated-doc
|
| 58 |
+
```
|
| 59 |
+
|
| 60 |
+
Or with `uv`:
|
| 61 |
+
|
| 62 |
+
```Python
|
| 63 |
+
uv add annotated-doc
|
| 64 |
+
```
|
| 65 |
+
|
| 66 |
+
## Usage
|
| 67 |
+
|
| 68 |
+
Import `Doc` and pass a single literal string with the documentation for the specific parameter, class attribute, return type, or variable.
|
| 69 |
+
|
| 70 |
+
For example, to document a parameter `name` in a function `hi` you could do:
|
| 71 |
+
|
| 72 |
+
```Python
|
| 73 |
+
from typing import Annotated
|
| 74 |
+
|
| 75 |
+
from annotated_doc import Doc
|
| 76 |
+
|
| 77 |
+
def hi(name: Annotated[str, Doc("Who to say hi to")]) -> None:
|
| 78 |
+
print(f"Hi, {name}!")
|
| 79 |
+
```
|
| 80 |
+
|
| 81 |
+
You can also use it to document class attributes:
|
| 82 |
+
|
| 83 |
+
```Python
|
| 84 |
+
from typing import Annotated
|
| 85 |
+
|
| 86 |
+
from annotated_doc import Doc
|
| 87 |
+
|
| 88 |
+
class User:
|
| 89 |
+
name: Annotated[str, Doc("The user's name")]
|
| 90 |
+
age: Annotated[int, Doc("The user's age")]
|
| 91 |
+
```
|
| 92 |
+
|
| 93 |
+
The same way, you could document return types and variables, or anything that could have a type annotation with `Annotated`.
|
| 94 |
+
|
| 95 |
+
## Who Uses This
|
| 96 |
+
|
| 97 |
+
`annotated-doc` was made for:
|
| 98 |
+
|
| 99 |
+
* [FastAPI](https://fastapi.tiangolo.com/)
|
| 100 |
+
* [Typer](https://typer.tiangolo.com/)
|
| 101 |
+
* [SQLModel](https://sqlmodel.tiangolo.com/)
|
| 102 |
+
* [Asyncer](https://asyncer.tiangolo.com/)
|
| 103 |
+
|
| 104 |
+
`annotated-doc` is supported by [griffe-typingdoc](https://github.com/mkdocstrings/griffe-typingdoc), which powers reference documentation like the one in the [FastAPI Reference](https://fastapi.tiangolo.com/reference/).
|
| 105 |
+
|
| 106 |
+
## Reasons not to use `annotated-doc`
|
| 107 |
+
|
| 108 |
+
You are already comfortable with one of the existing docstring formats, like:
|
| 109 |
+
|
| 110 |
+
* Sphinx
|
| 111 |
+
* numpydoc
|
| 112 |
+
* Google
|
| 113 |
+
* Keras
|
| 114 |
+
|
| 115 |
+
Your team is already comfortable using them.
|
| 116 |
+
|
| 117 |
+
You prefer having the documentation about parameters all together in a docstring, separated from the code defining them.
|
| 118 |
+
|
| 119 |
+
You care about a specific set of users, using one specific editor, and that editor already has support for the specific docstring format you use.
|
| 120 |
+
|
| 121 |
+
## Reasons to use `annotated-doc`
|
| 122 |
+
|
| 123 |
+
* No micro-syntax to learn for newcomers, it’s **just Python** syntax.
|
| 124 |
+
* **Editing** would be already fully supported by default by any editor (current or future) supporting Python syntax, including syntax errors, syntax highlighting, etc.
|
| 125 |
+
* **Rendering** would be relatively straightforward to implement by static tools (tools that don't need runtime execution), as the information can be extracted from the AST they normally already create.
|
| 126 |
+
* **Deduplication of information**: the name of a parameter would be defined in a single place, not duplicated inside of a docstring.
|
| 127 |
+
* **Elimination** of the possibility of having **inconsistencies** when removing a parameter or class variable and **forgetting to remove** its documentation.
|
| 128 |
+
* **Minimization** of the probability of adding a new parameter or class variable and **forgetting to add its documentation**.
|
| 129 |
+
* **Elimination** of the possibility of having **inconsistencies** between the **name** of a parameter in the **signature** and the name in the docstring when it is renamed.
|
| 130 |
+
* **Access** to the documentation string for each symbol at **runtime**, including existing (older) Python versions.
|
| 131 |
+
* A more formalized way to document other symbols, like type aliases, that could use Annotated.
|
| 132 |
+
* **Support** for apps using FastAPI, Typer and others.
|
| 133 |
+
* **AI Accessibility**: AI tools will have an easier way understanding each parameter as the distance from documentation to parameter is much closer.
|
| 134 |
+
|
| 135 |
+
## History
|
| 136 |
+
|
| 137 |
+
I ([@tiangolo](https://github.com/tiangolo)) originally wanted for this to be part of the Python standard library (in [PEP 727](https://peps.python.org/pep-0727/)), but the proposal was withdrawn as there was a fair amount of negative feedback and opposition.
|
| 138 |
+
|
| 139 |
+
The conclusion was that this was better done as an external effort, in a third-party library.
|
| 140 |
+
|
| 141 |
+
So, here it is, with a simpler approach, as a third-party library, in a way that can be used by others, starting with FastAPI and friends.
|
| 142 |
+
|
| 143 |
+
## License
|
| 144 |
+
|
| 145 |
+
This project is licensed under the terms of the MIT license.
|
venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/RECORD
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
annotated_doc-0.0.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
annotated_doc-0.0.4.dist-info/METADATA,sha256=Irm5KJua33dY2qKKAjJ-OhKaVBVIfwFGej_dSe3Z1TU,6566
|
| 3 |
+
annotated_doc-0.0.4.dist-info/RECORD,,
|
| 4 |
+
annotated_doc-0.0.4.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
|
| 5 |
+
annotated_doc-0.0.4.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
|
| 6 |
+
annotated_doc-0.0.4.dist-info/licenses/LICENSE,sha256=__Fwd5pqy_ZavbQFwIfxzuF4ZpHkqWpANFF-SlBKDN8,1086
|
| 7 |
+
annotated_doc/__init__.py,sha256=VuyxxUe80kfEyWnOrCx_Bk8hybo3aKo6RYBlkBBYW8k,52
|
| 8 |
+
annotated_doc/__pycache__/__init__.cpython-312.pyc,,
|
| 9 |
+
annotated_doc/__pycache__/main.cpython-312.pyc,,
|
| 10 |
+
annotated_doc/main.py,sha256=5Zfvxv80SwwLqpRW73AZyZyiM4bWma9QWRbp_cgD20s,1075
|
| 11 |
+
annotated_doc/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: pdm-backend (2.4.5)
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/entry_points.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[console_scripts]
|
| 2 |
+
|
| 3 |
+
[gui_scripts]
|
| 4 |
+
|
venv/lib/python3.12/site-packages/annotated_doc-0.0.4.dist-info/licenses/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The MIT License (MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2025 Sebastián Ramírez
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in
|
| 13 |
+
all copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
| 21 |
+
THE SOFTWARE.
|
venv/lib/python3.12/site-packages/annotated_doc/__init__.py
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .main import Doc as Doc
|
| 2 |
+
|
| 3 |
+
__version__ = "0.0.4"
|
venv/lib/python3.12/site-packages/annotated_doc/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (269 Bytes). View file
|
|
|
venv/lib/python3.12/site-packages/annotated_doc/__pycache__/main.cpython-312.pyc
ADDED
|
Binary file (1.92 kB). View file
|
|
|
venv/lib/python3.12/site-packages/annotated_doc/main.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class Doc:
|
| 2 |
+
"""Define the documentation of a type annotation using `Annotated`, to be
|
| 3 |
+
used in class attributes, function and method parameters, return values,
|
| 4 |
+
and variables.
|
| 5 |
+
|
| 6 |
+
The value should be a positional-only string literal to allow static tools
|
| 7 |
+
like editors and documentation generators to use it.
|
| 8 |
+
|
| 9 |
+
This complements docstrings.
|
| 10 |
+
|
| 11 |
+
The string value passed is available in the attribute `documentation`.
|
| 12 |
+
|
| 13 |
+
Example:
|
| 14 |
+
|
| 15 |
+
```Python
|
| 16 |
+
from typing import Annotated
|
| 17 |
+
from annotated_doc import Doc
|
| 18 |
+
|
| 19 |
+
def hi(name: Annotated[str, Doc("Who to say hi to")]) -> None:
|
| 20 |
+
print(f"Hi, {name}!")
|
| 21 |
+
```
|
| 22 |
+
"""
|
| 23 |
+
|
| 24 |
+
def __init__(self, documentation: str, /) -> None:
|
| 25 |
+
self.documentation = documentation
|
| 26 |
+
|
| 27 |
+
def __repr__(self) -> str:
|
| 28 |
+
return f"Doc({self.documentation!r})"
|
| 29 |
+
|
| 30 |
+
def __hash__(self) -> int:
|
| 31 |
+
return hash(self.documentation)
|
| 32 |
+
|
| 33 |
+
def __eq__(self, other: object) -> bool:
|
| 34 |
+
if not isinstance(other, Doc):
|
| 35 |
+
return NotImplemented
|
| 36 |
+
return self.documentation == other.documentation
|
venv/lib/python3.12/site-packages/annotated_doc/py.typed
ADDED
|
File without changes
|
venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/INSTALLER
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
pip
|
venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/METADATA
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Metadata-Version: 2.4
|
| 2 |
+
Name: anyio
|
| 3 |
+
Version: 4.13.0
|
| 4 |
+
Summary: High-level concurrency and networking framework on top of asyncio or Trio
|
| 5 |
+
Author-email: Alex Grönholm <alex.gronholm@nextday.fi>
|
| 6 |
+
License-Expression: MIT
|
| 7 |
+
Project-URL: Documentation, https://anyio.readthedocs.io/en/latest/
|
| 8 |
+
Project-URL: Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html
|
| 9 |
+
Project-URL: Source code, https://github.com/agronholm/anyio
|
| 10 |
+
Project-URL: Issue tracker, https://github.com/agronholm/anyio/issues
|
| 11 |
+
Classifier: Development Status :: 5 - Production/Stable
|
| 12 |
+
Classifier: Intended Audience :: Developers
|
| 13 |
+
Classifier: Framework :: AnyIO
|
| 14 |
+
Classifier: Typing :: Typed
|
| 15 |
+
Classifier: Programming Language :: Python
|
| 16 |
+
Classifier: Programming Language :: Python :: 3
|
| 17 |
+
Classifier: Programming Language :: Python :: 3.10
|
| 18 |
+
Classifier: Programming Language :: Python :: 3.11
|
| 19 |
+
Classifier: Programming Language :: Python :: 3.12
|
| 20 |
+
Classifier: Programming Language :: Python :: 3.13
|
| 21 |
+
Classifier: Programming Language :: Python :: 3.14
|
| 22 |
+
Requires-Python: >=3.10
|
| 23 |
+
Description-Content-Type: text/x-rst
|
| 24 |
+
License-File: LICENSE
|
| 25 |
+
Requires-Dist: exceptiongroup>=1.0.2; python_version < "3.11"
|
| 26 |
+
Requires-Dist: idna>=2.8
|
| 27 |
+
Requires-Dist: typing_extensions>=4.5; python_version < "3.13"
|
| 28 |
+
Provides-Extra: trio
|
| 29 |
+
Requires-Dist: trio>=0.32.0; extra == "trio"
|
| 30 |
+
Dynamic: license-file
|
| 31 |
+
|
| 32 |
+
.. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg
|
| 33 |
+
:target: https://github.com/agronholm/anyio/actions/workflows/test.yml
|
| 34 |
+
:alt: Build Status
|
| 35 |
+
.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master
|
| 36 |
+
:target: https://coveralls.io/github/agronholm/anyio?branch=master
|
| 37 |
+
:alt: Code Coverage
|
| 38 |
+
.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest
|
| 39 |
+
:target: https://anyio.readthedocs.io/en/latest/?badge=latest
|
| 40 |
+
:alt: Documentation
|
| 41 |
+
.. image:: https://badges.gitter.im/gitterHQ/gitter.svg
|
| 42 |
+
:target: https://gitter.im/python-trio/AnyIO
|
| 43 |
+
:alt: Gitter chat
|
| 44 |
+
.. image:: https://tidelift.com/badges/package/pypi/anyio
|
| 45 |
+
:target: https://tidelift.com/subscription/pkg/pypi-anyio
|
| 46 |
+
:alt: Tidelift
|
| 47 |
+
|
| 48 |
+
AnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or
|
| 49 |
+
Trio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony
|
| 50 |
+
with the native SC of Trio itself.
|
| 51 |
+
|
| 52 |
+
Applications and libraries written against AnyIO's API will run unmodified on either asyncio_ or
|
| 53 |
+
Trio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full
|
| 54 |
+
refactoring necessary. It will blend in with the native libraries of your chosen backend.
|
| 55 |
+
|
| 56 |
+
To find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it
|
| 57 |
+
`here <https://anyio.readthedocs.io/en/stable/why.html>`_.
|
| 58 |
+
|
| 59 |
+
Documentation
|
| 60 |
+
-------------
|
| 61 |
+
|
| 62 |
+
View full documentation at: https://anyio.readthedocs.io/
|
| 63 |
+
|
| 64 |
+
Features
|
| 65 |
+
--------
|
| 66 |
+
|
| 67 |
+
AnyIO offers the following functionality:
|
| 68 |
+
|
| 69 |
+
* Task groups (nurseries_ in trio terminology)
|
| 70 |
+
* High-level networking (TCP, UDP and UNIX sockets)
|
| 71 |
+
|
| 72 |
+
* `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python
|
| 73 |
+
3.8)
|
| 74 |
+
* async/await style UDP sockets (unlike asyncio where you still have to use Transports and
|
| 75 |
+
Protocols)
|
| 76 |
+
|
| 77 |
+
* A versatile API for byte streams and object streams
|
| 78 |
+
* Inter-task synchronization and communication (locks, conditions, events, semaphores, object
|
| 79 |
+
streams)
|
| 80 |
+
* Worker threads
|
| 81 |
+
* Subprocesses
|
| 82 |
+
* Subinterpreter support for code parallelization (on Python 3.13 and later)
|
| 83 |
+
* Asynchronous file I/O (using worker threads)
|
| 84 |
+
* Signal handling
|
| 85 |
+
* Asynchronous version of the functools_ module
|
| 86 |
+
|
| 87 |
+
AnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.
|
| 88 |
+
It even works with the popular Hypothesis_ library.
|
| 89 |
+
|
| 90 |
+
.. _asyncio: https://docs.python.org/3/library/asyncio.html
|
| 91 |
+
.. _Trio: https://github.com/python-trio/trio
|
| 92 |
+
.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency
|
| 93 |
+
.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning
|
| 94 |
+
.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs
|
| 95 |
+
.. _pytest: https://docs.pytest.org/en/latest/
|
| 96 |
+
.. _functools: https://docs.python.org/3/library/functools.html
|
| 97 |
+
.. _Hypothesis: https://hypothesis.works/
|
| 98 |
+
|
| 99 |
+
Security contact information
|
| 100 |
+
----------------------------
|
| 101 |
+
|
| 102 |
+
To report a security vulnerability, please use the `Tidelift security contact`_.
|
| 103 |
+
Tidelift will coordinate the fix and disclosure.
|
| 104 |
+
|
| 105 |
+
.. _Tidelift security contact: https://tidelift.com/security
|
venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/RECORD
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
anyio-4.13.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
| 2 |
+
anyio-4.13.0.dist-info/METADATA,sha256=F0EYfiPlmTRwmJN2JktNxJg1GNnl0wHhzOWmz7pFvjM,4513
|
| 3 |
+
anyio-4.13.0.dist-info/RECORD,,
|
| 4 |
+
anyio-4.13.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
| 5 |
+
anyio-4.13.0.dist-info/entry_points.txt,sha256=_d6Yu6uiaZmNe0CydowirE9Cmg7zUL2g08tQpoS3Qvc,39
|
| 6 |
+
anyio-4.13.0.dist-info/licenses/LICENSE,sha256=U2GsncWPLvX9LpsJxoKXwX8ElQkJu8gCO9uC6s8iwrA,1081
|
| 7 |
+
anyio-4.13.0.dist-info/top_level.txt,sha256=QglSMiWX8_5dpoVAEIHdEYzvqFMdSYWmCj6tYw2ITkQ,6
|
| 8 |
+
anyio/__init__.py,sha256=7iDVqMUprUuKNY91FuoKqayAhR-OY136YDPI6P78HHk,6170
|
| 9 |
+
anyio/__pycache__/__init__.cpython-312.pyc,,
|
| 10 |
+
anyio/__pycache__/from_thread.cpython-312.pyc,,
|
| 11 |
+
anyio/__pycache__/functools.cpython-312.pyc,,
|
| 12 |
+
anyio/__pycache__/lowlevel.cpython-312.pyc,,
|
| 13 |
+
anyio/__pycache__/pytest_plugin.cpython-312.pyc,,
|
| 14 |
+
anyio/__pycache__/to_interpreter.cpython-312.pyc,,
|
| 15 |
+
anyio/__pycache__/to_process.cpython-312.pyc,,
|
| 16 |
+
anyio/__pycache__/to_thread.cpython-312.pyc,,
|
| 17 |
+
anyio/_backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 18 |
+
anyio/_backends/__pycache__/__init__.cpython-312.pyc,,
|
| 19 |
+
anyio/_backends/__pycache__/_asyncio.cpython-312.pyc,,
|
| 20 |
+
anyio/_backends/__pycache__/_trio.cpython-312.pyc,,
|
| 21 |
+
anyio/_backends/_asyncio.py,sha256=kuqlg2sBUsFdgY80xSDAw60Gx_4WNCl9iSL5XlY6lCU,99476
|
| 22 |
+
anyio/_backends/_trio.py,sha256=l9U-TsKRxzmTQxSMvOhn0bNeFn_iRx3Ho30jvR5Bdu0,41366
|
| 23 |
+
anyio/_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 24 |
+
anyio/_core/__pycache__/__init__.cpython-312.pyc,,
|
| 25 |
+
anyio/_core/__pycache__/_asyncio_selector_thread.cpython-312.pyc,,
|
| 26 |
+
anyio/_core/__pycache__/_contextmanagers.cpython-312.pyc,,
|
| 27 |
+
anyio/_core/__pycache__/_eventloop.cpython-312.pyc,,
|
| 28 |
+
anyio/_core/__pycache__/_exceptions.cpython-312.pyc,,
|
| 29 |
+
anyio/_core/__pycache__/_fileio.cpython-312.pyc,,
|
| 30 |
+
anyio/_core/__pycache__/_resources.cpython-312.pyc,,
|
| 31 |
+
anyio/_core/__pycache__/_signals.cpython-312.pyc,,
|
| 32 |
+
anyio/_core/__pycache__/_sockets.cpython-312.pyc,,
|
| 33 |
+
anyio/_core/__pycache__/_streams.cpython-312.pyc,,
|
| 34 |
+
anyio/_core/__pycache__/_subprocesses.cpython-312.pyc,,
|
| 35 |
+
anyio/_core/__pycache__/_synchronization.cpython-312.pyc,,
|
| 36 |
+
anyio/_core/__pycache__/_tasks.cpython-312.pyc,,
|
| 37 |
+
anyio/_core/__pycache__/_tempfile.cpython-312.pyc,,
|
| 38 |
+
anyio/_core/__pycache__/_testing.cpython-312.pyc,,
|
| 39 |
+
anyio/_core/__pycache__/_typedattr.cpython-312.pyc,,
|
| 40 |
+
anyio/_core/_asyncio_selector_thread.py,sha256=2PdxFM3cs02Kp6BSppbvmRT7q7asreTW5FgBxEsflBo,5626
|
| 41 |
+
anyio/_core/_contextmanagers.py,sha256=YInBCabiEeS-UaP_Jdxa1CaFC71ETPW8HZTHIM8Rsc8,7215
|
| 42 |
+
anyio/_core/_eventloop.py,sha256=c2EdcBX-xnKwxPcC4Pjn3_qG9I-x4IWFO2R9RqCGjM4,6448
|
| 43 |
+
anyio/_core/_exceptions.py,sha256=Y3aq-Wxd7Q2HqwSg7nZPvRsHEuGazv_qeet6gqEBdPk,4407
|
| 44 |
+
anyio/_core/_fileio.py,sha256=CKi1gFNiW2G4knWeBE7He7-rptQwgYjDUWfG8DSlvLs,25665
|
| 45 |
+
anyio/_core/_resources.py,sha256=NbmU5O5UX3xEyACnkmYX28Fmwdl-f-ny0tHym26e0w0,435
|
| 46 |
+
anyio/_core/_signals.py,sha256=mjTBB2hTKNPRlU0IhnijeQedpWOGERDiMjSlJQsFrug,1016
|
| 47 |
+
anyio/_core/_sockets.py,sha256=RBXHcUqZt5gg_-OOfgHVv8uq2FSKk1uVUzTdpjBoI1o,34977
|
| 48 |
+
anyio/_core/_streams.py,sha256=FczFwIgDpnkK0bODWJXMpsUJYdvAD04kaUaGzJU8DK0,1806
|
| 49 |
+
anyio/_core/_subprocesses.py,sha256=tkmkPKEkEaiMD8C9WRZBlmgjOYRDRbZdte6e-unay2E,7916
|
| 50 |
+
anyio/_core/_synchronization.py,sha256=9G3fvRsPNrrWJ_Z6gD_80wXq8I8qgAyhwM8PvHQnT2c,21061
|
| 51 |
+
anyio/_core/_tasks.py,sha256=pVB7K6AAulzUM8YgXAeqNZG44nSyZ1bYJjH8GznC00I,5435
|
| 52 |
+
anyio/_core/_tempfile.py,sha256=jE2w59FRF3yRo4vjkjfZF2YcqsBZvc66VWRwrJGDYGk,19624
|
| 53 |
+
anyio/_core/_testing.py,sha256=u7MPqGXwpTxqI7hclSdNA30z2GH1Nw258uwKvy_RfBg,2340
|
| 54 |
+
anyio/_core/_typedattr.py,sha256=P4ozZikn3-DbpoYcvyghS_FOYAgbmUxeoU8-L_07pZM,2508
|
| 55 |
+
anyio/abc/__init__.py,sha256=6mWhcl_pGXhrgZVHP_TCfMvIXIOp9mroEFM90fYCU_U,2869
|
| 56 |
+
anyio/abc/__pycache__/__init__.cpython-312.pyc,,
|
| 57 |
+
anyio/abc/__pycache__/_eventloop.cpython-312.pyc,,
|
| 58 |
+
anyio/abc/__pycache__/_resources.cpython-312.pyc,,
|
| 59 |
+
anyio/abc/__pycache__/_sockets.cpython-312.pyc,,
|
| 60 |
+
anyio/abc/__pycache__/_streams.cpython-312.pyc,,
|
| 61 |
+
anyio/abc/__pycache__/_subprocesses.cpython-312.pyc,,
|
| 62 |
+
anyio/abc/__pycache__/_tasks.cpython-312.pyc,,
|
| 63 |
+
anyio/abc/__pycache__/_testing.cpython-312.pyc,,
|
| 64 |
+
anyio/abc/_eventloop.py,sha256=39lYnmtvoHaZw22sWBKOTA_zv7bamOnr8O49PqgDXdw,10629
|
| 65 |
+
anyio/abc/_resources.py,sha256=DrYvkNN1hH6Uvv5_5uKySvDsnknGVDe8FCKfko0VtN8,783
|
| 66 |
+
anyio/abc/_sockets.py,sha256=OmVDrfemVvF9c5K1tpBgQyV6fn5v0XyCExLAqBOGz9o,13124
|
| 67 |
+
anyio/abc/_streams.py,sha256=HYvna1iZbWcwLROTO6IhLX79RTRLPShZMWe0sG1q54I,7481
|
| 68 |
+
anyio/abc/_subprocesses.py,sha256=cumAPJTktOQtw63IqG0lDpyZqu_l1EElvQHMiwJgL08,2067
|
| 69 |
+
anyio/abc/_tasks.py,sha256=KC7wrciE48AINOI-AhPutnFhe1ewfP7QnamFlDzqesQ,3721
|
| 70 |
+
anyio/abc/_testing.py,sha256=tBJUzkSfOXJw23fe8qSJ03kJlShOYjjaEyFB6k6MYT8,1821
|
| 71 |
+
anyio/from_thread.py,sha256=L-0w1HxJ6BSb-KuVi57k5Tkc3yzQrx3QK5tAxMPcY-0,19141
|
| 72 |
+
anyio/functools.py,sha256=5AWM1iYTKkTzptvUhQDdLSh5GvbBW-vcs-SAUfIfA9A,12076
|
| 73 |
+
anyio/lowlevel.py,sha256=AyKLVK3LaWSoK39LkCKxE4_GDMLKZBNqTrLUgk63y80,5158
|
| 74 |
+
anyio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 75 |
+
anyio/pytest_plugin.py,sha256=t6h4KJstqIxfxwTZ1YO8vpUVuB99nfCLltn0NHfatHo,12775
|
| 76 |
+
anyio/streams/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
| 77 |
+
anyio/streams/__pycache__/__init__.cpython-312.pyc,,
|
| 78 |
+
anyio/streams/__pycache__/buffered.cpython-312.pyc,,
|
| 79 |
+
anyio/streams/__pycache__/file.cpython-312.pyc,,
|
| 80 |
+
anyio/streams/__pycache__/memory.cpython-312.pyc,,
|
| 81 |
+
anyio/streams/__pycache__/stapled.cpython-312.pyc,,
|
| 82 |
+
anyio/streams/__pycache__/text.cpython-312.pyc,,
|
| 83 |
+
anyio/streams/__pycache__/tls.cpython-312.pyc,,
|
| 84 |
+
anyio/streams/buffered.py,sha256=2R3PeJhe4EXrdYqz44Y6-Eg9R6DrmlsYrP36Ir43-po,6263
|
| 85 |
+
anyio/streams/file.py,sha256=msnrotVKGMQomUu_Rj2qz9MvIdUp6d3JGr7MOEO8kV4,4428
|
| 86 |
+
anyio/streams/memory.py,sha256=F0zwzvFJKAhX_LRZGoKzzqDC2oMM-f-yyTBrEYEGOaU,10740
|
| 87 |
+
anyio/streams/stapled.py,sha256=T8Xqwf8K6EgURPxbt1N4i7A8BAk-gScv-GRhjLXIf_o,4390
|
| 88 |
+
anyio/streams/text.py,sha256=BcVAGJw1VRvtIqnv-o0Rb0pwH7p8vwlvl21xHq522ag,5765
|
| 89 |
+
anyio/streams/tls.py,sha256=DQVkXUvsTEYKkBO8dlVU7j_5H8QOtLy4sGi1Wrjqevo,15303
|
| 90 |
+
anyio/to_interpreter.py,sha256=_mLngrMy97TMR6VbW4Y6YzDUk9ZuPcQMPlkuyRh3C9k,7100
|
| 91 |
+
anyio/to_process.py,sha256=J7gAA_YOuoHqnpDAf5fm1Qu6kOmTzdFbiDNvnV755vk,9798
|
| 92 |
+
anyio/to_thread.py,sha256=f6h_k2d743GBv9FhAnhM_YpTvWgIrzBy9cOE0eJ1UJw,2693
|
venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/WHEEL
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Wheel-Version: 1.0
|
| 2 |
+
Generator: setuptools (82.0.1)
|
| 3 |
+
Root-Is-Purelib: true
|
| 4 |
+
Tag: py3-none-any
|
| 5 |
+
|
venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/entry_points.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[pytest11]
|
| 2 |
+
anyio = anyio.pytest_plugin
|
venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/licenses/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The MIT License (MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2018 Alex Grönholm
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
| 6 |
+
this software and associated documentation files (the "Software"), to deal in
|
| 7 |
+
the Software without restriction, including without limitation the rights to
|
| 8 |
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
| 9 |
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
| 10 |
+
subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 17 |
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 18 |
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 19 |
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 20 |
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
venv/lib/python3.12/site-packages/anyio-4.13.0.dist-info/top_level.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
anyio
|
venv/lib/python3.12/site-packages/anyio/__init__.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from ._core._contextmanagers import AsyncContextManagerMixin as AsyncContextManagerMixin
|
| 4 |
+
from ._core._contextmanagers import ContextManagerMixin as ContextManagerMixin
|
| 5 |
+
from ._core._eventloop import current_time as current_time
|
| 6 |
+
from ._core._eventloop import get_all_backends as get_all_backends
|
| 7 |
+
from ._core._eventloop import get_available_backends as get_available_backends
|
| 8 |
+
from ._core._eventloop import get_cancelled_exc_class as get_cancelled_exc_class
|
| 9 |
+
from ._core._eventloop import run as run
|
| 10 |
+
from ._core._eventloop import sleep as sleep
|
| 11 |
+
from ._core._eventloop import sleep_forever as sleep_forever
|
| 12 |
+
from ._core._eventloop import sleep_until as sleep_until
|
| 13 |
+
from ._core._exceptions import BrokenResourceError as BrokenResourceError
|
| 14 |
+
from ._core._exceptions import BrokenWorkerInterpreter as BrokenWorkerInterpreter
|
| 15 |
+
from ._core._exceptions import BrokenWorkerProcess as BrokenWorkerProcess
|
| 16 |
+
from ._core._exceptions import BusyResourceError as BusyResourceError
|
| 17 |
+
from ._core._exceptions import ClosedResourceError as ClosedResourceError
|
| 18 |
+
from ._core._exceptions import ConnectionFailed as ConnectionFailed
|
| 19 |
+
from ._core._exceptions import DelimiterNotFound as DelimiterNotFound
|
| 20 |
+
from ._core._exceptions import EndOfStream as EndOfStream
|
| 21 |
+
from ._core._exceptions import IncompleteRead as IncompleteRead
|
| 22 |
+
from ._core._exceptions import NoEventLoopError as NoEventLoopError
|
| 23 |
+
from ._core._exceptions import RunFinishedError as RunFinishedError
|
| 24 |
+
from ._core._exceptions import TypedAttributeLookupError as TypedAttributeLookupError
|
| 25 |
+
from ._core._exceptions import WouldBlock as WouldBlock
|
| 26 |
+
from ._core._fileio import AsyncFile as AsyncFile
|
| 27 |
+
from ._core._fileio import Path as Path
|
| 28 |
+
from ._core._fileio import open_file as open_file
|
| 29 |
+
from ._core._fileio import wrap_file as wrap_file
|
| 30 |
+
from ._core._resources import aclose_forcefully as aclose_forcefully
|
| 31 |
+
from ._core._signals import open_signal_receiver as open_signal_receiver
|
| 32 |
+
from ._core._sockets import TCPConnectable as TCPConnectable
|
| 33 |
+
from ._core._sockets import UNIXConnectable as UNIXConnectable
|
| 34 |
+
from ._core._sockets import as_connectable as as_connectable
|
| 35 |
+
from ._core._sockets import connect_tcp as connect_tcp
|
| 36 |
+
from ._core._sockets import connect_unix as connect_unix
|
| 37 |
+
from ._core._sockets import create_connected_udp_socket as create_connected_udp_socket
|
| 38 |
+
from ._core._sockets import (
|
| 39 |
+
create_connected_unix_datagram_socket as create_connected_unix_datagram_socket,
|
| 40 |
+
)
|
| 41 |
+
from ._core._sockets import create_tcp_listener as create_tcp_listener
|
| 42 |
+
from ._core._sockets import create_udp_socket as create_udp_socket
|
| 43 |
+
from ._core._sockets import create_unix_datagram_socket as create_unix_datagram_socket
|
| 44 |
+
from ._core._sockets import create_unix_listener as create_unix_listener
|
| 45 |
+
from ._core._sockets import getaddrinfo as getaddrinfo
|
| 46 |
+
from ._core._sockets import getnameinfo as getnameinfo
|
| 47 |
+
from ._core._sockets import notify_closing as notify_closing
|
| 48 |
+
from ._core._sockets import wait_readable as wait_readable
|
| 49 |
+
from ._core._sockets import wait_socket_readable as wait_socket_readable
|
| 50 |
+
from ._core._sockets import wait_socket_writable as wait_socket_writable
|
| 51 |
+
from ._core._sockets import wait_writable as wait_writable
|
| 52 |
+
from ._core._streams import create_memory_object_stream as create_memory_object_stream
|
| 53 |
+
from ._core._subprocesses import open_process as open_process
|
| 54 |
+
from ._core._subprocesses import run_process as run_process
|
| 55 |
+
from ._core._synchronization import CapacityLimiter as CapacityLimiter
|
| 56 |
+
from ._core._synchronization import (
|
| 57 |
+
CapacityLimiterStatistics as CapacityLimiterStatistics,
|
| 58 |
+
)
|
| 59 |
+
from ._core._synchronization import Condition as Condition
|
| 60 |
+
from ._core._synchronization import ConditionStatistics as ConditionStatistics
|
| 61 |
+
from ._core._synchronization import Event as Event
|
| 62 |
+
from ._core._synchronization import EventStatistics as EventStatistics
|
| 63 |
+
from ._core._synchronization import Lock as Lock
|
| 64 |
+
from ._core._synchronization import LockStatistics as LockStatistics
|
| 65 |
+
from ._core._synchronization import ResourceGuard as ResourceGuard
|
| 66 |
+
from ._core._synchronization import Semaphore as Semaphore
|
| 67 |
+
from ._core._synchronization import SemaphoreStatistics as SemaphoreStatistics
|
| 68 |
+
from ._core._tasks import TASK_STATUS_IGNORED as TASK_STATUS_IGNORED
|
| 69 |
+
from ._core._tasks import CancelScope as CancelScope
|
| 70 |
+
from ._core._tasks import create_task_group as create_task_group
|
| 71 |
+
from ._core._tasks import current_effective_deadline as current_effective_deadline
|
| 72 |
+
from ._core._tasks import fail_after as fail_after
|
| 73 |
+
from ._core._tasks import move_on_after as move_on_after
|
| 74 |
+
from ._core._tempfile import NamedTemporaryFile as NamedTemporaryFile
|
| 75 |
+
from ._core._tempfile import SpooledTemporaryFile as SpooledTemporaryFile
|
| 76 |
+
from ._core._tempfile import TemporaryDirectory as TemporaryDirectory
|
| 77 |
+
from ._core._tempfile import TemporaryFile as TemporaryFile
|
| 78 |
+
from ._core._tempfile import gettempdir as gettempdir
|
| 79 |
+
from ._core._tempfile import gettempdirb as gettempdirb
|
| 80 |
+
from ._core._tempfile import mkdtemp as mkdtemp
|
| 81 |
+
from ._core._tempfile import mkstemp as mkstemp
|
| 82 |
+
from ._core._testing import TaskInfo as TaskInfo
|
| 83 |
+
from ._core._testing import get_current_task as get_current_task
|
| 84 |
+
from ._core._testing import get_running_tasks as get_running_tasks
|
| 85 |
+
from ._core._testing import wait_all_tasks_blocked as wait_all_tasks_blocked
|
| 86 |
+
from ._core._typedattr import TypedAttributeProvider as TypedAttributeProvider
|
| 87 |
+
from ._core._typedattr import TypedAttributeSet as TypedAttributeSet
|
| 88 |
+
from ._core._typedattr import typed_attribute as typed_attribute
|
| 89 |
+
|
| 90 |
+
# Re-export imports so they look like they live directly in this package
|
| 91 |
+
for __value in list(locals().values()):
|
| 92 |
+
if getattr(__value, "__module__", "").startswith("anyio."):
|
| 93 |
+
__value.__module__ = __name__
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
del __value
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
def __getattr__(attr: str) -> type[BrokenWorkerInterpreter]:
|
| 100 |
+
"""Support deprecated aliases."""
|
| 101 |
+
if attr == "BrokenWorkerIntepreter":
|
| 102 |
+
import warnings
|
| 103 |
+
|
| 104 |
+
warnings.warn(
|
| 105 |
+
"The 'BrokenWorkerIntepreter' alias is deprecated, use 'BrokenWorkerInterpreter' instead.",
|
| 106 |
+
DeprecationWarning,
|
| 107 |
+
stacklevel=2,
|
| 108 |
+
)
|
| 109 |
+
return BrokenWorkerInterpreter
|
| 110 |
+
|
| 111 |
+
raise AttributeError(f"module {__name__!r} has no attribute {attr!r}")
|
venv/lib/python3.12/site-packages/anyio/__pycache__/__init__.cpython-312.pyc
ADDED
|
Binary file (4.65 kB). View file
|
|
|
venv/lib/python3.12/site-packages/anyio/__pycache__/from_thread.cpython-312.pyc
ADDED
|
Binary file (25.9 kB). View file
|
|
|
venv/lib/python3.12/site-packages/anyio/__pycache__/functools.cpython-312.pyc
ADDED
|
Binary file (16.6 kB). View file
|
|
|
venv/lib/python3.12/site-packages/anyio/__pycache__/lowlevel.cpython-312.pyc
ADDED
|
Binary file (8.01 kB). View file
|
|
|
venv/lib/python3.12/site-packages/anyio/__pycache__/pytest_plugin.cpython-312.pyc
ADDED
|
Binary file (16.8 kB). View file
|
|
|
venv/lib/python3.12/site-packages/anyio/__pycache__/to_interpreter.cpython-312.pyc
ADDED
|
Binary file (10.4 kB). View file
|
|
|