Пример #1
0
def main(
    config,
    metrics=None,
    dimensions=None,
    criteria=None,
    row_filters=None,
    rollup=None,
    log_level=None,
):
    if log_level:
        logger = logging.getLogger()
        logger.setLevel(log_level)

    if criteria:
        criteria = ast.literal_eval(criteria)
    if row_filters:
        row_filters = ast.literal_eval(row_filters)

    pp(locals())

    wh = Warehouse(config=config)

    result = wh.execute(
        metrics=metrics,
        dimensions=dimensions,
        criteria=criteria,
        row_filters=row_filters,
        rollup=rollup,
    )
    print(result.df_display)
Пример #2
0
def save(
    warehouse_id: int,
    request: ReportSaveRequest,
    whs: Dict[str, Any] = Depends(deps.get_warehouses),
    current_user: models.User = Depends(deps.get_current_active_user),
) -> Any:
    """Save a report"""
    if not whs:
        raise Exception("No warehouses have been loaded")
    if crud.user.is_active(current_user):
        wh = whs[warehouse_id]
        request = dict(request)
        replace_report_formula_display_names(wh, request)
        handle_shortcut_criteria(wh, request)
        pp(request)

        report_id = None
        if "report_id" in request:
            report_id = request["report_id"]
            del request["report_id"]

        if report_id:
            report = update_report(wh, report_id, **request)
        else:
            report = wh.save_report(**request)
        return {"spec_id": report.spec_id}
    return {}
Пример #3
0
def test_get_structure(client: TestClient,
                       superuser_token_headers: dict) -> None:
    resp = client.get(f"{settings.API_V1_STR}/warehouse/1/structure",
                      headers=superuser_token_headers)
    assert resp.status_code == 200
    data = resp.json()
    pp(data)
Пример #4
0
def test_execute(client: TestClient, superuser_token_headers: dict) -> None:
    resp = client.post(
        f"{settings.API_V1_STR}/warehouse/1/execute",
        headers=superuser_token_headers,
        json={
            "metrics": ["cases"],
            "dimensions": ["month"]
        },
    )
    assert resp.status_code == 200, resp.content
    data = resp.json()
    pp(data)
Пример #5
0
def test_check_formula(client: TestClient,
                       superuser_token_headers: dict) -> None:
    resp = client.post(
        f"{settings.API_V1_STR}/warehouse/1/check_formula",
        headers=superuser_token_headers,
        json={
            "name": "adhoc1",
            "formula": "1.0*{Cases}/{Deaths}"
        },
    )
    assert resp.status_code == 200
    data = resp.json()
    pp(data)
Пример #6
0
def get_warehouses() -> Dict[str, Any]:
    """NOTE: this assumes Zillion Web DB is same as Zillion DB"""
    global warehouses
    if warehouses:
        # TODO: cache control?
        return warehouses

    print("Building warehouses...")
    db = SessionLocal()
    try:
        result = db.query(Warehouses).all()
        for row in result:
            warehouses[row.id] = Warehouse.load(row.id)
        pp(warehouses)
        return warehouses
    finally:
        db.close()
Пример #7
0
def execute(
    warehouse_id: int,
    request: ReportRequest,
    whs: Dict[str, Any] = Depends(deps.get_warehouses),
    current_user: models.User = Depends(deps.get_current_active_user),
) -> Any:
    """Execute a report"""
    if not whs:
        raise Exception("No warehouses have been loaded")
    if crud.user.is_active(current_user):
        request = dict(request)
        pp(request)
        wh = whs[warehouse_id]
        replace_report_formula_display_names(wh, request)
        handle_shortcut_criteria(wh, request)
        display_names = request.get("display_names", False)
        del request["display_names"]
        result = wh.execute(allow_partial=True, **request)
        data = process_report_result(result, display_names=display_names)
        # Need to use a custom json response to handle numpy dtypes
        json_str = json.dumps(data, ignore_nan=True, cls=JSONEncoder)
        return Response(media_type="application/json", content=json_str)

    return {}
Пример #8
0
def check_formula(
    warehouse_id: int,
    request: CheckFormulaRequest,
    whs: Dict[str, Any] = Depends(deps.get_warehouses),
    current_user: models.User = Depends(deps.get_current_active_user),
) -> Any:
    """Check an AdHocMetric formula"""
    if not whs:
        raise Exception("No warehouses have been loaded")
    if crud.user.is_active(current_user):
        request = dict(request)
        wh = whs[warehouse_id]
        request["formula"] = replace_display_names(wh, request["formula"])
        pp(request)

        if request.get("display_name", None):
            all_fields = wh.get_fields()
            for field in all_fields.values():
                if field.display_name == request["display_name"]:
                    return {
                        "success":
                        False,
                        "reason":
                        f"Display name '{request['display_name']}' is used by another field",
                    }

        try:
            wh.get_metric(request)
        except InvalidFieldException as e:
            return {"success": False, "reason": str(e)}
        except ValidationError as e:
            return {"success": False, "reason": str(e)}
        except ZillionException as e:
            return {"success": False, "reason": str(e)}
        return {"success": True, "reason": None}
    return {}
Пример #9
0
 def print(self, data):
     pp(data)