diff --git a/docs/en/mkdocs.yml b/docs/en/mkdocs.yml index e9a639d0b..2eedb2960 100644 --- a/docs/en/mkdocs.yml +++ b/docs/en/mkdocs.yml @@ -6,7 +6,7 @@ theme: name: material custom_dir: ../en/overrides palette: - - media: "(prefers-color-scheme)" + - media: (prefers-color-scheme) toggle: icon: material/lightbulb-auto name: Switch to light mode @@ -27,7 +27,6 @@ theme: features: - content.code.annotate - content.code.copy - # - content.code.select - content.footnote.tooltips - content.tabs.link - content.tooltips @@ -35,7 +34,6 @@ theme: - navigation.indexes - navigation.instant - navigation.instant.prefetch - # - navigation.instant.preview - navigation.instant.progress - navigation.path - navigation.tabs @@ -46,7 +44,6 @@ theme: - search.share - search.suggest - toc.follow - icon: repo: fontawesome/brands/github-alt logo: img/icon-white.svg @@ -55,11 +52,7 @@ theme: repo_name: fastapi/fastapi repo_url: https://github.com/fastapi/fastapi plugins: - # Material for MkDocs - search: - # Configured in mkdocs.insiders.yml - # social: - # Other plugins + search: null macros: include_yaml: - external_links: ../en/data/external_links.yml @@ -103,7 +96,6 @@ plugins: signature_crossrefs: true show_symbol_type_heading: true show_symbol_type_toc: true - nav: - FastAPI: index.md - features.md @@ -258,33 +250,27 @@ nav: - benchmarks.md - management.md - release-notes.md - markdown_extensions: - # Python Markdown - abbr: - attr_list: - footnotes: - md_in_html: - tables: + abbr: null + attr_list: null + footnotes: null + md_in_html: null + tables: null toc: permalink: true - - # Python Markdown Extensions - pymdownx.betterem: - pymdownx.caret: + pymdownx.betterem: null + pymdownx.caret: null pymdownx.highlight: line_spans: __span - pymdownx.inlinehilite: - pymdownx.keys: - pymdownx.mark: + pymdownx.inlinehilite: null + pymdownx.keys: null + pymdownx.mark: null pymdownx.superfences: custom_fences: - name: mermaid class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tilde: - - # pymdownx blocks + format: !!python/name:pymdownx.superfences.fence_code_format '' + pymdownx.tilde: null pymdownx.blocks.admonition: types: - note @@ -295,17 +281,13 @@ markdown_extensions: - tip - hint - warning - # Custom types - info - check - pymdownx.blocks.details: + pymdownx.blocks.details: null pymdownx.blocks.tab: - alternate_style: True - - # Other extensions - mdx_include: - markdown_include_variants: - + alternate_style: true + mdx_include: null + markdown_include_variants: null extra: analytics: provider: google @@ -313,16 +295,14 @@ extra: feedback: title: Was this page helpful? ratings: - - icon: material/emoticon-happy-outline - name: This page was helpful - data: 1 - note: >- - Thanks for your feedback! - - icon: material/emoticon-sad-outline - name: This page could be improved - data: 0 - note: >- - Thanks for your feedback! + - icon: material/emoticon-happy-outline + name: This page was helpful + data: 1 + note: Thanks for your feedback! + - icon: material/emoticon-sad-outline + name: This page could be improved + data: 0 + note: Thanks for your feedback! social: - icon: fontawesome/brands/github-alt link: https://github.com/fastapi/fastapi @@ -338,7 +318,6 @@ extra: link: https://medium.com/@tiangolo - icon: fontawesome/solid/globe link: https://tiangolo.com - alternate: - link: / name: en - English @@ -366,6 +345,8 @@ extra: name: ja - 日本語 - link: /ko/ name: ko - 한국어 + - link: /ml/ + name: ml - മലയാളം - link: /nl/ name: nl - Nederlands - link: /pl/ @@ -390,14 +371,11 @@ extra: name: zh-hant - 繁體中文 - link: /em/ name: 😉 - extra_css: - css/termynal.css - css/custom.css - extra_javascript: - js/termynal.js - js/custom.js - hooks: - ../../scripts/mkdocs_hooks.py diff --git a/docs/ml/docs/index.md b/docs/ml/docs/index.md new file mode 100644 index 000000000..9a4b4d95d --- /dev/null +++ b/docs/ml/docs/index.md @@ -0,0 +1,496 @@ +# ഫാസ്റ്റ് API + + + +

+ ഫാസ്റ്റ് API +

+

+ ഫാസ്റ്റ് API ഫ്രെയിംവർക്ക്, ഉയർന്ന പ്രകടനം, പഠിക്കാൻ എളുപ്പം, നിർമ്മാണത്തിന് തയ്യാറാണ് +

+

+ + Test + + + Coverage + + + Package version + + + Supported Python versions + +

