diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-01-10 13:08:48 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-01-12 09:50:56 +0100 |
commit | 061edbaac5a37b8e717391c3b7d804a96c041979 (patch) | |
tree | 79a9647f9e8563d44d08123dd4844a249001e63a /ishtar_common/models_rest.py | |
parent | ac839d9481b863c93a9c0f92011118bb581f7c2d (diff) | |
download | Ishtar-061edbaac5a37b8e717391c3b7d804a96c041979.tar.bz2 Ishtar-061edbaac5a37b8e717391c3b7d804a96c041979.zip |
Syndication - export external sources
Diffstat (limited to 'ishtar_common/models_rest.py')
-rw-r--r-- | ishtar_common/models_rest.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/ishtar_common/models_rest.py b/ishtar_common/models_rest.py index e0a0ba97e..7a6c79a54 100644 --- a/ishtar_common/models_rest.py +++ b/ishtar_common/models_rest.py @@ -65,6 +65,14 @@ class ApiSearchModel(models.Model): null=True, help_text=_("Search query add to each request"), ) + table_format = models.ForeignKey( + "ishtar_common.ImporterType", on_delete=models.PROTECT, null=True, + verbose_name=_("Table formats"), related_name=_("search_model_table_format"), + help_text=_("Not used. Set it when table columns will be set by importer.") + ) + export = models.ManyToManyField( + "ishtar_common.ImporterType", blank=True, verbose_name=_("Export"), + related_name=_("search_model_exports")) class Meta: verbose_name = _("API - Remote access - Search model") @@ -96,6 +104,10 @@ class ApiExternalSource(models.Model): url = models.URLField(verbose_name=_("URL")) name = models.CharField(verbose_name=_("Name"), max_length=200) key = models.CharField(_("Key"), max_length=40) + search_columns = models.TextField(_("Search columns"), default="") + search_columns_label = models.TextField(_("Search columns label"), default="") + exports = models.TextField(_("Exports slug"), default="") + exports_label = models.TextField(_("Exports label"), default="") users = models.ManyToManyField("IshtarUser", blank=True, verbose_name=_("Users")) match_document = models.FileField( _("Match document"), @@ -117,6 +129,53 @@ class ApiExternalSource(models.Model): def __str__(self): return self.name + def get_columns(self, model_name): + """ + Column keys for table display + :return: (key1:str, key2:str, ...) - list of column key + """ + if not self.search_columns: + return [] + model_name += "-" + return [ + k[len(model_name):] + for k in self.search_columns.split("||") if k.startswith(model_name) + ] + + def get_column_labels(self, model_name): + """ + Column label for table display + :return: (label1:str, label2:str, ...) - list of column labels + """ + if not self.search_columns_label: + return [] + model_name += "-" + return [ + k[len(model_name):] + for k in self.search_columns_label.split("||") if k.startswith(model_name) + ] + + def get_exports(self, model_name): + """ + Get export list + :return: [(slug:slug, label:str)] - list of export slug and labels + """ + if not self.exports or not self.exports_label: + return [] + model_name += "-" + exports = [ + k[len(model_name):] + for k in self.exports.split("||") if k.startswith(model_name) + ] + exports_label = [ + k[len(model_name):] + for k in self.exports_label.split("||") if k.startswith(model_name) + ] + result = [] + for idx in range(min([len(exports), len(exports_label)])): + result.append((exports[idx], exports_label[idx])) + return result + def save(self, force_insert=False, force_update=False, using=None, update_fields=None): super().save(force_insert, force_update, using, update_fields) @@ -137,6 +196,8 @@ class ApiExternalSource(models.Model): "type do not exist": [], } for search_model in content: + if search_model == "config": + continue app, model_name = search_model.split(".") try: ct = ContentType.objects.get(app_label=app, model=model_name) |