diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-10-19 23:02:09 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:20:59 +0100 |
commit | fede10bc3ed5a9df9325d3c9d671a167760a9381 (patch) | |
tree | c6a83be154a7e11b114939c2f7fd0b978795fdbd | |
parent | 66ba898ce0797fd51a826f6ea654b87a3487e8bb (diff) | |
download | Ishtar-fede10bc3ed5a9df9325d3c9d671a167760a9381.tar.bz2 Ishtar-fede10bc3ed5a9df9325d3c9d671a167760a9381.zip |
Syndication - update association from match document WIP
-rw-r--r-- | ishtar_common/admin.py | 80 | ||||
-rw-r--r-- | ishtar_common/models_rest.py | 5 |
2 files changed, 65 insertions, 20 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 761d07b4d..a974823a5 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -2162,7 +2162,7 @@ def update_types_from_source(modeladmin, request, queryset): return send_error_message( request, str(_("Timeout: failed to join {}.")).format(source.url), - return_url + return_url, ) if response.status_code != 200: return send_error_message( @@ -2172,7 +2172,7 @@ def update_types_from_source(modeladmin, request, queryset): "Bad response for {}. Response status code {} != 200. Check your key?" ) ).format(source.name, response.status_code), - return_url + return_url, ) try: content = response.json() @@ -2180,7 +2180,7 @@ def update_types_from_source(modeladmin, request, queryset): return send_error_message( request, str(_("Response of {} is not a valid JSON message.")).format(source.url), - return_url + return_url, ) result = source.update_matches(content) if result.get("created", None): @@ -2202,32 +2202,41 @@ def update_types_from_source(modeladmin, request, queryset): str(_(f"{result['deleted']} matches deleted")), ) if result.get("search_model do not exist", None): - missing_search_models = ", ".join(result['search_model do not exist']) + missing_search_models = ", ".join(result["search_model do not exist"]) messages.add_message( request, messages.INFO, - str(_(f"Theses search models have not been found: {missing_search_models}. Not the same Ishtar version?")), + str( + _( + f"Theses search models have not been found: {missing_search_models}. Not the same Ishtar version?" + ) + ), ) if result.get("type do not exist", None): - missing_types = ", ".join(result['type do not exist']) + missing_types = ", ".join(result["type do not exist"]) messages.add_message( request, messages.INFO, - str(_(f"Theses types have not been found: {missing_types}. Not the same Ishtar version?")), + str( + _( + f"Theses types have not been found: {missing_types}. Not the same Ishtar version?" + ) + ), ) - return response + return HttpResponseRedirect(return_url) + update_types_from_source.short_description = _("Update types from source") def generate_match_document(modeladmin, request, queryset): return_url = ( - reverse( - "admin:%s_%s_changelist" - % (modeladmin.model._meta.app_label, modeladmin.model._meta.model_name) - ) - + "?" - + urllib.parse.urlencode(request.GET) + reverse( + "admin:%s_%s_changelist" + % (modeladmin.model._meta.app_label, modeladmin.model._meta.model_name) + ) + + "?" + + urllib.parse.urlencode(request.GET) ) if queryset.count() != 1: return send_error_message( @@ -2253,12 +2262,38 @@ def generate_match_document(modeladmin, request, queryset): return response -generate_match_document.short_description = _("Generate match document") +def update_association_from_match_document(modeladmin, request, queryset): + return_url = ( + reverse( + "admin:%s_%s_changelist" + % (modeladmin.model._meta.app_label, modeladmin.model._meta.model_name) + ) + + "?" + + urllib.parse.urlencode(request.GET) + ) + if queryset.count() != 1: + return send_error_message( + request, + str(_("Select only one source.")), + return_url, + message_type=messages.WARNING, + ) + result = queryset.all()[0].update_from_match_document() + return HttpResponseRedirect(return_url) + + +update_association_from_match_document.short_description = _( + "Update association from match document" +) class ApiExternalSourceAdmin(admin.ModelAdmin): model = models_rest.ApiExternalSource - actions = [update_types_from_source, generate_match_document] + actions = [ + update_types_from_source, + generate_match_document, + update_association_from_match_document, + ] list_display = ("name", "url", "key") @@ -2267,9 +2302,16 @@ admin_site.register(models_rest.ApiExternalSource, ApiExternalSourceAdmin) class ApiKeyMatchAdmin(admin.ModelAdmin): model = models_rest.ApiKeyMatch - list_display = ["source", "search_model", "associated_type", - "distant_slug", "distant_label", "local_slug", - "local_label", "do_not_match"] + list_display = [ + "source", + "search_model", + "associated_type", + "distant_slug", + "distant_label", + "local_slug", + "local_label", + "do_not_match", + ] list_filter = ["source", "do_not_match"] search_fields = ["associated_type__model", "distant_slug", "distant_label"] actions = [ diff --git a/ishtar_common/models_rest.py b/ishtar_common/models_rest.py index 61b3ce042..e29356567 100644 --- a/ishtar_common/models_rest.py +++ b/ishtar_common/models_rest.py @@ -63,7 +63,7 @@ class ApiExternalSource(models.Model): 'First use the "Update types from source" action. Then use the action ' '"Generate match document" action to create a default match document. ' "Complete it and attach it back to the source to finally use the action " - '"Modify association from match document".' + '"Update association from match document".' ), ) @@ -206,6 +206,9 @@ class ApiExternalSource(models.Model): [1, end_row], ) + def update_from_match_document(self): + pass + class ApiKeyMatch(models.Model): source = models.ForeignKey(ApiExternalSource, on_delete=models.CASCADE) |