Files
myrag/__marimo__/session/generacion de modelos.py.json
T

286 lines
104 KiB
JSON

{
"version": "1",
"metadata": {
"marimo_version": "0.15.5"
},
"cells": [
{
"id": "Hbol",
"code_hash": "1d0db38904205bec4d6f6f6a1f6cec3e",
"outputs": [
{
"type": "data",
"data": {
"text/plain": ""
}
}
],
"console": []
},
{
"id": "MJUe",
"code_hash": "a40093b1686243c3c7cfe538710216ac",
"outputs": [
{
"type": "data",
"data": {
"text/plain": ""
}
}
],
"console": []
},
{
"id": "vblA",
"code_hash": "e01ef05d140a83f20a1373bbc701f873",
"outputs": [
{
"type": "data",
"data": {
"text/plain": ""
}
}
],
"console": [
{
"type": "stream",
"name": "stdout",
"text": "\u2139\ufe0f /home/lucas/DataProyects/myrag/backend/.env ya tiene todas las claves necesarias.\n\u2705 Creado /home/lucas/DataProyects/myrag/backend/db/base.py\n\u2705 Creado /home/lucas/DataProyects/myrag/backend/db/session.py\n"
}
]
},
{
"id": "bkHC",
"code_hash": "9a66ffddaebf2517492a50f3cec46737",
"outputs": [
{
"type": "data",
"data": {
"text/plain": ""
}
}
],
"console": [
{
"type": "stream",
"name": "stdout",
"text": "\u2705 /home/lucas/DataProyects/Snippets_marimo_noteebooks/utils/ArquitectureLayer/Repo.py \u2192 domains/arquitecture_layer/Repo.py\n\u2705 /home/lucas/DataProyects/Snippets_marimo_noteebooks/utils/ArquitectureLayer/Mapper.py \u2192 domains/arquitecture_layer/Mapper.py\n\u2705 /home/lucas/DataProyects/Snippets_marimo_noteebooks/utils/ArquitectureLayer/Model.py \u2192 domains/arquitecture_layer/Model.py\n\u2705 Creado domains/arquitecture_layer/__init__.py\n"
}
]
},
{
"id": "lEQa",
"code_hash": "151311bdb1d09f9b69b11b735701f9e4",
"outputs": [
{
"type": "data",
"data": {
"text/plain": ""
}
}
],
"console": []
},
{
"id": "PKri",
"code_hash": "0ec08d2138de5b6833360c8a32834465",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><marimo-ui-element object-id='PKri-0' random-id='c4248034-7516-e69d-9213-008a34718b64'><marimo-text-area data-initial-value='&quot;&quot;' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Entidad a crear&lt;/span&gt;&lt;/span&gt;&quot;' data-placeholder='&quot;&quot;' data-disabled='false' data-debounce='true' data-full-width='true' data-rows='1'></marimo-text-area></marimo-ui-element><marimo-ui-element object-id='PKri-1' random-id='27b11b8a-ff17-0f46-af2f-6f1b42c85b4c'><marimo-text-area data-initial-value='&quot;&quot;' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Descripcion de la Entidad&lt;/span&gt;&lt;/span&gt;&quot;' data-placeholder='&quot;&quot;' data-disabled='false' data-debounce='true' data-full-width='true' data-rows='3'></marimo-text-area></marimo-ui-element></div>"
}
}
],
"console": []
},
{
"id": "Xref",
"code_hash": "8c6feb2f5cc1800cca338765dc5f578d",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<marimo-ui-element object-id='Xref-0' random-id='cf0f361e-852a-2a49-8e83-3a3c439128eb'><marimo-text data-initial-value='&quot;public&quot;' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Esquema:&lt;/span&gt;&lt;/span&gt;&quot;' data-placeholder='&quot;&quot;' data-kind='&quot;text&quot;' data-full-width='false' data-disabled='false' data-debounce='true'></marimo-text></marimo-ui-element>"
}
}
],
"console": []
},
{
"id": "SFPL",
"code_hash": "0ea082390576bd2a4e0921f150fd4810",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><span class=\"markdown prose dark:prose-invert\"><h3 id=\"prompt-para-la-base-del-modelo\">Prompt para la base del modelo:</h3></span><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\">Eres un asistente de modelado de datos.\nTu \u00fanica tarea es devolver <strong>JSON v\u00e1lido</strong> siguiendo exactamente esta estructura:</span>\n<div class=\"language-ecl codehilite\"><pre><span></span><code><span class=\"p\">{</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;CAMPOS&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"p\">[</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;columna: tipo_python | tipo_sqlalchemy | nullable={True/False} | default={valor/opcional} | comentarios=&#39;</span><span class=\"n\">texto</span><span class=\"s\">&#39;&quot;</span>\n<span class=\"w\"> </span><span class=\"p\">],</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;RELACIONES&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"p\">[</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;campo_1 -&gt; FK a public.campo_2 (ondelete=&#39;</span><span class=\"n\">CASCADE</span><span class=\"o\">/</span><span class=\"n\">RESTRICT</span><span class=\"o\">/</span><span class=\"nf\">SET</span><span class=\"w\"> </span><span class=\"n\">NULL</span><span class=\"s\">&#39;)&quot;</span>\n<span class=\"w\"> </span><span class=\"p\">],</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;INDEX_LIST&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"p\">[</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;nombre_indice&quot;</span>\n<span class=\"w\"> </span><span class=\"p\">],</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;UNIQUE_LIST&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"p\">[</span>\n<span class=\"w\"> </span><span class=\"s\">&quot;nombre_unico&quot;</span>\n<span class=\"w\"> </span><span class=\"p\">]</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<h3 id=\"reglas\">Reglas:</h3>\n<ul>\n<li>Devuelve SIEMPRE un \u00fanico objeto JSON con esas 4 claves de primer nivel: \"CAMPOS\", \"RELACIONES\", \"INDEX_LIST\", \"UNIQUE_LIST\".</li>\n<li>\"CAMPOS\" debe ser un array de STRINGS, cada string con el formato indicado.</li>\n<li>\"RELACIONES\", \"INDEX_LIST\" y \"UNIQUE_LIST\" tambi\u00e9n deben ser arrays de STRINGS.</li>\n<li>No generes RELACIONES a no ser que sean explicitamente pedidas, no las confundas con los ejemplos.</li>\n<li>Usa <code>true/false/null</code> en min\u00fascula si incluyes valores l\u00f3gicos o nulos.</li>\n<li>No devuelvas texto adicional ni explicaciones fuera del JSON.</li>\n<li>Nunca generes campos created_at, ni updated_at</li>\n</ul>\n<span class=\"paragraph\">\ud83d\udccc Nombre de dominio: <strong>prueba_simple</strong></span>\n<span class=\"paragraph\">\ud83d\udcdd Explicaci\u00f3n: </span>\n<hr />\n<span class=\"paragraph\">\ud83c\udfaf <strong>Objetivo del prompt</strong><br />\nGenera una lista de posibles campos para el modelo <strong>prueba_simple</strong>, en el siguiente formato:</span>\n<span class=\"paragraph\">Formato sugerido por l\u00ednea:</span>\n<span class=\"paragraph\">nombre_columna: tipo_python | tipo_sqlalchemy(opcional) | nullable={True/False} | default={valor/opcional} | comentarios</span>\n<ul>\n<li>Ya contienen : columnas sys_* (created_at, updated_at, etc.), <strong>json</strong>, etc, nunca los generes a no ser que se te especifique.</li>\n</ul>\n<span class=\"paragraph\">Ejemplo esperado:</span>\n<div class=\"language-carbon codehilite\"><pre><span></span><code><span class=\"nx\">nombre</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"nx\">str</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">String</span><span class=\"p\">(</span><span class=\"mi\">120</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">nullable</span><span class=\"p\">=</span><span class=\"nx\">False</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">comentarios</span><span class=\"p\">=</span><span class=\"s\">&quot;Nombre del prueba_simple&quot;</span>\n<span class=\"nx\">descripcion</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"nx\">str</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">Text</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">nullable</span><span class=\"p\">=</span><span class=\"nx\">True</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"k\">default</span><span class=\"p\">=</span><span class=\"nx\">None</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">comentarios</span><span class=\"p\">=</span><span class=\"s\">&quot;Descripci\u00f3n opcional&quot;</span>\n<span class=\"nx\">activo</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">Boolean</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">nullable</span><span class=\"p\">=</span><span class=\"nx\">False</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"k\">default</span><span class=\"p\">=</span><span class=\"nx\">True</span><span class=\"w\"> </span><span class=\"o\">|</span><span class=\"w\"> </span><span class=\"nx\">comentarios</span><span class=\"p\">=</span><span class=\"s\">&quot;Si el registro est\u00e1 activo&quot;</span>\n</code></pre></div>\n<hr />\n<span class=\"paragraph\">\ud83d\udd01 Posibles relaciones en formato:\n<div class=\"language-ecl codehilite\"><pre><span></span><code><span class=\"o\">---</span>\n\n<span class=\"cp\"># Ejemplos.: </span>\n<span class=\"n\">cliente_id</span><span class=\"w\"> </span><span class=\"o\">-&gt;</span><span class=\"w\"> </span><span class=\"n\">FK</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"n\">public</span><span class=\"p\">.</span><span class=\"n\">clientes</span><span class=\"p\">.</span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">ondelete</span><span class=\"o\">=</span><span class=\"s\">&#39;RESTRICT&#39;</span><span class=\"p\">),</span>\n<span class=\"n\">usuario_id</span><span class=\"w\"> </span><span class=\"o\">-&gt;</span><span class=\"w\"> </span><span class=\"n\">FK</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"n\">public</span><span class=\"p\">.</span><span class=\"n\">usuarios</span><span class=\"p\">.</span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">ondelete</span><span class=\"o\">=</span><span class=\"s\">&#39;CASCADE&#39;</span><span class=\"p\">)</span>\n\n<span class=\"o\">---</span>\n\n<span class=\"s\">&quot;RELACIONES&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"s\">&quot;&quot;</span><span class=\"p\">,</span>\n</code></pre></div></span>\n<hr />\n<span class=\"paragraph\">\ud83d\udcd1 Posibles \u00edndices y restricciones:\n<div class=\"language-scdoc codehilite\"><pre><span></span><code>&quot;INDEX\\_LIST&quot;: &quot;&quot;, # Opcional\n&quot;UNIQUE\\_LIST&quot;: &quot;&quot;, # Opcional\n</code></pre></div></span>\n<span class=\"paragraph\">\u26a1 Nota: Usa tu criterio para proponer campos, relaciones y restricciones que sean coherentes con el dominio <strong>prueba_simple</strong>.</span></span></div>"
}
}
],
"console": []
},
{
"id": "BYtC",
"code_hash": "f044700c1c88de78e20d7564b4eb324a",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<marimo-ui-element object-id='BYtC-0' random-id='41749d10-d254-3f32-e12a-b1014e02d040'><marimo-button data-initial-value='0' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Generar JSON&lt;/span&gt;&lt;/span&gt;&quot;' data-kind='&quot;neutral&quot;' data-disabled='false' data-full-width='false'></marimo-button></marimo-ui-element>"
}
}
],
"console": []
},
{
"id": "RGSE",
"code_hash": "2911dfde5af4f9ba3071d5b14ecba862",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\"><strong>Estado:</strong> JSON generado correctamente.</span></span><marimo-json-output data-json-data='{&quot;CAMPOS&quot;:[&quot;nombre: str | String(120) | nullable=false | comentarios=&#x27;Nombre del prueba_simple&#x27;&quot;,&quot;descripcion: str | Text | nullable=true | default=null | comentarios=&#x27;Descripci\u00f3n opcional&#x27;&quot;,&quot;activo: bool | Boolean | nullable=false | default=true | comentarios=&#x27;Si el registro est\u00e1 activo&#x27;&quot;],&quot;RELACIONES&quot;:[],&quot;INDEX_LIST&quot;:[],&quot;UNIQUE_LIST&quot;:[]}' data-value-types='&quot;json&quot;'></marimo-json-output></div>"
}
}
],
"console": []
},
{
"id": "Kclp",
"code_hash": "451214e935d8c358cc438718919b1d21",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: row;justify-content: space-between;align-items: normal;flex-wrap: nowrap;gap: 1rem'><div style='flex: 2'><marimo-ui-element object-id='Kclp-0' random-id='df538764-f143-a99a-ef8c-4872b8ee784e'><marimo-text-area data-initial-value='&quot;nombre: str | String(120) | nullable=false | comentarios=&#x27;Nombre del prueba_simple&#x27;&#92;ndescripcion: str | Text | nullable=true | default=null | comentarios=&#x27;Descripci\u00f3n opcional&#x27;&#92;nactivo: bool | Boolean | nullable=false | default=true | comentarios=&#x27;Si el registro est\u00e1 activo&#x27;&quot;' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Campos&lt;/span&gt;&lt;/span&gt;&quot;' data-placeholder='&quot;&quot;' data-disabled='false' data-debounce='true' data-full-width='true' data-rows='15'></marimo-text-area></marimo-ui-element></div><div style='flex: 1'><div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><marimo-ui-element object-id='Kclp-1' random-id='4eb96a06-da6e-ef61-ccbb-9b181283f21d'><marimo-text-area data-initial-value='&quot;&quot;' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Relaciones&lt;/span&gt;&lt;/span&gt;&quot;' data-placeholder='&quot;&quot;' data-disabled='false' data-debounce='true' data-full-width='true' data-rows='3'></marimo-text-area></marimo-ui-element><marimo-ui-element object-id='Kclp-2' random-id='471c4ba2-f3fa-ec78-e38c-81bfedcb15ed'><marimo-text-area data-initial-value='&quot;&quot;' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Indices&lt;/span&gt;&lt;/span&gt;&quot;' data-placeholder='&quot;&quot;' data-disabled='false' data-debounce='true' data-full-width='true' data-rows='3'></marimo-text-area></marimo-ui-element><marimo-ui-element object-id='Kclp-3' random-id='4a5faaf0-817d-285c-7d2b-decd93d59f5a'><marimo-text-area data-initial-value='&quot;&quot;' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Unicos&lt;/span&gt;&lt;/span&gt;&quot;' data-placeholder='&quot;&quot;' data-disabled='false' data-debounce='true' data-full-width='true' data-rows='3'></marimo-text-area></marimo-ui-element></div></div></div>"
}
}
],
"console": []
},
{
"id": "emfo",
"code_hash": "07ac0453e9734b104fe33b556c10bbdc",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><span class=\"markdown prose dark:prose-invert\"><h3 id=\"prompt-para-el-modelo\">Prompt para el modelo:</h3></span><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\">Te paso mis clases base para que heredes correctamente:</span>\n<span class=\"paragraph\">1) Model_base </span>\n<ul>\n<li>\n<span class=\"paragraph\">Codigo de la clase Model: \n<div class=\"language-python codehilite\"><pre><span></span><code><span class=\"c1\"># Model.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Column</span><span class=\"p\">,</span> <span class=\"n\">DateTime</span><span class=\"p\">,</span> <span class=\"n\">String</span><span class=\"p\">,</span> <span class=\"n\">Integer</span><span class=\"p\">,</span> <span class=\"n\">Text</span><span class=\"p\">,</span> <span class=\"n\">BigInteger</span><span class=\"p\">,</span> <span class=\"n\">func</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy.ext.declarative</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">declared_attr</span><span class=\"p\">,</span> <span class=\"n\">as_declarative</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">datetime</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">backend.db.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Base</span> <span class=\"c1\"># tu Base declarativa</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Model_base</span><span class=\"p\">(</span><span class=\"n\">Base</span><span class=\"p\">):</span>\n <span class=\"n\">__abstract__</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n <span class=\"c1\"># ID autoincremental por defecto en todos los modelos</span>\n <span class=\"nb\">id</span> <span class=\"o\">=</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">BigInteger</span><span class=\"p\">,</span> <span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">autoincrement</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@declared_attr</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sys_created_at</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n <span class=\"c1\"># timestamptz + default en BD</span>\n <span class=\"k\">return</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">DateTime</span><span class=\"p\">(</span><span class=\"n\">timezone</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">server_default</span><span class=\"o\">=</span><span class=\"n\">func</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@declared_attr</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sys_created_by</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n <span class=\"k\">return</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">String</span><span class=\"p\">,</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@declared_attr</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sys_updated_at</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n <span class=\"c1\"># onupdate lo pone la BD al actualizar</span>\n <span class=\"k\">return</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">DateTime</span><span class=\"p\">(</span><span class=\"n\">timezone</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">onupdate</span><span class=\"o\">=</span><span class=\"n\">func</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@declared_attr</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sys_updated_by</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n <span class=\"k\">return</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">String</span><span class=\"p\">,</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@declared_attr</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sys_version</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n <span class=\"k\">return</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">Integer</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@declared_attr</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sys_notes</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n <span class=\"k\">return</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">Text</span><span class=\"p\">,</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@declared_attr</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sys_deleted_at</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n <span class=\"k\">return</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">DateTime</span><span class=\"p\">(</span><span class=\"n\">timezone</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n <span class=\"n\">id_val</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n <span class=\"k\">return</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;&lt;</span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"si\">}</span><span class=\"s2\"> id=</span><span class=\"si\">{</span><span class=\"n\">id_val</span><span class=\"si\">}</span><span class=\"s2\">&gt;&quot;</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n <span class=\"bp\">cls</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span>\n <span class=\"n\">id_val</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n <span class=\"k\">return</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span><span class=\"bp\">cls</span><span class=\"si\">}</span><span class=\"s2\">(id=</span><span class=\"si\">{</span><span class=\"n\">id_val</span><span class=\"si\">}</span><span class=\"s2\">)&quot;</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">__json__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n <span class=\"n\">out</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;__table__&quot;</span><span class=\"p\">):</span> <span class=\"k\">return</span> <span class=\"n\">out</span>\n <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__table__</span><span class=\"o\">.</span><span class=\"n\">columns</span><span class=\"p\">:</span>\n <span class=\"n\">v</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n <span class=\"n\">out</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">v</span><span class=\"o\">.</span><span class=\"n\">isoformat</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">datetime</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"n\">v</span>\n <span class=\"k\">return</span> <span class=\"n\">out</span>\n</code></pre></div></span>\n</li>\n<li>\n<span class=\"paragraph\">Ruta de import: domains.arquitecture_layer.Repo import Repo_base</span>\n</li>\n<li>Contiene: columnas sys_* (created_at, updated_at, etc.), <strong>json</strong>, etc.</li>\n</ul>\n<span class=\"paragraph\">2) Mapper_base</span>\n<ul>\n<li>\n<span class=\"paragraph\">Codigo de la clase Model: \n<div class=\"language-python codehilite\"><pre><span></span><code><span class=\"c1\"># Mapper.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">abc</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ABC</span><span class=\"p\">,</span> <span class=\"n\">abstractmethod</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">typing</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TypeVar</span><span class=\"p\">,</span> <span class=\"n\">Generic</span><span class=\"p\">,</span> <span class=\"n\">Type</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">json</span>\n\n<span class=\"n\">TDominio</span> <span class=\"o\">=</span> <span class=\"n\">TypeVar</span><span class=\"p\">(</span><span class=\"s2\">&quot;TDominio&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">TModelo</span> <span class=\"o\">=</span> <span class=\"n\">TypeVar</span><span class=\"p\">(</span><span class=\"s2\">&quot;TModelo&quot;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Mapper_base</span><span class=\"p\">(</span><span class=\"n\">ABC</span><span class=\"p\">,</span> <span class=\"n\">Generic</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">,</span> <span class=\"n\">TModelo</span><span class=\"p\">]):</span>\n <span class=\"c1\"># ----------------------------</span>\n <span class=\"c1\"># Conversiones individuales</span>\n <span class=\"c1\"># ----------------------------</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"nd\">@abstractmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_model</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">:</span> <span class=\"n\">TDominio</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">TModelo</span><span class=\"p\">:</span>\n<span class=\"w\"> </span><span class=\"sd\">&quot;&quot;&quot;Convierte objeto de dominio a modelo ORM&quot;&quot;&quot;</span>\n <span class=\"k\">pass</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"nd\">@abstractmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_model</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">:</span> <span class=\"n\">TModelo</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">TDominio</span><span class=\"p\">:</span>\n<span class=\"w\"> </span><span class=\"sd\">&quot;&quot;&quot;Convierte modelo ORM a objeto de dominio&quot;&quot;&quot;</span>\n <span class=\"k\">pass</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"nd\">@abstractmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_dict</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">:</span> <span class=\"n\">TDominio</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n<span class=\"w\"> </span><span class=\"sd\">&quot;&quot;&quot;Convierte objeto de dominio a diccionario plano&quot;&quot;&quot;</span>\n <span class=\"k\">pass</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"nd\">@abstractmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_dict</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">:</span> <span class=\"nb\">dict</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">TDominio</span><span class=\"p\">:</span>\n<span class=\"w\"> </span><span class=\"sd\">&quot;&quot;&quot;Convierte diccionario plano a objeto de dominio&quot;&quot;&quot;</span>\n <span class=\"k\">pass</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_json</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">:</span> <span class=\"n\">TDominio</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n<span class=\"w\"> </span><span class=\"sd\">&quot;&quot;&quot;Convierte objeto de dominio a JSON string&quot;&quot;&quot;</span>\n <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">),</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_json</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">json_str</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">TDominio</span><span class=\"p\">:</span>\n<span class=\"w\"> </span><span class=\"sd\">&quot;&quot;&quot;Convierte JSON string a objeto de dominio&quot;&quot;&quot;</span>\n <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">json_str</span><span class=\"p\">))</span>\n\n <span class=\"c1\"># ----------------------------</span>\n <span class=\"c1\"># Conversiones en lote (bulk)</span>\n <span class=\"c1\"># ----------------------------</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_model_list</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">objs</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">])</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TModelo</span><span class=\"p\">]:</span>\n <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">to_model</span><span class=\"p\">(</span><span class=\"n\">o</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">o</span> <span class=\"ow\">in</span> <span class=\"n\">objs</span><span class=\"p\">]</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_model_list</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TModelo</span><span class=\"p\">])</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">]:</span>\n <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">from_model</span><span class=\"p\">(</span><span class=\"n\">m</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">m</span> <span class=\"ow\">in</span> <span class=\"n\">models</span><span class=\"p\">]</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_dict_list</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">objs</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">])</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">dict</span><span class=\"p\">]:</span>\n <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">(</span><span class=\"n\">o</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">o</span> <span class=\"ow\">in</span> <span class=\"n\">objs</span><span class=\"p\">]</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_dict_list</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">dicts</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">dict</span><span class=\"p\">])</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">]:</span>\n <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">d</span> <span class=\"ow\">in</span> <span class=\"n\">dicts</span><span class=\"p\">]</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_json_list</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">objs</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">])</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">to_dict_list</span><span class=\"p\">(</span><span class=\"n\">objs</span><span class=\"p\">),</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@classmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_json_list</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">json_str</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">]:</span>\n <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">from_dict_list</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">json_str</span><span class=\"p\">))</span>\n</code></pre></div></span>\n</li>\n<li>\n<span class=\"paragraph\">Ruta de import: domains.arquitecture_layer.Mapper import Mapper_base</span>\n</li>\n</ul>\n<span class=\"paragraph\">3) Repo_base\n- Codigo de la clase Model: \n<div class=\"language-python codehilite\"><pre><span></span><code><span class=\"c1\"># Repo.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">abc</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ABC</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">typing</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Type</span><span class=\"p\">,</span> <span class=\"n\">TypeVar</span><span class=\"p\">,</span> <span class=\"n\">Generic</span><span class=\"p\">,</span> <span class=\"n\">Optional</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy.orm</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Session</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">func</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">datetime</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">datetime</span><span class=\"p\">,</span> <span class=\"n\">timezone</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.Mapper</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Mapper_base</span> <span class=\"c1\"># Aseg\u00farate de importar tu ABC base</span>\n\n<span class=\"n\">TModelo</span> <span class=\"o\">=</span> <span class=\"n\">TypeVar</span><span class=\"p\">(</span><span class=\"s2\">&quot;TModelo&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">TDominio</span> <span class=\"o\">=</span> <span class=\"n\">TypeVar</span><span class=\"p\">(</span><span class=\"s2\">&quot;TDominio&quot;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Repo_base</span><span class=\"p\">(</span><span class=\"n\">ABC</span><span class=\"p\">,</span> <span class=\"n\">Generic</span><span class=\"p\">[</span><span class=\"n\">TModelo</span><span class=\"p\">,</span> <span class=\"n\">TDominio</span><span class=\"p\">]):</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">session</span><span class=\"p\">:</span> <span class=\"n\">Session</span><span class=\"p\">,</span> <span class=\"n\">modelo</span><span class=\"p\">:</span> <span class=\"nb\">type</span><span class=\"p\">[</span><span class=\"n\">TModelo</span><span class=\"p\">],</span> <span class=\"n\">mapper</span><span class=\"p\">:</span> <span class=\"nb\">type</span><span class=\"p\">[</span><span class=\"n\">Mapper_base</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">,</span> <span class=\"n\">TModelo</span><span class=\"p\">]]):</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span> <span class=\"o\">=</span> <span class=\"n\">session</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span> <span class=\"o\">=</span> <span class=\"n\">modelo</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span> <span class=\"o\">=</span> <span class=\"n\">mapper</span>\n\n <span class=\"c1\"># ----------------------</span>\n <span class=\"c1\"># ADD</span>\n <span class=\"c1\"># ----------------------</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">add</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dominio</span><span class=\"p\">:</span> <span class=\"n\">TDominio</span><span class=\"p\">,</span> <span class=\"n\">created_by</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">notes</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">(</span><span class=\"n\">dominio</span><span class=\"p\">)</span>\n <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n <span class=\"s2\">&quot;sys_created_by&quot;</span><span class=\"p\">:</span> <span class=\"n\">created_by</span><span class=\"p\">,</span>\n <span class=\"s2\">&quot;sys_notes&quot;</span><span class=\"p\">:</span> <span class=\"n\">notes</span><span class=\"p\">,</span>\n <span class=\"s2\">&quot;sys_version&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span>\n <span class=\"p\">})</span>\n <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">data</span><span class=\"p\">)</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">commit</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">id</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">add_many</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dominios</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">],</span> <span class=\"n\">created_by</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">notes</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]:</span>\n <span class=\"n\">ids</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n <span class=\"k\">for</span> <span class=\"n\">dominio</span> <span class=\"ow\">in</span> <span class=\"n\">dominios</span><span class=\"p\">:</span>\n <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">(</span><span class=\"n\">dominio</span><span class=\"p\">)</span>\n <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n <span class=\"s2\">&quot;sys_created_by&quot;</span><span class=\"p\">:</span> <span class=\"n\">created_by</span><span class=\"p\">,</span>\n <span class=\"s2\">&quot;sys_notes&quot;</span><span class=\"p\">:</span> <span class=\"n\">notes</span><span class=\"p\">,</span>\n <span class=\"s2\">&quot;sys_version&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span>\n <span class=\"p\">})</span>\n <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">data</span><span class=\"p\">)</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span>\n <span class=\"n\">ids</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">commit</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"n\">ids</span>\n\n <span class=\"c1\"># ----------------------</span>\n <span class=\"c1\"># GET</span>\n <span class=\"c1\"># ----------------------</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_by_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">id_</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">]:</span>\n <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">from_model</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"n\">model</span> <span class=\"k\">else</span> <span class=\"kc\">None</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_all</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">]:</span>\n <span class=\"n\">models</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">from_model_list</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"p\">)</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_paginated</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">offset</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">limit</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">10</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">]:</span>\n <span class=\"n\">models</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">offset</span><span class=\"p\">(</span><span class=\"n\">offset</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">limit</span><span class=\"p\">(</span><span class=\"n\">limit</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">from_model_list</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"p\">)</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_deleted</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">TDominio</span><span class=\"p\">]:</span>\n <span class=\"n\">models</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"o\">.</span><span class=\"n\">sys_deleted_at</span><span class=\"o\">.</span><span class=\"n\">isnot</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">from_model_list</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"p\">)</span>\n\n <span class=\"c1\"># ----------------------</span>\n <span class=\"c1\"># UPDATE</span>\n <span class=\"c1\"># ----------------------</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">update</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">id_</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">new_data</span><span class=\"p\">:</span> <span class=\"nb\">dict</span><span class=\"p\">,</span> <span class=\"n\">updated_by</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">notes</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">bool</span><span class=\"p\">:</span>\n <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">model</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">new_data</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_updated_by</span> <span class=\"o\">=</span> <span class=\"n\">updated_by</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_notes</span> <span class=\"o\">=</span> <span class=\"n\">notes</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_version</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_version</span> <span class=\"ow\">or</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">commit</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"kc\">True</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">bulk_update</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">updates</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"nb\">tuple</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"p\">]],</span> <span class=\"n\">updated_by</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">notes</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">int</span><span class=\"p\">:</span>\n <span class=\"n\">count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n <span class=\"k\">for</span> <span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"n\">data</span> <span class=\"ow\">in</span> <span class=\"n\">updates</span><span class=\"p\">:</span>\n <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">updated_by</span><span class=\"o\">=</span><span class=\"n\">updated_by</span><span class=\"p\">,</span> <span class=\"n\">notes</span><span class=\"o\">=</span><span class=\"n\">notes</span><span class=\"p\">):</span>\n <span class=\"n\">count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n <span class=\"k\">return</span> <span class=\"n\">count</span>\n\n <span class=\"c1\"># ----------------------</span>\n <span class=\"c1\"># DELETE</span>\n <span class=\"c1\"># ----------------------</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">delete_by_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">id_</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">bool</span><span class=\"p\">:</span>\n <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">id_</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n <span class=\"k\">if</span> <span class=\"n\">model</span><span class=\"p\">:</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">commit</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"kc\">True</span>\n <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">delete_all</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">int</span><span class=\"p\">:</span>\n <span class=\"n\">deleted</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">commit</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"n\">deleted</span>\n\n <span class=\"c1\"># ----------------------</span>\n <span class=\"c1\"># SOFT DELETE</span>\n <span class=\"c1\"># ----------------------</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">soft_delete</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">id_</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">deleted_by</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">notes</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">bool</span><span class=\"p\">:</span>\n <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n <span class=\"k\">if</span> <span class=\"n\">model</span><span class=\"p\">:</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_deleted_at</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">utc</span><span class=\"p\">)</span> <span class=\"c1\"># TZ-aware</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_updated_by</span> <span class=\"o\">=</span> <span class=\"n\">deleted_by</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_notes</span> <span class=\"o\">=</span> <span class=\"n\">notes</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_version</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_version</span> <span class=\"ow\">or</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">commit</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"kc\">True</span>\n <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">soft_restore</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">id_</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">restored_by</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">notes</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">bool</span><span class=\"p\">:</span>\n <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">id_</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n <span class=\"k\">if</span> <span class=\"n\">model</span> <span class=\"ow\">and</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_deleted_at</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_deleted_at</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_updated_by</span> <span class=\"o\">=</span> <span class=\"n\">restored_by</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_notes</span> <span class=\"o\">=</span> <span class=\"n\">notes</span>\n <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_version</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">sys_version</span> <span class=\"ow\">or</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">commit</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"kc\">True</span>\n <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n <span class=\"c1\"># ----------------------</span>\n <span class=\"c1\"># OTROS</span>\n <span class=\"c1\"># ----------------------</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">exists</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">id_</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">bool</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">count</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">int</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n</code></pre></div></span>\n<ul>\n<li>Ruta de import: from domains.arquitecture_layer.Model import Model_base</li>\n</ul>\n<span class=\"paragraph\">\ud83e\udde9 Tarea:\nGenera en <strong>un solo archivo</strong> las 3 piezas siguientes para la entidad <strong>prueba_simple</strong>:\n- Dominio (dataclass): prueba_simpleDom\n- Modelo ORM (SQLAlchemy): prueba_simpleModel\n- Mapper concreto: prueba_simpleMapper\n- Repo concreto (especializaci\u00f3n del gen\u00e9rico): prueba_simpleRepo</span>\n<span class=\"paragraph\">Aqui puedes ver como hacerlo con este ejemplo: </span>\n<div class=\"language-python codehilite\"><pre><span></span><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">pydantic</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseModel</span><span class=\"p\">,</span> <span class=\"n\">Field</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ItemIn</span><span class=\"p\">(</span><span class=\"n\">BaseModel</span><span class=\"p\">):</span>\n <span class=\"n\">nombre</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"n\">Field</span><span class=\"p\">(</span><span class=\"n\">min_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ItemOut</span><span class=\"p\">(</span><span class=\"n\">ItemIn</span><span class=\"p\">):</span>\n <span class=\"nb\">id</span><span class=\"p\">:</span> <span class=\"nb\">int</span>\n\n<span class=\"c1\">##############################</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Column</span><span class=\"p\">,</span> <span class=\"n\">String</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">backend.db.model_base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Model_base</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Item</span><span class=\"p\">(</span><span class=\"n\">Model_base</span><span class=\"p\">):</span>\n <span class=\"n\">__tablename__</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;item&quot;</span> <span class=\"c1\"># opcional; si no, usa el nombre por defecto</span>\n <span class=\"n\">__table_args__</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;schema&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;public&quot;</span><span class=\"p\">}</span> <span class=\"c1\"># Usa el schema al final para evitar el error SchemaItem&#39; object, such as a &#39;Column&#39; or a &#39;Constraint&#39; expected</span>\n <span class=\"n\">nombre</span> <span class=\"o\">=</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">String</span><span class=\"p\">,</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n<span class=\"c1\">##############################</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.ejemplo.domain</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ItemIn</span><span class=\"p\">,</span> <span class=\"n\">ItemOut</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.ejemplo.model</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Item</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ItemMapper</span><span class=\"p\">:</span>\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_model</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">:</span> <span class=\"n\">ItemIn</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Item</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"n\">Item</span><span class=\"p\">(</span><span class=\"n\">nombre</span><span class=\"o\">=</span><span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">nombre</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_model</span><span class=\"p\">(</span><span class=\"n\">m</span><span class=\"p\">:</span> <span class=\"n\">Item</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">ItemOut</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"n\">ItemOut</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">m</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span> <span class=\"n\">nombre</span><span class=\"o\">=</span><span class=\"n\">m</span><span class=\"o\">.</span><span class=\"n\">nombre</span><span class=\"p\">)</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_dict</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">:</span> <span class=\"n\">ItemIn</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;nombre&quot;</span><span class=\"p\">:</span> <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">nombre</span><span class=\"p\">}</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_dict</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">:</span> <span class=\"nb\">dict</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">ItemIn</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"n\">ItemIn</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">#############################</span>\n\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">typing</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Optional</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy.orm</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Session</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.ejemplo.model</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Item</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.ejemplo.mapper</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ItemMapper</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.arquitecture_layer.Repo</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Repo_base</span> <span class=\"c1\"># tu base</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ItemRepo</span><span class=\"p\">(</span><span class=\"n\">Repo_base</span><span class=\"p\">[</span><span class=\"n\">Item</span><span class=\"p\">,</span> <span class=\"s2\">&quot;ItemIn|ItemOut&quot;</span><span class=\"p\">]):</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">session</span><span class=\"p\">:</span> <span class=\"n\">Session</span><span class=\"p\">):</span>\n <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">session</span><span class=\"o\">=</span><span class=\"n\">session</span><span class=\"p\">,</span> <span class=\"n\">modelo</span><span class=\"o\">=</span><span class=\"n\">Item</span><span class=\"p\">,</span> <span class=\"n\">mapper</span><span class=\"o\">=</span><span class=\"n\">ItemMapper</span><span class=\"p\">)</span>\n</code></pre></div>\n<span class=\"paragraph\">\ud83e\uddf1 Esquema y tabla</span>\n<span class=\"paragraph\">Gen\u00e9rame un modelo SQLAlchemy que use <strong>table_args</strong> con constraints e \u00edndices, pero que siempre coloque el diccionario con schema al final de la tupla. No pongas el dict primero</span>\n<ul>\n<li>schema: public</li>\n<li><strong>tablename</strong>: prueba_simple</li>\n</ul>\n<span class=\"paragraph\">Guarda siempre en el esquema public y genera las relaciones con las tablas del esquema public</span>\n<span class=\"paragraph\">\ud83d\uddc2\ufe0f Campos (excluyendo sys_*, que ya aporta Model_base):\nnombre: str | String(120) | nullable=false | comentarios='Nombre del prueba_simple'\ndescripcion: str | Text | nullable=true | default=null | comentarios='Descripci\u00f3n opcional'\nactivo: bool | Boolean | nullable=false | default=true | comentarios='Si el registro est\u00e1 activo'</span>\n<span class=\"paragraph\">\ud83d\udd11 Clave primaria\n- Usa el ID autoincremental por defecto si est\u00e1 disponible. Si no, crea una columna id BigInteger autoincremental.</span>\n<span class=\"paragraph\">\ud83d\udd17 Restricciones / \u00edndices (opcional)\n- uniques: \n- indexes: </span>\n<span class=\"paragraph\">\ud83d\udd01 Relaciones (opcional)</span>\n<span class=\"paragraph\">\ud83d\udd52 Zona horaria\n- Mant\u00e9n timestamps timezone-aware (ya lo hace Model_base).</span>\n<span class=\"paragraph\">\ud83c\udfaf Reglas de salida / estilo\n- <strong>Devuelve SOLO c\u00f3digo Python v\u00e1lido</strong> (un \u00fanico archivo), sin comentarios fuera del c\u00f3digo ni explicaciones.\n- Importa exactamente desde mis rutas:\n from domains.arquitecture_layer.Repo import Repo_base import Model_base\n from domains.arquitecture_layer.Mapper import Mapper_base import Mapper_base\n from from domains.arquitecture_layer.Model import Model_base import Repo_base\n- Tipado fuerte (Python 3.10+), <code>from __future__ import annotations</code> opcional.\n- Dominio No puede ser <code>@dataclass</code> -&gt; <code>prueba_simpleDom</code>.\n- Modelo ORM hereda de <code>Model_base</code> y (si existe) <code>IdIntMixin</code>.\n- Usa <code>__table_args__ = {\"schema\": \"public\"}</code>.\n- Tipos SQLAlchemy razonables (String(N), Integer, Numeric(p,s), Boolean, DateTime, JSON, etc.).\n- En <code>Mapper</code>:\n - <code>to_model</code>, <code>from_model</code>, <code>to_dict</code>, <code>from_dict</code> (respetando tipos; Numeric -&gt; float en dominio).\n- <code>Repo</code>:\n - Clase <code>prueba_simpleRepo(Repo_base[prueba_simpleModel, prueba_simpleDom])</code> con <code>__init__(self, session)</code> que fija <code>Modelo</code> y <code>Mapper</code>.\n - A\u00f1ade 1\u20133 m\u00e9todos de consulta comunes (ej.: <code>get_by_nombre</code>, <code>buscar_por_rango_gasto</code>, paginado por pa\u00eds), usando <code>self.session</code>.\n- No generes <code>create_all</code> ni conexi\u00f3n.\n- No dupliques columnas sys_*.\n- Mant\u00e9n nombre de columnas igual a las llaves del dominio y del dict del mapper.</span>\n<span class=\"paragraph\">\ud83d\udce6 Salida esperada (estructura del archivo):\n- imports\n- dataclass de dominio <code>prueba_simpleDom</code>\n- clase ORM <code>prueba_simpleModel</code>\n- clase <code>prueba_simpleMapper</code>\n- clase <code>prueba_simpleRepo</code></span>\n<span class=\"paragraph\">Genera ahora el archivo <code>.py</code> final.</span></span></div>"
}
}
],
"console": []
},
{
"id": "Hstk",
"code_hash": "35aa95aff52cef6e4d482b68709376a4",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<marimo-ui-element object-id='Hstk-0' random-id='f4f59ebf-c334-8c94-49fe-8622371da41d'><marimo-button data-initial-value='0' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Generar c\u00f3digo Python&lt;/span&gt;&lt;/span&gt;&quot;' data-kind='&quot;neutral&quot;' data-disabled='false' data-full-width='false'></marimo-button></marimo-ui-element>"
}
}
],
"console": []
},
{
"id": "nWHF",
"code_hash": "f2bca22f61bdf4bb8998cfd495c2ab7b",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\"><strong>Estado:</strong> C\u00f3digo generado correctamente.</span></span><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\"><div class=\"language-python codehilite\"><pre><span></span><code><span class=\"err\">```</span><span class=\"n\">python</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Column</span><span class=\"p\">,</span> <span class=\"n\">String</span><span class=\"p\">,</span> <span class=\"n\">Text</span><span class=\"p\">,</span> <span class=\"n\">Boolean</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sqlalchemy.orm</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Session</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.arquitecture_layer.Model</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Model_base</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.arquitecture_layer.Mapper</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Mapper_base</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">domains.arquitecture_layer.Repo</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Repo_base</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">prueba_simpleDom</span><span class=\"p\">:</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">nombre</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">descripcion</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">activo</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">True</span><span class=\"p\">):</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nombre</span> <span class=\"o\">=</span> <span class=\"n\">nombre</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">descripcion</span> <span class=\"o\">=</span> <span class=\"n\">descripcion</span>\n <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activo</span> <span class=\"o\">=</span> <span class=\"n\">activo</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">prueba_simpleModel</span><span class=\"p\">(</span><span class=\"n\">Model_base</span><span class=\"p\">):</span>\n <span class=\"n\">__tablename__</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;prueba_simple&quot;</span>\n <span class=\"n\">__table_args__</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n <span class=\"p\">{</span><span class=\"s2\">&quot;schema&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;public&quot;</span><span class=\"p\">}</span>\n <span class=\"p\">)</span>\n\n <span class=\"n\">nombre</span> <span class=\"o\">=</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">String</span><span class=\"p\">(</span><span class=\"mi\">120</span><span class=\"p\">),</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">comment</span><span class=\"o\">=</span><span class=\"s1\">&#39;Nombre del prueba_simple&#39;</span><span class=\"p\">)</span>\n <span class=\"n\">descripcion</span> <span class=\"o\">=</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">Text</span><span class=\"p\">,</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">comment</span><span class=\"o\">=</span><span class=\"s1\">&#39;Descripci\u00f3n opcional&#39;</span><span class=\"p\">)</span>\n <span class=\"n\">activo</span> <span class=\"o\">=</span> <span class=\"n\">Column</span><span class=\"p\">(</span><span class=\"n\">Boolean</span><span class=\"p\">,</span> <span class=\"n\">nullable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">comment</span><span class=\"o\">=</span><span class=\"s1\">&#39;Si el registro est\u00e1 activo&#39;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">prueba_simpleMapper</span><span class=\"p\">(</span><span class=\"n\">Mapper_base</span><span class=\"p\">[</span><span class=\"n\">prueba_simpleDom</span><span class=\"p\">,</span> <span class=\"n\">prueba_simpleModel</span><span class=\"p\">]):</span>\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_model</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">:</span> <span class=\"n\">prueba_simpleDom</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">prueba_simpleModel</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"n\">prueba_simpleModel</span><span class=\"p\">(</span>\n <span class=\"n\">nombre</span><span class=\"o\">=</span><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">nombre</span><span class=\"p\">,</span>\n <span class=\"n\">descripcion</span><span class=\"o\">=</span><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">descripcion</span><span class=\"p\">,</span>\n <span class=\"n\">activo</span><span class=\"o\">=</span><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">activo</span>\n <span class=\"p\">)</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_model</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">:</span> <span class=\"n\">prueba_simpleModel</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">prueba_simpleDom</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"n\">prueba_simpleDom</span><span class=\"p\">(</span>\n <span class=\"n\">nombre</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">nombre</span><span class=\"p\">,</span>\n <span class=\"n\">descripcion</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">descripcion</span><span class=\"p\">,</span>\n <span class=\"n\">activo</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">activo</span>\n <span class=\"p\">)</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">to_dict</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">:</span> <span class=\"n\">prueba_simpleDom</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"p\">{</span>\n <span class=\"s2\">&quot;nombre&quot;</span><span class=\"p\">:</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">nombre</span><span class=\"p\">,</span>\n <span class=\"s2\">&quot;descripcion&quot;</span><span class=\"p\">:</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">descripcion</span><span class=\"p\">,</span>\n <span class=\"s2\">&quot;activo&quot;</span><span class=\"p\">:</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">activo</span>\n <span class=\"p\">}</span>\n\n <span class=\"nd\">@staticmethod</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_dict</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">:</span> <span class=\"nb\">dict</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">prueba_simpleDom</span><span class=\"p\">:</span>\n <span class=\"k\">return</span> <span class=\"n\">prueba_simpleDom</span><span class=\"p\">(</span>\n <span class=\"n\">nombre</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"p\">[</span><span class=\"s2\">&quot;nombre&quot;</span><span class=\"p\">],</span>\n <span class=\"n\">descripcion</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;descripcion&quot;</span><span class=\"p\">),</span>\n <span class=\"n\">activo</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;activo&quot;</span><span class=\"p\">,</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n <span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">prueba_simpleRepo</span><span class=\"p\">(</span><span class=\"n\">Repo_base</span><span class=\"p\">[</span><span class=\"n\">prueba_simpleModel</span><span class=\"p\">,</span> <span class=\"n\">prueba_simpleDom</span><span class=\"p\">]):</span>\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">session</span><span class=\"p\">:</span> <span class=\"n\">Session</span><span class=\"p\">):</span>\n <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">session</span><span class=\"o\">=</span><span class=\"n\">session</span><span class=\"p\">,</span> <span class=\"n\">modelo</span><span class=\"o\">=</span><span class=\"n\">prueba_simpleModel</span><span class=\"p\">,</span> <span class=\"n\">mapper</span><span class=\"o\">=</span><span class=\"n\">prueba_simpleMapper</span><span class=\"p\">)</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_by_nombre</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">nombre</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">prueba_simpleDom</span><span class=\"p\">]:</span>\n <span class=\"n\">models</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"n\">nombre</span><span class=\"o\">=</span><span class=\"n\">nombre</span><span class=\"p\">,</span> <span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">from_model_list</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"p\">)</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_activos</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">prueba_simpleDom</span><span class=\"p\">]:</span>\n <span class=\"n\">models</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"n\">activo</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">from_model_list</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"p\">)</span>\n\n <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_inactivos</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"nb\">list</span><span class=\"p\">[</span><span class=\"n\">prueba_simpleDom</span><span class=\"p\">]:</span>\n <span class=\"n\">models</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Modelo</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter_by</span><span class=\"p\">(</span><span class=\"n\">activo</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">sys_deleted_at</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">Mapper</span><span class=\"o\">.</span><span class=\"n\">from_model_list</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"p\">)</span>\n</code></pre></div>\n```</span></span></div>"
}
}
],
"console": []
},
{
"id": "iLit",
"code_hash": "0179c0e694ba82777092d07dd6011946",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<marimo-ui-element object-id='iLit-0' random-id='b290e238-b38a-ead4-ba5d-98ad0aa80782'><marimo-button data-initial-value='0' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Guardar archivo&lt;/span&gt;&lt;/span&gt;&quot;' data-kind='&quot;neutral&quot;' data-disabled='false' data-full-width='false'></marimo-button></marimo-ui-element>"
}
}
],
"console": [
{
"type": "stream",
"name": "stdout",
"text": "\u2705 Archivo guardado en domains/prueba_simple.py\n"
}
]
},
{
"id": "ZHCJ",
"code_hash": "89b43fe4b144681748c9a0c927097b83",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\"><strong>Estado:</strong> Operaci\u00f3n completada correctamente.</span></span><marimo-json-output data-json-data='{&quot;message&quot;:&quot;\u2714 Tablas creadas&quot;,&quot;tables&quot;:[&quot;public.nota&quot;,&quot;public.prueba_simple&quot;],&quot;count&quot;:2}' data-value-types='&quot;json&quot;'></marimo-json-output></div>"
}
}
],
"console": []
},
{
"id": "ROlb",
"code_hash": "c378e574fe1d7ccd23a65046ceb20234",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\">Finalmente registrar las tablas en la bbdd</span></span><marimo-ui-element object-id='ROlb-0' random-id='4322d226-cde1-ee6d-dc92-5eeedc5e3e69'><marimo-button data-initial-value='0' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Crear tablas en la base de datos&lt;/span&gt;&lt;/span&gt;&quot;' data-kind='&quot;neutral&quot;' data-disabled='false' data-full-width='false'></marimo-button></marimo-ui-element></div>"
}
}
],
"console": []
},
{
"id": "qnkX",
"code_hash": "f498a76a01492790d64917746fb4742d",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<marimo-ui-element object-id='qnkX-0' random-id='9ebf2085-3b9c-cd41-9ab6-c7d1ac9bad76'><marimo-button data-initial-value='0' data-label='&quot;&lt;span class=&#92;&quot;markdown prose dark:prose-invert&#92;&quot;&gt;&lt;span class=&#92;&quot;paragraph&#92;&quot;&gt;Eliminar todas las tablas vac\u00edas&lt;/span&gt;&lt;/span&gt;&quot;' data-kind='&quot;danger&quot;' data-disabled='false' data-full-width='false'></marimo-button></marimo-ui-element>"
}
}
],
"console": []
},
{
"id": "TqIu",
"code_hash": "2392483aeff9ef5c1e45b1740c8e8da3",
"outputs": [
{
"type": "data",
"data": {
"text/html": "<div style='display: flex;flex: 1;flex-direction: column;justify-content: flex-start;align-items: normal;flex-wrap: nowrap;gap: 0.5rem'><span class=\"markdown prose dark:prose-invert\"><span class=\"paragraph\"><strong>Estado:</strong> Pulsa el bot\u00f3n para eliminar tablas vac\u00edas.</span></span><span class=\"markdown prose dark:prose-invert\"></span></div>"
}
}
],
"console": []
},
{
"id": "Vxnm",
"code_hash": "87ee1ef84a53699c468cc44edb65111c",
"outputs": [
{
"type": "data",
"data": {
"text/plain": ""
}
}
],
"console": []
}
]
}