{"id":1900,"date":"2026-02-03T08:00:00","date_gmt":"2026-02-03T11:00:00","guid":{"rendered":"https:\/\/alisonpezzott.com.br\/?p=1900"},"modified":"2026-02-03T04:05:47","modified_gmt":"2026-02-03T07:05:47","slug":"pyfabricops-na-pratica-automatizando-microsoft-fabric-e-power-bi-com-python-e-rest-apis","status":"publish","type":"post","link":"https:\/\/alisonpezzott.com.br\/en\/pyfabricops-na-pratica-automatizando-microsoft-fabric-e-power-bi-com-python-e-rest-apis\/","title":{"rendered":"pyFabricOps na pr\u00e1tica: Automatizando Microsoft Fabric e Power BI com Python e REST APIs"},"content":{"rendered":"<p>Em julho de 2025 eu criei o projeto pyFabricOps que \u00e9 uma biblioteca Python dispon\u00edvel no Pypi com o objetivo de ler, criar, modificar, automatizar artefatos do Microsoft Fabric e Power BI utilizando as REST APIs oficiais.<\/p>\n\n\n\n<p>O objetivo inicial era criar uma biblioteca capaz de rodar fora do Microsoft Fabric, ou seja, em scripts locais e em pipelines do Azure DevOps ou GitHub para esteiras de CI\/CD assim como em orquestradores de Data Engineering.<\/p>\n\n\n\n<p>Contudo muitos seguidores me pediram para que fosse poss\u00edvel rodar a biblioteca nos notebooks do Microsoft Fabric.<\/p>\n\n\n\n<p>Pois bem, a partir da vers\u00e3o 0.3.10 eu tenho alegria de anunciar que a biblioteca pyFabricOps pode rodar nos notebooks do Microsoft Fabric! \ud83d\ude80<\/p>\n\n\n\n<p>A seguir vou exemplificar a dar os primeiros passos com a biblioteca em dois ambientes distintos:<\/p>\n\n\n\n<p>1 &#8211; Fora do Microsoft Fabric, ou seja, scripts locais (.py) como jupyter notebooks (.ipynb);<\/p>\n\n\n\n<p>2 &#8211; Notebooks Fabric, utilizando environment customizado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Executando fora do Microsoft Fabric  <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Setup  <\/h3>\n\n\n\n<p>Como o pacote est\u00e1 dispon\u00edvel no pypi \u00e9 muito f\u00e1cil instalar a biblioteca. <\/p>\n\n\n\n<p>Na m\u00e1quina local (com Python instalado) rode no terminal:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Bash<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pip install -U pyfabricops<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pip <\/span><span style=\"color: #9DB1C5\">install<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #9DB1C5\">-U<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #9DB1C5\">pyfabricops<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Agora a biblioteca est\u00e1 dispon\u00edvel para importa\u00e7\u00e3o em seus scripts. <\/p>\n\n\n\n<p>Crie um arquivo chamado <kbd>test.ipynb<\/kbd> e na primeira c\u00e9lula do notebook execute.  <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import pyfabricops as pf<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #B392F0\"> pyfabricops <\/span><span style=\"color: #F97583\">as<\/span><span style=\"color: #B392F0\"> pf<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>pf \u00e9 apenas um alias que escolhi pois n\u00e3o h\u00e1 nenhum alias que conhe\u00e7o que o utiliza. Al\u00e9m disso me relembra Pezzott Fabric! \ud83e\udd23<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Logging<\/h3>\n\n\n\n<p>Eu criei um logging personalizado ao qual o usu\u00e1rio pode invocar ou n\u00e3o, definir para que seja somente no terminal ou loggando em diret\u00f3rio. Fica a gosto do fregu\u00eas qual o n\u00edvel e a apar\u00eancia do logging. Podemos falar especificamente dele em outro post. Para n\u00e3o iniciar sem log nenhum, voc\u00ea pode usar a minha prefer\u00eancia. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pf.setup_logging(level='info', format_style='standard')<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">setup_logging<\/span><span style=\"color: #BBBBBB\">(level<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\">&#39;info&#39;<\/span><span style=\"color: #BBBBBB\">, format_style<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\">&#39;standard&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Voc\u00ea pode conferir todas as op\u00e7\u00f5es do logging na documenta\u00e7\u00e3o oficial <a href=\"https:\/\/pyfabricops.readthedocs.io\/en\/latest\/functions\/utils\/logging\/#pyfabricops.utils.logging.setup_logging\">aqui<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Autentica\u00e7\u00e3o<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">oauth (Interativo)  <\/h4>\n\n\n\n<p>Desta forma o usu\u00e1rio executa os scripts e a biblioteca solicita o login via browser de forma interativa. A pr\u00f3pria biblioteca gerencia a validade dos tokens e renova quando necess\u00e1rio.  <\/p>\n\n\n\n<p>Esta \u00e9 uma maneira bastante eficaz e r\u00e1pida principalmente quando n\u00e3o se tem acesso ao Service Principal. Contudo esta maneira <strong>n\u00e3o atende scripts de automa\u00e7\u00e3o<\/strong> pois n\u00e3o ser\u00e1 poss\u00edvel abrir a tela e n\u00e3o haver\u00e1 um usu\u00e1rio para autenticar interativamente.  <\/p>\n\n\n\n<p>Configure a autentica\u00e7\u00e3o interativa com:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pf.set_auth_provider('oauth')<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">set_auth_provider<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;oauth&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">env (Service Principal)<\/h4>\n\n\n\n<p>Esta \u00e9 a maneira ideal para automa\u00e7\u00e3o pois roda em background com escopos definidos gerenciados no Microsoft Entra ID. <\/p>\n\n\n\n<p>Assista <a href=\"https:\/\/youtu.be\/IFp1Aingnmw\">aqui<\/a> como criar um Service Principal para utiliza\u00e7\u00e3o com a biblioteca.<\/p>\n\n\n\n<p>Basta voc\u00ea configurar as credenciais seja nas bibliotecas de vari\u00e1veis de ambiente do Windows, seja GitHub Secrets, Azure DevOps secrets ou at\u00e9 mesmo em um arquivo .env na raiz do seu reposit\u00f3rio local.<\/p>\n\n\n\n<p>A seguir veja um exemplo de arquivo .env:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Plaintext<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>FAB_CLIENT_ID=00000000-1234-5678-9012-999999999999\nFAB_CLIENT_SECRET=avh~arhvparhr-054qvm.avap\nFAB_TENANT_ID=99999999-1234-5678-9012-000000000000<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #b392f0\">FAB_CLIENT_ID=00000000-1234-5678-9012-999999999999<\/span><\/span>\n<span class=\"line\"><span style=\"color: #b392f0\">FAB_CLIENT_SECRET=avh~arhvparhr-054qvm.avap<\/span><\/span>\n<span class=\"line\"><span style=\"color: #b392f0\">FAB_TENANT_ID=99999999-1234-5678-9012-000000000000<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Primeiros comandos  <\/h3>\n\n\n\n<p>Agora vamos executar um comando simples. Por exemplo listar todos os workspaces. <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Atente-se ao m\u00e9todo de autentica\u00e7\u00e3o que est\u00e1 executando, pois neste exemplo, se rodar o comando usando a autentica\u00e7\u00e3o interativa ir\u00e1 coletar os workspaces que aquele usu\u00e1rio tem acesso. J\u00e1 se executar pelo Service Principal ir\u00e1 obter os workspaces que o service principal tem acesso.  <\/p>\n<\/blockquote>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pf.list_workspaces()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">list_workspaces<\/span><span style=\"color: #BBBBBB\">()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"318\" src=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-1024x318.png\" alt=\"\" class=\"wp-image-1904\" srcset=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-1024x318.png 1024w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-300x93.png 300w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-768x239.png 768w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-18x6.png 18w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image.png 1502w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Caso queira retornar em formato json basta passar o par\u00e2metro <kbd>df=False<\/kbd><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pf.list_workspaces(df=False)  <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">list_workspaces<\/span><span style=\"color: #BBBBBB\">(df<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">False<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">  <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"621\" height=\"552\" src=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-1.png\" alt=\"\" class=\"wp-image-1905\" srcset=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-1.png 621w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-1-300x267.png 300w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-1-14x12.png 14w\" sizes=\"(max-width: 621px) 100vw, 621px\" \/><\/figure>\n\n\n\n<p>Al\u00e9m disso voc\u00ea pode apenas passar o mouse sobre cada fun\u00e7\u00e3o que voc\u00ea poder\u00e1 conferir os argumentos, retorno e exemplos nas docstrings.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"361\" src=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-2-1024x361.png\" alt=\"\" class=\"wp-image-1906\" srcset=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-2-1024x361.png 1024w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-2-300x106.png 300w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-2-768x270.png 768w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-2-18x6.png 18w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-2.png 1042w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Executando no Microsoft Fabric  <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Setup<\/h3>\n\n\n\n<p>H\u00e1 duas formas de instalar a biblioteca no Microsoft Fabric. A primeira \u00e9 tempor\u00e1ria, ou seja, apenas durante a sess\u00e3o ativa. Exige a reinstala\u00e7\u00e3o a cada in\u00edcio da sess\u00e3o. Este tipo serve apenas para algo pontual, alguma manipula\u00e7\u00e3o espor\u00e1dica, um teste apenas. <\/p>\n\n\n\n<p>Crie um notebook qualquer e rode o comando abaixo para instalar nesta sess\u00e3o ativa<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>%pip install -qq -U pyfabricops<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">%<\/span><span style=\"color: #B392F0\">pip install <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #B392F0\">qq <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #B392F0\">U pyfabricops<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>A segunda forma \u00e9 a mais indicada. No workspace crie um environment. <\/p>\n\n\n\n<p>Adicione a biblioteca usando a interface e depois salve e publique.<\/p>\n\n\n\n<p>Este processo de publica\u00e7\u00e3o pode levar at\u00e9 em torno de 15 minutos.<\/p>\n\n\n\n<p>Feito isto basta adicionar o environment aos notebooks do workspace, garantindo desta forma a execu\u00e7\u00e3o do notebook de forma aut\u00f4noma eliminando a instala\u00e7\u00e3o a cada sess\u00e3o.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"504\" src=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-3-1024x504.png\" alt=\"\" class=\"wp-image-1907\" srcset=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-3-1024x504.png 1024w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-3-300x148.png 300w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-3-768x378.png 768w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-3-18x9.png 18w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-3.png 1181w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Agora no notebook voc\u00ea pode importar a biblioteca e efetuar o setup do logging. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import pyfabricops as pf\n\npf.setup_logging(level='info', format_style='standard')<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #B392F0\"> pyfabricops <\/span><span style=\"color: #F97583\">as<\/span><span style=\"color: #B392F0\"> pf<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">setup_logging<\/span><span style=\"color: #BBBBBB\">(level<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\">&#39;info&#39;<\/span><span style=\"color: #BBBBBB\">, format_style<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\">&#39;standard&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Autentica\u00e7\u00e3o  <\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">fabric  <\/h4>\n\n\n\n<p>Este o mais novo m\u00e9todo de autentica\u00e7\u00e3o da biblioteca. Com esta op\u00e7\u00e3o o usu\u00e1rio autenticado pode executar REST APIs utilizando o token do pr\u00f3prio usu\u00e1rio autenticado atrav\u00e9s da biblioteca Notebookutils.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pf.set_auth_provider('fabric')<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">set_auth_provider<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;fabric&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">env<\/h4>\n\n\n\n<p>Tamb\u00e9m no Microsoft Fabric est\u00e1 suportado o Service Principal. Contudo recomenda-se fortemente utilizar o Azure Key Vault para gerenciar as credenciais.<\/p>\n\n\n\n<p>Veja neste <a href=\"https:\/\/youtu.be\/GPuUe1vMSNQ\">v\u00eddeo<\/a> como configurar o Azure Key Vault para armazenar as credencias e gerenciar o acesso dos usu\u00e1rios ao Service Principal de maneira ultra segura.<\/p>\n\n\n\n<p>No notebook utilize o snippet abaixo para autenticar utilizando o service principal obtido pelo Azure Key Vault.  <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import os\nfrom notebookutils import credentials\n\nKEY_VAULT = \"https:\/\/your_key_vault_name.vault.azure.net\/\"\nos.environ&#91;\"FAB_CLIENT_ID\"&#93; =credentials.getSecret(KEY_VAULT, \"YOUR-FAB-CLIENT-ID\")\nos.environ&#91;\"FAB_CLIENT_SECRET\"&#93;=credentials.getSecret(KEY_VAULT, \"YOUR-FAB-CLIENT-SECRET\")\nos.environ&#91;\"FAB_TENANT_ID\"&#93;=credentials.getSecret(KEY_VAULT, \"YOUR-FAB-TENANT-ID\")\n\npf.set_auth_provider('env')<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #B392F0\"> os<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #B392F0\"> notebookutils <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #B392F0\"> credentials<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">KEY_VAULT <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;https:\/\/your_key_vault_name.vault.azure.net\/&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">os<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">environ<\/span><span style=\"color: #BBBBBB\">&#91;<\/span><span style=\"color: #FFAB70\">&quot;FAB_CLIENT_ID&quot;<\/span><span style=\"color: #BBBBBB\">&#93;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\">credentials<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">getSecret<\/span><span style=\"color: #BBBBBB\">(KEY_VAULT, <\/span><span style=\"color: #FFAB70\">&quot;YOUR-FAB-CLIENT-ID&quot;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">os<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">environ<\/span><span style=\"color: #BBBBBB\">&#91;<\/span><span style=\"color: #FFAB70\">&quot;FAB_CLIENT_SECRET&quot;<\/span><span style=\"color: #BBBBBB\">&#93;<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\">credentials<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">getSecret<\/span><span style=\"color: #BBBBBB\">(KEY_VAULT, <\/span><span style=\"color: #FFAB70\">&quot;YOUR-FAB-CLIENT-SECRET&quot;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">os<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">environ<\/span><span style=\"color: #BBBBBB\">&#91;<\/span><span style=\"color: #FFAB70\">&quot;FAB_TENANT_ID&quot;<\/span><span style=\"color: #BBBBBB\">&#93;<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\">credentials<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">getSecret<\/span><span style=\"color: #BBBBBB\">(KEY_VAULT, <\/span><span style=\"color: #FFAB70\">&quot;YOUR-FAB-TENANT-ID&quot;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">set_auth_provider<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&#39;env&#39;<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Primeiros comandos <\/h3>\n\n\n\n<p>Vamos repetir os comandos executados mais acima obtendo os workspaces.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pf.list_workspaces()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">list_workspaces<\/span><span style=\"color: #BBBBBB\">()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Resultado  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"359\" src=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-4-1024x359.png\" alt=\"\" class=\"wp-image-1908\" srcset=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-4-1024x359.png 1024w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-4-300x105.png 300w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-4-768x269.png 768w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-4-18x6.png 18w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-4.png 1321w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2c2c2c;color:#a37ced\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pf.list_workspaces(df=False)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">pf<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">list_workspaces<\/span><span style=\"color: #BBBBBB\">(df<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">False<\/span><span style=\"color: #BBBBBB\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"594\" height=\"728\" src=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-5.png\" alt=\"\" class=\"wp-image-1909\" srcset=\"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-5.png 594w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-5-245x300.png 245w, https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/image-5-10x12.png 10w\" sizes=\"(max-width: 594px) 100vw, 594px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o  <\/h2>\n\n\n\n<p>A partir de agora voc\u00ea pode incluir as mais de 350 fun\u00e7\u00f5es dispon\u00edveis para manipular os artefatos do Microsoft Fabric e Power BI de dentro do pr\u00f3prio Microsoft Fabric ou fora com op\u00e7\u00f5es de autentica\u00e7\u00e3o diversificada para cada cen\u00e1rio. <\/p>\n\n\n\n<p>Vai economizar tempo rodando processos automatizados que v\u00e3o al\u00e9m da interface gr\u00e1fica permitindo configura\u00e7\u00f5es espec\u00edficas al\u00e9m de promover a gest\u00e3o e produtividade dos workflows.<\/p>\n\n\n\n<p>Ir\u00e1 automatizar pipelines de CI\/CD com scripts personalizados capazes de subir arquiteturas inteiras at\u00e9 realizar deploys entre os est\u00e1gios do ciclo de desenvolvimento com performance e escalabilidade.<\/p>\n\n\n\n<p>Documenta\u00e7\u00e3o oficial: <a href=\"https:\/\/pyfabricops.readthedocs.io\/en\/latest\/\">aqui<\/a><\/p>\n\n\n\n<p>Projeto no GitHub: <a href=\"https:\/\/github.com\/alisonpezzott\/pyfabricops\">aqui<\/a>  <\/p>\n\n\n\n<p>V\u00eddeo demo: <a href=\"https:\/\/youtu.be\/7SQGYwQ4C6Q\">aqui<\/a>  <\/p>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Em julho de 2025 eu criei o projeto pyFabricOps que \u00e9 uma biblioteca Python dispon\u00edvel no Pypi com o objetivo de ler, criar, modificar, automatizar artefatos do Microsoft Fabric e Power BI utilizando as REST APIs oficiais. O objetivo inicial era criar uma biblioteca capaz de rodar fora do Microsoft Fabric, ou seja, em scripts [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1902,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_silent-publish":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[10,50],"tags":[],"class_list":["post-1900","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cicd","category-microsoft-fabric"],"blocksy_meta":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/alisonpezzott.com.br\/wp-content\/uploads\/2026\/02\/Frame-21.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/posts\/1900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/comments?post=1900"}],"version-history":[{"count":3,"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/posts\/1900\/revisions"}],"predecessor-version":[{"id":1910,"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/posts\/1900\/revisions\/1910"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/media\/1902"}],"wp:attachment":[{"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/media?parent=1900"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/categories?post=1900"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alisonpezzott.com.br\/en\/wp-json\/wp\/v2\/tags?post=1900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}