{"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\/sq\/blog\/python-gateway-v-intersystems-iris","title":{"rendered":"Python Gateway n\u00eb InterSystems IRIS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ky kjo artikull i kushtohet Python Gateway \u2014 nj\u00eb projekt komuniteti me kod t\u00eb hapur p\u00ebr platform\u00ebn e t\u00eb dh\u00ebnave InterSystems IRIS. Ky projekt lejon orkestrimin e \u00e7do algoritmi t\u00eb m\u00ebsimit t\u00eb makineris\u00eb, i krijuar n\u00eb gjuh\u00ebn Python (mjedisi kryesor p\u00ebr shum\u00eb Shkenc\u00ebtar\u00eb t\u00eb T\u00eb Dh\u00ebnave), duke p\u00ebrdorur bibliotekat e shumta t\u00eb gatshme p\u00ebr t\u00eb ndihmuar n\u00eb krijimin e zgjidhjeve adaptuese, robotizuese analitike AI\/ML n\u00eb platform\u00ebn InterSystems IRIS. N\u00eb k\u00ebt\u00eb artikull, do t\u00eb tregoj se si InterSystems IRIS mund t\u00eb orkestroj\u00eb proceset n\u00eb gjuh\u00ebn Python, t\u00eb realizoj\u00eb me efektivitet transferimin dyansh\u00ebm t\u00eb t\u00eb dh\u00ebnave dhe t\u00eb krijoj\u00eb procese inteligjente biznesi.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Plani<\/h1>\n<p><\/p>\n<ol>\n<li>Hyrje.<\/li>\n<li>Mjetet.<\/li>\n<li>Instalimi.<\/li>\n<li>API.<\/li>\n<li>Nd\u00ebroperabiliteti.<\/li>\n<li>Jupyter Notebook.<\/li>\n<li>P\u00ebrfundime.<\/li>\n<li>Lidhjet.<\/li>\n<li>MLToolkit.<\/li>\n<\/ol>\n<p><\/p>\n<h1 id=\"vvedenie\">Hyrje<\/h1>\n<p><\/p>\n<p>Python \u00ebsht\u00eb nj\u00eb gjuh\u00eb programimi n\u00eb nivel t\u00eb lart\u00eb, p\u00ebr q\u00ebllime t\u00eb p\u00ebrgjithshme, e orientuar drejt rritjes s\u00eb produktivitetit t\u00eb zhvilluesit dhe lexueshm\u00ebris\u00eb s\u00eb kodit. N\u00eb k\u00ebt\u00eb seri artikujsh, do t\u00eb flas p\u00ebr mund\u00ebsit\u00eb e p\u00ebrdorimit t\u00eb gjuh\u00ebs Python n\u00eb platform\u00ebn InterSystems IRIS, duke qen\u00eb se fokusi kryesor i k\u00ebtij artikulli \u00ebsht\u00eb aplikimi i Python si gjuh\u00eb p\u00ebr krijimin dhe p\u00ebrdorimin e modeleve t\u00eb m\u00ebsimit t\u00eb makineris\u00eb.<\/p>\n<p><\/p>\n<p>M\u00ebsimi i makineris\u00eb (ML) \u00ebsht\u00eb nj\u00eb klas\u00eb metodash t\u00eb inteligjenc\u00ebs artificiale, me karakteristik\u00ebn e t\u00eb cil\u00ebs \u00ebsht\u00eb jo zgjidhja e drejtp\u00ebrdrejt\u00eb e problemit, por m\u00ebsimi gjat\u00eb zgjidhjes s\u00eb shum\u00eb problemeve t\u00eb ngjashme. <\/p>\n<p><\/p>\n<p>Algoritmet dhe modelet e m\u00ebsimit t\u00eb makineris\u00eb po b\u00ebhen gjithnj\u00eb e m\u00eb t\u00eb zakonshme. Ka shum\u00eb arsye p\u00ebr k\u00ebt\u00eb, por gjith\u00e7ka reduktohet n\u00eb aksesueshm\u00ebrin\u00eb, thjesht\u00ebsin\u00eb dhe arritjen e rezultateve praktike. A \u00ebsht\u00eb klasterizimi ose madje modelimi me rrjete nervore nj\u00eb teknologji e re? <\/p>\n<p><\/p>\n<p>Sigurisht q\u00eb jo, por tani nuk ka nevoj\u00eb t\u00eb shkruhen qindra mij\u00ebra rreshta kodi p\u00ebr t\u00eb lan\u00e7uar nj\u00eb model, dhe shpenzimet p\u00ebr krijimin dhe p\u00ebrdorimin e modeleve po b\u00ebhen gjithnj\u00eb e m\u00eb t\u00eb vogla.<\/p>\n<p><\/p>\n<p>Mjetet po evoluojn\u00eb \u2014 ndon\u00ebse nuk kemi mjete t\u00eb plota t\u00eb orientuara nga GUI p\u00ebr AI\/ML, progresi q\u00eb kemi par\u00eb me shum\u00eb klasa t\u00eb tjera t\u00eb sistemeve informative, p\u00ebr shembull, BI (nga shkrimi i kodit deri te p\u00ebrdorimi i kornizave dhe zgjidhjeve me konfigurim t\u00eb orientuar nga GUI), po ndiqet gjithashtu n\u00eb mjetet p\u00ebr krijimin e AI\/ML. Ne tashm\u00eb kemi kaluar faz\u00ebn e shkruarjes s\u00eb kodit dhe sot p\u00ebrdorim korniza p\u00ebr nd\u00ebrtimin dhe trajnimin e modeleve.<\/p>\n<p><\/p>\n<p>P\u00ebrmir\u00ebsime t\u00eb tjera, si\u00e7 \u00ebsht\u00eb mund\u00ebsia p\u00ebr t\u00eb shp\u00ebrndar\u00eb nj\u00eb model t\u00eb paratrainuar, kur p\u00ebrdoruesi p\u00ebrfundimtar duhet thjesht t\u00eb p\u00ebrfundoj\u00eb trajnimin e modelit me t\u00eb dh\u00ebnat e tij specifike, gjithashtu leht\u00ebsojn\u00eb fillimin e p\u00ebrdorimit t\u00eb m\u00ebsimit t\u00eb makineris\u00eb. K\u00ebto arritje e b\u00ebjn\u00eb shum\u00eb m\u00eb t\u00eb leht\u00eb studimin e m\u00ebsimit t\u00eb makineris\u00eb si p\u00ebr specialist\u00ebt, ashtu edhe p\u00ebr kompanit\u00eb n\u00eb t\u00ebr\u00ebsi.<\/p>\n<p><\/p>\n<p>Nga ana tjet\u00ebr, ne po mbledhim gjithnj\u00eb e m\u00eb shum\u00eb t\u00eb dh\u00ebna. Fal\u00eb nj\u00eb platforme t\u00eb unifikuar t\u00eb t\u00eb dh\u00ebnave si InterSystems IRIS, t\u00eb gjitha k\u00ebto informacione mund t\u00eb p\u00ebrgatiten menj\u00ebher\u00eb dhe t\u00eb p\u00ebrdoren si t\u00eb dh\u00ebna fillestare p\u00ebr modelet e m\u00ebsimit t\u00eb makineris\u00eb.<\/p>\n<p><\/p>\n<p>Me kalimin n\u00eb cloud, nisja e projekteve AI\/ML b\u00ebhet m\u00eb e leht\u00eb se kurr\u00eb. Ne mund t\u00eb konsumohemi vet\u00ebm p\u00ebr burimet q\u00eb na nevojiten. M\u00eb tep\u00ebr, fal\u00eb paralelizimit q\u00eb ofrojn\u00eb platformat cloud, ne mund t\u00eb kursejm\u00eb koh\u00ebn e shpenzuar.<\/p>\n<p><\/p>\n<p>Por \u00e7far\u00eb ndodh me rezultatet? K\u00ebtu gjith\u00e7ka b\u00ebhet m\u00eb e komplikuar. Ekzistojn\u00eb shum\u00eb mjete p\u00ebr nd\u00ebrtimin e modeleve, p\u00ebr t\u00eb cilat do t\u00eb flas m\u00eb posht\u00eb. Nd\u00ebrtimi i nj\u00eb modeli t\u00eb mir\u00eb nuk \u00ebsht\u00eb e leht\u00eb, por \u00e7far\u00eb vjen m\u00eb pas? T\u00eb nxjerrim fitime nga p\u00ebrdorimi i modelit nga biznesi gjithashtu \u00ebsht\u00eb nj\u00eb detyr\u00eb e thjesht\u00eb. Rr\u00ebnj\u00ebt e problemit q\u00ebndrojn\u00eb n\u00eb ndarjen e ngarkesave analitike dhe transaksionale, dhe modeleve t\u00eb t\u00eb dh\u00ebnave. Kur e st\u00ebrvitim nj\u00eb model, ne zakonisht e b\u00ebjm\u00eb k\u00ebt\u00eb me t\u00eb dh\u00ebna historike. Por vendi p\u00ebr modelin e nd\u00ebrtuar \u00ebsht\u00eb n\u00eb p\u00ebrpunimin transaksional t\u00eb t\u00eb dh\u00ebnave. \u00c7far\u00eb dobi ka modeli m\u00eb i mir\u00eb p\u00ebr zbulimin e transaksioneve mashtruese, n\u00ebse e aktivizojm\u00eb at\u00eb nj\u00eb her\u00eb n\u00eb dit\u00eb? Mashtruesit jan\u00eb larguar me parat\u00eb. Na nevojitet t\u00eb trajnojm\u00eb modelin me t\u00eb dh\u00ebna historike, por gjithashtu duhet ta aplikojm\u00eb n\u00eb koh\u00eb reale me t\u00eb dh\u00ebna t\u00eb reja q\u00eb vijn\u00eb, n\u00eb m\u00ebnyr\u00eb q\u00eb proceset tona biznesi t\u00eb mund t\u00eb veprojn\u00eb n\u00eb p\u00ebrputhje me parashikimet e b\u00ebra nga modeli.<\/p>\n<p><\/p>\n<p>ML Toolkit \u00ebsht\u00eb nj\u00eb paket\u00eb mjetesh, q\u00eb ka si q\u00ebllim pik\u00ebrisht k\u00ebt\u00eb: t\u00eb bashkoj\u00eb modelet dhe mjedisin transaksional, n\u00eb m\u00ebnyr\u00eb q\u00eb modelet e nd\u00ebrtuara t\u00eb mund t\u00eb p\u00ebrdoren leht\u00ebsisht direkt n\u00eb proceset tuaja biznesore. Python Gateway \u00ebsht\u00eb nj\u00eb pjes\u00eb e ML Toolkit dhe siguron integrimin me gjuh\u00ebn Python (ashtu si R Gateway, q\u00eb \u00ebsht\u00eb pjes\u00eb e ML Toolkit, siguron integrimin me gjuh\u00ebn R).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">Mjetet<\/h1>\n<p><\/p>\n<p>Para se vazhdojm\u00eb, do doja t\u00eb p\u00ebrshkruaja disa mjete dhe biblioteka p\u00ebr Python q\u00eb do t\u00eb p\u00ebrdorim m\u00eb von\u00eb.<\/p>\n<p><\/p>\n<h2 id=\"tehnologii\">Teknologjit\u00eb<\/h2>\n<p><\/p>\n<ul>\n<li>Python \u00ebsht\u00eb nj\u00eb gjuh\u00eb programimi interpretative, me nivel t\u00eb lart\u00eb, e cila sh\u00ebrben p\u00ebr q\u00ebllime t\u00eb p\u00ebrgjithshme. Avantazhi kryesor i gjuh\u00ebs \u00ebsht\u00eb biblioteka e gjer\u00eb p\u00ebr llogaritje matematikore, ML dhe AI. Ashtu si ObjectScript, kjo \u00ebsht\u00eb nj\u00eb gjuh\u00eb orientuar n\u00eb objekte, por gjith\u00e7ka p\u00ebrcaktohet n\u00eb m\u00ebnyr\u00eb dinamike dhe jo statike. Gjithashtu, gjith\u00e7ka \u00ebsht\u00eb nj\u00eb objekt. Artikujt e m\u00ebvonsh\u00ebm supozojn\u00eb nj\u00eb njohuri t\u00eb kalimtare me gjuh\u00ebn. N\u00ebse d\u00ebshironi t\u00eb filloni m\u00ebsimin, ju rekomandoj t\u00eb filloni me <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">dokumentacionin<\/a><\/noindex>.<\/li>\n<li>P\u00ebr ushtrimet tona t\u00eb ardhshme, instaloni <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: Un\u00eb p\u00ebrdor <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, por n\u00eb p\u00ebrgjith\u00ebsi ka disa t\u00eb tjera <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">shum\u00eb<\/a><\/noindex>. N\u00ebse p\u00ebrdorni Atelier, ka nj\u00eb plugin Eclipse p\u00ebr zhvilluesit n\u00eb Python. N\u00ebse p\u00ebrdorni VS Code, ka nj\u00eb shtes\u00eb p\u00ebr Python. <\/li>\n<li>Notebook: n\u00eb vend t\u00eb IDE, mund t\u00eb shkruani dhe ndani skenaret tuaj n\u00eb notebook-e online. Nj\u00eb nga m\u00eb popullor\u00ebt \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"biblioteki\">Bibliotekat<\/h2>\n<p><\/p>\n<p>Ja nj\u00eb list\u00eb (jo t\u00eb plot\u00eb) e biblioteka p\u00ebr m\u00ebsimin e makinerive:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.numpy.org\/\">Numpy<\/a><\/noindex> \u2014 paketa themelore p\u00ebr llogaritjet numerike.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pandas.pydata.org\/\">Pandas<\/a><\/noindex> \u2014 struktura t\u00eb dh\u00ebnash me performanc\u00eb t\u00eb lart\u00eb dhe mjete p\u00ebr analiz\u00ebn e t\u00eb dh\u00ebnave.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a><\/noindex> \u2014 krijimi i grafike.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a><\/noindex> \u2014 vizualizimi i t\u00eb dh\u00ebnave, i bazuar n\u00eb matplotlib.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 metoda t\u00eb m\u00ebsimit t\u00eb makinerive.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xgboost.readthedocs.io\/en\/latest\/index.html\">XGBoost<\/a><\/noindex> \u2014 algoritme t\u00eb m\u00ebsimit t\u00eb makinerive sipas metodologjis\u00eb s\u00eb p\u00ebrmir\u00ebsimit t\u00eb grad\u00ebs (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 rrjetet nervore.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 nj\u00eb platform\u00eb p\u00ebr nd\u00ebrtimin e modeleve t\u00eb m\u00ebsimit t\u00eb makinerive.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 nj\u00eb platform\u00eb p\u00ebr nd\u00ebrtimin e modeleve t\u00eb m\u00ebsimit t\u00eb makinerive, q\u00eb \u00ebsht\u00eb e orientuar drejt Python.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nyoka-pmml\/nyoka\">Nyoka<\/a><\/noindex> \u2014 PMML nga modele t\u00eb ndryshme.<\/li>\n<\/ul>\n<p><\/p>\n<p>Teknologjit\u00eb AI\/ML lejojn\u00eb q\u00eb biznesi t\u00eb jet\u00eb m\u00eb efikas dhe adaptiv. P\u00ebr m\u00eb tep\u00ebr, sot k\u00ebto teknologji po b\u00ebhen m\u00eb t\u00eb lehta p\u00ebr t'u zhvilluar dhe implementuar. Filloni t\u00eb studioni teknologjit\u00eb AI\/ML dhe se si ato mund t'ju ndihmojn\u00eb t\u00eb rriteni.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">Instalimi<\/h1>\n<p><\/p>\n<p>Ka disa m\u00ebnyra p\u00ebr t\u00eb instaluar dhe p\u00ebrdorur 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>P\u00ebrdorni nj\u00eb imazh nga DockerHub<\/li>\n<li>Krijoni imazhin tuaj<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Pavar\u00ebsisht nga m\u00ebnyra e instalimit, do t'ju nevojitet kodi burimor. Vendi i vet\u00ebm p\u00ebr t\u00eb shkarkuar kodin \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">pagina e l\u00ebshimeve<\/a><\/noindex>. Ajo p\u00ebrmban l\u00ebshime stabile t\u00eb testuara, thjesht merrni at\u00eb m\u00eb t\u00eb fundit. Aktualisht, ajo \u00ebsht\u00eb 0.8, por me kalimin e koh\u00ebs do t\u00eb ket\u00eb edhe t\u00eb reja. Mos e kloni\/ngarko repo-in, shkarkoni l\u00ebshimin m\u00eb t\u00eb fundit.<\/p>\n<p><\/p>\n<h2 id=\"os\">OS<\/h2>\n<p><\/p>\n<p>N\u00ebse po instaloni Python Gateway n\u00eb sistemin operativ, s\u00eb pari (pavar\u00ebsisht nga sistemi operativ) ju nevojitet t\u00eb instaloni Python. P\u00ebr k\u00ebt\u00eb:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Instaloni Python 3.6.7 64 bit<\/a><\/noindex>. Rekomandohet q\u00eb t\u00eb instaloni Python n\u00eb direktorin\u00eb e paracaktuar.<\/li>\n<li>Instaloni modul <code>dill<\/code>: <code>pip install dill<\/code>.<\/li>\n<li>Shkarko kodin ObjectScript (pra, <code>do $system.OBJ.ImportDir(\"C:InterSystemsReposPythoniscpy\", \"*.cls\", \"c\", , 1)<\/code>) n\u00eb \u00e7do zon\u00eb me produkte. N\u00ebse d\u00ebshironi q\u00eb nj\u00eb zon\u00eb ekzistuese t\u00eb mb\u00ebshtes\u00eb produkte, kryeni: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>Vendosni <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">callout DLL\/SO\/DYLIB<\/a><\/noindex> n\u00eb folderin <code>bin<\/code> t\u00eb instanc\u00ebs suaj InterSystems IRIS. Skedari i bibliotek\u00ebs duhet t\u00eb jet\u00eb i aksesuesh\u00ebm n\u00eb rrug\u00ebn e kthyer <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>Sigurohuni q\u00eb variabli i mjedisit <code>PYTHONHOME<\/code> tregon p\u00ebr Python 3.6.7.<\/li>\n<li>Sigurohuni q\u00eb variabli sistemor i mjedisit <code>p\u00ebr<\/code> p\u00ebrmban variabl\u00ebn <code>PYTHONHOME<\/code> (ose direktorin\u00eb n\u00eb t\u00eb cil\u00ebn tregon ajo).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>Kontrolloni q\u00eb variabli i mjedisit <code>p\u00ebr<\/code> p\u00ebrmban <code>\/usr\/lib<\/code> dhe <code>\/usr\/lib\/x86_64-linux-gnu<\/code>. P\u00ebrdorni skedarin <code>\/etc\/environment<\/code> p\u00ebr t\u00eb vendosur variablat e mjedisit.<\/li>\n<li>N\u00eb rast gabimesh <code>undefined symbol: _Py_TrueStruct<\/code> vendosni konfigurimin <code>PythonLib<\/code>. Gjithashtu n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme<\/a><\/noindex> ka nj\u00eb seksion p\u00ebr Troubleshooting.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"mac\">Mac<\/h3>\n<p><\/p>\n<ol>\n<li>Aktualisht mb\u00ebshtetet vet\u00ebm Python 3.6.7 nga <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python.org<\/a><\/noindex>. Kontroloni variabl\u00ebn <code>p\u00ebr<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>N\u00ebse keni ndryshuar variablat e mjedisit, rinisni produktin tuaj InterSystems.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>P\u00ebrdorimi i kontejner\u00ebve ka disa p\u00ebrpar\u00ebsi: <\/p>\n<p><\/p>\n<ul>\n<li>Portabiliteti<\/li>\n<li>Efikasitet<\/li>\n<li>Izolimi<\/li>\n<li>Leht\u00ebsia<\/li>\n<li>Imutabiliteti<\/li>\n<\/ul>\n<p><\/p>\n<p>Shikoni k\u00ebt\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">serin\u00eb e artikujve<\/a><\/noindex> p\u00ebr m\u00eb shum\u00eb informacion lidhur me p\u00ebrdorimin e Docker me produktet InterSystems. <\/p>\n<p><\/p>\n<p>T\u00eb gjitha nd\u00ebrtimet e Python Gateway deri tani jan\u00eb bazuar n\u00eb kontejner\u00eb <code>2019.4<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"gotovyy-obraz\">Imazhi i gatsh\u00ebm<\/h3>\n<p><\/p>\n<p>Ekzekutoni: <code>docker run -d -p 52773:52773 --name irispy intersystemscommunity\/irispy-community:latest<\/code>, p\u00ebr t\u00eb shkarkuar dhe nisur Python Gateway me InterSystems IRIS Community Edition. K\u00ebtu p\u00ebrfundon.<\/p>\n<p><\/p>\n<h3 id=\"sozdayte-svoy-sobstvennyy-obraz\">Krijoni imazhin tuaj<\/h3>\n<p><\/p>\n<p>P\u00ebr t\u00eb nd\u00ebrtuar imazhin docker, ekzekutoni n\u00eb rr\u00ebnj\u00ebn e repository-t: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nSipas parazgjedhjes, imazhi ndBuildhet mbi imazhin <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, megjithat\u00eb ju mund ta ndryshoni k\u00ebt\u00eb, duke vendosur variabl\u00ebn <code>IMAGE<\/code>.<br \/>\nP\u00ebr t\u00eb nd\u00ebrtuar nga InterSystems IRIS, ekzekutoni: `docker build --build-arg IMAGE=store\/intersystems\/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity\/irispy:latest `.<\/p>\n<p><\/p>\n<p>Pasi t\u00eb ket\u00eb p\u00ebrfunduar, mund t\u00eb nisni imazhin docker:<\/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>N\u00ebse po p\u00ebrdorni nj\u00eb imazh t\u00eb bazuar n\u00eb InterSystems IRIS Community Edition, mund t\u00eb mosSpecifikoni \u00e7el\u00ebsin.<\/p>\n<p><\/p>\n<h3 id=\"kommentarii\">Komentet<\/h3>\n<p><\/p>\n<ul>\n<li>Procesi i testit <code>isc.py.test.Process<\/code> ruan nj\u00eb s\u00ebr\u00eb imazhesh n\u00eb nj\u00eb katalog t\u00eb p\u00ebrkohsh\u00ebm. Ndoshta d\u00ebshironi t\u00eb ndryshoni k\u00ebt\u00eb rrug\u00eb n\u00eb nj\u00eb katalog t\u00eb montuar. P\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb, redaktoni konfigurimin <code>WorkingDir<\/code> duke specifikuar direktorin\u00eb e montuar.<\/li>\n<li>P\u00ebr akses n\u00eb terminal realizoni: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>Aksesi n\u00eb Portalin e Menaxhimit t\u00eb Sistemit me identifikues <code>SuperUser<\/code>\/<code>SYS<\/code>.<\/li>\n<li>P\u00ebr t\u00eb ndaluar kontejnerin, realizoni: <code>docker stop irispy &amp;&amp; docker rm --force irispy<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"proverka-ustanovki\">Kontrolli i instalimit<\/h2>\n<p><\/p>\n<p>Pas instalimit t\u00eb Python Gateway, \u00ebsht\u00eb mir\u00eb t\u00eb kontrolloni q\u00eb funksionon. Ekzekutoni k\u00ebt\u00eb kod n\u00eb terminalin 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>Si rezultat, duhet t\u00eb shfaqet <code>HELLO<\/code> \u2014 vlera e variablit Python <code>x<\/code>. N\u00ebse statusi i kthyer <code>sc<\/code> \u00ebsht\u00eb nj\u00eb gabim ose <code>var<\/code> i zbraz\u00ebt, kontrolloni <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme \u2014 Seksioni i Rregullimeve<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Python Gateway \u00ebsht\u00eb instaluar, dhe ju e keni siguruar q\u00eb funksionon. \u00cbsht\u00eb koha ta filloni at\u00eb!<br \/>\nInterface kryesore p\u00ebr Python \u00ebsht\u00eb <code>isc.py.Main<\/code>. Ai ofron grupet e m\u00ebposhtme t\u00eb metodave (t\u00eb gjitha kthejn\u00eb <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>Ekzekutimi i kodit<\/li>\n<li>Transmetimi i t\u00eb dh\u00ebnave<\/li>\n<li>Auxiliary<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">Ekzekutimi i kodit<\/h2>\n<p><\/p>\n<p>K\u00ebto metoda lejojn\u00eb ekzekutimin e kodit t\u00eb rast\u00ebsish\u00ebm Python.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 \u00ebsht\u00eb metoda kryesore. Ajo merr 4 argumente opsionale:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 nj\u00eb varg kodi p\u00ebr t\u00eb ekzekutuar. Simboli i kalimit t\u00eb linj\u00ebs: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 emri i variablit p\u00ebr kthim.<\/li>\n<li><code>serialization<\/code> \u2014 si t\u00eb serializoni <code>returnVariable<\/code>. 0 \u2014 string (me defaut), 1 \u2014 repr.<\/li>\n<li><code>rezultati<\/code> \u2014 ByRef referenca n\u00eb variabl\u00ebn n\u00eb t\u00eb cil\u00ebn shkruhet vlera <code>returnVariable<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>M\u00eb sip\u00ebr ne ekzekutuam:<\/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>N\u00eb k\u00ebt\u00eb shembull ne i japim nj\u00eb vler\u00eb variablit Python <code>x<\/code> vler\u00ebn <code>P\u00ebrsh\u00ebndetje<\/code> dhe duam t\u00eb kthejm\u00eb vler\u00ebn e variablit Python <code>x<\/code> n\u00eb nj\u00eb variab\u00ebl ObjectScript <code>var<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"executecode\">ExecuteCode<\/h3>\n<p><\/p>\n<p>ExecuteCode \u00ebsht\u00eb nj\u00eb alternativ\u00eb m\u00eb e sigurt dhe m\u00eb pak e kufizuar <code>SimpleString<\/code>.<br \/>\nVargjet n\u00eb platform\u00ebn InterSystems IRIS jan\u00eb t\u00eb kufizuara n\u00eb 3 641 144 karaktere, dhe n\u00ebse d\u00ebshiron t\u00eb ekzekutosh nj\u00eb cop\u00eb m\u00eb t\u00eb gjat\u00eb kodi, duhet t\u00eb p\u00ebrdor\u00ebsh rrjedhat.<br \/>\nPranohen dy argumente:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 nj\u00eb varg ose rrjedh\u00eb kodi Python p\u00ebr ekzekutim.<\/li>\n<li><code>variable<\/code> \u2014 (opsionale) cakton rezultatin e ekzekutimit <code>code<\/code> k\u00ebtij variabli Python.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebr shembull:<\/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>N\u00eb k\u00ebt\u00eb shembull ne shumzojm\u00eb 2 me 3 dhe e regjistrojm\u00eb rezultatin n\u00eb nj\u00eb variab\u00ebl Python <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">Transmetimi i t\u00eb dh\u00ebnave<\/h2>\n<p><\/p>\n<p>D\u00ebrgoni t\u00eb dh\u00ebnat n\u00eb Python dhe prapa.<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Python -&gt; InterSystems IRIS<\/h3>\n<p><\/p>\n<p>Ka 4 m\u00ebnyra p\u00ebr t\u00eb marr\u00eb vler\u00ebn e variablit Python n\u00eb InterSystems IRIS, n\u00eb var\u00ebsi t\u00eb serializimit q\u00eb ju nevojitet:<\/p>\n<p><\/p>\n<ul>\n<li><code>String<\/code> p\u00ebr tipe t\u00eb dh\u00ebnash t\u00eb thjeshta dhe debug.<\/li>\n<li><code>Repr<\/code> p\u00ebr ruajtjen e objekteve t\u00eb thjeshta dhe p\u00ebr debug.<\/li>\n<li><code>JSON<\/code> p\u00ebr manipulimin e leht\u00eb t\u00eb t\u00eb dh\u00ebnave n\u00eb an\u00ebn e InterSystems IRIS.<\/li>\n<li><code>Pickle<\/code> p\u00ebr ruajtjen e objekteve.<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00ebto metoda lejojn\u00eb marrjen e variablave nga Python si nj\u00eb string ose si rrjedha.<\/p>\n<p><\/p>\n<ul>\n<li><code>GetVariable(variable, serialization, .stream, useString)<\/code> \u2014 merr <code>serialization<\/code> variab\u00ebl <code>variable<\/code> n\u00eb <code>N\u00eb modul stream \u00ebsht\u00eb shtuar direktiva '<\/code>. N\u00ebse <code>useString<\/code> n\u00ebse \u00ebsht\u00eb 1 dhe serializimi vendoset n\u00eb string, at\u00ebher\u00eb kthehet string dhe jo rrjedh\u00eb.<\/li>\n<li><code>GetVariableJson(variable, .stream, useString)<\/code> \u2014 merr serializimin JSON t\u00eb variablit.<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> \u2014 merr serializimin Pickle (ose Dill) t\u00eb variablit.<\/li>\n<\/ul>\n<p><\/p>\n<p>Le t\u00eb provojm\u00eb t\u00eb marrim variabl\u00ebn ton\u00eb <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>Po ngarkojm\u00eb t\u00eb dh\u00ebna nga InterSystems IRIS n\u00eb Python.<\/p>\n<p><\/p>\n<ul>\n<li><code>ExecuteQuery(query, variable, type, namespace)<\/code> \u2014 krijon nj\u00eb grup t\u00eb dh\u00ebnash (pandas <code>dataframe<\/code> ose <code>list<\/code>) nga nj\u00eb k\u00ebrkes\u00eb SQL dhe e vendos at\u00eb n\u00eb nj\u00eb variab\u00ebl Python. <code>variable<\/code>. Paketa <code>isc.py<\/code> duhet t\u00eb jet\u00eb e disponueshme n\u00eb hap\u00ebsir\u00eb <code>namespace<\/code> \u2014 aty do t\u00eb ekzekutohet k\u00ebrkesa.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 ngarkon t\u00eb dh\u00ebnat e globalit <code>global<\/code> nga subskipta <code>start<\/code> n\u00eb <code>end<\/code> n\u00eb Python si nj\u00eb variab\u00ebl t\u00eb tipit <code>lloji<\/code>: <code>list<\/code>, ose pandas. <code>dataframe<\/code>P\u00ebrshkrimi i argumenteve opsionale <code>mask<\/code> dhe <code>labels<\/code> \u00ebsht\u00eb e disponueshme n\u00eb dokumentimin e klas\u00ebs dhe n\u00eb depo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Dokumentet e Transferimit t\u00eb t\u00eb Dh\u00ebnave<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 ngarkon t\u00eb dh\u00ebnat e klas\u00ebs <code>class<\/code> nga id <code>start<\/code> n\u00eb <code>end<\/code> n\u00eb Python si nj\u00eb variab\u00ebl t\u00eb tipit <code>lloji<\/code>: <code>list<\/code>, ose pandas. <code>dataframe<\/code>. <code>properties<\/code> \u2014 lista (ndashkimi \u00ebsht\u00eb presja) e pronave t\u00eb klas\u00ebs q\u00eb duhen ngarkuar n\u00eb grupin e t\u00eb dh\u00ebnave. Mb\u00ebshteten maskat. <code>*<\/code> dhe <code>?<\/code>. Me parametra standard\u00eb \u2014 <code>*<\/code> (t\u00eb gjitha pronat). Prona <code>%%CLASSNAME<\/code> neglizhohet.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 ngarkon t\u00eb dh\u00ebnat e tabel\u00ebs <code>table<\/code> nga id <code>start<\/code> n\u00eb <code>end<\/code> n\u00eb Python.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> \u2014 \u00ebsht\u00eb universale (\u00e7do k\u00ebrkes\u00eb SQL e sakt\u00eb do t\u00eb d\u00ebrgohet n\u00eb Python). Megjithat\u00eb, <code>ExecuteGlobal<\/code> dhe mb\u00ebshtjell\u00ebsat e tij <code>ExecuteClass<\/code> dhe <code>ExecuteTable<\/code> punojn\u00eb me disa kufizime. Ato jan\u00eb shum\u00eb m\u00eb t\u00eb shpejta (3-5 her\u00eb m\u00eb t\u00eb shpejt\u00eb se ODBC-driverv dhe 20 her\u00eb m\u00eb t\u00eb shpejt\u00eb <code>ExecuteQuery<\/code>). Informacione shtes\u00eb jan\u00eb n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Dokumentet e Transferimit t\u00eb t\u00eb Dh\u00ebnave<\/a><\/noindex>.<br \/>\nT\u00eb gjitha k\u00ebto metoda mb\u00ebshtesin kalimin e t\u00eb dh\u00ebnave nga \u00e7do hap\u00ebsir\u00eb. Paketa <code>isc.py<\/code> duhet t\u00eb jet\u00eb e disponueshme n\u00eb hap\u00ebsir\u00ebn e synuar.<\/p>\n<p><\/p>\n<h3 id=\"executequery\">ExecuteQuery<\/h3>\n<p><\/p>\n<p><code>ExecuteQuery(request, variable, type, namespace)<\/code> \u2014 kalimi i rezultateve t\u00eb \u00e7do k\u00ebrkese SQL t\u00eb sakt\u00eb n\u00eb Python. Ky \u00ebsht\u00eb metoda m\u00eb e ngadalt\u00eb e kalimit t\u00eb t\u00eb dh\u00ebnave. P\u00ebrdorni k\u00ebt\u00eb n\u00ebse <code>ExecuteGlobal<\/code> dhe mb\u00ebshtjell\u00ebsat e tij nuk jan\u00eb t\u00eb disponueshme.<\/p>\n<p><\/p>\n<p>Argumentet:<\/p>\n<p><\/p>\n<ul>\n<li><code>query<\/code> \u2014 k\u00ebrkesa SQL.<\/li>\n<li><code>variable<\/code> \u2014 emri i variablit Python n\u00eb t\u00eb cilin shkruhen t\u00eb dh\u00ebnat.<\/li>\n<li><code>lloji<\/code> \u2014 <code>list<\/code> ose Pandas <code>dataframe<\/code>.<\/li>\n<li><code>namespace<\/code> \u2014 hap\u00ebsira n\u00eb t\u00eb cil\u00ebn do t\u00eb ekzekutohet k\u00ebrkesa.<\/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 kalimi i globalit n\u00eb Python.<\/p>\n<p><\/p>\n<p>Argumentet:<\/p>\n<p><\/p>\n<ul>\n<li><code>global<\/code> \u2014 emri i globalit pa <code>^<\/code><\/li>\n<li><code>variable<\/code> \u2014 emri i variablit Python n\u00eb t\u00eb cilin shkruhen t\u00eb dh\u00ebnat.<\/li>\n<li><code>lloji<\/code> \u2014 <code>list<\/code> ose Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 subscripti i par\u00eb i globalit. Detyrimisht <code>%Integer<\/code>.<\/li>\n<li><code>end<\/code> \u2014 subscripti i fundit i globalit. Detyrimisht <code>%Integer<\/code>.<\/li>\n<li><code>mask<\/code> \u2014 maske e vlerave globale. Mask\u00ebn mund t\u00eb jet\u00eb m\u00eb e shkurt\u00ebr se numri i fushave n\u00eb global (n\u00eb k\u00ebt\u00eb rast, fushat n\u00eb fund do t\u00eb shp\u00ebrfillen). Si t\u00eb formatohet maska:\n<ul>\n<li><code>+<\/code> kalo vler\u00ebn ashtu si\u00e7 \u00ebsht\u00eb.<\/li>\n<li><code>-<\/code> shp\u00ebrfill vler\u00ebn.<\/li>\n<li><code>b<\/code> \u2014 Tipi logjik (<code>0<\/code> \u2014 <code>False<\/code>, gjith\u00eb t\u00eb tjerat \u2014 <code>E v\u00ebrtet\u00eb<\/code>).<\/li>\n<li><code>d<\/code> \u2014 Data (nga $horolog, n\u00eb Windows nga 1970, n\u00eb Linux nga 1900).<\/li>\n<li><code>t<\/code> \u2014 Koha ($horolog, sekondat pas mesnat\u00ebs).<\/li>\n<li><code>m<\/code> \u2014 Koha e sh\u00ebnj\u00ebs (string formati VITI-MUAAJ-DIT\u00cb OR\u00cb:MINUT:SEKOND).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %Lista e emrave t\u00eb kolonave. Elementi i par\u00eb \u2014 emri i subskriptit.<\/li>\n<li><code>namespace<\/code> \u2014 hap\u00ebsira n\u00eb t\u00eb cil\u00ebn do t\u00eb ekzekutohet k\u00ebrkesa.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeclass\">ExecuteClass<\/h3>\n<p><\/p>\n<p>Mbushja mbi <code>ExecuteGlobal<\/code>. N\u00eb baz\u00eb t\u00eb p\u00ebrkufizimit t\u00eb klas\u00ebs p\u00ebrgatit thirrjen <code>ExecuteGlobal<\/code> dhe e th\u00ebrret at\u00eb.<\/p>\n<p><\/p>\n<p><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 kalimi i t\u00eb dh\u00ebnave t\u00eb klas\u00ebs n\u00eb Python.<\/p>\n<p><\/p>\n<p>Argumentet:<\/p>\n<p><\/p>\n<ul>\n<li><code>class<\/code> \u2014 emri i klas\u00ebs<\/li>\n<li><code>variable<\/code> \u2014 emri i variablit Python n\u00eb t\u00eb cilin shkruhen t\u00eb dh\u00ebnat.<\/li>\n<li><code>lloji<\/code> \u2014 <code>list<\/code> ose Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 Id fillestar.<\/li>\n<li><code>end<\/code> \u2014 Id p\u00ebrfundimtar<\/li>\n<li><code>properties<\/code> \u2014 lista (ndashkimi \u00ebsht\u00eb presja) e pronave t\u00eb klas\u00ebs q\u00eb duhen ngarkuar n\u00eb grupin e t\u00eb dh\u00ebnave. Mb\u00ebshteten maskat. <code>*<\/code> dhe <code>?<\/code>. Me parametra standard\u00eb \u2014 <code>*<\/code> (t\u00eb gjitha pronat). Prona <code>%%CLASSNAME<\/code> neglizhohet.<\/li>\n<li><code>namespace<\/code> \u2014 hap\u00ebsira n\u00eb t\u00eb cil\u00ebn do t\u00eb ekzekutohet k\u00ebrkesa.<\/li>\n<\/ul>\n<p><\/p>\n<p>T\u00eb gjitha vetit\u00eb kalohen ashtu si\u00e7 jan\u00eb p\u00ebrve\u00e7 vetive t\u00eb tipave <code>te<\/code>, <code>%Time<\/code>, <code>%Boolean<\/code> dhe <code>%TimeStamp<\/code> \u2014 ato konvertohen n\u00eb klasat p\u00ebrkat\u00ebse t\u00eb Python.<\/p>\n<p><\/p>\n<h3 id=\"executetable\">ExecuteTable<\/h3>\n<p><\/p>\n<p>Mbushja mbi <code>ExecuteClass<\/code>. Transmeton emrin e tabel\u00ebs n\u00eb emrin e klas\u00ebs dhe th\u00ebrret <code>ExecuteClass<\/code>. N\u00ebnshkrimi:<\/p>\n<p><\/p>\n<p><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 kalimi i t\u00eb dh\u00ebnave t\u00eb tabel\u00ebs n\u00eb Python.<\/p>\n<p><\/p>\n<p>Argumentet:<\/p>\n<p><\/p>\n<ul>\n<li><code>table<\/code> \u2014 emri i tabel\u00ebs.<br \/>\nT\u00eb gjitha argumentet e tjera kalohen ashtu si\u00e7 jan\u00eb n\u00eb <code>ExecuteClass<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zametki\">Sh\u00ebnime<\/h3>\n<p><\/p>\n<ul>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> dhe <code>ExecuteTable<\/code> punojn\u00eb po aq shpejt.<\/li>\n<li><code>ExecuteGlobal<\/code> 20 her\u00eb m\u00eb shpejt se <code>ExecuteQuery<\/code> n\u00eb grupe t\u00eb m\u00ebdha t\u00eb t\u00eb dh\u00ebnave (koha e kalimit m\u00eb shum\u00eb se &gt;0.01 sekond\u00eb).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> dhe <code>ExecuteTable<\/code> punojn\u00eb n\u00eb globalet me k\u00ebt\u00eb struktur\u00eb: <code>^global(\u00e7el\u00ebsi) = $lb(prop1, prop2, ..., propN)<\/code> ku <code>key<\/code> \u2014 num\u00ebr i plot\u00eb.<\/li>\n<li>P\u00ebr <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> dhe <code>ExecuteTable<\/code> range e mb\u00ebshtetur t\u00eb vlerave <code>te<\/code> p\u00ebrputhet me rangun <code>mktime<\/code> dhe varet nga SO (<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>). P\u00ebrdorni <code>%TimeStamp<\/code>p\u00ebr kalimin e t\u00eb dh\u00ebnave jasht\u00eb k\u00ebtij rangu ose p\u00ebrdorni pandas dataframe pasi ky \u00ebsht\u00eb nj\u00eb kufizim vet\u00ebm p\u00ebr list\u00ebn.<\/li>\n<li>P\u00ebr <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> dhe <code>ExecuteTable<\/code> t\u00eb gjitha argumentet p\u00ebrve\u00e7 burimeve t\u00eb t\u00eb dh\u00ebnave (globalit, klas\u00ebs ose tabel\u00ebs) dhe variablit jan\u00eb opsionale.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"primery\">Shembuj<\/h2>\n<p><\/p>\n<p>Klasa testuese <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/isc\/py\/test\/Person.cls\">isc.py.test.Person<\/a><\/noindex> ka nj\u00eb metod\u00eb q\u00eb demonstruese t\u00eb gjitha variantet e kalimit t\u00eb t\u00eb dh\u00ebnave:<\/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\/\/ Argumentet e zakonshme\nset variable = \"df\"\nset type = \"dataframe\"\nset start = 1\nset end = $g(^isc.py.test.PersonD, start)\n\n\/\/ Metoda 0: ExecuteGlobal pa argumente\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)\n\n\/\/ Metoda 1: ExecuteGlobal me argumente    \n\/\/ Kur d\u00ebrgohet globali emrat e fushave caktohen manualisht\n\/\/ globalKey - emri i subskritit \nset labels = $lb(\"globalKey\", \"Name\", \"DOB\", \"TS\", \"RandomTime\", \"AgeYears\", \"AgeDecimal\", \"AgeDouble\", \"Bool\")\n\n\/\/ mask p\u00ebrmban nj\u00eb element m\u00eb pak se labels sepse \"globalKey\" - emri i subskritit\n\/\/ Shuajm\u00eb %%CLASSNAME\nset mask = \"-+dmt+++b\"\n\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)\n\n\/\/ Metoda 2: ExecuteClass\nset sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)\n\n\/\/ Metoda 3: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)\n\n\/\/ Metoda 4: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)<\/code><\/pre>\n<p><\/p>\n<p>Thirrni metod\u00ebn <code>do ##class(isc.py.test.Person).Test()<\/code> p\u00ebr t\u00eb par\u00eb si funksionojn\u00eb t\u00eb gjitha metodat e transmetimit t\u00eb t\u00eb dh\u00ebnave.<\/p>\n<p><\/p>\n<h2 id=\"vspomogatelnye-metody\">Metoda ndihm\u00ebse<\/h2>\n<p><\/p>\n<ul>\n<li><code>GetVariableInfo(variable, serialization, .defined, .type, .length)<\/code> \u2014 merr informacion p\u00ebr variablin: n\u00ebse \u00ebsht\u00eb e p\u00ebrcaktuar, klasa dhe gjat\u00ebsi e serializimit.<\/li>\n<li><code>GetVariableDefined(variable, .defined)<\/code> \u2014 a \u00ebsht\u00eb e p\u00ebrcaktuar variabla.<\/li>\n<li><code>GetVariableType(variable, .type)<\/code> \u2014 merr klas\u00ebn e variablit.<\/li>\n<li><code>GetStatus()<\/code> \u2014 merr dhe fshin p\u00ebrjashtimin e fundit n\u00eb an\u00ebn e Python.<\/li>\n<li><code>GetModuleInfo(module, .imported, .alias)<\/code> \u2014 merr variabl\u00ebn e modulit dhe statusin e importit.<\/li>\n<li><code>GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)<\/code> \u2014 merr informacion p\u00ebr funksionin.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">Interoperabiliteti<\/h1>\n<p><\/p>\n<p>Keni m\u00ebsuar si t\u00eb thirrni Python Gateway nga terminali, tani do t\u00eb fillojm\u00eb ta p\u00ebrdorim at\u00eb n\u00eb prodhim. Baza e nd\u00ebrveprimit me Python n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb \u00ebsht\u00eb <code>isc.py.ens.Operation<\/code>. Ai na lejon t\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Kryejm\u00eb kodin n\u00eb Python<\/li>\n<li>Ruajm\u00eb\/Rip\u00ebrim\u00eb kontekstin e Python<\/li>\n<li>Ngarko dhe merr t\u00eb dh\u00ebna nga Python<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb parim, operimi n\u00eb Pyhton \u00ebsht\u00eb nj\u00eb mb\u00ebshtjell\u00ebs mbi <code>isc.py.Main<\/code>. Operacioni <code>isc.py.ens.Operation<\/code> jep mund\u00ebsin\u00eb e nd\u00ebrveprimit me procesin e Python nga prodhimet InterSystems IRIS. Mb\u00ebshtetet pes\u00eb k\u00ebrkesa:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> p\u00ebr t\u00eb ekzekutuar kodin n\u00eb Python. Kthen <code>isc.py.msg.ExecutionResponse<\/code> me rezultatin e ekzekutimit dhe vlerat e variablave t\u00eb k\u00ebrkuara.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> p\u00ebr t\u00eb ekzekutuar kodin n\u00eb Python. Kthen <code>isc.py.msg.StreamExecutionResponse<\/code> rezultatin e ekzekutimit dhe vlerat e variablave t\u00eb k\u00ebrkuara. E ngjashme <code>isc.py.msg.ExecutionRequest<\/code>, por pranon dhe kthen rrjedha n\u00eb vend t\u00eb vargjeve.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> p\u00ebr t\u00eb transmetuar rezultatin e ekzekutimit t\u00eb k\u00ebrkes\u00ebs SQL. Kthen <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> p\u00ebr t\u00eb transferuar t\u00eb dh\u00ebnat e globit\/klas\u00ebs\/tabel\u00ebs. Kthehet <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.SaveRequest<\/code> p\u00ebr ruajtjen e kontekstit Python. Kthehet <code>Ens.StringResponse<\/code> me identifikuesin e kontekstit.<\/li>\n<li>\n<p><code>isc.py.msg.RestoreRequest<\/code> p\u00ebr rikthimin e kontekstit Python.<\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, <code>isc.py.ens.Operation<\/code> ka dy pika t\u00eb vendosjes:<\/p>\n<p><\/p>\n<ul>\n<li><code>Initializer<\/code> \u2014 zgjedhja e klas\u00ebs q\u00eb implementon nd\u00ebrfaqen <code>isc.py.init.Abstract<\/code>. Ai mund t\u00eb p\u00ebrdoret p\u00ebr t\u00eb ngarkuar funksione, module, klasa etj. Ai ekzekutohet nj\u00eb her\u00eb gjat\u00eb nisjes s\u00eb procesit.<\/li>\n<li><code>PythonLib<\/code> \u2014 (vet\u00ebm p\u00ebr Linux) n\u00ebse shihni gabime gjat\u00eb ngarkimit, vendoseni vler\u00ebn e tij n\u00eb <code>libpython3.6m.so<\/code> ose madje n\u00eb rrug\u00ebn e plot\u00eb deri n\u00eb bibliotek\u00ebn Python. <\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sozdanie-biznes-processov\">Krijimi i proces\u00ebve biznesor\u00eb<\/h2>\n<p><\/p>\n<p>Jan\u00eb n\u00eb dispozicion dy klasa q\u00eb leht\u00ebsojn\u00eb zhvillimin e proces\u00ebve biznesor\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.ens.ProcessUtils<\/code> lejon nxjerrjen e anotacioneve nga aktivitete me z\u00ebvend\u00ebsim variablash.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> lejon testimin e leht\u00eb t\u00eb proces\u00ebve biznesor\u00eb me Python. Ai mund t\u00eb ekzekutoj\u00eb procesin biznesor (pjes\u00eb n\u00eb gjuh\u00ebn Python) n\u00eb procesin aktual.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"podstanovka-peremennyh\">Z\u00ebvend\u00ebsimi i variablave<\/h2>\n<p><\/p>\n<p>T\u00eb gjitha proceset e biznesit t\u00eb trash\u00ebguara nga <code>isc.py.ens.ProcessUtils<\/code>, mund t\u00eb p\u00ebrdorin metod\u00ebn <code>GetAnnotation(name)<\/code> p\u00ebr t\u00eb marr\u00eb vler\u00ebn e anotacionit t\u00eb aktivitetit n\u00eb emrin e tij. Anotacioni i aktivitetit mund t\u00eb p\u00ebrmbaj\u00eb variabla q\u00eb do t\u00eb llogariten n\u00eb an\u00ebn e InterSystems IRIS p\u00ebrpara se t\u00eb kalohen n\u00eb Python. Ja sintaksa p\u00ebr z\u00ebvend\u00ebsimin e variablave:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 thirrje e metod\u00ebs<\/li>\n<li><code>#{expr}<\/code> \u2014 ekzekuto kodin n\u00eb gjuh\u00ebn ObjectScript.<\/li>\n<\/ul>\n<p><\/p>\n<p>Nj\u00eb shembull \u00ebsht\u00eb n\u00eb procesin e testimit t\u00eb biznesit <code>isc.py.test.Process<\/code>, p\u00ebr shembull, n\u00eb aktivitetin <code>Matrica e Korrellacionit: Grafi<\/code>: <code>f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')<\/code>. N\u00eb k\u00ebt\u00eb shembull:<\/p>\n<p><\/p>\n<ul>\n<li><code>#{process.WorkDirectory}<\/code> kthen pron\u00ebn WorkDirectory t\u00eb objektit <code>process<\/code>, q\u00eb \u00ebsht\u00eb nj\u00eb instanc\u00eb e klas\u00ebs <code>isc.py.test.Process<\/code> dmth. procesi aktual i biznesit.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> th\u00ebrret metod\u00ebn <code>Integer<\/code> klas\u00ebs <code>%PopulateUtils<\/code>, duke kaluar argumentet <code>1<\/code> dhe <code>100<\/code>, duke kthyer nj\u00eb num\u00ebr t\u00eb rast\u00ebsish\u00ebm t\u00eb plot\u00eb n\u00eb intervalin <code>1...100<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"testovyy-biznes-process\">Procesi i testimit t\u00eb biznesit<\/h2>\n<p><\/p>\n<p>Produkti i testimit dhe procesi i testimit t\u00eb biznesit jan\u00eb t\u00eb disponuesh\u00ebm si pjes\u00eb e Gateway Python. P\u00ebr t'i p\u00ebrdorur ata:<\/p>\n<p><\/p>\n<ol>\n<li>N\u00eb terminalin e OS-s\u00eb ekzekutoni: <code>pip install pandas matplotlib seaborn<\/code>. <\/li>\n<li>N\u00eb terminalin e InterSystems IRIS ekzekutoni: <code>do ##class(isc.py.test.CannibalizationData).Import()<\/code> p\u00ebr t\u00eb plot\u00ebsuar t\u00eb dh\u00ebnat testuese.<\/li>\n<li>Nisni produktin <code>isc.py.test.Production<\/code>.<\/li>\n<li>D\u00ebrgo nj\u00eb k\u00ebrkes\u00eb t\u00eb tipit <code>Ens.Request<\/code> n\u00eb <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Le t\u00eb shohim se si funksionon gjith\u00e7ka s\u00eb bashku. Hapni <code>isc.py.test.Process<\/code> n\u00eb redaktorin BPL:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway n\u00eb 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\">Ekzekutimi i kodit<\/h3>\n<p><\/p>\n<p>Thirrja m\u00eb e r\u00ebnd\u00ebsishme \u00ebsht\u00eb ekzekutimi i kodit Python:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway n\u00eb InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/dafa6b8c878ae937b194ff577b86dc89.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebrkesa p\u00ebrdoret <code>isc.py.msg.ExecutionRequest<\/code>, k\u00ebtu jan\u00eb pronat e tij:<\/p>\n<p><\/p>\n<ul>\n<li><code>Code<\/code> \u2014 Kodi Python.<\/li>\n<li><code>SeparateLines<\/code> \u2014 a duhet t\u00eb ndahet kodi n\u00eb linja p\u00ebr ekzekutim. <code>$c(10)<\/code> (<code>n<\/code>) p\u00ebrdoret p\u00ebr t\u00eb ndar\u00eb rreshtat. Vini re se NUK rekomandohet t\u00eb p\u00ebrpunoni mesazhin n\u00eb t\u00ebr\u00ebsi menj\u00ebher\u00eb, kjo funksion \u00ebsht\u00eb i destinuar vet\u00ebm p\u00ebr p\u00ebrpunim <code>def<\/code> dhe shprehje t\u00eb ngjashme me shum\u00eb rreshta. N\u00eb m\u00ebnyr\u00eb t\u00eb parazgjedhur <code>0<\/code>.<\/li>\n<li><code>Variablat<\/code> \u2014 nj\u00eb list\u00eb e ndar\u00eb me presje e variablave q\u00eb do t\u00eb shtohen n\u00eb p\u00ebrgjigje.<\/li>\n<li><code>Serializimi<\/code> \u2014 Si t\u00eb serializoni variablat q\u00eb d\u00ebshirojm\u00eb t\u00eb kthejm\u00eb. Opcionet: <code>Str<\/code>, <code>Repr<\/code>, <code>JSON<\/code>, <code>Pickle<\/code> dhe <code>Dill<\/code>, n\u00eb m\u00ebnyr\u00eb t\u00eb parazgjedhur <code>Str<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb rastin ton\u00eb, ne vet\u00ebm po vendosim pron\u00ebn <code>Code<\/code>, k\u00ebshtu q\u00eb t\u00eb gjitha pronat e tjera p\u00ebrdorin vlerat e parazgjedhura. Ne e vendosim at\u00eb duke thirrur <code>process.GetAnnotation(\"Import pandas\")<\/code>, e cila gjat\u00eb ekzekutimit kthen anotimin pas z\u00ebvend\u00ebsimit t\u00eb variablave. N\u00eb fund t\u00eb fundit, kodi <code>import pandas as pd<\/code> do t\u00eb d\u00ebrgohet n\u00eb Python. <code>GetAnnotation<\/code> mund t\u00eb jet\u00eb e dobishme p\u00ebr marrjen e skenar\u00ebve shum\u00eb-rreshtor\u00eb Python, por nuk ka kufizime mbi k\u00ebt\u00eb m\u00ebnyr\u00eb t\u00eb marrjes s\u00eb kodit. Ju mund ta vendosni pron\u00ebn <code>Code<\/code> n\u00eb \u00e7do m\u00ebnyr\u00eb q\u00eb ju p\u00ebrshtatet.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Marrja e variablave<\/h3>\n<p><\/p>\n<p>Nj\u00eb sfid\u00eb tjet\u00ebr interesante duke p\u00ebrdorur <code>isc.py.msg.ExecutionRequest<\/code> \u2014 <code>Matrica e Korrellacionit: Tabular<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway n\u00eb InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/8824e49ecaa448551c830e9a90eb5781.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ajo llogarit Matr\u00ebn e Korrellacionit n\u00eb an\u00ebn e Python dhe nxjerr variablin <code>corrmat<\/code> prapa n\u00eb InterSystems IRIS n\u00eb formatin JSON, duke vendosur pronat e k\u00ebrkes\u00ebs:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variablat<\/code>: <code>\"corrmat\"<\/code><\/li>\n<li><code>Serializimi<\/code>: <code>\"JSON\"<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Ne mund t'i shohim rezultatet n\u00eb Visual Trace:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway n\u00eb InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/713bcade8cb1018f2974cba2cab712b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe n\u00ebse na nevojitet kjo vler\u00eb n\u00eb BP, mund t\u00eb merret k\u00ebshtu: <code>callresponse.Variables.GetAt(\"corrmat\")<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">Transmetimi i t\u00eb dh\u00ebnave<\/h3>\n<p><\/p>\n<p>M\u00eb pas, do t\u00eb flasim p\u00ebr transferimin e t\u00eb dh\u00ebnave nga InterSystems IRIS n\u00eb Python, t\u00eb gjitha k\u00ebrkesat p\u00ebr transferimin e t\u00eb dh\u00ebnave implementojn\u00eb nd\u00ebrfaqen <code>isc.py.msg.DataRequest<\/code>, e cila ofron pronat e m\u00ebposhtme:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variable<\/code> \u2014 variabla Python n\u00eb t\u00eb cilin shkruhen t\u00eb dh\u00ebnat.<\/li>\n<li><code>Tipi<\/code> \u2014 lloji i variabl\u00ebs: <code>dataframe<\/code> (dataframe pandas) ose <code>list<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 zona nga e cila marrim t\u00eb dh\u00ebnat. Paketa <code>isc.py<\/code> duhet t\u00eb jet\u00eb e aksesueshme n\u00eb k\u00ebt\u00eb zon\u00eb. Kjo mund t\u00eb jet\u00eb nj\u00eb zon\u00eb pa mb\u00ebshtetje p\u00ebr produktet.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb baz\u00eb t\u00eb k\u00ebsaj nd\u00ebrfaqe jan\u00eb implementuar 4 klasat e k\u00ebrkesave:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 vendosni pron\u00ebn <code>Query<\/code> p\u00ebr t\u00eb transferuar k\u00ebrkes\u00ebn SQL.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 vendosni pron\u00ebn <code>Class<\/code> p\u00ebr t\u00eb transferuar t\u00eb dh\u00ebnat e klas\u00ebs.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 vendosni pron\u00ebn <code>Tabela<\/code> p\u00ebr t\u00eb transferuar t\u00eb dh\u00ebnat e tabel\u00ebs.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 vendosni pron\u00ebn <code>Global<\/code> p\u00ebr t\u00eb transferuar t\u00eb dh\u00ebnat e globalit.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb procesin e testimit, shikoni aktivitetin <code>RAW<\/code>index <code>isc.py.msg.QueryRequest<\/code> tregon n\u00eb veprim.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway n\u00eb 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\">Ruajtja\/rikthimi i kontekstit Python<\/h3>\n<p><\/p>\n<p>N\u00eb fund, ne mund t\u00eb ruajm\u00eb kontekstin Python n\u00eb InterSystems IRIS, p\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb, do t\u00eb d\u00ebrgojm\u00eb <code>isc.py.msg.SaveRequest<\/code> me argumentet:<\/p>\n<p><\/p>\n<ul>\n<li><code>Mask<\/code> \u2014 Ruajn\u00eb vet\u00ebm variablat q\u00eb p\u00ebrmbushin mask\u00ebn. Mb\u00ebshteten <code>*<\/code> dhe <code>?<\/code>. Shembull: <code>\"Data*, Figure?\"<\/code>. Si parazgjedhje <code>*<\/code>.<\/li>\n<li><code>MaxLength<\/code> \u2014 Gjat\u00ebsia maksimale e variablit t\u00eb ruajtur. N\u00ebse serializimi i variablit \u00ebsht\u00eb m\u00eb i gjat\u00eb, ai do t\u00eb injorohet. Vendosni 0 p\u00ebr t\u00eb pranuar variablat me \u00e7do gjat\u00ebsi. N\u00eb parazgjedhje <code>$$$MaxStringLength<\/code>.<\/li>\n<li><code>Emri<\/code> \u2014 Emri i kontekstit (opsional).<\/li>\n<li><code>P\u00ebrshkrimi<\/code> \u2014 P\u00ebrshkrimi i kontekstit (opsional).<\/li>\n<\/ul>\n<p><\/p>\n<p>Kthen <code>Ens.StringResponse<\/code> me <code>Id<\/code> i kontekstit t\u00eb ruajtur. N\u00eb procesin e testimit, shikoni aktivitetin <code>Ruaj Kontekstin<\/code>.<\/p>\n<p><\/p>\n<p>K\u00ebrkesa p\u00ebrkat\u00ebse <code>isc.py.msg.RestoreRequest<\/code> ngarkon kontekstin nga InterSystems IRIS n\u00eb Python:<\/p>\n<p><\/p>\n<ul>\n<li><code>ContextId<\/code> \u2014 identifikuesi i kontekstit.<\/li>\n<li><code>Pastroni<\/code> \u2014 pastroni kontekstin para rikthimit.<\/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 ky \u00ebsht\u00eb nj\u00eb aplikacion web me burim t\u00eb hapur q\u00eb lejon krijimin e notebook-\u00ebve, t\u00eb cilat p\u00ebrmbajn\u00eb kod, vizualizime dhe tekst dhe t'i publikoni ato. Python Gateway lejon shqyrtimin dhe redaktimin e proceseve BPL n\u00eb form\u00ebn e Jupyter Notebook. Vini re se aktualisht p\u00ebrdoret ekzekutori standard Python 3.<\/p>\n<p><\/p>\n<p>Ky shtes\u00eb supozon se anotimet p\u00ebrmbajn\u00eb kod Python dhe p\u00ebrdorin emrat e aktiviteteve si tituj t\u00eb m\u00ebparsh\u00ebm. Tani \u00ebsht\u00eb e mundur t\u00eb zhvilloni proceset e biznesit PythonGateway n\u00eb Jupyter Notebook. K\u00ebto jan\u00eb mund\u00ebsit\u00eb: <\/p>\n<p><\/p>\n<ul>\n<li>T\u00eb krijoni procese t\u00eb reja t\u00eb biznesit<\/li>\n<li>T\u00eb fshini proceset e biznesit<\/li>\n<li>T\u00eb krijoni aktivitete t\u00eb reja<\/li>\n<li>T\u00eb modificarni aktivitete<\/li>\n<li>T\u00eb fshini aktivitete<\/li>\n<\/ul>\n<p><\/p>\n<p>Ja <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/mZizgVtZ014\">video demonstrimi<\/a><\/noindex>. Dhe disa screenshot-e:<\/p>\n<p><\/p>\n<h2 id=\"provodnik-processov\">Eksploruesi i proceseve<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway n\u00eb 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\">Redaktori i procesit<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway n\u00eb 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\">Instalimi<\/h2>\n<p><\/p>\n<ol>\n<li>Do t'ju nevojitet InterSystems IRIS 2019.2+.<\/li>\n<li>Instaloni PythonGateway v0.8+ (nevojitet vet\u00ebm <code>isc.py.util.Jupyter<\/code>, <code>isc.py.util.JupyterCheckpoints<\/code> dhe <code>isc.py.ens.ProcessUtils<\/code>).<\/li>\n<li>P\u00ebrdit\u00ebsoni kodin ObjectScript nga depoja.<\/li>\n<li>Kryeni <code>do ##class(isc.py.util.Jupyter).Install()<\/code> dhe ndiqni udh\u00ebzimet.<\/li>\n<\/ol>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/tree\/master\/jupyter\">Dokumentacioni<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"vyvody\">P\u00ebrfundimet<\/h1>\n<p><\/p>\n<p>MLToolkit \u2014 nj\u00eb paket\u00eb mjetesh, q\u00ebllimi i s\u00eb cil\u00ebs \u00ebsht\u00eb t\u00eb bashkoj\u00eb modelet dhe ambientin transaksional, n\u00eb m\u00ebnyr\u00eb q\u00eb modelet e nd\u00ebrtuara t\u00eb mund t\u00eb p\u00ebrdoren leht\u00ebsisht direkt n\u00eb proceset tuaja t\u00eb biznesit. Python Gateway \u00ebsht\u00eb pjes\u00eb e MLToolkit dhe siguron integrimin me gjuh\u00ebn Python duke lejuar orkestrimin e \u00e7do algoritmi t\u00eb m\u00ebsimit t\u00eb rendit, t\u00eb krijuar n\u00eb gjuh\u00ebn Python (ambienti kryesor p\u00ebr shum\u00eb Data Scientists), duke p\u00ebrdorur shum\u00eb biblioteka t\u00eb gatshme p\u00ebr krijimin e shpejt\u00eb t\u00eb zgjidhjeve analitike AI\/ML t\u00eb adaptueshme dhe robotizuara n\u00eb platform\u00ebn InterSystems IRIS.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Linket<\/h1>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/473452\/\">Artikulli i m\u00ebparsh\u00ebm<\/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\">M\u00ebnyrat e Python Gateway<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/Convergent-Analytics\">Analiz\u00eb Konvergente<\/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\">Dokumentacioni dhe kurset p\u00ebr Python<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"mltoolkit\">MLToolkit<\/h1>\n<p><\/p>\n<p>Grupi i p\u00ebrdoruesve t\u00eb MLToolkit \u00ebsht\u00eb nj\u00eb depo private GitHub, e krijuar si pjes\u00eb e organizat\u00ebs korporative GitHub t\u00eb InterSystems. Ajo i drejtohet p\u00ebrdoruesve t\u00eb jasht\u00ebm q\u00eb instalojn\u00eb, studiojn\u00eb ose tashm\u00eb p\u00ebrdorin komponent\u00ebt e MLToolkit, p\u00ebrfshir\u00eb Python Gateway. N\u00eb grupin \u00ebsht\u00eb n\u00eb dispozicion nj\u00eb s\u00ebr\u00eb rastesh t\u00eb realizuara (me kod burimi dhe t\u00eb dh\u00ebna testimi) n\u00eb fushat e marketingut, prodhimit, mjek\u00ebsis\u00eb dhe shum\u00eb industrive t\u00eb tjera. P\u00ebr t'u bashkuar me grupin e p\u00ebrdoruesve t\u00eb ML Toolkit, ju lutemi d\u00ebrgoni nj\u00eb mesazh t\u00eb shkurt\u00ebr me email n\u00eb adres\u00ebn e m\u00ebposhtme: <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> dhe tregoni n\u00eb letr\u00ebn tuaj t\u00eb dh\u00ebnat e m\u00ebposhtme:<\/p>\n<p><\/p>\n<ul>\n<li>Emri i p\u00ebrdoruesit GitHub<\/li>\n<li>Organizata (ku punoni ose studioni)<\/li>\n<li>Pozita (pozita juaj e v\u00ebrtet\u00eb n\u00eb organizat\u00ebn tuaj, ose \"Student\", ose \"T\u00eb Pavarur\").<\/li>\n<li>Shteti<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebr ata q\u00eb e lexuan artikullin dhe jan\u00eb t\u00eb interesuar p\u00ebr mund\u00ebsit\u00eb e InterSystems IRIS si nj\u00eb platform\u00eb p\u00ebr zhvillimin ose vendosjen e mekanizmave t\u00eb inteligjenc\u00ebs artificiale dhe m\u00ebsimit t\u00eb makinerive, ne ofrojm\u00eb t\u00eb diskutojm\u00eb skenar\u00eb t\u00eb mundsh\u00ebm q\u00eb jan\u00eb t\u00eb r\u00ebnd\u00ebsish\u00ebm p\u00ebr nd\u00ebrmarrjen tuaj. Ne jemi t\u00eb gatsh\u00ebm t\u00eb analizojm\u00eb nevojat e nd\u00ebrmarrjes suaj dhe s\u00eb bashku t\u00eb p\u00ebrcaktojm\u00eb nj\u00eb plan veprimi; adresa kontaktuese e grupit ton\u00eb t\u00eb ekspert\u00ebve t\u00eb AI\/ML \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com\">MLToolkit@intersystems.com<\/a><\/noindex>.<\/p>\n<p>Burimi: <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.2.1 - 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\/sq\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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 n\u00eb InterSystems IRIS | ProHoster","description":"Ky artikull i kushtohet Python Gateway \u2014 nj\u00eb projekt komuniteti me kod t\u00eb hapur p\u00ebr platform\u00ebn e t\u00eb dh\u00ebnave InterSystems IRIS.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/python-gateway-v-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/41221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=41221"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/41221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/41222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=41221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=41221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=41221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}