summaryrefslogtreecommitdiff
path: root/ishtar_common/models_rest.py
diff options
context:
space:
mode:
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
commit061edbaac5a37b8e717391c3b7d804a96c041979 (patch)
tree79a9647f9e8563d44d08123dd4844a249001e63a /ishtar_common/models_rest.py
parentac839d9481b863c93a9c0f92011118bb581f7c2d (diff)
downloadIshtar-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.py61
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)