Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixing public datastacks #161

Merged
merged 1 commit into from
Sep 6, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 35 additions & 14 deletions materializationengine/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
from materializationengine.blueprints.client.query import specific_query
from materializationengine.database import sqlalchemy_cache, dynamic_annotation_cache
from materializationengine.blueprints.client.query_manager import QueryManager
from materializationengine.blueprints.client.datastack import validate_datastack

from materializationengine.info_client import (
get_datastack_info,
Expand Down Expand Up @@ -138,6 +139,23 @@ def get_job_info(job_name: str):
return render_template("job.html", job=job_info, version=__version__)


def make_df_with_links_to_version(
objects, schema, url, col, col_value, df=None, **urlkwargs
):
if df is None:
df = pd.DataFrame(data=schema.dump(objects, many=True))
if urlkwargs is None:
urlkwargs = {}
if url is not None:
df[col] = df.apply(
lambda x: "<a href='{}'>{}</a>".format(
url_for(url, version=getattr(x, col_value), **urlkwargs), x[col]
),
axis=1,
)
return df


def make_df_with_links_to_id(
objects, schema, url, col, col_value, df=None, **urlkwargs
):
Expand Down Expand Up @@ -183,7 +201,7 @@ def datastack_view(datastack_name):
df=df,
datastack_name=datastack_name,
)
df = make_df_with_links_to_id(
df = make_df_with_links_to_version(
objects=versions,
schema=schema,
url="views.version_view",
Expand Down Expand Up @@ -289,22 +307,25 @@ def make_seg_prop_ng_link(datastack_name, table_name, version, client, is_view=F
return url_link


@views_bp.route("/datastack/<datastack_name>/version/<int(signed=True):id>")
@views_bp.route("/datastack/<datastack_name>/version/<int(signed=True):version>")
@validate_datastack
@auth_requires_permission("view", table_arg="datastack_name")
def version_view(datastack_name: str, id: int):
def version_view(
datastack_name: str, version: int, target_datastack=None, target_version=None
):
aligned_volume_name, pcg_table_name = get_relevant_datastack_info(datastack_name)

session = sqlalchemy_cache.get(aligned_volume_name)

version = (
anal_version = (
session.query(AnalysisVersion)
.filter(AnalysisVersion.version == id)
.filter(AnalysisVersion.datastack == datastack_name)
.filter(AnalysisVersion.version == target_version)
.filter(AnalysisVersion.datastack == target_datastack)
.first()
)

table_query = session.query(AnalysisTable).filter(
AnalysisTable.analysisversion == version
AnalysisTable.analysisversion == anal_version
)
tables = table_query.all()
schema = AnalysisTableSchema(many=True)
Expand All @@ -315,7 +336,7 @@ def version_view(datastack_name: str, id: int):
url="views.table_view",
col="id",
col_value="id",
datastack_name=datastack_name,
datastack_name=target_datastack,
)

column_order = schema.declared_fields.keys()
Expand All @@ -324,7 +345,7 @@ def version_view(datastack_name: str, id: int):
datastack_name, server_address=current_app.config["GLOBAL_SERVER_URL"]
)
df["ng_link"] = df.apply(
lambda x: f"<a href='{make_seg_prop_ng_link(datastack_name, x.table_name, version.version, client)}'>seg prop link</a>",
lambda x: f"<a href='{make_seg_prop_ng_link(target_datastack, x.table_name, target_version, client)}'>seg prop link</a>",
axis=1,
)
df["schema"] = df.schema.map(
Expand All @@ -342,7 +363,7 @@ def version_view(datastack_name: str, id: int):
escape=False, classes=classes, index=False, justify="left", border=0
)

mat_session = sqlalchemy_cache.get(f"{datastack_name}__mat{version.version}")
mat_session = sqlalchemy_cache.get(f"{datastack_name}__mat{version}")

views = mat_session.query(AnalysisView).all()

Expand All @@ -352,11 +373,11 @@ def version_view(datastack_name: str, id: int):
url=None,
col=None,
col_value=None,
datastack_name=datastack_name,
datastack_name=target_datastack,
)
if len(views_df) > 0:
views_df["ng_link"] = views_df.apply(
lambda x: f"<a href='{make_seg_prop_ng_link(datastack_name, x.table_name, version.version, client, is_view=True)}'>seg prop link</a>",
lambda x: f"<a href='{make_seg_prop_ng_link(target_datastack, x.table_name, target_version, client, is_view=True)}'>seg prop link</a>",
axis=1,
)
classes = ["table table-borderless"]
Expand All @@ -369,8 +390,8 @@ def version_view(datastack_name: str, id: int):

return render_template(
"version.html",
datastack=datastack_name,
analysisversion=version,
datastack=target_datastack,
analysisversion=target_version,
table=output_html,
view_table=output_view_html,
version=__version__,
Expand Down
Loading