Showing
10 changed files
with
54 additions
and
22 deletions
| ... | @@ -8,12 +8,12 @@ from aiocache import Cache | ... | @@ -8,12 +8,12 @@ from aiocache import Cache |
| 8 | 8 | ||
| 9 | REDIS_CONN = open('./docs/redis').read().strip() | 9 | REDIS_CONN = open('./docs/redis').read().strip() |
| 10 | REDIS_CONN = REDIS_CONN.split(':') | 10 | REDIS_CONN = REDIS_CONN.split(':') |
| 11 | -# cache = Cache( | 11 | +cache = Cache( |
| 12 | -# Cache.REDIS, | 12 | + Cache.REDIS, |
| 13 | -# endpoint=REDIS_CONN[0], port=REDIS_CONN[1], | 13 | + endpoint=REDIS_CONN[0], port=REDIS_CONN[1], |
| 14 | -# namespace="httpcache" | 14 | + namespace='httpcache' |
| 15 | -# ) | 15 | +) |
| 16 | -cache = Cache() | 16 | +# cache = Cache() |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | def patched_generate_cache_key(url, method, headers, varying_headers, cache): | 19 | def patched_generate_cache_key(url, method, headers, varying_headers, cache): | ... | ... |
| ... | @@ -63,7 +63,7 @@ app.include_router(daily.router) | ... | @@ -63,7 +63,7 @@ app.include_router(daily.router) |
| 63 | app.include_router(search.router) | 63 | app.include_router(search.router) |
| 64 | app.include_router(private_metrics.router) | 64 | app.include_router(private_metrics.router) |
| 65 | 65 | ||
| 66 | -# metrics.install(app) | 66 | +metrics.install(app) |
| 67 | 67 | ||
| 68 | 68 | ||
| 69 | # @app.on_event('startup') | 69 | # @app.on_event('startup') | ... | ... |
| ... | @@ -385,14 +385,14 @@ def get_header_value(headers, key): | ... | @@ -385,14 +385,14 @@ def get_header_value(headers, key): |
| 385 | 385 | ||
| 386 | 386 | ||
| 387 | def get_client_ip(headers): | 387 | def get_client_ip(headers): |
| 388 | - forwarded_for = get_header_value(headers, b"x-forwarded-for") | ||
| 389 | - if forwarded_for: | ||
| 390 | - return forwarded_for.split(",", 1)[0].strip() | ||
| 391 | - | ||
| 392 | real_ip = get_header_value(headers, b"x-real-ip") | 388 | real_ip = get_header_value(headers, b"x-real-ip") |
| 393 | if real_ip: | 389 | if real_ip: |
| 394 | return real_ip.strip() | 390 | return real_ip.strip() |
| 395 | 391 | ||
| 392 | + forwarded_for = get_header_value(headers, b"x-forwarded-for") | ||
| 393 | + if forwarded_for: | ||
| 394 | + return forwarded_for.split(",", 1)[0].strip() | ||
| 395 | + | ||
| 396 | return None | 396 | return None |
| 397 | 397 | ||
| 398 | 398 | ... | ... |
| ... | @@ -143,15 +143,15 @@ class ClasOrganismos(Base): | ... | @@ -143,15 +143,15 @@ class ClasOrganismos(Base): |
| 143 | {"schema": "web"}, | 143 | {"schema": "web"}, |
| 144 | ) | 144 | ) |
| 145 | 145 | ||
| 146 | - organismo: Mapped[int] = mapped_column(Integer, primary_key=True) | 146 | + organismo: Mapped[str] = mapped_column(String(16), primary_key=True) |
| 147 | desc_organismo: Mapped[str] = mapped_column(Text) | 147 | desc_organismo: Mapped[str] = mapped_column(Text) |
| 148 | sigla_organismo: Mapped[str] = mapped_column(String(20)) | 148 | sigla_organismo: Mapped[str] = mapped_column(String(20)) |
| 149 | 149 | ||
| 150 | - organismo_grupo: Mapped[int] = mapped_column(Integer) | 150 | + organismo_grupo: Mapped[str] = mapped_column(String(8)) |
| 151 | desc_organismo_grupo: Mapped[str] = mapped_column(Text) | 151 | desc_organismo_grupo: Mapped[str] = mapped_column(Text) |
| 152 | sigla_organismo_grupo: Mapped[str] = mapped_column(String(20)) | 152 | sigla_organismo_grupo: Mapped[str] = mapped_column(String(20)) |
| 153 | 153 | ||
| 154 | - organismo_subgrupo: Mapped[int] = mapped_column(Integer) | 154 | + organismo_subgrupo: Mapped[str] = mapped_column(String(4)) |
| 155 | desc_organismo_subgrupo: Mapped[str] = mapped_column(Text) | 155 | desc_organismo_subgrupo: Mapped[str] = mapped_column(Text) |
| 156 | sigla_organismo_subgrupo: Mapped[str] = mapped_column(String(20)) | 156 | sigla_organismo_subgrupo: Mapped[str] = mapped_column(String(20)) |
| 157 | 157 | ... | ... |
| ... | @@ -27,6 +27,7 @@ class TreemapObjeto(Base): | ... | @@ -27,6 +27,7 @@ class TreemapObjeto(Base): |
| 27 | 27 | ||
| 28 | gestion: Mapped[int] = mapped_column(Integer) | 28 | gestion: Mapped[int] = mapped_column(Integer) |
| 29 | entidad_area: Mapped[str | None] = mapped_column(String(9)) | 29 | entidad_area: Mapped[str | None] = mapped_column(String(9)) |
| 30 | + desc_entidad_area: Mapped[str | None] = mapped_column(Text) | ||
| 30 | entidad: Mapped[int] = mapped_column(Integer) | 31 | entidad: Mapped[int] = mapped_column(Integer) |
| 31 | objeto: Mapped[int] = mapped_column(Integer) | 32 | objeto: Mapped[int] = mapped_column(Integer) |
| 32 | nivel: Mapped[str | None] = mapped_column(String(20)) | 33 | nivel: Mapped[str | None] = mapped_column(String(20)) |
| ... | @@ -53,6 +54,7 @@ class TreemapFinFun(Base): | ... | @@ -53,6 +54,7 @@ class TreemapFinFun(Base): |
| 53 | 54 | ||
| 54 | gestion: Mapped[int] = mapped_column(Integer) | 55 | gestion: Mapped[int] = mapped_column(Integer) |
| 55 | entidad_area: Mapped[str | None] = mapped_column(String(9)) | 56 | entidad_area: Mapped[str | None] = mapped_column(String(9)) |
| 57 | + desc_entidad_area: Mapped[str | None] = mapped_column(Text) | ||
| 56 | entidad: Mapped[int] = mapped_column(Integer) | 58 | entidad: Mapped[int] = mapped_column(Integer) |
| 57 | finfun: Mapped[str] = mapped_column(String(9)) | 59 | finfun: Mapped[str] = mapped_column(String(9)) |
| 58 | nivel: Mapped[str | None] = mapped_column(String(20)) | 60 | nivel: Mapped[str | None] = mapped_column(String(20)) |
| ... | @@ -79,6 +81,7 @@ class TreemapActeco(Base): | ... | @@ -79,6 +81,7 @@ class TreemapActeco(Base): |
| 79 | 81 | ||
| 80 | gestion: Mapped[int] = mapped_column(Integer) | 82 | gestion: Mapped[int] = mapped_column(Integer) |
| 81 | entidad_area: Mapped[str | None] = mapped_column(String(9)) | 83 | entidad_area: Mapped[str | None] = mapped_column(String(9)) |
| 84 | + desc_entidad_area: Mapped[str | None] = mapped_column(Text) | ||
| 82 | entidad: Mapped[int] = mapped_column(Integer) | 85 | entidad: Mapped[int] = mapped_column(Integer) |
| 83 | acteco: Mapped[str] = mapped_column(String(9)) | 86 | acteco: Mapped[str] = mapped_column(String(9)) |
| 84 | nivel: Mapped[str | None] = mapped_column(String(20)) | 87 | nivel: Mapped[str | None] = mapped_column(String(20)) |
| ... | @@ -105,6 +108,7 @@ class TreemapRubro(Base): | ... | @@ -105,6 +108,7 @@ class TreemapRubro(Base): |
| 105 | 108 | ||
| 106 | gestion: Mapped[int] = mapped_column(Integer) | 109 | gestion: Mapped[int] = mapped_column(Integer) |
| 107 | entidad_area: Mapped[str | None] = mapped_column(String(9)) | 110 | entidad_area: Mapped[str | None] = mapped_column(String(9)) |
| 111 | + desc_entidad_area: Mapped[str | None] = mapped_column(Text) | ||
| 108 | entidad: Mapped[int] = mapped_column(Integer) | 112 | entidad: Mapped[int] = mapped_column(Integer) |
| 109 | rubro: Mapped[str] = mapped_column(String(9)) | 113 | rubro: Mapped[str] = mapped_column(String(9)) |
| 110 | nivel: Mapped[str | None] = mapped_column(String(20)) | 114 | nivel: Mapped[str | None] = mapped_column(String(20)) |
| ... | @@ -116,6 +120,33 @@ class TreemapRubro(Base): | ... | @@ -116,6 +120,33 @@ class TreemapRubro(Base): |
| 116 | desc_rubro: Mapped[str | None] = mapped_column(Text) | 120 | desc_rubro: Mapped[str | None] = mapped_column(Text) |
| 117 | 121 | ||
| 118 | 122 | ||
| 123 | +class TreemapOrganismo(Base): | ||
| 124 | + __tablename__ = "treemap_organismo" | ||
| 125 | + __table_args__ = ( | ||
| 126 | + Index("idx_treemap_rubro_organismo", "organismo"), | ||
| 127 | + Index("idx_treemap_organismo_organismo_gestion", "organismo", "gestion"), | ||
| 128 | + Index("idx_treemap_organismo_gestion_entidad", "gestion", "entidad"), | ||
| 129 | + Index("idx_treemap_organismo_nivel", "nivel"), | ||
| 130 | + {"schema": "web"}, | ||
| 131 | + ) | ||
| 132 | + | ||
| 133 | + # PK compuesta inferida para uso ORM | ||
| 134 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) | ||
| 135 | + | ||
| 136 | + gestion: Mapped[int] = mapped_column(Integer) | ||
| 137 | + entidad_area: Mapped[str | None] = mapped_column(String(9)) | ||
| 138 | + desc_entidad_area: Mapped[str | None] = mapped_column(Text) | ||
| 139 | + entidad: Mapped[int] = mapped_column(Integer) | ||
| 140 | + organismo: Mapped[str] = mapped_column(String(9)) | ||
| 141 | + nivel: Mapped[str | None] = mapped_column(String(20)) | ||
| 142 | + | ||
| 143 | + parent: Mapped[str | None] = mapped_column(String(9)) | ||
| 144 | + devengado: Mapped[float | None] = mapped_column(Numeric(30, 15)) | ||
| 145 | + | ||
| 146 | + desc_entidad: Mapped[str | None] = mapped_column(Text) | ||
| 147 | + desc_organismo: Mapped[str | None] = mapped_column(Text) | ||
| 148 | + | ||
| 149 | + | ||
| 119 | ############################################################################### | 150 | ############################################################################### |
| 120 | # fns | 151 | # fns |
| 121 | ############################################################################### | 152 | ############################################################################### | ... | ... |
| ... | @@ -4,7 +4,7 @@ from typing import List, Any, Optional, Union | ... | @@ -4,7 +4,7 @@ from typing import List, Any, Optional, Union |
| 4 | 4 | ||
| 5 | from fastapi import APIRouter, Depends, Request, HTTPException, Body | 5 | from fastapi import APIRouter, Depends, Request, HTTPException, Body |
| 6 | from sqlalchemy.orm import Session | 6 | from sqlalchemy.orm import Session |
| 7 | -from sqlalchemy import and_, or_, select | 7 | +from sqlalchemy import and_, or_, select, text |
| 8 | 8 | ||
| 9 | from presupuestov1 import model, schema, constant, schemas, models, search | 9 | from presupuestov1 import model, schema, constant, schemas, models, search |
| 10 | from presupuestov1.routers._decorators import not_found | 10 | from presupuestov1.routers._decorators import not_found | ... | ... |
| ... | @@ -2,7 +2,7 @@ from typing import List | ... | @@ -2,7 +2,7 @@ from typing import List |
| 2 | 2 | ||
| 3 | from fastapi import APIRouter, Depends | 3 | from fastapi import APIRouter, Depends |
| 4 | from sqlalchemy.orm import Session, aliased | 4 | from sqlalchemy.orm import Session, aliased |
| 5 | -from sqlalchemy import func | 5 | +from sqlalchemy import func, select |
| 6 | 6 | ||
| 7 | from presupuestov1 import model, schema, schemas, models | 7 | from presupuestov1 import model, schema, schemas, models |
| 8 | from presupuestov1.routers._decorators import not_found | 8 | from presupuestov1.routers._decorators import not_found | ... | ... |
| ... | @@ -76,15 +76,15 @@ class ClasGeografico(ClasBase): | ... | @@ -76,15 +76,15 @@ class ClasGeografico(ClasBase): |
| 76 | # Ingresos | 76 | # Ingresos |
| 77 | 77 | ||
| 78 | class ClasOrganismos(OrmBaseModel): | 78 | class ClasOrganismos(OrmBaseModel): |
| 79 | - organismo: int | 79 | + organismo: str |
| 80 | desc_organismo: str | None | 80 | desc_organismo: str | None |
| 81 | sigla_organismo: str | None | 81 | sigla_organismo: str | None |
| 82 | 82 | ||
| 83 | - organismo_grupo: int | None | 83 | + organismo_grupo: str | None |
| 84 | desc_organismo_grupo: str | None | 84 | desc_organismo_grupo: str | None |
| 85 | sigla_organismo_grupo: str | None | 85 | sigla_organismo_grupo: str | None |
| 86 | 86 | ||
| 87 | - organismo_subgrupo: int | None | 87 | + organismo_subgrupo: str | None |
| 88 | desc_organismo_subgrupo: str | None | 88 | desc_organismo_subgrupo: str | None |
| 89 | sigla_organismo_subgrupo: str | None | 89 | sigla_organismo_subgrupo: str | None |
| 90 | 90 | ... | ... |
| ... | @@ -26,11 +26,11 @@ class ObjetoEstado(OrmBaseModel): | ... | @@ -26,11 +26,11 @@ class ObjetoEstado(OrmBaseModel): |
| 26 | top1_entidad_desc: str | None | 26 | top1_entidad_desc: str | None |
| 27 | top1_monto: float | None | 27 | top1_monto: float | None |
| 28 | top1_pct: float | None | 28 | top1_pct: float | None |
| 29 | - top2_entidad: int | None | str | 29 | + top2_entidad: int | float | None | str |
| 30 | top2_entidad_desc: str | None | 30 | top2_entidad_desc: str | None |
| 31 | top2_monto: float | None | str | 31 | top2_monto: float | None | str |
| 32 | top2_pct: float | None | str | 32 | top2_pct: float | None | str |
| 33 | - top3_entidad: int | None | str | 33 | + top3_entidad: int | float | None | str |
| 34 | top3_entidad_desc: str | None | 34 | top3_entidad_desc: str | None |
| 35 | top3_monto: float | None | str | 35 | top3_monto: float | None | str |
| 36 | top3_pct: float | None | str | 36 | top3_pct: float | None | str | ... | ... |
| ... | @@ -6,6 +6,7 @@ import typesense | ... | @@ -6,6 +6,7 @@ import typesense |
| 6 | from typesense import exceptions as typesense_exceptions | 6 | from typesense import exceptions as typesense_exceptions |
| 7 | 7 | ||
| 8 | TYPESENSE_API = open('./docs/typesense').read().strip() | 8 | TYPESENSE_API = open('./docs/typesense').read().strip() |
| 9 | +TYPESENSE_API, TYPESENSE_HOST = TYPESENSE_API.split(':') | ||
| 9 | client = typesense.Client({ | 10 | client = typesense.Client({ |
| 10 | 'api_key': TYPESENSE_API, | 11 | 'api_key': TYPESENSE_API, |
| 11 | 'nodes': [{ | 12 | 'nodes': [{ |
| ... | @@ -13,7 +14,7 @@ client = typesense.Client({ | ... | @@ -13,7 +14,7 @@ client = typesense.Client({ |
| 13 | 'port': '8108', | 14 | 'port': '8108', |
| 14 | 'protocol': 'http' | 15 | 'protocol': 'http' |
| 15 | }], | 16 | }], |
| 16 | - 'connection_timeout_seconds': 0.5 | 17 | + 'connection_timeout_seconds': 1. |
| 17 | }) | 18 | }) |
| 18 | 19 | ||
| 19 | COLLECTION = 'presup_actpro_fts' | 20 | COLLECTION = 'presup_actpro_fts' | ... | ... |
-
Please register or login to post a comment