<jupyter_start><jupyter_text>Dokumentace k projektu "API generátor pomocí FastAPI"=================================================== Autoři:- [Lubos-source](https://github.com/Lubos-source)- [JanBeran8](https://github.com/JanBeran8)**Poznámka:** Tento dokument slouží jako návod k použití programu a stručné vysvětlení funkčnosti. Projekt se nachází pod MIT licencí. Implementování projektu do vašeho PC + prvotní nastavení======================================================== - Stáhněte(naklonujte) projekt z [GIThub uložiště](https://github.com/JanBeran8/Informatika-projekt-22-5KB)- Je nutné mít nainstalovaný a nastavený DOCKER jeho instalace je popsána [zde](https://docs.docker.com/get-docker/)- Otevřete složku APIgen, zvolte cestu instalace notebooku v souboru `.env`  a spusťte soubor `runCompose.bat`- V případě nenalezení souboru `.env` vytvořte tento soubor do kterého vložte `CD=C:\APIgenProject\jupy` a cestu libovolně upravte. Soubor se musí nacházet ve stejné složce, jako se nachází `runCompose.bat` !!- Po spuštění se do vašeho DOCKERU nastaví veškeré potřebné kontejnery (postgres, PGadmin, Jupyter + knihovny)- V dockeru otevřete Jupyter a vložte vygenerovaný token- Token k připojení se k Jupyteru notebooku najdete v konzoli jupyteru nebo v konzoli celého conteineru v dockeru- Po zadání tokenu najdete v adresáři */notebooks všechny potřebné soubory ke spuštění programu Spuštění a napojení na databázi=============================== - V Jupyteru zvolte soubor `main` - Pod proměnou `knowndatabaze` se bude nacházet jméno vaší databáze, ke které se chcete připojit a získat její strukturu- V případě změny nastavení postgresu, změňte údaje `host` `user` `password`- Po spuštění kódu se přegenerují soubory `BaseModels` `Schemas` `FastAPIprog`- Tyhle soubory postupně zkopírujte a vložte do příslušných částí v notebooku `runFastAPI` Spuštění FastAPI programu========================= - V notebooku `runFastAPI` je **NUTNÉ doinstalovat jednu knihovnu pro funkčnost!** Hned první spustitelná buňka obsahuje příkaz k instalaci- Po nainstalování restartujte jádro (horní lišta v jupyteru)- Postupně spusťte všechny buňky v notebooku- Spustí se FastAPI, kde námi nadefinovaný port je [:8800](http://localhost:8800/docs)- Doporučení pro přehledné používání FastAPI zadejte za port do url : [/docs](http://localhost:8800/docs). Zde uvidíte všechny dostupné FastAPI příkazy k práci s databází a jejich dokumentaci. Úpravy ze strany uživatele========================== Jelikož je program navržený aby byl použitelný na různé typy databází, nemůže vygenerovaný kód obsahovat speciální funkce a požadavky. Proto ze strany uživatele, který kód používá je zapotřebí požadované speciální funkce dopsat případně změnit funkčnost některých námi definovaných funkcí Doporučujeme neupravovat samotný `main` soubor, ale pouze vygenerované soubory. Vysvětlení funkčnosti=====================  Program `main` :   SQL požadavkyProgram pracuje v cyklech, kdy v první části prochází veškeré dostupná schémata datábaze (kromě základně vygenerovaných pro každou databázi).V druhé části ze všech vyhovujících schémat získává názvy jednotlivých tabulek v nich.Z každé nalezené tabulky získáme požadované informace o jednotlivých řádcích a nalezneme jestli tabulky obsahují požadované klíče, díky kterým postupujeme různými cestami zpracování takových tabulek a řádků.Tím jsme vysvětlili prvních 5 funkcí, které pomocí SQL(SELECT) příkazů voláme za použití definovaného "kurzoru" a provádíme výše popsané kroky. **vysvětlivka :** Kurzor, v aplikaci jako `db_cursor`, je "pointer", který se používá pro odesílání požadavků k SQL databázi. Aby mohl být kurzor správně použit musí být definovaný, na začátku aplikace otevřený a na konci uzavřený. Po otevření můžeme používat `execute` a `fetch` příkazy. Execute příkaz spustí daný textový řetězec (požadavek na databázi) a fetch uloží výsledek získaný z požadavku.  Generování textových dokumentů:V aplikaci jsou 3 různé textové soubory, které je potřeba na začátku otevřít a nakonci zase uzavřít!- Soubor modelů v jupyteru jako `BaseModels` v main aplikaci pod proměnou `f` - Soubor schémat v jupyteru jako `Schemas` v main aplikaci pod proměnou `s`- Soubor FastAPI aplikace v jupyteru jako `FastAPIprog` v main aplikaci pod proměnou `a`První se vytvoří hlavičky v daných souborech. Zde jsou implementováný knihovny a například i potřebná funkce na spuštění FastAPI, které jsou pevně dané a není potřeba je prohánět cykly.Poté postupujeme dle daných požadavků pro správně syntaxovaný program.V souboru `BaseModels` vygenerujeme třídy s názvem jednotlivých tabulek v databázi a vygenerujeme definice pro jednotlivé řádky v nich + relationships.V souboru `Schemas` vygenerujeme třídy, které odpovídají CRUD operacím (Create, Read, Update, Delete). Ve kterých určíme jednotlivým řádkům jejich typy podle informací získaných z databáze.V souboru `FastAPIprog` kromě vygenerované funkce pro spuštění aplikace, vygenerujeme funkci, která bude obsahovat veškeré endpointy FastAPI aplikace. Endpointy máme vytvořené podle našeho uvážení, uživatel si chybějící endpointy dodefinuje. Případně nepotřebné vymaže.  Program `runFastAPI` :   Vložení vygenerovaného kódu Po vložení vygenerovaných textových souborů do příslušných buněk spusťtě všechny postupně za sebou.Buňky BaseModels a Schemas vytvoří strukturu zkopírované databáze.Část FastAPI vytvoří endpointy a spustí aplikaci na portu [:8800](http://localhost:8800/docs)**GET endpoint:**Na základě zadaného parametru vyhledá a vrátí list všech prvků dané tabulky v databázi, které odpovídají zadaným parametrům.**GETALL endpoint:**Vrátí list všech prvků dané tabulky v databázi.**POST endpoint:**Po zadání veškerých potřebných údajů vytvoří nový prvek v tabulce dané databáze.**PUT endpoint:**Po zadání potřebých parametrů na základě ID porovná dva prvky a v případě odlišností daný prvek aktualizuje.**DELETE endpoint:**Vyhledá daný prvek v tabulce databáze podle ID a odstraní jej. **Vypnutí FastAPI aplikace**Poslední nepojmenovaná buňka v souboru `runFastAPI` se zabývá správným vypnutím FastAPI aplikace.Před každým novým spuštěním je třeba aplikaci ukončit aby se uvolnil port pro znovu spuštění. Jinak nastane chyba a je třeba restartovat docker (conteiner).  Příklad funkčnosti Zavolání příkazu :<jupyter_code>our_user = session.query(users).filter(users.name == 'TEST').first()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.084920387137059, 'fraction_numerical': 0.004370902279113331, 'mean_word_length': 6.110987791342953, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '258053', 'license': 'MIT', 'n_tokens_mistral': 2556, 'n_tokens_neox': 2685, 'n_words': 774, 'path': 'APIgen/APIgen/notebooks/DOKUMENTACE.ipynb', 'repo_name': 'JanBeran8/Informatika-projekt-22-5KB', 'size': '6406'}