{"id":41221,"date":"2020-02-06T20:42:46","date_gmt":"2020-02-06T17:42:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/python-gateway-v-intersystems-iris"},"modified":"2020-02-06T20:42:46","modified_gmt":"2020-02-06T17:42:46","slug":"python-gateway-v-intersystems-iris","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/python-gateway-v-intersystems-iris","title":{"rendered":"Python Gateway v InterSystems IRIS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tento \u010dl\u00e1nek se v\u011bnuje Python Gateway \u2014 komunitn\u00edmu projektu s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem pro datovou platformu InterSystems IRIS. Tento projekt umo\u017e\u0148uje orchestraci jak\u00fdchkoli algoritm\u016f strojov\u00e9ho u\u010den\u00ed vytvo\u0159en\u00fdch v jazyce Python (hlavn\u00edm prost\u0159ed\u00ed pro mnoh\u00e9 datov\u00e9 v\u011bdce), vyu\u017e\u00edvat \u0159adu hotov\u00fdch knihoven pro rychl\u00e9 vytv\u00e1\u0159en\u00ed adaptivn\u00edch, robotizovan\u00fdch analytick\u00fdch AI\/ML \u0159e\u0161en\u00ed na platform\u011b InterSystems IRIS. V tomto \u010dl\u00e1nku uk\u00e1\u017eu, jak m\u016f\u017ee InterSystems IRIS orchestraci proces\u016f v Pythonu efektivn\u011b prov\u00e1d\u011bt oboustrann\u00fd p\u0159enos dat a vytv\u00e1\u0159et inteligentn\u00ed obchodn\u00ed procesy.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Pl\u00e1n<\/h1>\n<p><\/p>\n<ol>\n<li>\u00davod.<\/li>\n<li>N\u00e1stroje.<\/li>\n<li>Instalace.<\/li>\n<li>API.<\/li>\n<li>Interoperabilita.<\/li>\n<li>Jupyter Notebook.<\/li>\n<li>Z\u00e1v\u011bry.<\/li>\n<li>Odkazy.<\/li>\n<li>MLToolkit.<\/li>\n<\/ol>\n<p><\/p>\n<h1 id=\"vvedenie\">\u00davod<\/h1>\n<p><\/p>\n<p>Python je vysoko\u00farov\u0148ov\u00fd programovac\u00ed jazyk obecn\u00e9ho ur\u010den\u00ed, kter\u00fd se zam\u011b\u0159uje na zvy\u0161ov\u00e1n\u00ed produktivity v\u00fdvoj\u00e1\u0159\u016f a \u010ditelnost k\u00f3du. V t\u00e9to s\u00e9rii \u010dl\u00e1nk\u016f se budu zab\u00fdvat mo\u017enostmi vyu\u017eit\u00ed jazyka Python na platform\u011b InterSystems IRIS, p\u0159i\u010dem\u017e hlavn\u00edm zam\u011b\u0159en\u00edm tohoto \u010dl\u00e1nku je uplatn\u011bn\u00ed Pythonu jako jazyka pro vytv\u00e1\u0159en\u00ed a aplikaci model\u016f strojov\u00e9ho u\u010den\u00ed.<\/p>\n<p><\/p>\n<p>Strojov\u00e9 u\u010den\u00ed (ML) je t\u0159\u00edda metod um\u011bl\u00e9 inteligence, kter\u00e9 se vyzna\u010duj\u00ed t\u00edm, \u017ee p\u0159\u00edmo ne\u0159e\u0161\u00ed probl\u00e9m, ale u\u010d\u00ed se p\u0159i \u0159e\u0161en\u00ed mnoha podobn\u00fdch \u00faloh. <\/p>\n<p><\/p>\n<p>Algoritmy a modely strojov\u00e9ho u\u010den\u00ed se st\u00e1vaj\u00ed st\u00e1le b\u011b\u017en\u011bj\u0161\u00edmi. D\u016fvod\u016f je mnoho, ale v\u0161echno se to vrac\u00ed k dostupnosti, jednoduchosti a dosa\u017een\u00ed praktick\u00fdch v\u00fdsledk\u016f. Je klasifikace nebo dokonce neuronov\u00e9 modelov\u00e1n\u00ed novou technologi\u00ed? <\/p>\n<p><\/p>\n<p>Samoz\u0159ejm\u011b, \u017ee ne, ale v sou\u010dasnosti nen\u00ed pot\u0159eba ps\u00e1t stovky tis\u00edc \u0159\u00e1dk\u016f k\u00f3du, abychom spustili jeden model, a n\u00e1klady na vytv\u00e1\u0159en\u00ed a aplikaci model\u016f neust\u00e1le klesaj\u00ed.<\/p>\n<p><\/p>\n<p>N\u00e1stroje se vyv\u00edjej\u00ed \u2014 zat\u00edmco nem\u00e1me zcela GUI-orientovan\u00e9 AI\/ML n\u00e1stroje, pokrok, kter\u00fd jsme zaznamenali u mnoha dal\u0161\u00edch t\u0159\u00edd informa\u010dn\u00edch syst\u00e9m\u016f, nap\u0159\u00edklad BI (od psan\u00ed k\u00f3du po pou\u017e\u00edv\u00e1n\u00ed r\u00e1mc\u016f a GUI-orientovan\u00fdch konfigurovateln\u00fdch \u0159e\u0161en\u00ed), se objevuje i u n\u00e1stroj\u016f pro vytv\u00e1\u0159en\u00ed AI\/ML. Ji\u017e jsme p\u0159ekonali f\u00e1zi psan\u00ed k\u00f3du a dnes pou\u017e\u00edv\u00e1me r\u00e1mce k budov\u00e1n\u00ed a tr\u00e9nov\u00e1n\u00ed model\u016f.<\/p>\n<p><\/p>\n<p>Dal\u0161\u00ed vylep\u0161en\u00ed, jako je mo\u017enost distribuce p\u0159edtr\u00e9novan\u00e9ho modelu, kdy koncov\u00fd u\u017eivatel mus\u00ed pouze dokon\u010dit tr\u00e9nink modelu na sv\u00fdch specifick\u00fdch datech, tak\u00e9 usnad\u0148uj\u00ed za\u010d\u00e1tek uplatn\u011bn\u00ed strojov\u00e9ho u\u010den\u00ed. Tyto pokroky v\u00fdrazn\u011b zjednodu\u0161uj\u00ed studium strojov\u00e9ho u\u010den\u00ed jak pro odborn\u00edky, tak pro spole\u010dnosti jako celek.<\/p>\n<p><\/p>\n<p>Na druh\u00e9 stran\u011b sb\u00edr\u00e1me st\u00e1le v\u00edce dat. D\u00edky jednotn\u00e9 datov\u00e9 platform\u011b, jako je InterSystems IRIS, mohou b\u00fdt v\u0161echny tyto informace okam\u017eit\u011b p\u0159ipraveny a pou\u017eity jako v\u00fdchoz\u00ed data pro modely strojov\u00e9ho u\u010den\u00ed.<\/p>\n<p><\/p>\n<p>S p\u0159echodem do cloudu je spu\u0161t\u011bn\u00ed AI\/ML projekt\u016f snaz\u0161\u00ed ne\u017e kdykoli p\u0159edt\u00edm. M\u016f\u017eeme spot\u0159ebov\u00e1vat pouze ty zdroje, kter\u00e9 pot\u0159ebujeme. Nav\u00edc d\u00edky paralelizaci, kterou nab\u00edzej\u00ed cloudov\u00e9 platformy, m\u016f\u017eeme u\u0161et\u0159it \u010das.<\/p>\n<p><\/p>\n<p>Ale co v\u00fdsledky? Tady se situace komplikuje. Existuje mnoho n\u00e1stroj\u016f pro tvorbu model\u016f, o kter\u00fdch budu hovo\u0159it d\u00e1le. Vytvo\u0159it dobr\u00fd model nen\u00ed snadn\u00e9, ale co d\u00e1l? Z\u00edsk\u00e1n\u00ed zisku z pou\u017eit\u00ed modelu firmou je tak\u00e9 netrivi\u00e1ln\u00ed \u00fakol. J\u00e1dr\u016fm probl\u00e9mu je rozd\u011blen\u00ed analytick\u00fdch a transak\u010dn\u00edch z\u00e1t\u011b\u017e\u00ed a datov\u00fdch model\u016f. Kdy\u017e tr\u00e9nujeme model, obvykle to d\u011bl\u00e1me na historick\u00fdch datech. Ale m\u00edsto, kde m\u00e1 postaven\u00fd model fungovat, je v transak\u010dn\u00edm zpracov\u00e1n\u00ed dat. Jak\u00fd m\u00e1 smysl nejlep\u0161\u00ed model pro detekci podvodn\u00fdch transakc\u00ed, pokud ho spou\u0161t\u00edme jednou za den? Podvodn\u00edci u\u017e d\u00e1vno utekli s pen\u011bzi. Mus\u00edme tr\u00e9novat model na historick\u00fdch datech, ale tak\u00e9 ho mus\u00edme aplikovat v re\u00e1ln\u00e9m \u010dase na nov\u00fdch p\u0159ich\u00e1zej\u00edc\u00edch datech, aby na\u0161e podnikov\u00e9 procesy mohly jednat v souladu s predikcemi proveden\u00fdmi modelem.<\/p>\n<p><\/p>\n<p>ML Toolkit je soubor n\u00e1stroj\u016f, jeho\u017e c\u00edlem je pr\u00e1v\u011b toto: spojen\u00ed model\u016f a transak\u010dn\u00edho prost\u0159ed\u00ed, aby bylo mo\u017en\u00e9 pou\u017eit\u00ed vytvo\u0159en\u00fdch model\u016f p\u0159\u00edmo ve va\u0161ich obchodn\u00edch procesech. Python Gateway je sou\u010d\u00e1st\u00ed ML Toolkit a zaji\u0161\u0165uje integraci s jazykem Python (podobn\u011b jako R Gateway, kter\u00e1 je sou\u010d\u00e1st\u00ed ML Toolkit, zaji\u0161\u0165uje integraci s jazykem R).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">N\u00e1stroje<\/h1>\n<p><\/p>\n<p>Ne\u017e budeme pokra\u010dovat, r\u00e1d bych popsal n\u011bkolik n\u00e1stroj\u016f a knihoven pro Python, kter\u00e9 budeme pou\u017e\u00edvat pozd\u011bji.<\/p>\n<p><\/p>\n<h2 id=\"tehnologii\">Technologie<\/h2>\n<p><\/p>\n<ul>\n<li>Python je interpretovan\u00fd, vysoce \u00farov\u0148ov\u00fd programovac\u00ed jazyk obecn\u00e9ho pou\u017eit\u00ed. Hlavn\u00ed v\u00fdhodou jazyka je rozs\u00e1hl\u00e1 knihovna matematick\u00fdch, ML a AI knihoven. Stejn\u011b jako ObjectScript je to objektov\u011b orientovan\u00fd jazyk, ale v\u0161echno je definov\u00e1no dynamicky, nikoli staticky. Tak\u00e9 v\u0161e je objektem. Pozd\u011bj\u0161\u00ed \u010dl\u00e1nky p\u0159edpokl\u00e1daj\u00ed povrchn\u00ed sezn\u00e1men\u00ed s jazykem. Pokud chcete za\u010d\u00edt se vzd\u011bl\u00e1v\u00e1n\u00edm, doporu\u010duji za\u010d\u00edt s <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">dokumentaci<\/a><\/noindex>.<\/li>\n<li>Pro na\u0161e dal\u0161\u00ed cvi\u010den\u00ed nainstalujte <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python 3.6.7 64 bit<\/a><\/noindex>.<\/li>\n<li>IDE: Pou\u017e\u00edv\u00e1m <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, ale existuj\u00ed tak\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">mnoho<\/a><\/noindex>. Pokud pou\u017e\u00edv\u00e1te Atelier, existuje Eclipse plugin pro v\u00fdvoj\u00e1\u0159e v Pythonu. Pokud pou\u017e\u00edv\u00e1te VS Code, existuje roz\u0161\u00ed\u0159en\u00ed pro Python. <\/li>\n<li>Notebook: m\u00edsto IDE m\u016f\u017eete ps\u00e1t a sd\u00edlet sv\u00e9 skripty v online notebooc\u00edch. Nejpou\u017e\u00edvan\u011bj\u0161\u00ed z nich je <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"biblioteki\">Knihovny<\/h2>\n<p><\/p>\n<p>Zde je (ne\u00fapln\u00fd) seznam knihoven pro strojov\u00e9 u\u010den\u00ed:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.numpy.org\/\">Numpy<\/a><\/noindex> \u2014 z\u00e1kladn\u00ed bal\u00ed\u010dek pro p\u0159esn\u00e9 v\u00fdpo\u010dty.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pandas.pydata.org\/\">Pandas<\/a><\/noindex> \u2014 vysoce v\u00fdkonn\u00e9 datov\u00e9 struktury a n\u00e1stroje pro anal\u00fdzu dat.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a><\/noindex> \u2014 vytv\u00e1\u0159en\u00ed graf\u016f.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a><\/noindex> \u2014 vizualizace dat zalo\u017een\u00e1 na matplotlib.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 metody strojov\u00e9ho u\u010den\u00ed.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xgboost.readthedocs.io\/en\/latest\/index.html\">cuML<\/a><\/noindex> \u2014 algoritmy strojov\u00e9ho u\u010den\u00ed v r\u00e1mci metodologie gradientn\u00edho boosting (Gradient Boosting).<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/radimrehurek.com\/gensim\/\">Gensim<\/a><\/noindex> \u2014 NLP.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/keras.io\/\">Keras<\/a><\/noindex> \u2014 neuronov\u00e9 s\u00edt\u011b.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 platforma pro vytv\u00e1\u0159en\u00ed model\u016f strojov\u00e9ho u\u010den\u00ed.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 platforma pro vytv\u00e1\u0159en\u00ed model\u016f strojov\u00e9ho u\u010den\u00ed zam\u011b\u0159en\u00e1 na Python.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nyoka-pmml\/nyoka\">Nyoka<\/a><\/noindex> \u2014 PMML z r\u016fzn\u00fdch model\u016f.<\/li>\n<\/ul>\n<p><\/p>\n<p>Technologie AI\/ML umo\u017e\u0148uj\u00ed u\u010dinit podnik\u00e1n\u00ed efektivn\u011bj\u0161\u00edm a adaptivn\u011bj\u0161\u00edm. Nav\u00edc dnes se tyto technologie st\u00e1vaj\u00ed snadn\u011bj\u0161\u00edmi k v\u00fdvoji a implementaci. Za\u010dn\u011bte se u\u010dit technologie AI\/ML a jak mohou pomoci va\u0161\u00ed organizaci r\u016fst.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">Instalace<\/h1>\n<p><\/p>\n<p>Existuje n\u011bkolik zp\u016fsob\u016f, jak nainstalovat a pou\u017e\u00edvat Python Gateway:<\/p>\n<p><\/p>\n<ul>\n<li>OS\n<ul>\n<li>Windows<\/li>\n<li>Linux<\/li>\n<li>Mac<\/li>\n<\/ul>\n<\/li>\n<li>Docker\n<ul>\n<li>Pou\u017eijte obraz z DockerHub<\/li>\n<li>Vytvo\u0159te si vlastn\u00ed obraz<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>A\u0165 u\u017e zvol\u00edte jak\u00fdkoli zp\u016fsob instalace, budete pot\u0159ebovat zdrojov\u00fd k\u00f3d. Jedin\u00e9 m\u00edsto pro sta\u017een\u00ed k\u00f3du je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">str\u00e1nka vyd\u00e1n\u00ed<\/a><\/noindex>. Obsahuje testovan\u00e9 stabiln\u00ed verze, sta\u010d\u00ed si vz\u00edt posledn\u00ed. V tuto chv\u00edli je to 0.8, ale \u010dasem budou k dispozici i nov\u00e9. Neklonujte\/neukl\u00e1dejte repozit\u00e1\u0159, st\u00e1hn\u011bte si posledn\u00ed vyd\u00e1n\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"os\">OS<\/h2>\n<p><\/p>\n<p>Pokud instalujete Python Gateway do opera\u010dn\u00edho syst\u00e9mu, nejprve (bez ohledu na opera\u010dn\u00ed syst\u00e9m) mus\u00edte nainstalovat Python. K tomu:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Nainstalujte Python 3.6.7 64 bit<\/a><\/noindex>. Doporu\u010duje se nainstalovat Python do v\u00fdchoz\u00edho adres\u00e1\u0159e.<\/li>\n<li>Nainstalujte modul <code>dill<\/code>: <code>pip install dill<\/code>.<\/li>\n<li>St\u00e1hn\u011bte k\u00f3d ObjectScript (tj. <code>do $system.OBJ.ImportDir(\"C:InterSystemsReposPythoniscpy\", \"*.cls\", \"c\", , 1)<\/code>) do jak\u00e9koli oblasti s produkty. Pokud chcete, aby existuj\u00edc\u00ed oblast podporovala produkty, prove\u010fte: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>Um\u00edst\u011bte <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">callout DLL\/SO\/DYLIB<\/a><\/noindex> do slo\u017eky <code>bin<\/code> va\u0161\u00ed instance InterSystems IRIS. Knihovna mus\u00ed b\u00fdt dostupn\u00e1 na cest\u011b vracen\u00e9 <code>write ##class(isc.py.Callout).GetLib()<\/code>. <\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"windows\">Windows<\/h3>\n<p><\/p>\n<ol>\n<li>Ujist\u011bte se, \u017ee prom\u011bnn\u00e1 prost\u0159ed\u00ed <code>PYTHONHOME<\/code> ukazuje na Python 3.6.7.<\/li>\n<li>Ujist\u011bte se, \u017ee syst\u00e9mov\u00e1 prom\u011bnn\u00e1 prost\u0159ed\u00ed <code>cest<\/code> obsahuje prom\u011bnnou <code>PYTHONHOME<\/code> (nebo adres\u00e1\u0159, na kter\u00fd ukazuje).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>Zkontrolujte, \u017ee prom\u011bnn\u00e1 prost\u0159ed\u00ed <code>cest<\/code> obsahuje <code>\/usr\/lib<\/code> a <code>\/usr\/lib\/x86_64-linux-gnu<\/code>. Pou\u017eijte soubor <code>\/etc\/environment<\/code> k nastaven\u00ed prom\u011bnn\u00fdch prost\u0159ed\u00ed.<\/li>\n<li>V p\u0159\u00edpad\u011b chyb <code>undefined symbol: _Py_TrueStruct<\/code> nainstalujte nastaven\u00ed <code>PythonLib<\/code>. Tak\u00e9 v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme<\/a><\/noindex> je sekce \u0158e\u0161en\u00ed probl\u00e9m\u016f.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"mac\">Mac<\/h3>\n<p><\/p>\n<ol>\n<li>Aktu\u00e1ln\u011b je podporov\u00e1n pouze Python 3.6.7 z <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python.org<\/a><\/noindex>. Zkontrolujte prom\u011bnnou <code>cest<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Pokud jste m\u011bnili prom\u011bnn\u00e9 prost\u0159ed\u00ed, restartujte sv\u016fj produkt InterSystems.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>Pou\u017eit\u00ed kontejner\u016f m\u00e1 \u0159adu v\u00fdhod: <\/p>\n<p><\/p>\n<ul>\n<li>P\u0159enositelnost<\/li>\n<li>Efektivita<\/li>\n<li>Izolace<\/li>\n<li>Lehkost<\/li>\n<li>Immutabilita<\/li>\n<\/ul>\n<p><\/p>\n<p>Pod\u00edvejte se na tuto <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">s\u00e9rii \u010dl\u00e1nk\u016f<\/a><\/noindex> pro v\u00edce informac\u00ed o pou\u017e\u00edv\u00e1n\u00ed Dockeru s produkty InterSystems. <\/p>\n<p><\/p>\n<p>V\u0161echny buildu Python Gateway jsou moment\u00e1ln\u011b zalo\u017eeny na kontejnerov\u00fdch technologi\u00edch. <code>2019.4<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"gotovyy-obraz\">Hotov\u00fd obraz<\/h3>\n<p><\/p>\n<p>Prove\u010fte: <code>docker run -d -p 52773:52773 --name irispy intersystemscommunity\/irispy-community:latest<\/code>, abyste st\u00e1hli a spustili Python Gateway s InterSystems IRIS Community Edition. A to je v\u0161e.<\/p>\n<p><\/p>\n<h3 id=\"sozdayte-svoy-sobstvennyy-obraz\">Vytvo\u0159te si vlastn\u00ed obraz<\/h3>\n<p><\/p>\n<p>Pro sestaven\u00ed docker obrazu spus\u0165te v ko\u0159enov\u00e9m adres\u00e1\u0159i repozit\u00e1\u0159e: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nVe v\u00fdchoz\u00edm nastaven\u00ed se obraz sestavuje na z\u00e1klad\u011b obrazu <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, ale m\u016f\u017eete to zm\u011bnit nastaven\u00edm prom\u011bnn\u00e9 <code>IMAGE<\/code>.<br \/>\nPro sestaven\u00ed z InterSystems IRIS spus\u0165te: `docker build --build-arg IMAGE=store\/intersystems\/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity\/irispy:latest &lt;.<\/p>\n<p><\/p>\n<p>Pot\u00e9 m\u016f\u017eete spustit docker obraz:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">docker run -d \n  -p 52773:52773 \n  -v \/\/:\/mount \n  --name irispy \n  intersystemscommunity\/irispy:latest \n  --key \/mount\/iris.key<\/code><\/pre>\n<p><\/p>\n<p>Pokud pou\u017e\u00edv\u00e1te obraz zalo\u017een\u00fd na InterSystems IRIS Community Edition, nemus\u00edte zad\u00e1vat kl\u00ed\u010d.<\/p>\n<p><\/p>\n<h3 id=\"kommentarii\">Koment\u00e1\u0159e<\/h3>\n<p><\/p>\n<ul>\n<li>Testovac\u00ed proces <code>isc.py.test.Process<\/code> ukl\u00e1d\u00e1 \u0159adu obr\u00e1zk\u016f do do\u010dasn\u00e9ho adres\u00e1\u0159e. Mo\u017en\u00e1 budete cht\u00edt zm\u011bnit tuto cestu na namontovan\u00fd adres\u00e1\u0159. K tomu upravte nastaven\u00ed <code>WorkingDir<\/code> ur\u010den\u00edm namontovan\u00e9ho adres\u00e1\u0159e.<\/li>\n<li>Pro p\u0159\u00edstup k termin\u00e1lu zadejte: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>P\u0159\u00edstup do Port\u00e1lu Spr\u00e1vy Syst\u00e9mu pomoc\u00ed p\u0159ihl\u00e1\u0161en\u00ed <code>SuperUser<\/code>\/<code>SYS<\/code>.<\/li>\n<li>Chcete-li zastavit kontejner, zadejte: <code>docker stop irispy &amp;&amp; docker rm --force irispy<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"proverka-ustanovki\">Kontrola instalace<\/h2>\n<p><\/p>\n<p>Pot\u00e9, co jste nainstalovali Python Gateway, je dobr\u00e9 ov\u011b\u0159it, \u017ee funguje. Zadejte tento k\u00f3d do termin\u00e1lu InterSystems IRIS:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Callout).Setup() \nset sc = ##class(isc.py.Main).SimpleString(\"x='HELLO'\", \"x\", , .var).\nwrite var<\/code><\/pre>\n<p><\/p>\n<p>V\u00fdsledkem by m\u011blo b\u00fdt vyps\u00e1no <code>HELLO<\/code> \u2014 hodnota Python prom\u011bnn\u00e9 <code>x<\/code>. Pokud je vracen\u00fd stav <code>sc<\/code> chybou nebo <code>var<\/code> pr\u00e1zdno, zkontrolujte <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme \u2014 sekce \u0158e\u0161en\u00ed probl\u00e9m\u016f<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Python Gateway je nainstalov\u00e1n a ujistili jste se, \u017ee funguje. Je \u010das za\u010d\u00edt ho pou\u017e\u00edvat!<br \/>\nHlavn\u00ed rozhran\u00ed k Pythonu je <code>isc.py.Main<\/code>. Nab\u00edz\u00ed n\u00e1sleduj\u00edc\u00ed skupiny metod (v\u0161e vrac\u00ed <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>Spu\u0161t\u011bn\u00ed k\u00f3du<\/li>\n<li>P\u0159enos dat<\/li>\n<li>Pomocn\u00e9<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">Spu\u0161t\u011bn\u00ed k\u00f3du<\/h2>\n<p><\/p>\n<p>Tyto metody umo\u017e\u0148uj\u00ed spou\u0161t\u011bt libovoln\u00fd Python k\u00f3d.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 to je hlavn\u00ed metoda. P\u0159ij\u00edm\u00e1 4 voliteln\u00e9 argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 \u0159et\u011bzec k\u00f3du k vykon\u00e1n\u00ed. Symbol pro nov\u00fd \u0159\u00e1dek: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 n\u00e1zev prom\u011bnn\u00e9 pro n\u00e1vrat.<\/li>\n<li><code>serialization<\/code> \u2014 jak serializovat <code>returnVariable<\/code>. 0 \u2014 string (v\u00fdchoz\u00ed), 1 \u2014 repr.<\/li>\n<li><code>result<\/code> \u2014 ByRef odkaz na prom\u011bnnou, do kter\u00e9 je zapisov\u00e1na hodnota <code>returnVariable<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>V p\u0159edchoz\u00edm jsme provedli:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).SimpleString(\"x='HELLO'\", \"x\", , .var).<\/code><\/pre>\n<p><\/p>\n<p>V tomto p\u0159\u00edkladu p\u0159i\u0159azujeme prom\u011bnn\u00e9 Python <code>x<\/code> hodnotu <code>Ahoj<\/code> a chceme vr\u00e1tit hodnotu Python prom\u011bnn\u00e9 <code>x<\/code> do prom\u011bnn\u00e9 ObjectScript <code>var<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"executecode\">ExecuteCode<\/h3>\n<p><\/p>\n<p>ExecuteCode je bezpe\u010dn\u011bj\u0161\u00ed a m\u00e9n\u011b omezenou alternativou <code>SimpleString<\/code>.<br \/>\n\u0158et\u011bzce v platform\u011b InterSystems IRIS jsou omezeny na 3 641 144 znaky, a pokud chcete spustit del\u0161\u00ed \u00fasek k\u00f3du, mus\u00edte pou\u017e\u00edt proudy.<br \/>\nP\u0159ij\u00edm\u00e1 dva argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 \u0159et\u011bzec nebo proud Python k\u00f3du k vykon\u00e1n\u00ed.<\/li>\n<li><code>variable<\/code> \u2014 (voliteln\u011b) p\u0159i\u0159azuje v\u00fdsledek vykon\u00e1n\u00ed <code>code<\/code> t\u00e9to Python prom\u011bnn\u00e9.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pou\u017eijte nap\u0159\u00edklad:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).ExecuteCode(\"2*3\", \"y\").<\/code><\/pre>\n<p><\/p>\n<p>V tomto p\u0159\u00edkladu n\u00e1sob\u00edme 2 t\u0159emi a zapisujeme v\u00fdsledek do Python prom\u011bnn\u00e9 <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">P\u0159enos dat<\/h2>\n<p><\/p>\n<p>P\u0159en\u00e1\u0161ejte data mezi Pythonem a zp\u011bt.<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Python -&gt; InterSystems IRIS<\/h3>\n<p><\/p>\n<p>Existuj\u00ed 4 zp\u016fsoby, jak z\u00edskat hodnotu Python prom\u011bnn\u00e9 v InterSystems IRIS, v z\u00e1vislosti na pot\u0159ebn\u00e9 serializaci:<\/p>\n<p><\/p>\n<ul>\n<li><code>\u0158et\u011bzec<\/code> pro z\u00e1kladn\u00ed datov\u00e9 typy a lad\u011bn\u00ed.<\/li>\n<li><code>Repr<\/code> pro uchov\u00e1v\u00e1n\u00ed jednoduch\u00fdch objekt\u016f a lad\u011bn\u00ed.<\/li>\n<li><code>JSON<\/code> pro snadnou manipulaci s daty na stran\u011b InterSystems IRIS.<\/li>\n<li><code>Pickle<\/code> pro ukl\u00e1d\u00e1n\u00ed objekt\u016f.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tyto metody umo\u017e\u0148uj\u00ed z\u00edskat prom\u011bnn\u00e9 z Pythonu ve form\u011b \u0159et\u011bzce nebo proud\u016f.<\/p>\n<p><\/p>\n<ul>\n<li><code>GetVariable(variable, serialization, .stream, useString)<\/code> \u2014 z\u00edskat <code>serialization<\/code> prom\u011bnnou <code>variable<\/code> v <code>stream<\/code>. Pokud <code>useString<\/code> je-li 1 a serializace je um\u00edst\u011bna do \u0159et\u011bzce, pak se vr\u00e1t\u00ed \u0159et\u011bzec a ne proud.<\/li>\n<li><code>GetVariableJson(variable, .stream, useString)<\/code> \u2014 z\u00edskat JSON serializaci prom\u011bnn\u00e9.<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> - z\u00edskat Pickle (nebo Dill) serializaci prom\u011bnn\u00e9.<\/li>\n<\/ul>\n<p><\/p>\n<p>Zkus\u00edme z\u00edskat na\u0161i prom\u011bnnou <code>y<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).GetVariable(\"y\", , .val, 1)\nwrite val\n&gt;6<\/code><\/pre>\n<p><\/p>\n<h3 id=\"intersystems-iris---python\">InterSystems IRIS -&gt; Python<\/h3>\n<p><\/p>\n<p>Na\u010d\u00edt\u00e1me data z InterSystems IRIS do Pythonu.<\/p>\n<p><\/p>\n<ul>\n<li><code>ExecuteQuery(query, variable, type, namespace)<\/code> \u2014 vytv\u00e1\u0159\u00ed datovou sadu (pandas <code>dataframe<\/code> nebo <code>list<\/code>) z sql dotazu a nastav\u00ed ji do prom\u011bnn\u00e9 Pythonu <code>variable<\/code>. Bal\u00ed\u010dek <code>isc.py<\/code> mus\u00ed b\u00fdt dostupn\u00fd v oblasti <code>namespace<\/code> \u2014 zde se bude prov\u00e1d\u011bt dotaz.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 na\u010d\u00edt\u00e1 data glob\u00e1lu <code>global<\/code> z subscriptu <code>start<\/code> do <code>end<\/code> do Pythonu jako prom\u011bnnou typu <code>type<\/code>: <code>list<\/code>, nebo pandas <code>dataframe<\/code>. Popis voliteln\u00fdch argument\u016f <code>maskovat<\/code> and <code>labels<\/code> je k dispozici v dokumentaci t\u0159\u00eddy a repozit\u00e1\u0159i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Data Transfer docs<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 na\u010d\u00edt\u00e1 data t\u0159\u00eddy <code>t\u0159\u00edda<\/code> z id <code>start<\/code> do <code>end<\/code> do Pythonu jako prom\u011bnnou typu <code>type<\/code>: <code>list<\/code>, nebo pandas <code>dataframe<\/code>. <code>&gt;, nebo je lze definovat prost\u0159ednictv\u00edm syst\u00e9mov\u00e9 vlastnosti<\/code> \u2014 seznam (odd\u011blova\u010d \u2013 \u010d\u00e1rka) vlastnost\u00ed t\u0159\u00eddy, kter\u00e9 je t\u0159eba na\u010d\u00edst do datov\u00e9 sady. Podporuj\u00ed se masky <code>*<\/code> a <code>?<\/code>. Ve v\u00fdchoz\u00edm nastaven\u00ed \u2014 <code>*<\/code> (v\u0161echny vlastnosti). Vlastnost <code>%%CLASSNAME<\/code> ignorov\u00e1n.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 na\u010d\u00edt\u00e1 data tabulky <code>table<\/code> z id <code>start<\/code> do <code>end<\/code> do Pythonu.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> \u2014 je univerz\u00e1ln\u00ed (jak\u00fdkoli platn\u00fd SQL dotaz bude p\u0159ed\u00e1n do Pythonu). Nicm\u00e9n\u011b, <code>ExecuteGlobal<\/code> a jeho ob\u00e1lky <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> maj\u00ed ur\u010dit\u00e1 omezen\u00ed. Jsou mnohem rychlej\u0161\u00ed (3-5kr\u00e1t rychlej\u0161\u00ed ne\u017e ODBC ovlada\u010de a 20kr\u00e1t rychlej\u0161\u00ed <code>ExecuteQuery<\/code>). Dal\u0161\u00ed informace v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Data Transfer docs<\/a><\/noindex>.<br \/>\nV\u0161echny tyto metody podporuj\u00ed p\u0159enos dat z jak\u00e9koli oblasti. Bal\u00ed\u010dek <code>isc.py<\/code> mus\u00ed b\u00fdt dostupn\u00fd ve c\u00edlov\u00e9 oblasti.<\/p>\n<p><\/p>\n<h3 id=\"executequery\">ExecuteQuery<\/h3>\n<p><\/p>\n<p><code>ExecuteQuery(request, variable, type, namespace)<\/code> \u2014 p\u0159enos v\u00fdsledk\u016f jak\u00e9hokoli platn\u00e9ho SQL dotazu do Pythonu. To je nejpomalej\u0161\u00ed metoda p\u0159enosu dat. Pou\u017eijte ji, pokud <code>ExecuteGlobal<\/code> a jeho ob\u00e1lky nejsou dostupn\u00e9.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>query<\/code> \u2014 sql dotaz.<\/li>\n<li><code>variable<\/code> \u2014 n\u00e1zev Python prom\u011bnn\u00e9, do kter\u00e9 se ukl\u00e1daj\u00ed data.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> nebo Pandas <code>dataframe<\/code>.<\/li>\n<li><code>namespace<\/code> \u2014 oblast, ve kter\u00e9 se bude prov\u00e1d\u011bt dotaz.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeglobal\">ExecuteGlobal<\/h3>\n<p><\/p>\n<p><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 p\u0159enos glob\u00e1lu do Pythonu.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>global<\/code> \u2014 jm\u00e9no glob\u00e1lu bez <code>^<\/code><\/li>\n<li><code>variable<\/code> \u2014 n\u00e1zev Python prom\u011bnn\u00e9, do kter\u00e9 se ukl\u00e1daj\u00ed data.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> nebo Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 prvn\u00ed subscript glob\u00e1lu. Povinn\u00e9 <code>%Integer<\/code>.<\/li>\n<li><code>end<\/code> \u2014 posledn\u00ed subscript glob\u00e1lu. Povinn\u00e9 <code>%Integer<\/code>.<\/li>\n<li><code>maskovat<\/code> \u2014 maska hodnot glob\u00e1lu. Maska m\u016f\u017ee b\u00fdt krat\u0161\u00ed ne\u017e po\u010det pol\u00ed v glob\u00e1lu (v tomto p\u0159\u00edpad\u011b budou pole na konci p\u0159esko\u010dena). Jak form\u00e1tovat masku:\n<ul>\n<li><code>+<\/code> p\u0159edat hodnotu tak, jak je.<\/li>\n<li><code>-<\/code> p\u0159esko\u010dit hodnotu.<\/li>\n<li><code>b<\/code> \u2014 logick\u00fd typ (<code>0<\/code> \u2014 <code>P\u0159i prov\u00e1d\u011bn\u00ed sc\u00e9n\u00e1\u0159e Nornir se do konzole vyprodukuj\u00ed podrobn\u00e9 logy.<\/code>, v\u0161echno ostatn\u00ed \u2014 <code>Pravda<\/code>).<\/li>\n<li><code>\u2013 perioda ant\u00e9nn\u00ed m\u0159\u00ed\u017eky (vzd\u00e1lenost mezi sousedn\u00edmi prvky),<\/code> \u2014 datum (z $horolog, na Windows od 1970, na Linuxu od 1900).<\/li>\n<li><code>t<\/code> \u2014 \u010das ($horolog, sekundy po p\u016flnoci).<\/li>\n<li><code>m<\/code> \u2014 \u010dasov\u00e1 zna\u010dka (\u0159et\u011bzec form\u00e1tu ROK-M\u011aS\u00cdC-DEN HODINA:MINUTA:SEKUNDA).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %List n\u00e1zv\u016f sloupc\u016f. Prvn\u00edm prvkem je n\u00e1zev subskriptu.<\/li>\n<li><code>namespace<\/code> \u2014 oblast, ve kter\u00e9 se bude prov\u00e1d\u011bt dotaz.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeclass\">ExecuteClass<\/h3>\n<p><\/p>\n<p>Obal nad <code>ExecuteGlobal<\/code>. Na z\u00e1klad\u011b definice t\u0159\u00eddy p\u0159ipravuje vol\u00e1n\u00ed <code>ExecuteGlobal<\/code> a vyvol\u00e1v\u00e1 ho.<\/p>\n<p><\/p>\n<p><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 p\u0159ed\u00e1v\u00e1n\u00ed dat t\u0159\u00eddy v Pythonu.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>t\u0159\u00edda<\/code> \u2014 n\u00e1zev t\u0159\u00eddy<\/li>\n<li><code>variable<\/code> \u2014 n\u00e1zev Python prom\u011bnn\u00e9, do kter\u00e9 se ukl\u00e1daj\u00ed data.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> nebo Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 po\u010d\u00e1te\u010dn\u00ed Id.<\/li>\n<li><code>end<\/code> \u2014 koncov\u00e9 Id<\/li>\n<li><code>&gt;, nebo je lze definovat prost\u0159ednictv\u00edm syst\u00e9mov\u00e9 vlastnosti<\/code> \u2014 seznam (odd\u011blova\u010d \u2013 \u010d\u00e1rka) vlastnost\u00ed t\u0159\u00eddy, kter\u00e9 je t\u0159eba na\u010d\u00edst do datov\u00e9 sady. Podporuj\u00ed se masky <code>*<\/code> a <code>?<\/code>. Ve v\u00fdchoz\u00edm nastaven\u00ed \u2014 <code>*<\/code> (v\u0161echny vlastnosti). Vlastnost <code>%%CLASSNAME<\/code> ignorov\u00e1n.<\/li>\n<li><code>namespace<\/code> \u2014 oblast, ve kter\u00e9 se bude prov\u00e1d\u011bt dotaz.<\/li>\n<\/ul>\n<p><\/p>\n<p>V\u0161echny vlastnosti se p\u0159ed\u00e1vaj\u00ed tak, jak jsou, krom\u011b vlastnost\u00ed typ\u016f <code>te<\/code>, <code>%Time<\/code>, <code>%Boolean<\/code> a <code>%TimeStamp<\/code> \u2014 tyto jsou p\u0159ev\u00e1d\u011bny na odpov\u00eddaj\u00edc\u00ed t\u0159\u00eddy Pythonu.<\/p>\n<p><\/p>\n<h3 id=\"executetable\">ExecuteTable<\/h3>\n<p><\/p>\n<p>Obal nad <code>ExecuteClass<\/code>. P\u0159ev\u00e1d\u00ed n\u00e1zev tabulky na n\u00e1zev t\u0159\u00eddy a vyvol\u00e1v\u00e1 <code>ExecuteClass<\/code>. Podpis:<\/p>\n<p><\/p>\n<p><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 p\u0159ed\u00e1n\u00ed dat tabulky v Pythonu.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>table<\/code> \u2014 n\u00e1zev tabulky.<br \/>\nV\u0161echny ostatn\u00ed argumenty se p\u0159ed\u00e1vaj\u00ed tak, jak jsou, do <code>ExecuteClass<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zametki\">Pozn\u00e1mky<\/h3>\n<p><\/p>\n<ul>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> pracuj\u00ed stejn\u011b rychle.<\/li>\n<li><code>ExecuteGlobal<\/code> 20kr\u00e1t rychleji ne\u017e <code>ExecuteQuery<\/code> na velk\u00fdch datov\u00fdch sad\u00e1ch (\u010das p\u0159enosu v\u00edce ne\u017e &gt;0.01 sekundy).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> pracuj\u00ed na glob\u00e1lech s touto strukturou: <code>^global(key) = $lb(prop1, prop2, ..., propN)<\/code> kde <code>key<\/code> \u2014 cel\u00e9 \u010d\u00edslo.<\/li>\n<li>Pro <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> podporovan\u00fd rozsah hodnot <code>te<\/code> odpov\u00edd\u00e1 rozsahu <code>mktime<\/code> a z\u00e1vis\u00ed na OS (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/c-runtime-library\/reference\/mktime-mktime32-mktime64?view=vs-2019\">windows<\/a><\/noindex>: 1970-01-01, <noindex><a rel=\"nofollow\" href=\"https:\/\/linux.die.net\/man\/3\/mktime\">linux<\/a><\/noindex> 1900-01-01, <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/System\/Conceptual\/ManPages_iPhoneOS\/man3\/mktime.3.html\">mac<\/a><\/noindex>). Pou\u017eijte <code>%TimeStamp<\/code>pro p\u0159ed\u00e1n\u00ed dat mimo tento rozsah nebo pou\u017eijte pandas dataframe, proto\u017ee toto omezen\u00ed plat\u00ed pouze pro seznam.<\/li>\n<li>Pro <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> v\u0161echny argumenty krom\u011b zdroje dat (glob\u00e1lu, t\u0159\u00eddy nebo tabulky) a prom\u011bnn\u00e9 jsou voliteln\u00e9.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"primery\">P\u0159\u00edklady<\/h2>\n<p><\/p>\n<p>Testovac\u00ed t\u0159\u00edda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/isc\/py\/test\/Person.cls\">isc.py.test.Person<\/a><\/noindex> obsahuje metodu, kter\u00e1 demonstruje v\u0161echny mo\u017enosti p\u0159ed\u00e1v\u00e1n\u00ed dat:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set global = \"isc.py.test.PersonD\"\nset class = \"isc.py.test.Person\"\nset table = \"isc_py_test.Person\"\nset query = \"SELECT * FROM isc_py_test.Person\"\n\n\/\/ Spole\u010dn\u00e9 argumenty\nset variable = \"df\"\nset type = \"dataframe\"\nset start = 1\nset end = $g(^isc.py.test.PersonD, start)\n\n\/\/ Zp\u016fsob 0: ExecuteGlobal bez argument\u016f\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)\n\n\/\/ Zp\u016fsob 1: ExecuteGlobal s argumenty    \n\/\/ P\u0159i p\u0159ed\u00e1v\u00e1n\u00ed glob\u00e1lu jsou n\u00e1zvy pol\u00ed zad\u00e1ny ru\u010dn\u011b\n\/\/ globalKey - n\u00e1zev subskriptu \nset labels = $lb(\"globalKey\", \"Name\", \"DOB\", \"TS\", \"RandomTime\", \"AgeYears\", \"AgeDecimal\", \"AgeDouble\", \"Bool\")\n\n\/\/ mask obsahuje o 1 prvek m\u00e9n\u011b ne\u017e labels, proto\u017ee \"globalKey\" - n\u00e1zev subskryptu\n\/\/ P\u0159eskakujeme %%CLASSNAME\nset mask = \"-+dmt+++b\"\n\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)\n\n\/\/ Zp\u016fsob 2: ExecuteClass\nset sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)\n\n\/\/ Zp\u016fsob 3: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)\n\n\/\/ Zp\u016fsob 4: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)<\/code><\/pre>\n<p><\/p>\n<p>Zavolejte metodu <code>do ##class(isc.py.test.Person).Test()<\/code> aby se pod\u00edvali, jak v\u0161echny metody p\u0159ed\u00e1v\u00e1n\u00ed dat funguj\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"vspomogatelnye-metody\">Pomocn\u00e9 metody<\/h2>\n<p><\/p>\n<ul>\n<li><code>GetVariableInfo(variable, serialization, .defined, .type, .length)<\/code> \u2014 z\u00edskejte informace o prom\u011bnn\u00e9: zda je definov\u00e1na, t\u0159\u00edda a d\u00e9lka serializace.<\/li>\n<li><code>GetVariableDefined(variable, .defined)<\/code> \u2014 zda je prom\u011bnn\u00e1 definov\u00e1na.<\/li>\n<li><code>GetVariableType(variable, .type)<\/code> \u2014 z\u00edskejte t\u0159\u00eddu prom\u011bnn\u00e9.<\/li>\n<li><code>GetStatus()<\/code> \u2014 z\u00edskejte a odstra\u0148te posledn\u00ed v\u00fdjimku na stran\u011b Python.<\/li>\n<li><code>GetModuleInfo(module, .imported, .alias)<\/code> \u2014 z\u00edskejte prom\u011bnnou modulu a stav importu.<\/li>\n<li><code>GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)<\/code> \u2014 z\u00edskejte informace o funkci.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">Interoperabilita<\/h1>\n<p><\/p>\n<p>Nau\u010dili jste se volat Python Gateway z termin\u00e1lu, nyn\u00ed za\u010dneme pou\u017e\u00edvat jej v produkci. Z\u00e1kladem interakce s Pythonem v tomto re\u017eimu \u2014 <code>isc.py.ens.Operation<\/code>. Umo\u017e\u0148uje n\u00e1m:<\/p>\n<p><\/p>\n<ul>\n<li>Prov\u00e1d\u011bt k\u00f3d v Pythonu<\/li>\n<li>Ukl\u00e1dat\/Obnovovat Python kontext<\/li>\n<li>Na\u010d\u00edtat a z\u00edsk\u00e1vat data z Pythonu<\/li>\n<\/ul>\n<p><\/p>\n<p>V z\u00e1sad\u011b je Python operace ob\u00e1lka nad <code>isc.py.Main<\/code>. Operace <code>isc.py.ens.Operation<\/code> umo\u017e\u0148uje interakci s procesem Python z produkt\u016f InterSystems IRIS. Podporov\u00e1no je p\u011bt po\u017eadavk\u016f:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> pro prov\u00e1d\u011bn\u00ed Python k\u00f3du. Vrac\u00ed <code>isc.py.msg.ExecutionResponse<\/code> s v\u00fdsledkem proveden\u00ed a hodnotami po\u017eadovan\u00fdch prom\u011bnn\u00fdch.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> pro prov\u00e1d\u011bn\u00ed Python k\u00f3du. Vrac\u00ed <code>isc.py.msg.StreamExecutionResponse<\/code> v\u00fdsledkem proveden\u00ed a hodnotami po\u017eadovan\u00fdch prom\u011bnn\u00fdch. Analog <code>isc.py.msg.ExecutionRequest<\/code>, ale p\u0159ij\u00edm\u00e1 a vrac\u00ed toky m\u00edsto \u0159et\u011bzc\u016f.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> pro p\u0159ed\u00e1n\u00ed v\u00fdsledku proveden\u00ed SQL dotazu. Vrac\u00ed <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code>\/<code>isc.py.msg.ClassRequest<\/code>\/<code>isc.py.msg.TableRequest<\/code> pro p\u0159enos dat glob\u00e1ln\u00ed \/ t\u0159\u00eddy \/ tabulky. Vrac\u00ed <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.SaveRequest<\/code> pro ulo\u017een\u00ed Python kontextu. Vrac\u00ed <code>Ens.StringResponse<\/code> s identifik\u00e1torem kontextu.<\/li>\n<li>\n<p><code>isc.py.msg.RestoreRequest<\/code> pro obnoven\u00ed Python kontextu.<\/p>\n<p><\/p>\n<p>Krom\u011b toho, <code>isc.py.ens.Operation<\/code> m\u00e1 dv\u011b nastaven\u00ed:<\/p>\n<p><\/p>\n<ul>\n<li><code>Initializer<\/code> \u2014 v\u00fdb\u011br t\u0159\u00eddy implementuj\u00edc\u00ed rozhran\u00ed <code>isc.py.init.Abstract<\/code>. M\u016f\u017ee b\u00fdt pou\u017eit k na\u010d\u00edt\u00e1n\u00ed funkc\u00ed, modul\u016f, t\u0159\u00edd atd. Spou\u0161t\u00ed se jednou p\u0159i spu\u0161t\u011bn\u00ed procesu.<\/li>\n<li><code>PythonLib<\/code> \u2014 (pouze pro Linux) pokud vid\u00edte chyby p\u0159i na\u010d\u00edt\u00e1n\u00ed, nastavte jeho hodnotu na <code>libpython3.6m.so<\/code> nebo dokonce na \u00faplnou cestu k Python knihovn\u011b. <\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sozdanie-biznes-processov\">Vytv\u00e1\u0159en\u00ed obchodn\u00edch proces\u016f<\/h2>\n<p><\/p>\n<p>K dispozici jsou dv\u011b t\u0159\u00eddy, kter\u00e9 usnad\u0148uj\u00ed v\u00fdvoj obchodn\u00edch proces\u016f:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.ens.ProcessUtils<\/code> umo\u017e\u0148uje extrahovat anotace z aktivit s n\u00e1hradou prom\u011bnn\u00fdch.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> umo\u017e\u0148uje snadno testovat obchodn\u00ed procesy s Pythonem. M\u016f\u017ee vykon\u00e1vat obchodn\u00ed proces (\u010d\u00e1sti v jazyce Python) v aktu\u00e1ln\u00edm procesu.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"podstanovka-peremennyh\">N\u00e1hrada prom\u011bnn\u00fdch<\/h2>\n<p><\/p>\n<p>Ve\u0161ker\u00e9 obchodn\u00ed procesy zd\u011bd\u011bn\u00e9 od <code>isc.py.ens.ProcessUtils<\/code>, mohou pou\u017e\u00edvat metodu <code>GetAnnotation(name)<\/code> k z\u00edsk\u00e1n\u00ed hodnoty anotace aktivity podle jej\u00edho n\u00e1zvu. Anotace aktivity m\u016f\u017ee obsahovat prom\u011bnn\u00e9, kter\u00e9 budou vyhodnoceny na stran\u011b InterSystems IRIS p\u0159ed jejich p\u0159ed\u00e1n\u00edm do Pythonu. Zde je syntaxe n\u00e1hrady prom\u011bnn\u00fdch:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 zavol\u00e1n\u00ed metody<\/li>\n<li><code>#{expr}<\/code> \u2014 vykonat k\u00f3d v jazyce ObjectScript.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u0159\u00edklad je k dispozici v testovac\u00edm obchodn\u00edm procesu <code>isc.py.test.Process<\/code>, nap\u0159\u00edklad v aktivit\u011b <code>Correlation Matrix: Graph<\/code>: <code>f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')<\/code>. V tomto p\u0159\u00edkladu:<\/p>\n<p><\/p>\n<ul>\n<li><code>#{process.WorkDirectory}<\/code> vrac\u00ed vlastnost WorkDirectory objektu <code>process<\/code>, co\u017e je instance t\u0159\u00eddy <code>isc.py.test.Process<\/code> tj. aktu\u00e1ln\u00ed obchodn\u00ed proces.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> vol\u00e1 metodu <code>Integer<\/code> t\u0159\u00eddy <code>%PopulateUtils<\/code>, s p\u0159edan\u00fdmi argumenty <code>1<\/code> a <code>100<\/code>, vracej\u00edc\u00ed n\u00e1hodn\u00e9 cel\u00e9 \u010d\u00edslo v rozmez\u00ed <code>1...100<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"testovyy-biznes-process\">Testovac\u00ed obchodn\u00ed proces<\/h2>\n<p><\/p>\n<p>Testovac\u00ed produkt a testovac\u00ed obchodn\u00ed proces jsou k dispozici ve v\u00fdchoz\u00edm nastaven\u00ed jako sou\u010d\u00e1st Python Gateway. Pro jejich pou\u017eit\u00ed:<\/p>\n<p><\/p>\n<ol>\n<li>V termin\u00e1lu OS spus\u0165te: <code>pip install pandas matplotlib seaborn<\/code>. <\/li>\n<li>V termin\u00e1lu InterSystems IRIS spus\u0165te: <code>do ##class(isc.py.test.CannibalizationData).Import()<\/code> pro napln\u011bn\u00ed testovac\u00edch dat.<\/li>\n<li>Spus\u0165te produkt <code>isc.py.test.Production<\/code>.<\/li>\n<li>Odeslat po\u017eadavek typu <code>Ens.Request<\/code> v <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Pod\u00edvejme se, jak to v\u0161echno funguje dohromady. Otev\u0159ete <code>isc.py.test.Process<\/code> v editoru BPL:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/6f83b22e0167e2699d285f3e32bfe373.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"ispolnenie-koda-1\">Spu\u0161t\u011bn\u00ed k\u00f3du<\/h3>\n<p><\/p>\n<p>Nejd\u016fle\u017eit\u011bj\u0161\u00ed vol\u00e1n\u00ed \u2014 vykon\u00e1n\u00ed Python k\u00f3du:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/dafa6b8c878ae937b194ff577b86dc89.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pou\u017e\u00edv\u00e1 se po\u017eadavek <code>isc.py.msg.ExecutionRequest<\/code>, zde jsou jeho vlastnosti:<\/p>\n<p><\/p>\n<ul>\n<li><code>K\u00f3d<\/code> \u2014 Python k\u00f3d.<\/li>\n<li><code>SeparateLines<\/code> \u2014 m\u00e1 b\u00fdt k\u00f3d rozd\u011blen na \u0159\u00e1dky pro vykon\u00e1n\u00ed. <code>$c(10)<\/code> (<code>n<\/code>) se pou\u017e\u00edv\u00e1 k rozd\u011blen\u00ed \u0159et\u011bzc\u016f. V\u0161imn\u011bte si, \u017ee zpracov\u00e1vat zpr\u00e1vu jako celek se nedoporu\u010duje, tato funkce je ur\u010dena pouze pro zpracov\u00e1n\u00ed <code>def<\/code> a podobn\u00fdch v\u00edce\u0159\u00e1dkov\u00fdch v\u00fdraz\u016f. Ve v\u00fdchoz\u00edm nastaven\u00ed <code>0<\/code>.<\/li>\n<li><code>Prom\u011bnn\u00e9<\/code> \u2014 se jedn\u00e1 o seznam prom\u011bnn\u00fdch odd\u011blen\u00fdch \u010d\u00e1rkami, kter\u00e9 budou p\u0159id\u00e1ny do odpov\u011bdi.<\/li>\n<li><code>Serializace<\/code> \u2014 Jak serializovat prom\u011bnn\u00e9, kter\u00e9 chceme vr\u00e1tit. Mo\u017enosti: <code>Str<\/code>, <code>Repr<\/code>, <code>JSON<\/code>, <code>Pickle<\/code> a <code>Dill<\/code>, ve v\u00fdchoz\u00edm nastaven\u00ed <code>Str<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>V na\u0161em p\u0159\u00edpad\u011b jen nastavujeme vlastnost <code>K\u00f3d<\/code>, tak\u017ee v\u0161echny ostatn\u00ed vlastnosti pou\u017e\u00edvaj\u00ed v\u00fdchoz\u00ed hodnoty. Nastavujeme ji vol\u00e1n\u00edm <code>process.GetAnnotation(\"Import pandas\")<\/code>, kter\u00e9 b\u011bhem b\u011bhu vrac\u00ed anotaci po proveden\u00ed substituce prom\u011bnn\u00fdch. Nakonec k\u00f3d <code>import pandas as pd<\/code> bude p\u0159ed\u00e1n do Pythonu. <code>GetAnnotation<\/code> m\u016f\u017ee b\u00fdt u\u017eite\u010dn\u00e1 pro z\u00edsk\u00e1n\u00ed v\u00edce\u0159\u00e1dkov\u00fdch Python skript\u016f, ale na tento zp\u016fsob z\u00edsk\u00e1v\u00e1n\u00ed k\u00f3du nejsou \u017e\u00e1dn\u00e1 omezen\u00ed. M\u016f\u017eete nastavit vlastnost <code>K\u00f3d<\/code> jak\u00fdmkoliv zp\u016fsobem, kter\u00fd v\u00e1m vyhovuje.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Z\u00edsk\u00e1v\u00e1n\u00ed prom\u011bnn\u00fdch<\/h3>\n<p><\/p>\n<p>Dal\u0161\u00ed zaj\u00edmav\u00e9 vol\u00e1n\u00ed s pou\u017eit\u00edm <code>isc.py.msg.ExecutionRequest<\/code> \u2014 <code>Korela\u010dn\u00ed matice: Tabulka<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/8824e49ecaa448551c830e9a90eb5781.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vypo\u010d\u00edt\u00e1v\u00e1 Korela\u010dn\u00ed matici na stran\u011b Pythonu a extrahuje prom\u011bnnou <code>corrmat<\/code> zp\u011bt do InterSystems IRIS ve form\u00e1tu JSON, tak, \u017ee nastav\u00edme vlastnosti dotazu:<\/p>\n<p><\/p>\n<ul>\n<li><code>Prom\u011bnn\u00e9<\/code>: <code>\"corrmat\"<\/code><\/li>\n<li><code>Serializace<\/code>: <code>\"JSON\"<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>M\u016f\u017eeme vid\u011bt v\u00fdsledky ve Visual Trace:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/713bcade8cb1018f2974cba2cab712b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A pokud tuto hodnotu budeme pot\u0159ebovat v BP, m\u016f\u017eeme ji z\u00edskat takto: <code>callresponse.Variables.GetAt(\"corrmat\")<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">P\u0159enos dat<\/h3>\n<p><\/p>\n<p>D\u00e1le budeme mluvit o p\u0159ed\u00e1v\u00e1n\u00ed dat z InterSystems IRIS do Pythonu, v\u0161echny dotazy na p\u0159ed\u00e1v\u00e1n\u00ed dat implementuj\u00ed rozhran\u00ed <code>isc.py.msg.DataRequest<\/code>, kter\u00e9 poskytuje n\u00e1sleduj\u00edc\u00ed vlastnosti:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variable<\/code> \u2014 prom\u011bnn\u00e1 Pythonu, do kter\u00e9 se zapisuj\u00ed data.<\/li>\n<li><code>Type<\/code> \u2014 typ prom\u011bnn\u00e9: <code>dataframe<\/code> (pandas dataframe) nebo <code>list<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 oblast, ze kter\u00e9 z\u00edsk\u00e1v\u00e1me data. Bal\u00ed\u010dek <code>isc.py<\/code> mus\u00ed b\u00fdt v t\u00e9to oblasti dostupn\u00fd. M\u016f\u017ee to b\u00fdt oblast bez podpory produkt\u016f.<\/li>\n<\/ul>\n<p><\/p>\n<p>Na z\u00e1klad\u011b tohoto rozhran\u00ed byly implementov\u00e1ny 4 t\u0159\u00eddy dotaz\u016f:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 nastavte vlastnost <code>Dotaz<\/code> pro p\u0159ed\u00e1n\u00ed SQL dotazu.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 nastavte vlastnost <code>Class<\/code> pro p\u0159ed\u00e1n\u00ed dat t\u0159\u00eddy.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 nastavte vlastnost <code>Table<\/code> pro p\u0159ed\u00e1n\u00ed dat tabulky.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 nastavte vlastnost <code>Global<\/code> pro p\u0159ed\u00e1n\u00ed dat glob\u00e1lu.<\/li>\n<\/ul>\n<p><\/p>\n<p>V testovac\u00edm procesu se pod\u00edvejte na aktivitu <code>RAW<\/code>, kde <code>isc.py.msg.QueryRequest<\/code> zobrazenou v akci.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/f6a2a520594341b9d37110bcd24b1015.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"sohranenievosstanovlenie-python-konteksta\">Ulo\u017een\u00ed\/obnoven\u00ed kontextu Pythonu<\/h3>\n<p><\/p>\n<p>Nakonec m\u016f\u017eeme ulo\u017eit kontext Pythonu do InterSystems IRIS, abychom to ud\u011blali, ode\u0161leme <code>isc.py.msg.SaveRequest<\/code> s argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>Maska<\/code> \u2014 Ukl\u00e1daj\u00ed se pouze prom\u011bnn\u00e9 vyhovuj\u00edc\u00ed masce. Podporuj\u00ed se <code>*<\/code> a <code>?<\/code>. P\u0159\u00edklad: <code>\"Data*, Figure?\"<\/code>. Ve v\u00fdchoz\u00edm nastaven\u00ed <code>*<\/code>.<\/li>\n<li><code>MaxLength<\/code> \u2014 Maxim\u00e1ln\u00ed d\u00e9lka uchov\u00e1van\u00e9 prom\u011bnn\u00e9. Pokud je serializace prom\u011bnn\u00e9 del\u0161\u00ed, bude ignorov\u00e1na. Nastavte 0 pro povolen\u00ed prom\u011bnn\u00fdch libovoln\u00e9 d\u00e9lky. Ve v\u00fdchoz\u00edm nastaven\u00ed <code>$$$MaxStringLength<\/code>.<\/li>\n<li><code>N\u00e1zev<\/code> \u2014 N\u00e1zev kontextu (voliteln\u011b).<\/li>\n<li><code>Popis<\/code> \u2014 Popis kontextu (voliteln\u011b).<\/li>\n<\/ul>\n<p><\/p>\n<p>Vr\u00e1t\u00ed <code>Ens.StringResponse<\/code> s <code>Id<\/code> ulo\u017een\u00e9ho kontextu. V testovac\u00edm procesu sledujte aktivitu <code>Ulo\u017eit kontext<\/code>.<\/p>\n<p><\/p>\n<p>Odpov\u00eddaj\u00edc\u00ed po\u017eadavek <code>isc.py.msg.RestoreRequest<\/code> na na\u010dten\u00ed kontextu z InterSystems IRIS do Pythonu:<\/p>\n<p><\/p>\n<ul>\n<li><code>ContextId<\/code> \u2014 identifik\u00e1tor kontextu.<\/li>\n<li><code>Clear<\/code> \u2014 vy\u010distit kontext p\u0159ed obnoven\u00edm.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"jupyter-notebook\">Jupyter Notebook<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter Notebook<\/a><\/noindex> \u2014 je to open-source webov\u00e1 aplikace, kter\u00e1 umo\u017e\u0148uje vytv\u00e1\u0159et notebooky obsahuj\u00edc\u00ed k\u00f3d, vizualizace a text a publikovat je. Python Gateway umo\u017e\u0148uje prohl\u00ed\u017eet a upravovat procesy BPL ve form\u00e1tu Jupyter Notebook. V\u0161imn\u011bte si, \u017ee se v sou\u010dasnosti pou\u017e\u00edv\u00e1 standardn\u00ed executor Python 3.<\/p>\n<p><\/p>\n<p>Toto roz\u0161\u00ed\u0159en\u00ed p\u0159edpokl\u00e1d\u00e1, \u017ee anotace obsahuj\u00ed k\u00f3d Python a vyu\u017e\u00edvaj\u00ed n\u00e1zvy aktivit jako p\u0159edchoz\u00ed nadpisy. Nyn\u00ed je mo\u017en\u00e9 vyv\u00edjet obchodn\u00ed procesy PythonGateway v Jupyter Notebooku. Zde je, co je mo\u017en\u00e9: <\/p>\n<p><\/p>\n<ul>\n<li>Vytv\u00e1\u0159et nov\u00e9 obchodn\u00ed procesy<\/li>\n<li>Mazat obchodn\u00ed procesy<\/li>\n<li>Vytv\u00e1\u0159et nov\u00e9 aktivity<\/li>\n<li>M\u011bnit aktivity<\/li>\n<li>Mazat aktivity<\/li>\n<\/ul>\n<p><\/p>\n<p>Tady <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/mZizgVtZ014\">demo video<\/a><\/noindex>. A n\u011bkolik sn\u00edmk\u016f obrazovky:<\/p>\n<p><\/p>\n<h2 id=\"provodnik-processov\">Pr\u016fzkumn\u00edk proces\u016f<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/6da1aa0a026c34238c57f96e82742bb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"redaktor-processa\">Editor procesu<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/651031fe9792cc1c5926aa386f4e37fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"ustanovka-1\">Instalace<\/h2>\n<p><\/p>\n<ol>\n<li>Budete pot\u0159ebovat InterSystems IRIS 2019.2+.<\/li>\n<li>Nainstalujte PythonGateway v0.8+ (po\u017eaduje se pouze <code>isc.py.util.Jupyter<\/code>, <code>isc.py.util.JupyterCheckpoints<\/code> a <code>isc.py.ens.ProcessUtils<\/code>).<\/li>\n<li>Aktualizujte k\u00f3d ObjectScript z repozit\u00e1\u0159e.<\/li>\n<li>Prove\u010fte <code>do ##class(isc.py.util.Jupyter).Install()<\/code> a postupujte podle pokyn\u016f.<\/li>\n<\/ol>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/tree\/master\/jupyter\">Dokumentace<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"vyvody\">Z\u00e1v\u011bry<\/h1>\n<p><\/p>\n<p>MLToolkit je sada n\u00e1stroj\u016f, jej\u00edm\u017e c\u00edlem je spojit modely a transak\u010dn\u00ed prost\u0159ed\u00ed, aby bylo mo\u017en\u00e9 snadno pou\u017e\u00edvat vytvo\u0159en\u00e9 modely p\u0159\u00edmo ve va\u0161ich obchodn\u00edch procesech. Python Gateway je sou\u010d\u00e1st\u00ed MLToolkit a zaji\u0161\u0165uje integraci s jazykem Python, co\u017e umo\u017e\u0148uje orchestraci jak\u00fdchkoliv algoritm\u016f strojov\u00e9ho u\u010den\u00ed vytvo\u0159en\u00fdch v Pythonu (hlavn\u00edm prost\u0159ed\u00ed pro mnoho Data Scientist\u016f), vyu\u017eit\u00ed mnoha p\u0159ipraven\u00fdch knihoven pro rychl\u00e9 vytvo\u0159en\u00ed adaptivn\u00edch, automatizovan\u00fdch analytick\u00fdch AI\/ML \u0159e\u0161en\u00ed na platform\u011b InterSystems IRIS.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Odkazy<\/h1>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/473452\/\">P\u0159edchoz\u00ed \u010dl\u00e1nek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openexchange.intersystems.com\/package\/PythonGateway\">Python Gateway<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openexchange.intersystems.com\/package\/Python-Gateway-Samples\">P\u0159\u00edklady Python Gateway<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/Convergent-Analytics\">Convergent-Analytics<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python 3.6.7 64 bit<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">Dokumentace a kurzy k Pythonu<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"mltoolkit\">MLToolkit<\/h1>\n<p><\/p>\n<p>Skupina u\u017eivatel\u016f MLToolkit je soukrom\u00e9 \u00falo\u017ei\u0161t\u011b GitHub, vytvo\u0159en\u00e9 jako sou\u010d\u00e1st firemn\u00ed organizace GitHub InterSystems. Je ur\u010dena extern\u00edm u\u017eivatel\u016fm, kte\u0159\u00ed instaluj\u00ed, zkoumaj\u00ed nebo ji\u017e pou\u017e\u00edvaj\u00ed komponenty MLToolkit, v\u010detn\u011b Python Gateway. Ve skupin\u011b je k dispozici \u0159ada realizovan\u00fdch p\u0159\u00edpadov\u00fdch studi\u00ed (se zdrojov\u00fdm k\u00f3dem a testovac\u00edmi daty) v oblastech marketingu, v\u00fdroby, medic\u00edny a mnoha dal\u0161\u00edch odv\u011btv\u00edch. Pokud se chcete p\u0159ipojit ke skupin\u011b u\u017eivatel\u016f ML Toolkit, pros\u00edm, po\u0161lete kr\u00e1tkou zpr\u00e1vu na e-mail na n\u00e1sleduj\u00edc\u00ed adresu: <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com?subject=MLToolkit%20user%20group&amp;body=Hello.%0A%0APlease%20add%20me%20to%20ML%20Toolkit%20user%20group%3A%0A%0A-%20GitHub%20username%3A%20%0A%0A-%20Name%3A%20%0A%0A-%20Company%3A%20%0A%0A-%20Position%3A%0A-%20Country%3A%20%0A%0A\">MLToolkit@intersystems.com<\/a><\/noindex> a uve\u010fte ve sv\u00e9 zpr\u00e1v\u011b n\u00e1sleduj\u00edc\u00ed \u00fadaje:<\/p>\n<p><\/p>\n<ul>\n<li>U\u017eivatelsk\u00e9 jm\u00e9no GitHub<\/li>\n<li>Organizace (kde pracujete nebo studujete)<\/li>\n<li>Pozice (va\u0161e skute\u010dn\u00e1 pozice ve va\u0161\u00ed organizaci, nebo \"Student\", nebo \"Nez\u00e1visl\u00fd\").<\/li>\n<li>Zem\u011b<\/li>\n<\/ul>\n<p><\/p>\n<p>T\u011bm, kdo si p\u0159e\u010detli \u010dl\u00e1nek a maj\u00ed z\u00e1jem o mo\u017enosti InterSystems IRIS jako platformy pro v\u00fdvoj nebo hostov\u00e1n\u00ed mechanism\u016f um\u011bl\u00e9 inteligence a strojov\u00e9ho u\u010den\u00ed, nab\u00edz\u00edme mo\u017enost probrat mo\u017en\u00e9 sc\u00e9n\u00e1\u0159e, kter\u00e9 by byly zaj\u00edmav\u00e9 pro va\u0161i firmu. S radost\u00ed analyzujeme pot\u0159eby va\u0161\u00ed firmy a spole\u010dn\u011b ur\u010d\u00edme ak\u010dn\u00ed pl\u00e1n; kontaktn\u00ed e-mailov\u00e1 adresa na\u0161\u00ed expertn\u00ed skupiny AI\/ML je \u2013 <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com\">MLToolkit@intersystems.com<\/a><\/noindex>.<\/p>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/486984\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python (\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 Data Scientists), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0445, \u0440\u043e\u0431\u043e\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 AI\/ML-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 InterSystems IRIS. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41222,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-41221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Python Gateway \u0432 InterSystems IRIS | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-06T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-06T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Python Gateway v InterSystems IRIS | ProHoster","description":"Tento \u010dl\u00e1nek je v\u011bnov\u00e1n Python Gateway \u2014 komunitn\u00edmu projektu s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem pro platformu dat InterSystems IRIS.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/python-gateway-v-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Python Gateway \u0432 InterSystems IRIS | ProHoster","og:description":"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.","og:url":"https:\/\/prohoster.info\/cs\/blog\/python-gateway-v-intersystems-iris","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-06T17:42:46+00:00","article:modified_time":"2020-02-06T17:42:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41221","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:21:33","updated":"2022-09-30 00:32:37","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/41221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=41221"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/41221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/41222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=41221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=41221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=41221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}