Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
22 changes: 21 additions & 1 deletion tom_targets/sharing.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from tom_targets.base_models import get_target_model_app_label, BaseTarget
import requests

from django.conf import settings
from django.core.exceptions import ImproperlyConfigured

from tom_targets.serializers import TargetSerializer
from tom_targets.models import PersistentShare
from tom_targets.models import PersistentShare, get_target_model_class
from tom_dataproducts.sharing import (share_data_with_tom,
get_destination_target, sharing_feedback_converter)

Expand Down Expand Up @@ -37,6 +38,20 @@ def continuous_share_data(target, reduced_datums):
share_data_with_tom(share_destination, None, None, None, selected_data=reduced_datum_pks)


def custom_target_to_extras(target_id) -> list[dict]:
target_app_label = get_target_model_app_label()
extra_fields = []
if target_app_label != 'tom_targets':
target = get_target_model_class().objects.get(pk=target_id)
for field in target._meta.get_fields():
if field not in BaseTarget._meta.get_fields() and field.name not in ['id', 'basetarget_ptr']:
value = getattr(target, field.name, None)
if value is not None:
extra_fields.append({'key': field.name, 'value': value})

return extra_fields


def share_target_with_tom(share_destination, form_data, target_lists=()):
"""
Share a target with a remote TOM.
Expand Down Expand Up @@ -76,6 +91,11 @@ def share_target_with_tom(share_destination, form_data, target_lists=()):
if destination_target_id is None:
# If target is not in Destination, serialize and create new target.
serialized_target = TargetSerializer(form_data['target']).data
# If the shared target is a custom model custom fields should still be shared.
# Because the destination TOM might not have the same fields, we convert them to
# target extras.
extra_extras = custom_target_to_extras(serialized_target['id'])
serialized_target['targetextra_set'].extend(extra_extras)
# Remove local User Groups
serialized_target['groups'] = []
# Add target lists
Expand Down
6 changes: 3 additions & 3 deletions tom_targets/templates/tom_targets/target_share.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,16 @@ <h3> Share <a href="{% url 'targets:detail' pk=target.id %}" title="Back">{{ tar
<div class="tab-pane active" id="share">
<div class="col-md-12">
<form method="post" class="form" id='target-share-form'>
<div class="row" style="padding-inline:1rem">
<div class="row align-items-end" style="padding-inline:1rem">
<div class="col-sm-3">
{% bootstrap_field form.share_destination %}
</div>
<div class="col-sm-5">
{% bootstrap_field form.share_title %}
</div>
<div class="col-sm-1">
<input type="submit" class="btn btn-primary" formaction="{% url 'targets:share' pk=target.id %}"
id="submit_target" value="Submit" name="share_target_form" style="position:absolute; bottom:1rem"
<input type="submit" class="btn btn-primary mb-3" formaction="{% url 'targets:share' pk=target.id %}"
id="submit_target" value="Submit" name="share_target_form"
onclick="setTarget('')">
</div>
</div>
Expand Down
8 changes: 4 additions & 4 deletions tom_targets/templatetags/targets_extras.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

from tom_observations.utils import get_sidereal_visibility
from tom_targets.base_models import BaseTarget
from tom_targets.models import Target, TargetExtra, TargetList
from tom_targets.models import Target, TargetExtra, TargetList, PersistentShare
from tom_targets.forms import TargetVisibilityForm, PersistentShareForm
from tom_targets.permissions import targets_for_user

Expand Down Expand Up @@ -473,10 +473,10 @@ def persistent_share_table(context, target):
Returns a partial for a table of persistent shares, used in persistent share management forms
"""
request = context['request']
persistentshares = get_objects_for_user(request.user, f'{Target._meta.app_label}.view_persistentshare')
persistentshares = get_objects_for_user(request.user, f'{PersistentShare._meta.app_label}.view_persistentshare')
if target:
persistentshares = persistentshares.filter(target__pk=target.pk)
can_delete = request.user.has_perm(f'{Target._meta.app_label}.delete_persistentshare')
can_delete = request.user.has_perm(f'{PersistentShare._meta.app_label}.delete_persistentshare')
return {'persistentshares': persistentshares, 'target': target, 'can_delete': can_delete}


Expand All @@ -486,7 +486,7 @@ def create_persistent_share(context, target):
Returns a partial for a creation form for creating persistent shares
"""
request = context['request']
if request.user.has_perm(f'{Target._meta.app_label}.add_persistentshare'):
if request.user.has_perm(f'{PersistentShare._meta.app_label}.add_persistentshare'):
if target:
form = PersistentShareForm(target_id=target.pk)
else:
Expand Down
Loading