From 061edbaac5a37b8e717391c3b7d804a96c041979 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 10 Jan 2023 13:08:48 +0100 Subject: Syndication - export external sources --- ishtar_common/admin.py | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'ishtar_common/admin.py') diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 4da0a15ad..f0f795665 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -2257,13 +2257,25 @@ def get_api_choices(): class ApiSearchModelAdminForm(forms.ModelForm): class Meta: model = models_rest.ApiUser - exclude = [] + exclude = ["table_format"] content_type = forms.ModelChoiceField( label=_("Content type"), queryset=ContentType.objects, limit_choices_to=get_api_choices ) + def __init__(self, *args, **kwargs): + super(ApiSearchModelAdminForm, self).__init__(*args, **kwargs) + if self.instance.id: + model_name = self.instance.content_type.model.replace("_", "") + model_name = f"{self.instance.content_type.app_label}.models."\ + f"{model_name}" + q = models.ImporterType.objects.filter( + associated_models__klass__iexact=model_name + ) + # self.fields['table_format'].queryset = q + self.fields['export'].queryset = q + class ApiSearchModelAdmin(admin.ModelAdmin): form = ApiSearchModelAdminForm @@ -2300,7 +2312,8 @@ def update_types_from_source(modeladmin, request, queryset): source = queryset.all()[0] created, updated, deleted = 0, 0, 0 missing_models, missing_types = [], [] - for item_type in ("operation",): + config = {} + for item_type in ("operation", "contextrecord", "file", "find", "warehouse"): curl = source.url if not curl.endswith("/"): curl += "/" @@ -2335,6 +2348,17 @@ def update_types_from_source(modeladmin, request, queryset): str(_("Response of {} is not a valid JSON message.")).format(curl), ) continue + + if "config" in content: + for k in content["config"]: + if not content["config"][k]: + continue + if k not in config: + config[k] = "" + elif config[k]: + config[k] += "||" + config[k] += content["config"][k] + result = source.update_matches(content) if result.get("created", None): created += result['created'] @@ -2346,6 +2370,18 @@ def update_types_from_source(modeladmin, request, queryset): missing_models += result["search_model do not exist"] if result.get("type do not exist", None): missing_types += result["type do not exist"] + modified = False + for k in config: + if getattr(source, k) != config[k]: + modified = True + setattr(source, k, config[k]) + if modified: + source.save() + messages.add_message( + request, + messages.INFO, + str(_("Table/exports configuration updated")), + ) if created: messages.add_message( request, @@ -2485,6 +2521,7 @@ class ApiExternalSourceAdmin(admin.ModelAdmin): generate_match_document, update_association_from_match_document, ] + exclude = ("search_columns", "search_columns_label", "exports", "exports_label") autocomplete_fields = ["users"] list_display = ("name", "url", "key") -- cgit v1.2.3