+ +--- + +**ഡോക്യുമെൻ്റേഷൻ**: https://fastapi.tiangolo.com + +**സോഴ്സ് കോഡ്**: https://github.com/fastapi/fastapi + +--- + + +ഫാസ്റ്റ് API ഒരു ആധുനികവും വേഗതയേറിയതുമായ (ഉയർന്ന പ്രകടനക്ഷമതയുള്ള) വെബ് ഫ്രെയിംവർക്ക് ആണ്, ഇത് സ്റ്റാൻഡേർഡ് പൈത്തൺ ടൈപ്പ് ഹിന്റ്സ് അടിസ്ഥാനമാക്കി പൈത്തണിൽ APIകൾ നിർമ്മിക്കാൻ വികസിപ്പിച്ചെടുത്തിരിക്കുന്നു. + +പ്രധാന സവിശേഷതകൾ ഇവയാണ്: + +* **വേഗതയുള്ള**: വളരെ ഉയർന്ന പ്രകടനം, **NodeJS**, **Go** എന്നിവയ്ക്ക് തുല്യമായി (സ്റ്റാർലെറ്റിനും പൈഡൻ്റിക്കിനും നന്ദി). [ ലഭ്യമായ ഏറ്റവും വേഗമേറിയ പൈത്തൺ ഫ്രെയിംവർക്കുകളിൽ ഒന്നു ](#പർഫോർമൻസ്). +* **വേഗത്തിൽ കോഡ് ചെയ്യാം**: സവിശേഷതകൾ വികസിപ്പിക്കുന്നതിനുള്ള വേഗത ഏകദേശം 200% മുതൽ 300% വരെ വർദ്ധിപ്പിക്കുന്നു. * +* **കുറവ് ബഗുകൾ**: മാനുഷിക (ഡെവലപ്പർ) പ്രേരിത പിശകുകളുടെ ഏകദേശം 40% കുറയ്ക്കുന്നു. * +* **അവബോധജന്യമായ**: മികച്ച എഡിറ്റർ പിന്തുണ. പൂർത്തീകരണം എല്ലായിടത്തും. ചുരുങ്ങിയ സമയത്തിൽ ഡീബഗ്ഗിംഗ്. +* **എളുപ്പം**: എളുപ്പത്തിൽ ഉപയോഗിക്കാനും പഠിക്കാനും രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്. കുറഞ്ഞ സമയം കൊണ്ട് ഡോക്യുമെന്റേഷൻ വായിക്കാം. +* **ലഘു**: കോഡ് ഡ്യൂപ്ലിക്കേഷൻ കുറയ്ക്കുക. ഓരോ പാരാമീറ്റർ പ്രഖ്യാപനത്തിൽ നിന്നും ഒന്നിലധികം സവിശേഷതകൾ. കുറച്ച് ബഗുകൾ. +* **കരുത്തുള്ള**: ഓട്ടോമാറ്റിക് ഇൻ്ററാക്ടീവ് ഡോക്യുമെൻ്റേഷൻ ഉപയോഗിച്ച് നിർമ്മാണത്തിന് തയ്യാറായ കോഡ് ലഭിക്കും. +* **മാനദണ്ഡങ്ങൾ അടിസ്ഥാനമാക്കിയുള്ളത്**: API-കൾക്കുള്ള ഓപ്പൺ സ്റ്റാൻഡേർഡുകളെ അടിസ്ഥാനമാക്കി (പൂർണമായും പൊരുത്തപ്പെടുന്നു): ഓപ്പൺ API (മുമ്പ് സ്വാഗർ എന്നറിയപ്പെട്ടിരുന്നു) and JSON സ്കീമ. + +* പ്രൊഡക്ഷൻ ആപ്ലിക്കേഷനുകൾ വികസിപ്പിക്കുന്ന ഒരു ഇൻറേണൽ ഡെവലപ്‌മെൻറ് ടീമിലെ ടെസ്റ്റുകളെ അടിസ്ഥാനമാക്കിയുള്ള മൂല്യനിർണ്ണയം. " + +## Sponsors + + + +{% if sponsors %} +{% for sponsor in sponsors.gold -%} + +{% endfor -%} +{%- for sponsor in sponsors.silver -%} + +{% endfor %} +{% endif %} + + + +Other sponsors + +## അഭിപ്രായങ്ങൾ + +"_[...] ഞാൻ ഇക്കാലത്ത് **ഫാസ്റ്റ് API** ധാരാളം ഉപയോഗിക്കുന്നുണ്ട്. [...] മൈക്രോസോഫ്റ്റിലെ എന്റെ ടീമിന്റെ എല്ലാ **ML സേവനങ്ങൾക്കും** ഇത് ഉപയോഗിക്കാൻ ഞാൻ പദ്ധതിയിടുന്നു. അവയിൽ ചിലത് കോർ **വിൻഡോസ്** ഉൽപ്പന്നത്തിലും ചില **ഓഫീസ്** ഉൽപ്പന്നങ്ങളിലും സംയോജിപ്പിക്കപ്പെടുന്നു._" + +
കബീർ ഖാൻ - മൈക്രോസോഫ്റ്റ് (റഫറൻസ്)
+ +--- + +"_**പ്രവചനങ്ങൾ** ലഭിക്കുന്നതിനായി അന്വേഷിക്കാൻ കഴിയുന്ന ഒരു **REST** സെർവർ നിർമ്മിക്കുന്നതിനായി ഞങ്ങൾ **ഫാസ്റ്റ് API** ലൈബ്രറി സ്വീകരിച്ചു. [ലുഡ്‌വിഗിന്]_" + +
പൈറോ മോളിന, യാരോസ്ലാവ് ഡുഡിൻ, സായ് സുമന്ത് മിര്യാല - യൂബർ (റഫറൻസ്)
+ +--- + +"_**നെറ്റ്ഫ്ലിക്സ്** ഞങ്ങളുടെ **ക്രൈസിസ് മാനേജ്മെന്റ്** ഓർക്കസ്ട്രേഷൻ ഫ്രെയിംവർക്കിന്റെ ഓപ്പൺ സോഴ്‌സ് റിലീസ് പ്രഖ്യാപിക്കുന്നതിൽ സന്തോഷമുണ്ട്: **ഡിസ്പാച്ച്**! [**ഫാസ്റ്റ് API** ഉപയോഗിച്ച് നിർമ്മിച്ചത്]_" + +
കെവിൻ ഗ്ലിസൻ, മാർക്ക് വിലനോവ, ഫോറസ്റ്റ് മോൺസെൻ - നെറ്റ്ഫ്ലിക്സ് (റഫറൻസ്)
+ +--- + +"_ഫാസ്റ്റ് API വളരെ ആവേശകരമാണ്. ഇത് വളരെ രസകരമാണ്!_" + +
ബ്രയാൻ ഒക്കെൻ - പൈത്തൺ ബൈറ്റ് പോഡ്‌കാസ്റ്റ് അവതാരകൻ (റഫറൻസ്)
+ +--- + +"_സത്യം പറഞ്ഞാൽ, നിങ്ങൾ നിർമ്മിച്ചത് വളരെ ഉറച്ചതും മിനുസപ്പെടുത്തിയതുമായി തോന്നുന്നു. പല തരത്തിൽ, **ആലിംഗനം** ആകണമെന്ന് ഞാൻ ആഗ്രഹിച്ചത് അതാണ് - ആരെങ്കിലും അത് നിർമ്മിക്കുന്നത് കാണുന്നത് ശരിക്കും പ്രചോദനം നൽകുന്നു._" + +
തിമോത്തി ക്രോസ്ലി - ആലിംഗനം creator (റഫറൻസ്)
+ +--- + +"_റെസ്റ്റ് API-കൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു **ആധുനിക ഫ്രെയിംവർക്ക്** പഠിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, **ഫാസ്റ്റ് API** പരിശോധിക്കുക [...] വേഗതയുള്ളതും ഉപയോഗിക്കാൻ എളുപ്പമുള്ളതും പഠിക്കാൻ എളുപ്പവുമാണ് [...]_" + +"_ഞങ്ങളുടെ **API-കൾക്കായി **ഫാസ്റ്റ് API**-ലേക്ക് മാറിയിരിക്കുന്നു** [...] നിങ്ങൾക്ക് ഇത് ഇഷ്ടപ്പെടുമെന്ന് ഞാൻ കരുതുന്നു [...]_" + +
ഇനെസ് മൊണ്ടാനി - മാത്യു ഹോണിബൽ - എക്സ്പ്ലോഷൻ AI സ്ഥാപകർ - സ്പേസി സ്രഷ്ടാക്കൾ (റഫറൻസ്) - (റഫറൻസ്)
+ +--- + +"_ആരെങ്കിലും ഒരു പ്രൊഡക്ഷൻ പൈത്തൺ API നിർമ്മിക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, ഞാൻ **FastAPI** ശുപാർശ ചെയ്യുന്നു. ഇത് **മനോഹരമായി രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നു**, **ഉപയോഗിക്കാൻ ലളിതമാണ്**, **ഉയർന്ന തോതിൽ സ്കെയിലബിൾ**, ഇത് ഞങ്ങളുടെ API ഫസ്റ്റ് ഡെവലപ്‌മെന്റ് തന്ത്രത്തിലെ **പ്രധാന ഘടകമായി** മാറിയിരിക്കുന്നു കൂടാതെ ഞങ്ങളുടെ വെർച്വൽ TAC എഞ്ചിനീയർ പോലുള്ള നിരവധി ഓട്ടോമേഷനുകളും സേവനങ്ങളും നയിക്കുന്നു._" + +
ഡിയോൺ പിൽസ്ബറി - സിസ്കോ (റഫറൻസ്)
+ +--- + +## **ടൈപ്പർ**, CLI-കളുടെ ഫാസ്റ്റ് API + + + +വെബ് API-യ്ക്ക് പകരം ടെർമിനലിൽ ഉപയോഗിക്കുന്നതിനായി CLI ആപ്പ് നിർമ്മിക്കുകയാണെങ്കിൽ, **Typer** പരിശോധിക്കുക. + +**ടൈപ്പർ** എന്നത് ഫാസ്റ്റ് API യുടെ ഇളയ സഹോദരനാണ്. CLI-കളുടെ **ഫാസ്റ്റ് API** ആകാനാണ് ഇത് ഉദ്ദേശിക്കുന്നത്. ⌨️ 🚀 + +## ആവശ്യമായത് + +ഫാസ്റ്റ് API ഭീമന്മാരുടെ തോളിൽ നിൽക്കുന്നു: + +* സ്റ്റാർലെറ്റ് വെബ് ഭാഗങ്ങൾക്കായി. +* പൈഡാൻറിക് ഡാറ്റ ഭാഗങ്ങൾക്കായി. + +## ഇൻസ്റ്റലേഷൻ + +ഒരു വെർച്വൽ എൻവയോൺമെന്റ് സൃഷ്ടിച്ച് സജീവമാക്കുക, തുടർന്ന് ഫാസ്റ്റ് API ഇൻസ്റ്റാൾ ചെയ്യുക: +
+ +```console +$ pip install "fastapi[standard]" + +---> 100% +``` + +
+ +**കുറിപ്പ്**: എല്ലാ ടെർമിനലുകളിലും ഇത് പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ ഉദ്ധരണികളിൽ `"fastapi[standard]"` എന്ന് ചേർത്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക. + +## ഉദാഹരണം + +### സൃഷ്ടിക്കൂ + +* `main.py` എന്ന ഫയൽ സൃഷ്ടിക്കുക: + +```Python +from typing import Union + +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} +``` + +
+Or use async def... + +നിങ്ങളുടെ കോഡ് `async` / `await` ഉപയോഗിക്കുകയാണെങ്കിൽ, `async def` ഉപയോഗിക്കുക: + +```Python hl_lines="9 14" +from typing import Union + +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +async def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +async def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} +``` + +**കുറിപ്പ്**: + +നിങ്ങൾക്ക് അറിയില്ലെങ്കിൽ, ഡോക്യുമെന്റിലെ `async` ഉം `wait` ഉം എന്നതിനെക്കുറിച്ചുള്ള _"തിരക്കിലാണ്?"_ വിഭാഗം പരിശോധിക്കുക. + +
+ +### പ്രവർത്തിപ്പിക്കുക + +സെർവർ ഇതുപയോഗിച്ച് പ്രവർത്തിപ്പിക്കുക: + +
+ +```console +$ fastapi dev main.py + + ╭────────── FastAPI CLI - Development mode ───────────╮ + │ │ + │ Serving at: http://127.0.0.1:8000 │ + │ │ + │ API docs: http://127.0.0.1:8000/docs │ + │ │ + │ Running in development mode, for production use: │ + │ │ + │ fastapi run │ + │ │ + ╰─────────────────────────────────────────────────────╯ + +INFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp'] +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +INFO: Started reloader process [2248755] using WatchFiles +INFO: Started server process [2248757] +INFO: Waiting for application startup. +INFO: Application startup complete. +``` + +
+ +
+ fastapi dev main.py കമാൻഡിനെക്കുറിച്ച്... + +`fastapi dev` എന്ന കമാൻഡ് നിങ്ങളുടെ `main.py` ഫയൽ വായിക്കുകയും അതിലെ **FastAPI** ആപ്പ് കണ്ടെത്തുകയും Uvicorn ഉപയോഗിച്ച് ഒരു സെർവർ ആരംഭിക്കുകയും ചെയ്യുന്നു. + +ഡിഫോൾട്ടായി, പ്രാദേശിക വികസനത്തിനായി പ്രവർത്തനക്ഷമമാക്കിയ ഓട്ടോ-റീലോഡ് ഉപയോഗിച്ചായിരിക്കും `fastapi dev` ആരംഭിക്കുക. + +FastAPI CLI ഡോക്യുമെന്റുകളിൽ ഇതിനെക്കുറിച്ച് നിങ്ങൾക്ക് കൂടുതൽ വായിക്കാം. + +
+ +### Check it + +http://127.0.0.1:8000/items/5?q=somequery എന്ന അഡ്രസ് നിങ്ങളുടെ ബ്രൗസറിൽ തുറക്കുക. + +നിങ്ങൾക്ക് JSON പ്രതികരണം ഇങ്ങനെ കാണാനാകും: + +```JSON +{"item_id": 5, "q": "somequery"} +``` + +നിങ്ങൾ ഇതിനകം തന്നെ ഒരു API സൃഷ്ടിച്ചിട്ടുണ്ട്, അത്: + +* _paths_ `/`, `/items/{item_id}` എന്നിവയിൽ HTTP അഭ്യർത്ഥനകൾ സ്വീകരിക്കുന്നു. +* രണ്ട് _paths_ ഉം `GET` പ്രവർത്തനങ്ങൾ (HTTP _methods_ എന്നും അറിയപ്പെടുന്നു) എടുക്കുന്നു. +* _path_ `/items/{item_id}` ന് ഒരു `int` ആയിരിക്കണം _path parameter_ `item_id` ഉണ്ട്. +* _path_ `/items/{item_id}` ന് ഒരു ഓപ്‌ഷണൽ `str` _query പാരാമീറ്റർ_ `q` ഉണ്ട്. + +### ഇൻറ്ററാക്റ്റിവ് API ഡോക്യൂമെന്റുകൾ + +ഇനി http://127.0.0.1:8000/docs എന്നതിലേക്ക് പോകുക. + +നിങ്ങൾക്ക് ഓട്ടോമാറ്റിക് ഇന്ററാക്ടീവ് API ഡോക്യുമെന്റേഷൻ കാണാൻ കഴിയും (സ്വാഗർ UI നൽകുന്നത്): + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) + +### ഇതര API ഡോക്യൂമെന്റുകൾ + +ഇനി, http://127.0.0.1:8000/redoc എന്നതിലേക്ക് പോകുക. + +നിങ്ങൾക്ക് ഇതര ഓട്ടോമാറ്റിക് ഡോക്യുമെന്റേഷൻ കാണാൻ കഴിയും (ReDoc നൽകുന്നത്): + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) + +## ഉദാഹരണ നവീകരണം + +ഇനി `PUT` അഭ്യർത്ഥനയിൽ നിന്ന് ഒരു ബോഡി സ്വീകരിക്കുന്നതിന് `main.py` ഫയൽ പരിഷ്കരിക്കുക. + +സ്റ്റാൻഡേർഡ് പൈത്തൺ തരങ്ങൾ ഉപയോഗിച്ച് ബോഡി പ്രഖ്യാപിക്കുക, പൈഡാന്റിക്കിന് നന്ദി. + +```Python hl_lines="4 9-12 25-27" +from typing import Union + +from fastapi import FastAPI +from pydantic import BaseModel + +app = FastAPI() + + +class Item(BaseModel): + name: str + price: float + is_offer: Union[bool, None] = None + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} + + +@app.put("/items/{item_id}") +def update_item(item_id: int, item: Item): + return {"item_name": item.name, "item_id": item_id} +``` + +`fastapi dev` സെർവർ യാന്ത്രികമായി റീലോഡ് ചെയ്തിട്ടുണ്ടാവണം. + +### ഇൻറ്ററാക്റ്റിവ് API ഡോക്‌സ് അപ്‌ഗ്രേഡ് + +ഇനി http://127.0.0.1:8000/docs എന്നതിലേക്ക് പോകുക. + +* പുതിയ ബോഡി ഉൾപ്പെടെ, ഇൻറ്ററാക്റ്റിവ് API ഡോക്യുമെന്റേഷൻ സ്വയമേവ അപ്ഡേറ്റ് ചെയ്യപ്പെടും: + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) + +* "ഇത് പരീക്ഷിച്ചുനോക്കൂ" എന്ന ബട്ടണിൽ ക്ലിക്കുചെയ്യുക, ഇത് പാരാമീറ്ററുകൾ പൂരിപ്പിക്കാനും API-യുമായി നേരിട്ട് സംവദിക്കാനും നിങ്ങളെ അനുവദിക്കുന്നു: + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) + +* തുടർന്ന് "എക്സിക്യൂട്ട്" ബട്ടണിൽ ക്ലിക്കു ചെയ്യുക, ഉപയോക്തൃ ഇന്റർഫേസ് നിങ്ങളുടെ API-യുമായി ആശയവിനിമയം നടത്തുകയും പാരാമീറ്ററുകൾ അയയ്ക്കുകയും ഫലങ്ങൾ നേടുകയും സ്ക്രീനിൽ കാണിക്കുകയും ചെയ്യും: + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) + +### ഇതര API ഡോക്യൂമെന്റുകൾ നവീകരണം + +ഇനി, http://127.0.0.1:8000/redoc എന്നതിലേക്ക് പോകുക. + +* ഇതര ഡോക്യുമെന്റേഷൻ പുതിയ ക്വറി പാരാമീറ്ററും ബോഡിയും പ്രതിഫലിപ്പിക്കും: + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) + +### പുനരാവലോകനം + +ചുരുക്കത്തിൽ, നിങ്ങൾ പാരാമീറ്ററുകളുടെ തരങ്ങൾ, ബോഡി മുതലായവ **ഒരിക്കൽ** ഫംഗ്ഷൻ പാരാമീറ്ററുകളായി പ്രഖ്യാപിക്കുന്നു. + +സ്റ്റാൻഡേർഡ് ആധുനിക പൈത്തൺ തരങ്ങൾ ഉപയോഗിച്ചാണ് നിങ്ങൾ അത് ചെയ്യുന്നത്. + +നിങ്ങൾ ഒരു പുതിയ വാക്യഘടന, ഒരു പ്രത്യേക ലൈബ്രറിയുടെ രീതികൾ അല്ലെങ്കിൽ ക്ലാസുകൾ മുതലായവ പഠിക്കേണ്ടതില്ല. + +വെറും സ്റ്റാൻഡേർഡ് **പൈത്തൺ**. + +ഉദാഹരണത്തിന്, ഒരു `int` ന്: + +```Python +item_id: int +``` + +അല്ലെങ്കിൽ കൂടുതൽ സങ്കീർണ്ണമായ ഒരു `Item` മോഡലിന്: + +```Python +item: Item +``` + +...ആ ഒരൊറ്റ പ്രസ്താവനയിലൂടെ നിങ്ങൾക്ക് ലഭിക്കുന്നത്: + +* എഡിറ്റർ പിന്തുണ, ഇതിൽ ഉൾപെടുന്നവ: + * പൂർത്തീകരണം. + * ടൈപ്പ് പരിശോധനകൾ. +* ഡാറ്റയുടെ സാധൂകരണം: + * ഡാറ്റ അസാധുവാകുമ്പോൾ യാന്ത്രികവും മായ്‌ക്കുന്നതുമായ പിശകുകൾ. + * ആഴത്തിൽ നെസ്റ്റഡ് JSON ഒബ്‌ജക്‌റ്റുകൾക്കുപോലും സാധൂകരണം. +* ഇൻപുട്ട് ഡാറ്റയുടെ പരിവർത്തനം:നെറ്റ്‌വർക്കിൽ നിന്ന് പൈത്തൺ ഡാറ്റയിലേക്കും തരങ്ങളിലേക്കും വരുന്നു. ഈ കംപോണന്റുകളിൽ നിന്നു വായിക്കുന്നു :ഹെഡ്‍റുകൾ + * JSON. + * പാഥ് പാരാമീറ്ററുകൾ. + * ക്വറി പാരാമീറ്ററുകൾ. + * കുക്കീസ്‌ . + * ഹെഡ്‍റുകൾ . + * ഫോമുകൾ . + * ഫയലുകൾ . +* ഔട്ട്‌പുട്ട് ഡാറ്റയുടെ പരിവർത്തനം: പൈത്തൺ ഡാറ്റയിൽ നിന്നും തരങ്ങളിൽ നിന്നും നെറ്റ്‌വർക്ക് ഡാറ്റയിലേക്ക് പരിവർത്തനം ചെയ്യുന്നു (JSON ആയി): + * പൈത്തൺ തരങ്ങൾ പരിവർത്തനം ചെയ്യുക (`str`, `int`, `float`, `bool`, `list`, etc). + * `datetime` ഒബ്ജെക്ട്സ് . + * `UUID` ഒബ്ജെക്ട്സ് . + * ഡാറ്റാബേസ് മോഡലുകൾ. + * ...കൂടാതെ മറ്റു പലതും. +* രണ്ട് ഇതര ഉപയോക്തൃ ഇന്റർഫേസുകൾ ഉൾപ്പെടെ ഓട്ടോമാറ്റിക് ഇന്ററാക്ടീവ് API ഡോക്യുമെന്റേഷൻ: + * സ്വാഗർ UI. + * റീഡോക്. + +--- + +മുമ്പത്തേ കോഡ് ഉദാഹരണത്തിലേക്ക് തിരികെ വരുമ്പോൾ, **ഫാസ്റ്റ് API** ഇനിപ്പറയുന്നവ ചെയ്യും: + +* `GET`, `PUT` അഭ്യർത്ഥനകൾക്കുള്ള പാതയിൽ ഒരു `item_id` ഉണ്ടെന്ന് സാധൂകരിക്കുക. +* `GET`, `PUT` അഭ്യർത്ഥനകൾക്കായി `item_id` `int` തരത്തിലുള്ളതാണെന്ന് സാധൂകരിക്കുക. + * അങ്ങനെയല്ലെങ്കിൽ, ക്ലയന്റ് ഉപയോഗപ്രദവും വ്യക്തവുമായ ഒരു പിശക് കാണും. +* `GET` അഭ്യർത്ഥനകൾക്കായി `q` (`http://127.0.0.1:8000/items/foo?q=somequery` പോലെ) എന്ന പേരിൽ ഒരു ഓപ്ഷണൽ അന്വേഷണ പാരാമീറ്റർ ഉണ്ടോ എന്ന് പരിശോധിക്കുക. + * `q` പാരാമീറ്റർ `= None` എന്ന് പ്രഖ്യാപിച്ചിരിക്കുന്നതിനാൽ, അത് ഓപ്ഷണലാണ്. + * `None` ഇല്ലെങ്കിൽ അത് ആവശ്യമായി വരും (`PUT` ലെ ബോഡി പോലെ). +* `/items/{item_id}` ലേക്കുള്ള `PUT` അഭ്യർത്ഥനകൾക്ക്, ബോഡി JSON ആയി വായിക്കുക: + * അതിന് ഒരു `str` ആയിരിക്കേണ്ട ഒരു ആവശ്യമായ ആട്രിബ്യൂട്ട് `name` ഉണ്ടോയെന്ന് പരിശോധിക്കുക. + * അതിന് `price` എന്ന ഒരു required ആട്രിബ്യൂട്ട് ഉണ്ടോ എന്നും അത് ഒരു `float` ആയിരിക്കണമെന്നും പരിശോധിക്കുക. + * ഇതിന് `is_offer` എന്ന ഓപ്‌ഷണൽ ആട്രിബ്യൂട്ട് ഉണ്ടോയെന്ന് പരിശോധിക്കുക, ഉണ്ടെങ്കിൽ അത് `bool` ആയിരിക്കണം. + * ഇതെല്ലാം ഡീപ്ലി നെസ്റ്റഡ് JSON ഒബ്‌ജക്‌റ്റുകൾക്കും പ്രവർത്തിക്കും. +* JSON-ൽ നിന്നും JSON-ലേയ്ക്കും സ്വയമേവ പരിവർത്തനം ചെയ്യുക. +* OpenAPI ഉപയോഗിച്ച് എല്ലാം രേഖപ്പെടുത്തുക, അത് ഇനിപ്പറയുന്നവർക്ക് ഉപയോഗിക്കാം: + * ഇന്ററാക്ടീവ് ഡോക്യുമെന്റേഷൻ സിസ്റ്റങ്ങൾ. + * പല ഭാഷകൾക്കുമായി ഓട്ടോമാറ്റിക് ക്ലയന്റ് കോഡ് ജനറേഷൻ സിസ്റ്റങ്ങൾ. +* 2 ഇന്ററാക്ടീവ് ഡോക്യുമെന്റേഷൻ വെബ് ഇന്റർഫേസുകൾ നേരിട്ട് നൽകുക. + +--- + +ഞങ്ങൾ ഉപരിതലം മുഴുവൻ വായിച്ചു, പക്ഷേ ഇതെല്ലാം എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്നതിന്റെ ഒരു ധാരണ നിങ്ങൾക്ക് ഇതിനകം ലഭിച്ചുകഴിഞ്ഞു. + +ഇതുപയോഗിച്ച് ലൈൻ മാറ്റാൻ ശ്രമിക്കുക: + +```Python + return {"item_name": item.name, "item_id": item_id} +``` + +...from: + +```Python + ... "item_name": item.name ... +``` + +...to: + +```Python + ... "item_price": item.price ... +``` + +...നിങ്ങളുടെ എഡിറ്റർ ആട്രിബ്യൂട്ടുകൾ എങ്ങനെ യാന്ത്രികമായി പൂർത്തിയാക്കുമെന്നും അവയുടെ തരങ്ങൾ എങ്ങനെ അറിയുമെന്നും കാണുക: + +![എഡിറ്റർ പിന്തുണ](https://fastapi.tiangolo.com/img/vscode-completion.png) + +കൂടുതൽ സവിശേഷതകൾ ഉൾപ്പെടെയുള്ള കൂടുതൽ പൂർണ്ണമായ ഉദാഹരണത്തിന്, ട്യൂട്ടോറിയൽ - ഉപയോക്തൃ ഗൈഡ് കാണുക. + +**സ്‌പോയിലർ അലേർട്ട്**: ട്യൂട്ടോറിയൽ - ഉപയോക്തൃ ഗൈഡിൽ ഇവ ഉൾപ്പെടുന്നു: + +* മറ്റ് വ്യത്യസ്ത സ്ഥലങ്ങളിൽ നിന്നുള്ള **പാരാമീറ്ററുകളുടെ** പ്രഖ്യാപനം: **ഹെഡറുകൾ**, **കുക്കികൾ**, **ഫോം ഫീൽഡുകൾ**, **ഫയലുകൾ**. +* **മൂല്യനിർണ്ണയ നിയന്ത്രണങ്ങൾ** `maximum_length` അല്ലെങ്കിൽ `regex` ആയി എങ്ങനെ സജ്ജമാക്കാം. +* വളരെ ശക്തവും ഉപയോഗിക്കാൻ എളുപ്പമുള്ളതുമായ ഒരു **ഡിപ്പെൻഡൻസി ഇഞ്ചക്ഷൻ** സിസ്റ്റം. +* സുരക്ഷയും ഓതെന്റിക്കേഷനും , **JWT ടോക്കണുകൾ** ഉള്ള **OAuth2** നുള്ള പിന്തുണയും **HTTP ബേസിക്** ഓത്തും ഉൾപ്പെടെ. +* **ഡീപ്ലി നെസ്റ്റഡ് JSON മോഡലുകൾ** പ്രഖ്യാപിക്കുന്നതിനുള്ള കൂടുതൽ വിപുലമായ (എന്നാൽ അത്രതന്നെ എളുപ്പമുള്ള) സാങ്കേതിക വിദ്യകൾ (പൈഡന്റിക്കിന് നന്ദി). +* **ഗ്രാഫ് QL** സ്ട്രോബെറി, മറ്റ് ലൈബ്രറികൾ എന്നിവയുമായുള്ള സംയോജനം. +* നിരവധി അധിക സവിശേഷതകൾ (സ്റ്റാർലെറ്റിന് നന്ദി) ഇവയാണ്: + * **വെബ്‌സോക്കറ്റുകൾ** + * HTTPX, `pytest` എന്നിവ അടിസ്ഥാനമാക്കിയുള്ള വളരെ എളുപ്പമുള്ള പരിശോധനകൾ + * **CORS** + **കുക്കി സെഷനുകൾ** + * ...പിന്നെ മറ്റുപലതും. + +## പ്രകടനം + +സ്വതന്ത്ര TechEmpower ബെഞ്ച്മാർക്കുകൾ, യൂവികോൺ -ന് കീഴിൽ പ്രവർത്തിക്കുന്ന **ഫാസ്റ്റ്API** ആപ്ലിക്കേഷനുകൾ ലഭ്യമായ ഏറ്റവും വേഗതയേറിയ പൈത്തൺ ഫ്രെയിംവർക്കുകളിൽ ഒന്നായി കാണിക്കുന്നു, ഇത് സ്റ്റാർലെറ്റ് , യൂവികോൺ എന്നിവയ്ക്ക് താഴെയാണ് (ഫാസ്റ്റ്API ആന്തരികമായി ഉപയോഗിക്കുന്നു). (*) + +ഇതിനെക്കുറിച്ച് കൂടുതലറിയാൻ, ബെഞ്ച്മാർക്സ് എന്ന വിഭാഗം കാണുക. + +## ആശ്രിതത്വങ്ങൾ + +ഫാസ്റ്റ്API പൈഡാന്റിക്, സ്റ്റാർലെറ്റ് എന്നിവയെ ആശ്രയിച്ചിരിക്കുന്നു. + +### `സ്റ്റാൻഡേർഡ്` ആശ്രിതത്വങ്ങൾ + +`pip install "fastapi[standard]"` ഉപയോഗിച്ച് ഫാസ്റ്റ് API ഇൻസ്റ്റാൾ ചെയ്യുമ്പോൾ അത് ഓപ്ഷണൽ ഡിപൻഡൻസികളുടെ `standard` ഗ്രൂപ്പുമായി വരുന്നു: + +പൈഡാന്റിക് ഉപയോഗിക്കുന്നത്: + +* ഇ-മെയിൽ-വാലിഡേറ്റർ - ഇ-മെയിൽ വാലിഡേഷനായി. + +സ്റ്റാർലെറ്റ് ഉപയോഗിച്ചത്: + +* httpx - `TestClient` ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്. +* jinja2 - ഡിഫോൾട്ട് ടെംപ്ലേറ്റ് കോൺഫിഗറേഷൻ ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്. +* python-multipart - `request.form()` ഉപയോഗിച്ച് "പാഴ്‌സിംഗ്" എന്ന ഫോമിനെ പിന്തുണയ്ക്കണമെങ്കിൽ ആവശ്യമാണ്. + +ഫാസ്റ്റ് API / സ്റ്റാർലെറ്റ് ഉപയോഗിക്കുന്നത്: + +* uvicorn - നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ലോഡ് ചെയ്ത് സെർവ് ചെയ്യുന്ന സെർവറിനുള്ളത്. ഇതിൽ `uvicorn[standard]` ഉൾപ്പെടുന്നു, ഉയർന്ന പ്രകടനമുള്ള സെർവിംഗിന് ആവശ്യമായ ചില ആശ്രിതത്വങ്ങൾ (ഉദാ. `uvloop`) ഇതിൽ ഉൾപ്പെടുന്നു. +* `fastapi-cli` - `fastapi` കമാൻഡ് നൽകാൻ. + +### `സ്റ്റാൻഡേർഡ്` ആശ്രിതത്വങ്ങൾ ഇല്ലാതെ + +`സ്റ്റാൻഡേർഡ്` ഓപ്ഷണൽ ആശ്രിതത്വങ്ങൾ ഉൾപ്പെടുത്താൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നില്ലെങ്കിൽ, `pip install "fastapi[standard]"` എന്നതിന് പകരം `pip install fastapi` ഉപയോഗിച്ച് ഇൻസ്റ്റാൾ ചെയ്യാം. + +### അധിക ഓപ്ഷണൽ ആശ്രിതത്വങ്ങൾ + +നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ ആഗ്രഹിക്കുന്ന ചില അധിക ആശ്രിതത്വങ്ങൾ. + +അധിക ഓപ്ഷണൽ പൈഡാന്റിക് ആശ്രിതത്വങ്ങൾ: + +* pydantic-settings - ക്രമീകരണ മാനേജ്മെന്റിനായി. +* pydantic-extra-types - പൈഡന്റിക്കിനൊപ്പം ഉപയോഗിക്കേണ്ട എക്സ്ട്രാ തരങ്ങൾക്കായി. + +അധിക ഓപ്ഷണൽ ഫാസ്റ്റ് API ആശ്രിതത്വങ്ങൾ: + +* orjson - `ORJSONResponse` ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്. +* ujson - `UJSONResponse` ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്. + +## ലൈസൻസ് + +ഈ പ്രോജക്റ്റ് MIT ലൈസൻസിന്റെ നിബന്ധനകൾക്ക് കീഴിലാണ് ലൈസൻസ് ചെയ്തിരിക്കുന്നത്. diff --git a/docs/ml/mkdocs.yml b/docs/ml/mkdocs.yml new file mode 100644 index 000000000..de18856f4 --- /dev/null +++ b/docs/ml/mkdocs.yml @@ -0,0 +1 @@ +INHERIT: ../en/mkdocs.yml diff --git a/fastapi1/Scripts/Activate.ps1 b/fastapi1/Scripts/Activate.ps1 new file mode 100644 index 000000000..add57bcaa --- /dev/null +++ b/fastapi1/Scripts/Activate.ps1 @@ -0,0 +1,420 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" + +# SIG # Begin signature block +# MIIf2wYJKoZIhvcNAQcCoIIfzDCCH8gCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk +# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCDi8wggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1 +# MjM1OTU5WjB8MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQH +# EwlCZWF2ZXJ0b24xIzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9u +# MSMwIQYDVQQDExpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZI +# hvcNAQEBBQADggIPADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiS +# YgDFfwhjQy89koM7uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi +# 0GGAZUegEAeRlSXxxhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN1 +# 6yS8skFa3IHyvWdbD9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGu +# ppxcia6a7xCyKoOAGjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu35 +# 2diDY+iCMpk9ZanmSjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0 +# ZFYKeb6BLA66d2GALwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oE +# RzTzEiV6nCO1M3U1HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZ +# I7IWe7JKhHohqKuceQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16x +# ot2KVPdfyPAWd81wtZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapP +# Unwo8ygflJJ74J+BYxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3Z +# Ily+qIqDAgMBAAGjggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiI +# ZfROQjAdBgNVHQ4EFgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQD +# AgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu +# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5k +# aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZT +# SEEzODQyMDIxQ0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUF +# BwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGH +# MIGEMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYB +# BQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0 +# ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB +# /wQCMAAwDQYJKoZIhvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcW +# TiNc2rskrNLrfH1Ns0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+ +# VVzxC88pOEvz68nA82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfL +# IJQsAHBla0i7QRF2de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izW +# OXM95BSkFSKdE45Oq3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86 +# WmjRUqbrnvdyR2ydI5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+ +# W1scCpnA8YTs2d50jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM5 +# 8WEDkbeoriDk3hxU8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMf +# ZOm5cuclMnUHs2uqrRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw +# /TKqVL4Oaz3bkMSsM46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3 +# r7bjyHTxOgqxRCVa18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VH +# xaZg2unjHY3rMYIRAjCCEP4CAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO +# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29k +# ZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM +# 0NHdMA0GCWCGSAFlAwQCAQUAoIHWMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE +# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBn +# AZ6P7YvTwq0fbF62o7E75R0LxsW5OtyYiFESQckLhjBqBgorBgEEAYI3AgEMMVww +# WqBYgFYAQgB1AGkAbAB0ADoAIABSAGUAbABlAGEAcwBlAF8AYgB1AGkAbABkAGYA +# aQB4AF8AdgAzAC4AMQAwAC4ANABfADIAMAAyADIAMAAzADIAMwAuADAAMjANBgkq +# hkiG9w0BAQEFAASCAgAcEvETg2Xhn12WXdKe3tBaVv7GlhnKE3KIyIYicO7HekaL +# xA56c/hiIuIkAGRuhbm++NMB/L7RYueQI8+ze8q4BoHLvH5lxR92twKr1RhKRbo3 +# rSj5zGPna6P7s677Nfw3WJ01RlOKF3ygJe+GRj3RpUR8aL2DM4pzydcVM2ihWzFy +# CqsKCj3s/ELGiA3RQ0KVbZ9VO+r2/AsZdndYKCjxYL4PMiCver6+eeqhxkS0r7v0 +# Dv6/NJOPaC61Gcwi5lIfZRMOcMKPC18O6VmXbsDmh044BLfz3oE3oQsrq1AkUj4a +# eguQAOZAy44a6um8/YoHOZ73ZJkxfnGWVRZlmHJbvx/KFK/MnXtDI1lW2OerCx4N +# k1tRq9aHimmomsJvo4N10dCGMkDIWUPGJKTBvtvW3K+QWYzukvqADuQuuJPs67yF +# oiKncZ7+51Qruo7qWxJeLJl7q2vzf8dPOwc/7SXiOhCjQqwxYvSB/xkSQ8xkl2Ve +# 8lQlVjSCQG109Q8TvA2GKUXc3wnEC+hmSCz0lGRQ1jwHEk4wY73fxRocK4cmXqib +# szuaj4C/IIue9npABx5K0eAwJ/JjiYc2CtrDJ1cPJz3Ho0UBpHdhND4s25oB9F5r +# IihejiQumFRTIABC+gn8289gCoNK7MADZdigwW76/Jg/M1KWbpvBJuEJsoQim6GC +# DX0wgg15BgorBgEEAYI3AwMBMYINaTCCDWUGCSqGSIb3DQEHAqCCDVYwgg1SAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCC0XTDkLGotxVA3SNZCglpIf43K7cFUZzmD +# j6rKB6I4xgIQWaJlxfK8fWWZr5xb+dKEGhgPMjAyMjAzMjMyMzE5MjhaoIIKNzCC +# BP4wggPmoAMCAQICEA1CSuC+Ooj/YEAhzhQA8N0wDQYJKoZIhvcNAQELBQAwcjEL +# MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +# LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElE +# IFRpbWVzdGFtcGluZyBDQTAeFw0yMTAxMDEwMDAwMDBaFw0zMTAxMDYwMDAwMDBa +# MEgxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UE +# AxMXRGlnaUNlcnQgVGltZXN0YW1wIDIwMjEwggEiMA0GCSqGSIb3DQEBAQUAA4IB +# DwAwggEKAoIBAQDC5mGEZ8WK9Q0IpEXKY2tR1zoRQr0KdXVNlLQMULUmEP4dyG+R +# awyW5xpcSO9E5b+bYc0VkWJauP9nC5xj/TZqgfop+N0rcIXeAhjzeG28ffnHbQk9 +# vmp2h+mKvfiEXR52yeTGdnY6U9HR01o2j8aj4S8bOrdh1nPsTm0zinxdRS1LsVDm +# QTo3VobckyON91Al6GTm3dOPL1e1hyDrDo4s1SPa9E14RuMDgzEpSlwMMYpKjIjF +# 9zBa+RSvFV9sQ0kJ/SYjU/aNY+gaq1uxHTDCm2mCtNv8VlS8H6GHq756WwogL0sJ +# yZWnjbL61mOLTqVyHO6fegFz+BnW/g1JhL0BAgMBAAGjggG4MIIBtDAOBgNVHQ8B +# Af8EBAMCB4AwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBB +# BgNVHSAEOjA4MDYGCWCGSAGG/WwHATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3 +# LmRpZ2ljZXJ0LmNvbS9DUFMwHwYDVR0jBBgwFoAU9LbhIB3+Ka7S5GGlsqIlssgX +# NW4wHQYDVR0OBBYEFDZEho6kurBmvrwoLR1ENt3janq8MHEGA1UdHwRqMGgwMqAw +# oC6GLGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtdHMuY3Js +# MDKgMKAuhixodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLXRz +# LmNybDCBhQYIKwYBBQUHAQEEeTB3MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5k +# aWdpY2VydC5jb20wTwYIKwYBBQUHMAKGQ2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0 +# LmNvbS9EaWdpQ2VydFNIQTJBc3N1cmVkSURUaW1lc3RhbXBpbmdDQS5jcnQwDQYJ +# KoZIhvcNAQELBQADggEBAEgc3LXpmiO85xrnIA6OZ0b9QnJRdAojR6OrktIlxHBZ +# vhSg5SeBpU0UFRkHefDRBMOG2Tu9/kQCZk3taaQP9rhwz2Lo9VFKeHk2eie38+dS +# n5On7UOee+e03UEiifuHokYDTvz0/rdkd2NfI1Jpg4L6GlPtkMyNoRdzDfTzZTlw +# S/Oc1np72gy8PTLQG8v1Yfx1CAB2vIEO+MDhXM/EEXLnG2RJ2CKadRVC9S0yOIHa +# 9GCiurRS+1zgYSQlT7LfySmoc0NR2r1j1h9bm/cuG08THfdKDXF+l7f0P4TrweOj +# SaH6zqe/Vs+6WXZhiV9+p7SOZ3j5NpjhyyjaW4emii8wggUxMIIEGaADAgECAhAK +# oSXW1jIbfkHkBdo2l8IVMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUw +# EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +# JDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xNjAxMDcx +# MjAwMDBaFw0zMTAxMDcxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxE +# aWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMT +# KERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0EwggEiMA0G +# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC90DLuS82Pf92puoKZxTlUKFe2I0rE +# DgdFM1EQfdD5fU1ofue2oPSNs4jkl79jIZCYvxO8V9PD4X4I1moUADj3Lh477sym +# 9jJZ/l9lP+Cb6+NGRwYaVX4LJ37AovWg4N4iPw7/fpX786O6Ij4YrBHk8JkDbTuF +# fAnT7l3ImgtU46gJcWvgzyIQD3XPcXJOCq3fQDpct1HhoXkUxk0kIzBdvOw8YGqs +# LwfM/fDqR9mIUF79Zm5WYScpiYRR5oLnRlD9lCosp+R1PrqYD4R/nzEU1q3V8mTL +# ex4F0IQZchfxFwbvPc3WTe8GQv2iUypPhR3EHTyvz9qsEPXdrKzpVv+TAgMBAAGj +# ggHOMIIByjAdBgNVHQ4EFgQU9LbhIB3+Ka7S5GGlsqIlssgXNW4wHwYDVR0jBBgw +# FoAUReuir/SSy4IxLVGLp6chnfNtyA8wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV +# HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgweQYIKwYBBQUHAQEEbTBr +# MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUH +# MAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ +# RFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2lj +# ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6 +# Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmww +# UAYDVR0gBEkwRzA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v +# d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUA +# A4IBAQBxlRLpUYdWac3v3dp8qmN6s3jPBjdAhO9LhL/KzwMC/cWnww4gQiyvd/Mr +# HwwhWiq3BTQdaq6Z+CeiZr8JqmDfdqQ6kw/4stHYfBli6F6CJR7Euhx7LCHi1lss +# FDVDBGiy23UC4HLHmNY8ZOUfSBAYX4k4YU1iRiSHY4yRUiyvKYnleB/WCxSlgNcS +# R3CzddWThZN+tpJn+1Nhiaj1a5bA9FhpDXzIAbG5KHW3mWOFIoxhynmUfln8jA/j +# b7UBJrZspe6HUSHkWGCbugwtK22ixH67xCUrRwIIfEmuE7bhfEJCKMYYVs9BNLZm +# XbZ0e/VWMyIvIjayS6JKldj1po5SMYIChjCCAoICAQEwgYYwcjELMAkGA1UEBhMC +# VVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0 +# LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIFRpbWVzdGFt +# cGluZyBDQQIQDUJK4L46iP9gQCHOFADw3TANBglghkgBZQMEAgEFAKCB0TAaBgkq +# hkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIyMDMyMzIz +# MTkyOFowKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQU4deCqOGRvu9ryhaRtaq0lKYk +# m/MwLwYJKoZIhvcNAQkEMSIEIHNTJ07DMb66i/CvfgCQwd6w8vfBx22bam2qmc9M +# uGZaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEILMQkAa8CtmDB5FXKeBEA0Fcg+Mp +# K2FPJpZMjTVx7PWpMA0GCSqGSIb3DQEBAQUABIIBAHon6BMHxuQFoPSgk2hY0LY8 +# iYSY/wzH+juGLxHQ8DQP7CHbPiIvftqXgEK9VgVLxjk+e+O2+/6zdUzhg1q0N+1W +# RR0AvTl3Kv6ISCmG8HrcnC33q2OgPKLYhPZy0WBv0bZGfZzVnFMGmWjmBUmovqKG +# mSvf+8yV58oAwASWRNXJE1Ut4bR8qjCLZ31Uh+L/YQRVrYCvmUS09rrufBAAjzbC +# 1Uir2Pea4OE5jneMOvHAg29Nsh2GzUjPeKqHw4Dkv1ED0+3jbxOd5iGBi8ZXn9Us +# mhxC+BxAf/7oN9038H/22cT9ec1QUce7UapZaDZlGO1uhFNzHR/RTpn62Ol4iWM= +# SIG # End signature block diff --git a/fastapi1/Scripts/activate b/fastapi1/Scripts/activate new file mode 100644 index 000000000..bba91712d --- /dev/null +++ b/fastapi1/Scripts/activate @@ -0,0 +1,69 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r 2> /dev/null + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="F:\open-source\fastapi\fastapi1" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/Scripts:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="(fastapi1) ${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT="(fastapi1) " + export VIRTUAL_ENV_PROMPT +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r 2> /dev/null +fi diff --git a/fastapi1/Scripts/activate.bat b/fastapi1/Scripts/activate.bat new file mode 100644 index 000000000..cf69cd440 --- /dev/null +++ b/fastapi1/Scripts/activate.bat @@ -0,0 +1,34 @@ +@echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set _OLD_CODEPAGE=%%a +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + +set VIRTUAL_ENV=F:\open-source\fastapi\fastapi1 + +if not defined PROMPT set PROMPT=$P$G + +if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% +if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% + +set _OLD_VIRTUAL_PROMPT=%PROMPT% +set PROMPT=(fastapi1) %PROMPT% + +if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% +set PYTHONHOME= + +if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% +if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% + +set PATH=%VIRTUAL_ENV%\Scripts;%PATH% +set VIRTUAL_ENV_PROMPT=(fastapi1) + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set _OLD_CODEPAGE= +) diff --git a/fastapi1/Scripts/black.exe b/fastapi1/Scripts/black.exe new file mode 100644 index 000000000..e636e662f Binary files /dev/null and b/fastapi1/Scripts/black.exe differ diff --git a/fastapi1/Scripts/blackd.exe b/fastapi1/Scripts/blackd.exe new file mode 100644 index 000000000..03ced193d Binary files /dev/null and b/fastapi1/Scripts/blackd.exe differ diff --git a/fastapi1/Scripts/cairosvg.exe b/fastapi1/Scripts/cairosvg.exe new file mode 100644 index 000000000..afa427174 Binary files /dev/null and b/fastapi1/Scripts/cairosvg.exe differ diff --git a/fastapi1/Scripts/coverage-3.10.exe b/fastapi1/Scripts/coverage-3.10.exe new file mode 100644 index 000000000..251d11222 Binary files /dev/null and b/fastapi1/Scripts/coverage-3.10.exe differ diff --git a/fastapi1/Scripts/coverage.exe b/fastapi1/Scripts/coverage.exe new file mode 100644 index 000000000..251d11222 Binary files /dev/null and b/fastapi1/Scripts/coverage.exe differ diff --git a/fastapi1/Scripts/coverage3.exe b/fastapi1/Scripts/coverage3.exe new file mode 100644 index 000000000..251d11222 Binary files /dev/null and b/fastapi1/Scripts/coverage3.exe differ diff --git a/fastapi1/Scripts/deactivate.bat b/fastapi1/Scripts/deactivate.bat new file mode 100644 index 000000000..62a39a758 --- /dev/null +++ b/fastapi1/Scripts/deactivate.bat @@ -0,0 +1,22 @@ +@echo off + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) +set _OLD_VIRTUAL_PROMPT= + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" + set _OLD_VIRTUAL_PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) + +set _OLD_VIRTUAL_PATH= + +set VIRTUAL_ENV= +set VIRTUAL_ENV_PROMPT= + +:END diff --git a/fastapi1/Scripts/dmypy.exe b/fastapi1/Scripts/dmypy.exe new file mode 100644 index 000000000..c3d427f6e Binary files /dev/null and b/fastapi1/Scripts/dmypy.exe differ diff --git a/fastapi1/Scripts/dotenv.exe b/fastapi1/Scripts/dotenv.exe new file mode 100644 index 000000000..9c9fc2857 Binary files /dev/null and b/fastapi1/Scripts/dotenv.exe differ diff --git a/fastapi1/Scripts/email_validator.exe b/fastapi1/Scripts/email_validator.exe new file mode 100644 index 000000000..f98b71e16 Binary files /dev/null and b/fastapi1/Scripts/email_validator.exe differ diff --git a/fastapi1/Scripts/fastapi.exe b/fastapi1/Scripts/fastapi.exe new file mode 100644 index 000000000..e1acfe9d6 Binary files /dev/null and b/fastapi1/Scripts/fastapi.exe differ diff --git a/fastapi1/Scripts/flask.exe b/fastapi1/Scripts/flask.exe new file mode 100644 index 000000000..aba707882 Binary files /dev/null and b/fastapi1/Scripts/flask.exe differ diff --git a/fastapi1/Scripts/ghp-import.exe b/fastapi1/Scripts/ghp-import.exe new file mode 100644 index 000000000..e93d02822 Binary files /dev/null and b/fastapi1/Scripts/ghp-import.exe differ diff --git a/fastapi1/Scripts/griffe.exe b/fastapi1/Scripts/griffe.exe new file mode 100644 index 000000000..b50f60e5b Binary files /dev/null and b/fastapi1/Scripts/griffe.exe differ diff --git a/fastapi1/Scripts/hjson.exe b/fastapi1/Scripts/hjson.exe new file mode 100644 index 000000000..8ba553eee Binary files /dev/null and b/fastapi1/Scripts/hjson.exe differ diff --git a/fastapi1/Scripts/httpx.exe b/fastapi1/Scripts/httpx.exe new file mode 100644 index 000000000..45e315377 Binary files /dev/null and b/fastapi1/Scripts/httpx.exe differ diff --git a/fastapi1/Scripts/identify-cli.exe b/fastapi1/Scripts/identify-cli.exe new file mode 100644 index 000000000..05b45f1e5 Binary files /dev/null and b/fastapi1/Scripts/identify-cli.exe differ diff --git a/fastapi1/Scripts/markdown-it.exe b/fastapi1/Scripts/markdown-it.exe new file mode 100644 index 000000000..051fd2a96 Binary files /dev/null and b/fastapi1/Scripts/markdown-it.exe differ diff --git a/fastapi1/Scripts/markdown_py.exe b/fastapi1/Scripts/markdown_py.exe new file mode 100644 index 000000000..681a45d6b Binary files /dev/null and b/fastapi1/Scripts/markdown_py.exe differ diff --git a/fastapi1/Scripts/mkdocs-get-deps.exe b/fastapi1/Scripts/mkdocs-get-deps.exe new file mode 100644 index 000000000..f62255eff Binary files /dev/null and b/fastapi1/Scripts/mkdocs-get-deps.exe differ diff --git a/fastapi1/Scripts/mkdocs.exe b/fastapi1/Scripts/mkdocs.exe new file mode 100644 index 000000000..19e741af3 Binary files /dev/null and b/fastapi1/Scripts/mkdocs.exe differ diff --git a/fastapi1/Scripts/mypy.exe b/fastapi1/Scripts/mypy.exe new file mode 100644 index 000000000..21904c601 Binary files /dev/null and b/fastapi1/Scripts/mypy.exe differ diff --git a/fastapi1/Scripts/mypyc.exe b/fastapi1/Scripts/mypyc.exe new file mode 100644 index 000000000..b9f64658c Binary files /dev/null and b/fastapi1/Scripts/mypyc.exe differ diff --git a/fastapi1/Scripts/nodeenv.exe b/fastapi1/Scripts/nodeenv.exe new file mode 100644 index 000000000..a4364bc43 Binary files /dev/null and b/fastapi1/Scripts/nodeenv.exe differ diff --git a/fastapi1/Scripts/normalizer.exe b/fastapi1/Scripts/normalizer.exe new file mode 100644 index 000000000..f1fe641ac Binary files /dev/null and b/fastapi1/Scripts/normalizer.exe differ diff --git a/fastapi1/Scripts/pip.exe b/fastapi1/Scripts/pip.exe new file mode 100644 index 000000000..064866eaa Binary files /dev/null and b/fastapi1/Scripts/pip.exe differ diff --git a/fastapi1/Scripts/pip3.10.exe b/fastapi1/Scripts/pip3.10.exe new file mode 100644 index 000000000..064866eaa Binary files /dev/null and b/fastapi1/Scripts/pip3.10.exe differ diff --git a/fastapi1/Scripts/pip3.exe b/fastapi1/Scripts/pip3.exe new file mode 100644 index 000000000..064866eaa Binary files /dev/null and b/fastapi1/Scripts/pip3.exe differ diff --git a/fastapi1/Scripts/playwright.exe b/fastapi1/Scripts/playwright.exe new file mode 100644 index 000000000..6712491f3 Binary files /dev/null and b/fastapi1/Scripts/playwright.exe differ diff --git a/fastapi1/Scripts/pre-commit.exe b/fastapi1/Scripts/pre-commit.exe new file mode 100644 index 000000000..e1f3d5196 Binary files /dev/null and b/fastapi1/Scripts/pre-commit.exe differ diff --git a/fastapi1/Scripts/py.test.exe b/fastapi1/Scripts/py.test.exe new file mode 100644 index 000000000..c1c2c13a9 Binary files /dev/null and b/fastapi1/Scripts/py.test.exe differ diff --git a/fastapi1/Scripts/pybabel.exe b/fastapi1/Scripts/pybabel.exe new file mode 100644 index 000000000..cfc403f24 Binary files /dev/null and b/fastapi1/Scripts/pybabel.exe differ diff --git a/fastapi1/Scripts/pygmentize.exe b/fastapi1/Scripts/pygmentize.exe new file mode 100644 index 000000000..58513417c Binary files /dev/null and b/fastapi1/Scripts/pygmentize.exe differ diff --git a/fastapi1/Scripts/pytest.exe b/fastapi1/Scripts/pytest.exe new file mode 100644 index 000000000..c1c2c13a9 Binary files /dev/null and b/fastapi1/Scripts/pytest.exe differ diff --git a/fastapi1/Scripts/python.exe b/fastapi1/Scripts/python.exe new file mode 100644 index 000000000..79b1512a0 Binary files /dev/null and b/fastapi1/Scripts/python.exe differ diff --git a/fastapi1/Scripts/pythonw.exe b/fastapi1/Scripts/pythonw.exe new file mode 100644 index 000000000..4fcaeb30b Binary files /dev/null and b/fastapi1/Scripts/pythonw.exe differ diff --git a/fastapi1/Scripts/ruff.exe b/fastapi1/Scripts/ruff.exe new file mode 100644 index 000000000..8c52c61e8 Binary files /dev/null and b/fastapi1/Scripts/ruff.exe differ diff --git a/fastapi1/Scripts/stubgen.exe b/fastapi1/Scripts/stubgen.exe new file mode 100644 index 000000000..30b5e24ea Binary files /dev/null and b/fastapi1/Scripts/stubgen.exe differ diff --git a/fastapi1/Scripts/stubtest.exe b/fastapi1/Scripts/stubtest.exe new file mode 100644 index 000000000..e0c39fc25 Binary files /dev/null and b/fastapi1/Scripts/stubtest.exe differ diff --git a/fastapi1/Scripts/typer.exe b/fastapi1/Scripts/typer.exe new file mode 100644 index 000000000..02d60a0e4 Binary files /dev/null and b/fastapi1/Scripts/typer.exe differ diff --git a/fastapi1/Scripts/uvicorn.exe b/fastapi1/Scripts/uvicorn.exe new file mode 100644 index 000000000..c1a962d60 Binary files /dev/null and b/fastapi1/Scripts/uvicorn.exe differ diff --git a/fastapi1/Scripts/virtualenv.exe b/fastapi1/Scripts/virtualenv.exe new file mode 100644 index 000000000..d7a52a47a Binary files /dev/null and b/fastapi1/Scripts/virtualenv.exe differ diff --git a/fastapi1/Scripts/watchfiles.exe b/fastapi1/Scripts/watchfiles.exe new file mode 100644 index 000000000..10f5a154c Binary files /dev/null and b/fastapi1/Scripts/watchfiles.exe differ diff --git a/fastapi1/Scripts/watchmedo.exe b/fastapi1/Scripts/watchmedo.exe new file mode 100644 index 000000000..1a8d1ce3f Binary files /dev/null and b/fastapi1/Scripts/watchmedo.exe differ diff --git a/fastapi1/Scripts/websockets.exe b/fastapi1/Scripts/websockets.exe new file mode 100644 index 000000000..15c36d67d Binary files /dev/null and b/fastapi1/Scripts/websockets.exe differ diff --git a/fastapi1/pyvenv.cfg b/fastapi1/pyvenv.cfg new file mode 100644 index 000000000..2267d3ead --- /dev/null +++ b/fastapi1/pyvenv.cfg @@ -0,0 +1,3 @@ +home = C:\Users\user\AppData\Local\Programs\Python\Python310 +include-system-site-packages = false +version = 3.10.4