summaryrefslogtreecommitdiff
path: root/commcrawler/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-07-30 20:19:11 +0200
committerÉtienne Loks <etienne@peacefrogs.net>2019-07-30 20:19:11 +0200
commit56a33989278a8fe2985f0d36d3c589136c1ec30d (patch)
treeb0cb3356e55b4547a4747e10411a8ca68852b977 /commcrawler/models.py
downloadComm-on-net-56a33989278a8fe2985f0d36d3c589136c1ec30d.tar.bz2
Comm-on-net-56a33989278a8fe2985f0d36d3c589136c1ec30d.zip
First commit
Diffstat (limited to 'commcrawler/models.py')
-rw-r--r--commcrawler/models.py123
1 files changed, 123 insertions, 0 deletions
diff --git a/commcrawler/models.py b/commcrawler/models.py
new file mode 100644
index 0000000..f62157e
--- /dev/null
+++ b/commcrawler/models.py
@@ -0,0 +1,123 @@
+import datetime
+
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+
+
+class AreaType(models.Model):
+ name = models.CharField(_("Name"), max_length=200)
+
+ class Meta:
+ verbose_name = _("Area type")
+ verbose_name_plural = _("Area types")
+ ordering = ("name", )
+
+ def __str__(self):
+ return self.name
+
+
+class Area(models.Model):
+ name = models.CharField(verbose_name=_("Name"), max_length=200)
+ area_type = models.ForeignKey(
+ AreaType, on_delete=models.CASCADE, verbose_name=_("Type"))
+ population = models.IntegerField(verbose_name=_("Population"), blank=True,
+ null=True)
+ reference = models.CharField(
+ verbose_name=_("Reference"), max_length=100, blank=True, null=True,
+ help_text=_("For instance, INSEE code for towns")
+ )
+ parent = models.ForeignKey("Area", verbose_name=_("Parent"),
+ blank=True, null=True)
+
+ class Meta:
+ verbose_name = _("Area")
+ verbose_name_plural = _("Areas")
+ ordering = ("name", )
+
+ def __str__(self):
+ if not self.parent:
+ return self.name
+ return "{} / {}".format(self.parent, self.name)
+
+
+class OrganizationType(models.Model):
+ name = models.CharField(_("Name"), max_length=200)
+ parent = models.ForeignKey("OrganizationType", verbose_name=_("Parent"),
+ blank=True, null=True)
+
+ class Meta:
+ verbose_name = _("Organization type")
+ verbose_name_plural = _("Organization types")
+ ordering = ("parent__name", "name", )
+
+ def __str__(self):
+ if not self.parent:
+ return self.name
+ return "{} / {}".format(self.parent, self.name)
+
+
+class Organization(models.Model):
+ name = models.CharField(verbose_name=_("Name"), max_length=200)
+ area = models.ForeignKey(
+ Area, on_delete=models.SET_NULL, verbose_name=_("Area"), blank=True,
+ null=True
+ )
+ organization_type = models.ForeignKey(
+ OrganizationType, on_delete=models.CASCADE, verbose_name=_("Type"))
+ address = models.TextField(verbose_name=_("Address"), blank=True, null=True)
+
+ class Meta:
+ verbose_name = _("Organization")
+ verbose_name_plural = _("Organizations")
+ ordering = ("name", )
+
+ def __str__(self):
+ if not self.area:
+ return "{} ({})".format(
+ self.name, self.organization_type)
+ return "{} - {} ({})".format(
+ self.name, self.area, self.organization_type)
+
+
+class Target(models.Model):
+ name = models.CharField(verbose_name=_("Name"), max_length=200)
+ url = models.URLField(verbose_name=_("URL"), blank=True, null=True)
+ organization = models.ForeignKey(
+ Organization, verbose_name=_("Organization"), blank=True,
+ null=True, on_delete=models.SET_NULL)
+
+ class Meta:
+ verbose_name = _("Target")
+ verbose_name_plural = _("Targets")
+ ordering = ("name",)
+
+ def __str__(self):
+ return "{} ({})".format(self.name, self.organization)
+
+
+class Crawl(models.Model):
+ STATUS = (
+ ('C', _("Created")), ('P', _("In progress")),
+ ('F', _("Finished"))
+ )
+ name = models.CharField(verbose_name=_("Name"), max_length=200)
+ created = models.DateTimeField(
+ verbose_name=_("Creation date"), default=datetime.datetime.now)
+ started = models.DateTimeField(
+ verbose_name=_("Start date"), blank=True, null=True)
+ ended = models.DateTimeField(
+ verbose_name=_("End date"), blank=True, null=True)
+ status = models.CharField(max_length=1, choices=STATUS, default='C')
+ targets = models.ManyToManyField("Target", blank=True)
+
+ class Meta:
+ verbose_name = _("Crawl")
+ verbose_name_plural = _("Crawls")
+ ordering = ("created", "name")
+
+ def __str__(self):
+ return self.name
+
+ @property
+ def target_nb(self):
+ return self.targets.count()