Skip to content

Commit

Permalink
Observe nodegroup permissions in tile excel export #10425 (#10441)
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobtylerwalls authored and chiatt committed Dec 20, 2023
1 parent 900d095 commit a3aa955
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 22 deletions.
2 changes: 1 addition & 1 deletion arches/app/search/search_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ def to_shp(self, instances, headers, name):
def to_tilexl(self, instances):
resourceinstanceids = [instance["resourceid"] for instance in instances if "resourceid" in instance]
tilexl_exporter = ResourceExporter(format="tilexl")
dest = tilexl_exporter.export(resourceinstanceids=resourceinstanceids)
dest = tilexl_exporter.export(resourceinstanceids=resourceinstanceids, user=self.search_request.user)
return dest

def to_html(self, instances, name, graph_id):
Expand Down
9 changes: 7 additions & 2 deletions arches/app/utils/data_management/resources/exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ def __init__(self, format=None, **kwargs):
kwargs["format"] = format
self.writer = import_class_from_string(settings.RESOURCE_FORMATTERS[format])(**kwargs)

def export(self, graph_id=None, resourceinstanceids=None, languages: str = None):
resources = self.writer.write_resources(graph_id=graph_id, resourceinstanceids=resourceinstanceids, languages=languages)
def export(self, graph_id=None, resourceinstanceids=None, languages: str = None, user=None):
resources = self.writer.write_resources(
graph_id=graph_id,
resourceinstanceids=resourceinstanceids,
languages=languages,
user=user,
)
return resources
15 changes: 6 additions & 9 deletions arches/app/utils/data_management/resources/formats/csvfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,19 +335,16 @@ def sort_field_names(self, columns=[]):
columns.insert(0, columns.pop(columns.index(name)))

def write_resources(self, graph_id=None, resourceinstanceids=None, **kwargs):
# this call filters tiles by user permission (user is found in kwargs)
# and stores on self.tiles
super(TileCsvWriter, self).write_resources(graph_id=graph_id, resourceinstanceids=resourceinstanceids, **kwargs)

csvs_for_export = []

if graph_id:
tiles = self.group_tiles(
list(TileModel.objects.filter(resourceinstance__graph_id=graph_id).order_by("nodegroup_id").values()), "nodegroup_id"
)
else:
tiles = self.group_tiles(
list(TileModel.objects.filter(resourceinstance_id__in=resourceinstanceids).order_by("nodegroup_id").values()),
"nodegroup_id",
)
tiles = self.group_tiles(
self.tiles.order_by("nodegroup_id").values(), # TODO: refactor to avoid going to the db again
"nodegroup_id",
)
semantic_nodes = [str(n[0]) for n in Node.objects.filter(datatype="semantic").values_list("nodeid")]

for nodegroupid, nodegroup_tiles in tiles.items():
Expand Down
10 changes: 4 additions & 6 deletions arches/app/utils/data_management/resources/formats/excel.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,10 @@ def __init__(self, **kwargs):
super(TileCsvWriter, self).__init__(**kwargs)

def write_resources(self, graph_id=None, resourceinstanceids=None, **kwargs):
super(TileCsvWriter, self).write_resources(graph_id=graph_id, resourceinstanceids=resourceinstanceids, **kwargs)
writer = TileCsvWriter()
csv_files = writer.write_resources(graph_id=graph_id, resourceinstanceids=resourceinstanceids, **kwargs)
writer.set_file_name()

if graph_id:
csv_files = TileCsvWriter().write_resources(graph_id=graph_id)
else:
csv_files = TileCsvWriter().write_resources(resourceinstanceids=resourceinstanceids)
wb = Workbook()

for csv_file in csv_files:
Expand All @@ -33,6 +31,6 @@ def write_resources(self, graph_id=None, resourceinstanceids=None, **kwargs):
wb.save(virtual_workbook)

excel_file_for_export = []
excel_file_for_export.append({"name": self.file_name + ".xlsx", "outputfile": wb})
excel_file_for_export.append({"name": writer.file_name + ".xlsx", "outputfile": wb})

return excel_file_for_export
11 changes: 7 additions & 4 deletions arches/app/utils/data_management/resources/formats/format.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,10 +284,7 @@ def get_tiles(self, graph_id=None, resourceinstanceids=None, **kwargs):
except:
self.graph_id = models.ResourceInstance.objects.get(resourceinstanceid=resourceinstanceids[0]).graph_id

iso_date = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
self.graph_model = models.GraphModel.objects.get(graphid=self.graph_id)
self.file_prefix = self.graph_model.name.replace(" ", "_")
self.file_name = "{0}_{1}".format(self.file_prefix, iso_date)
self.set_file_name()

for tile in self.tiles:
try:
Expand All @@ -297,3 +294,9 @@ def get_tiles(self, graph_id=None, resourceinstanceids=None, **kwargs):
self.resourceinstances[tile.resourceinstance_id].append(tile)

return self.resourceinstances

def set_file_name(self):
iso_date = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
self.graph_model = models.GraphModel.objects.get(graphid=self.graph_id)
self.file_prefix = self.graph_model.name.replace(" ", "_")
self.file_name = "{0}_{1}".format(self.file_prefix, iso_date)

0 comments on commit a3aa955

Please sign in to comment.