Esempio n. 1
0
class GeolocationModel(Model):
    ip = GenericIPAddressField()
    hostname = GenericIPAddressField(blank=True, null=True)
    type = CharField(max_length=4)
    continent_code = CharField(max_length=8)
    continent_name = CharField(max_length=100)
    country_code = CharField(max_length=8)
    country_name = CharField(max_length=100)
    region_code = CharField(max_length=8)
    region_name = CharField(max_length=100)
    city = CharField(max_length=100)
    zip = CharField(max_length=10, blank=True, null=True)
    latitude = FloatField()
    longitude = FloatField()
    location = ForeignKey(LocationModel, CASCADE)

    def get_description_info(self):
        return {
            'ip': self.ip,
            'city': self.city,
            'region_name': self.region_name,
            'country_name': self.country_name,
            'continent_name': self.continent_name,
        }

    def __repr__(self):
        return self.__class__.__name__
Esempio n. 2
0
 def test_GenericIPAddressField(self):
     lazy_func = lazy(lambda: "127.0.0.1", str)
     self.assertIsInstance(
         GenericIPAddressField().get_prep_value(lazy_func()), str)
     lazy_func = lazy(lambda: 0, int)
     self.assertIsInstance(
         GenericIPAddressField().get_prep_value(lazy_func()), str)
Esempio n. 3
0
class NetworkInterface(Model):
    machine = FK(_("Machine"), Machine)
    purpose = NullStringField(_("Purpose"))
    interface_name = NullStringField(_("Interface name"))
    interface_number = PositiveIntegerField(_("Interface number"),
                                            null=True,
                                            blank=True)
    ipv4_address = GenericIPAddressField(_("IPv4 address"),
                                         protocol='IPv4',
                                         null=True,
                                         blank=True)
    ipv4_mask = NullStringField(_("IPv4 mask"))
    ipv6_address = GenericIPAddressField(_("IPv6 address"),
                                         protocol='IPv6',
                                         null=True,
                                         blank=True)
    switch_port = NullStringField(_("Switch port"))
    pvid = NullStringField(_("PVID"))
    untag = NullStringField(_("Untag"))
    tag = NullStringField(_("Tag"))
    service = NullFK(_("Service"), Service)

    class Meta:
        verbose_name = _('Network interface')
        verbose_name_plural = _('Network interfaces')

    def __str__(self):
        return "%s: %s/%s" % (self.purpose, self.ipv4_address, self.ipv4_mask)
Esempio n. 4
0
class Comment(Model):
    """
    Response to a Post.
    Consists of a user-submitted message containing the User's details and the date and time it was submitted.

    Attributes:
        description: User-submitted message. Limited to 512 characters.
        author: UUID of the Comments's author.
        ip: IPv4 or IPv6 address that originated the Comment. Normalized following RFC 4291.
        timestamp: The Comment's publication time. See RFC 3339.
        post: UUID of the Post replied to.
    """

    description = TextField(max_length=512)
    author = ForeignKey(User, on_delete=CASCADE)
    ip = GenericIPAddressField()
    timestamp = DateTimeField(auto_now_add=True)
    post = ForeignKey(Post, on_delete=CASCADE)
    parent = ForeignKey('self', on_delete=CASCADE, blank=True, null=True)

    @property
    def owner(self):
        """
        Used to determine the User(s) allowed to update the Comment.
        See IsOwnerOrReadOnly permission class.

        Returns:
            Django User that authored the Comment.
        """
        return self.author

    def __str__(self):
        return self.content
Esempio n. 5
0
class Donor(Model):
    date_entered = DateTimeField('date taken', auto_now_add=True, editable=False, blank=True,
                                 null=True)
    entered_from_address = GenericIPAddressField(unpack_ipv4=True, blank=True,
                                                 null=True, editable=False)
    first_name = CharField(max_length=200)
    last_name = CharField(max_length=200)
    company_name = CharField(max_length=200, blank=True, null=True,
                             verbose_name="Company name (optional)")
    email_address = EmailField(max_length=200)
    street_address1 = CharField(
        max_length=150, verbose_name="street address line 1")
    street_address2 = CharField(max_length=150, null=True, blank=True,
                                verbose_name="street address line 2")
    city = CharField(max_length=100, verbose_name='city')
    state = ForeignKey(State)
    zip_code = CharField(max_length=10, validators=[validate_zip_code])
    phone_number = CharField(max_length=15, blank=True, null=True,
                             validators=[validate_phone], verbose_name="Phone number (optional)")
    adopted_children = ManyToManyField(Child, blank=True)
    adopted_families = ManyToManyField(Family, blank=True)
    adopted_programs = ManyToManyField(Program, blank=True)
    adopted_wishlist = ManyToManyField(GeneralWishlistItem, through='DonorGeneralWishlist',
                                       verbose_name="Adopted wishlist items", blank=True)

    def __unicode__(self):
        return self.first_name + " " + self.last_name + " in " + self.city
Esempio n. 6
0
class Test(Model):
    name = CharField(max_length=20)
    owner = ForeignKey(settings.AUTH_USER_MODEL,
                       null=True,
                       blank=True,
                       on_delete=CASCADE)
    public = BooleanField(default=False)
    date = DateField(null=True, blank=True)
    datetime = DateTimeField(null=True, blank=True)
    permission = ForeignKey('auth.Permission',
                            null=True,
                            blank=True,
                            on_delete=CASCADE)

    # We can’t use the exact names `float` or `decimal` as database column name
    # since it fails on MySQL.
    a_float = FloatField(null=True, blank=True)
    a_decimal = DecimalField(null=True,
                             blank=True,
                             max_digits=5,
                             decimal_places=2)
    bin = BinaryField(null=True, blank=True)
    ip = GenericIPAddressField(null=True, blank=True)
    duration = DurationField(null=True, blank=True)
    uuid = UUIDField(null=True, blank=True)

    class Meta(object):
        ordering = ('name', )
Esempio n. 7
0
class ClientData(models.Model):
    class Meta:
        app_label = "rflocator"

    ip = GenericIPAddressField()
    user = models.ForeignKey(User)
    loc_lat = models.FloatField('GPS Latitude', blank=True, null=True)
    loc_lon = models.FloatField('GPS Longitude', blank=True, null=True)
    loc_acc = models.FloatField('GPS Accuracy', blank=True, null=True)
    loc_tms = models.IntegerField('GPS Fix Time', blank=True, null=True)
    loc_spd = models.FloatField('GPS Speed', blank=True, null=True)
    loc_alt = models.FloatField('GPS Altitude', blank=True, null=True)

    loc_network_lat = models.FloatField('Network Latitude', blank=True, null=True)
    loc_network_lon = models.FloatField('Network Longitude', blank=True, null=True)
    loc_network_acc = models.FloatField('Network Accuracy', blank=True, null=True)
    loc_network_tms = models.IntegerField('Network Fix Time', blank=True, null=True)

    cellid = models.CharField('Network Cell Id', blank=True, null=True, max_length=200)
    cellsig = models.IntegerField('Network Cell Signal', blank=True, null=True)
    times = models.IntegerField('Device Time', blank=True, null=True)
    devid = models.CharField('Device Id', max_length=200)
    ups = models.IntegerField('Device Uptime')
    batt = models.SmallIntegerField('Battery', blank=True, null=True)
    cpufreq = models.IntegerField('Cpu Freq', blank=True, null=True)
    qtime = models.IntegerField('Queue time', blank=True, null=True)
    source = models.CharField('Source', max_length=100)

    modified = DateTimeField(auto_now=True)
    created = DateTimeField(auto_now_add=True)
    log = models.TextField(null=True, blank=True)

    def __str__(self):
        return u"{0.created} {0.ip}".format(self)
Esempio n. 8
0
class TestModelFields(Model):
    big_int = BigIntegerField()
    yesno = BooleanField()
    title = CharField(max_length=150)
    csv_data = CommaSeparatedIntegerField(max_length=255)
    when = DateField()
    when_accurate = DateTimeField()
    amount = DecimalField(max_digits=8, decimal_places=4)
    email = EmailField()
    upload = FileField(upload_to='test')
    path = FilePathField(path=d.APP_DIR, recursive=False, match=".json$")
    inaccurate = FloatField()
    img = ImageField(upload_to='test')
    ip = IPAddressField()
    better_ip = GenericIPAddressField(protocol='both')
    yesnomaybe = NullBooleanField(default=None)
    posint = PositiveIntegerField()
    small_posint = PositiveSmallIntegerField()
    slug = SlugField()
    small_int = SmallIntegerField()
    content = TextField()
    when_time = TimeField()
    web_address = URLField()
    user = ForeignKey('auth.User')
    groups = ManyToManyField('auth.Group')
    one_to_one = OneToOneField('auth.Permission')

    class Meta:
        verbose_name = 'test model fields'
        verbose_name_plural = 'test model fields'
Esempio n. 9
0
class Test(Model):
    name = CharField(max_length=20)
    owner = ForeignKey(settings.AUTH_USER_MODEL,
                       null=True,
                       blank=True,
                       on_delete=SET_NULL)
    public = BooleanField(default=False)
    date = DateField(null=True, blank=True)
    datetime = DateTimeField(null=True, blank=True)
    permission = ForeignKey('auth.Permission',
                            null=True,
                            blank=True,
                            on_delete=PROTECT)

    # We can’t use the exact names `float` or `decimal` as database column name
    # since it fails on MySQL.
    a_float = FloatField(null=True, blank=True)
    a_decimal = DecimalField(null=True,
                             blank=True,
                             max_digits=5,
                             decimal_places=2)
    bin = BinaryField(null=True, blank=True)
    ip = GenericIPAddressField(null=True, blank=True)
    duration = DurationField(null=True, blank=True)
    uuid = UUIDField(null=True, blank=True)

    try:
        from django.db.models import JSONField
        json = JSONField(null=True, blank=True)
    except ImportError:
        pass

    class Meta:
        ordering = ('name', )
Esempio n. 10
0
class Message(Model):
    created = DateTimeField(auto_now_add=True)
    modified = DateTimeField(auto_now=True)
    name = CharField(max_length=64)
    email = EmailField()
    message = TextField()
    sender_ip = GenericIPAddressField()
Esempio n. 11
0
class Order(Model):
    INITIATED = 'INITIATED'
    PAYMENT_RECEIVED = 'PAYMENT_RECEIVED'
    FILE_LINKS_SENT = 'FILE_LINKS_SENT'
    STATUS_CHOICES = [(INITIATED, 'Initiated'),
                      (PAYMENT_RECEIVED, 'Payment Received')]
    created = DateTimeField(auto_now_add=True)
    modified = DateTimeField(auto_now=True)
    uuid = UUIDField(default=uuid.uuid4, unique=True, editable=False)
    status = CharField(max_length=24,
                       choices=STATUS_CHOICES,
                       default=INITIATED)
    initiator_ip = GenericIPAddressField()
    paypay_ipn = ForeignKey(PayPalIPN,
                            on_delete=PROTECT,
                            null=True,
                            related_name='order')
    first_name = CharField(max_length=256, blank=True)
    last_name = CharField(max_length=256, blank=True)
    email = EmailField(blank=True)
    total = DecimalField(max_digits=5, decimal_places=2)

    @property
    def order_number(self):
        return 1000 + self.pk

    @property
    def full_name(self):
        return '{} {}'.format(self.first_name, self.last_name)

    @property
    def items_ordered(self):
        return ', '.join(str(i) for i in self.items.all())
Esempio n. 12
0
class Client(Model):
    name = CharField(max_length=255, default=None)
    ip = GenericIPAddressField(max_length=255, null=True)
    port = IntegerField(default=6800, blank=True, null=True)
    description = TextField(blank=True, null=True)
    created_at = DateTimeField(auto_now_add=True)
    updated_at = DateTimeField(auto_now=True)
Esempio n. 13
0
class Post(Model):
    """
    Discussion topic within a Board.
    Consists of a user-submitted message containing the User's details and the date and time it was submitted.

    Attributes:
        title: The Post's title. Limited to 32 characters.
        description: Summary of the intended discussion. Limited to 512 characters.
        author: UUID of the Post's author.
        ip: IPv4 or IPv6 address that originated the Post. Normalized following RFC 4291.
        timestamp: The Post's publication time. See RFC 3339.
        board: UUID of the Post's discussion Board.
    """

    title = CharField(max_length=32)
    description = TextField(max_length=512)
    author = ForeignKey(User, on_delete=CASCADE)
    ip = GenericIPAddressField()
    timestamp = DateTimeField(auto_now_add=True)
    board = ForeignKey(Board, on_delete=CASCADE)

    @property
    def owner(self):
        """
        Used to determine the User(s) allowed to update the Post.
        See IsOwnerOrReadOnly permission class.

        Returns:
            Django User that authored the Post.
        """
        return self.author

    def __str__(self):
        return self.title
class RegionControllerProcessEndpoint(CleanSave, TimestampedModel):
    """`RegionControllerProcessEndpoint` is a RPC endpoint on the
    `RegionControllerProcess` one endpoint is created per IP address on the
    `RegionControllerProcess`.

    :ivar process: `RegionControllerProcess` for this endpoint.
    :ivar address: IP address for the endpoint.
    :ivar port: Port number of the endpoint.
    """
    class Meta(DefaultMeta):
        """Needed recognize this model."""

        unique_together = ("process", "address", "port")

    process = ForeignKey(
        RegionControllerProcess,
        null=False,
        blank=False,
        related_name="endpoints",
        on_delete=CASCADE,
    )
    address = GenericIPAddressField(null=False, blank=False, editable=False)
    port = IntegerField(
        default=0, validators=[MinValueValidator(0),
                               MaxValueValidator(65535)])
Esempio n. 15
0
class BaseAttribute(Model):
    ip = GenericIPAddressField()

    time = DateTimeField(default=timezone.now)

    class Meta:
        abstract = True
Esempio n. 16
0
class LoginAttempt(models.Model):
    username = models.CharField(_("username"),
                                max_length=255,
                                blank=True,
                                null=True)
    password = models.CharField(_("password"),
                                max_length=255,
                                blank=True,
                                null=True)
    ip_address = GenericIPAddressField(_("ip address"), blank=True, null=True)
    session_key = models.CharField(_("session key"),
                                   max_length=50,
                                   blank=True,
                                   null=True)
    user_agent = models.TextField(_("user-agent"), blank=True, null=True)
    timestamp = models.DateTimeField(_("timestamp"), auto_now_add=True)
    path = models.TextField(_("path"), blank=True, null=True)

    class Meta:
        verbose_name = _("login attempt")
        verbose_name_plural = _("login attempts")
        ordering = ('timestamp', )

    def __str__(self):
        return self.username
Esempio n. 17
0
class Submission(Model):
    """
    提交记录。
    """
    # 提交记录状态码和对应的状态的映射
    STATUS_CHOICES = (
        ('PD', 'Pending'),
        ('PDR', 'Pending Rejudge'),
        ('CP', 'Compiling'),
        ('CE', 'Compile Error'),
        ('CD', 'Compile Done'),
        ('RJ', 'Running & Judging'),
        ('RN', 'Running'),
        ('RE', 'Runtime Error'),
        ('TLE', 'Time Limit Exceed'),
        ('MLE', 'Memory Limit Exceed'),
        ('OLE', 'Output Limit Exceed'),
        ('RD', 'Running Done'),
        ('JD', 'Judging'),
        ('WA', 'Wrong Answer'),
        ('PE', 'Presentation Error'),
        ('AC', 'Accepted'),
    )

    # 编号
    id = BigAutoField(primary_key=True)
    # 所属题目
    problem = ForeignKey(Problem, related_name='submissions', to_field='id')
    # 所属编程环境
    environment = ForeignKey('Environment', related_name='submissions', to_field='id')

    # 运行花费的时间
    time = IntegerField(default=-1)
    # 运行花费的内存
    memory = IntegerField(default=-1)
    # 代码长度
    length = IntegerField(default=-1)

    # 提交的用户
    user = CharField(max_length=150, null=True)
    # 提交所属的竞赛
    contest = CharField(max_length=150, null=True)
    # 来自哪个用户端
    client = ForeignKey('Client', related_name='submissions', to_field='id', null=True, on_delete=SET_NULL)

    # 状态,由各组测试数据的状态合成的总状态
    status = CharField(max_length=4, default='PD', choices=STATUS_CHOICES)
    # 是否完成了评测
    finished = BooleanField(default=False)

    # 提交时间
    submit_time = DateTimeField(auto_now_add=True)
    # 状态更新时间
    update_time = DateTimeField(auto_now=True)
    # 提交的ip
    ip = GenericIPAddressField()

    # 哪一个评测机评测了这条提交
    judge = ForeignKey('Judge', related_name='submissions', to_field='id', null=True)
Esempio n. 18
0
class DNS(Model):
    class Meta:
        verbose_name = '[Range] DNS Server'
        verbose_name_plural = '[Range] DNS Servers'

    ip = GenericIPAddressField('DNS Server Address',
                               protocol='both',
                               unpack_ipv4=True)

    def __str__(self):
        return '[DNS] %s' % str(self.ip)
Esempio n. 19
0
class ReportItem(CerberusModel):
    """
        Fraudulent item found in a `abuse.models.Report`
    """

    ITEM_TYPE = (("IP", "Ip"), ("FQDN", "Fqdn"), ("URL", "Url"))

    report = ForeignKey("Report",
                        null=False,
                        related_name="reportItemRelatedReport")

    rawItem = TruncatedCharField(db_index=True, max_length=4095)
    itemType = TruncatedCharField(max_length=4, null=True, choices=ITEM_TYPE)
    fqdn = TruncatedCharField(null=True, max_length=255)
    fqdnResolved = GenericIPAddressField(db_index=True, null=True)
    fqdnResolvedReverse = TruncatedCharField(null=True, max_length=255)
    ip = GenericIPAddressField(null=True)
    ipReverse = TruncatedCharField(db_index=True, null=True, max_length=255)
    ipReverseResolved = GenericIPAddressField(null=True)
    url = TruncatedCharField(null=True, max_length=4095)
    date = DateTimeField(auto_now=True, null=True, editable=True)
Esempio n. 20
0
 def test_update_generic_ip_address(self):
     CaseTestModel.objects.update(generic_ip_address=Case(
         When(integer=1, then=Value('1.1.1.1')),
         When(integer=2, then=Value('2.2.2.2')),
         output_field=GenericIPAddressField(),
     ), )
     self.assertQuerysetEqual(CaseTestModel.objects.all().order_by('pk'),
                              [(1, '1.1.1.1'), (2, '2.2.2.2'), (3, None),
                               (2, '2.2.2.2'), (3, None), (3, None),
                               (4, None)],
                              transform=attrgetter('integer',
                                                   'generic_ip_address'))
Esempio n. 21
0
class Node(models.Model):
    node_name = CharField(max_length=255, default=None)
    node_ip = GenericIPAddressField(max_length=255, null=True)
    node_port = IntegerField(default=6800, blank=True, null=True)
    auth = IntegerField(default=0, blank=True, null=True)
    description = TextField(blank=True, null=True)
    username = CharField(max_length=255, blank=True, null=True)
    password = CharField(max_length=255, blank=True, null=True)
    created_at = DateTimeField(auto_now_add=True)
    updated_at = DateTimeField(auto_now=True)
    node_status = TextField(blank=True, null=True)
    is_lock = IntegerField(default=1, blank=True, null=True)
Esempio n. 22
0
class ForwardDNSServer(CleanSave, TimestampedModel):
    """A `ForwardDNSServer`.
    :ivar ip_address: The IP address of the forward DNS server to forward queries to.
    :ivar domains: A many to many reference to domains that forward to this server."""

    objects = ForwardDNSServerManager()

    ip_address = GenericIPAddressField(
        null=False, default=None, editable=False, unique=True
    )

    domains = ManyToManyField(Domain)
Esempio n. 23
0
class AbstractUser(AbstractBaseUser):
    """
    Remember that password and last_login are inherited from AbstractBaseUser.
    """
    username = LowerCaseCharField(max_length=50,
                                  db_index=True,
                                  unique=True,
                                  validators=[
                                      Common.alphanumeric(),
                                      Common.min_length(5),
                                      Common.starts_with_letter(),
                                  ])
    email = models.EmailField(unique=True)
    date_joined = models.DateTimeField(auto_now_add=True)
    first_name = models.CharField(max_length=300, blank=True, default='')
    last_name = models.CharField(max_length=300, blank=True, default='')
    ip_address = GenericIPAddressField(null=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    objects = UserManager()

    @property
    def is_active(self):
        now = datetime.datetime.utcnow().replace(tzinfo=utc)
        last_seen = self.date_joined if self.last_login is None else \
            max(self.date_joined, self.last_login)
        return (now - last_seen).days <= constants.ACTIVE_DAYS

    @property
    def is_superuser(self):
        return self.is_staff

    def get_full_name(self):
        return '{0} {1}'.format(self.first_name, self.last_name)

    def get_short_name(self):
        return self.first_name

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    def __str__(self):
        return '{0}'.format(self.username)

    class Meta:
        abstract = True
Esempio n. 24
0
class ServiceActionJob(CerberusModel):
    """
        `abuse.models.ServiceAction` execution state
    """

    action = ForeignKey(ServiceAction, null=False)
    asynchronousJobId = TruncatedCharField(null=True, max_length=128)
    actionTodoId = IntegerField(null=True)
    status = TruncatedCharField(null=False, max_length=32, default="pending")
    comment = TruncatedCharField(null=True, max_length=256)
    creationDate = DateTimeField(null=False)
    executionDate = DateTimeField(null=True)
    ip = GenericIPAddressField(null=True)
Esempio n. 25
0
class TrackerInfos(Model):
    """
        Contain all the infos entry for target tracker.

        :param target_tracker(ForeignKey): Link to :func:`tracker class
                                            <phishing.models.tracker.Tracker>`
        :param created_at(DateTimeField): Date of tracker's creation
        :param ip(GenericIPAddressField): Get the target's IP
        :param raw(TextField): Raw data (contains more information)
        :param referer(TextField): Referer web if target open the email
                                            with web browser
        :param user_agent(TextField): Get the target's user_agent
    """
    target_tracker = ForeignKey('Tracker',
                                related_name='tracker_infos',
                                on_delete=CASCADE)
    created_at = DateTimeField(auto_now_add=True)
    ip = GenericIPAddressField(blank=True, null=True)
    raw = TextField(blank=True, null=True)
    referer = TextField(blank=True, null=True)
    user_agent = TextField(blank=True, null=True)

    def __str__(self):
        """
            Print function for TrackerInfos
            :return text: Print tracker's information (not all the infos)
        """
        return str(self.target_tracker)

    @classmethod
    def create(cls, http_request=None, **kwargs):
        """
            Create info entry (for a target tracker)

            :param http_request: django http request object
            :param kwargs: optional value to pass to constructor
            :return: TrackerInfos created object
        """

        # extract standard info to http request
        if http_request:
            meta = http_request.META
            kwargs['user_agent'] = meta.get('HTTP_USER_AGENT')
            kwargs['referer'] = meta.get('HTTP_REFERER')
            forward_ip = meta.get('HTTP_X_FORWARDED_FOR', '').split(',')[0]
            kwargs['ip'] = forward_ip or meta.get('REMOTE_ADDR')

        return cls.objects.create(**kwargs)

    class Meta:
        ordering = ['-created_at']
Esempio n. 26
0
 def clean(self, value):
     if value is None:
         return None
     else:
         ips = re.split(self.separators, value)
         ips = [ip.strip() for ip in ips if ip != ""]
         for ip in ips:
             try:
                 GenericIPAddressField().clean(ip, model_instance=None)
             except ValidationError:
                 raise ValidationError(
                     "Invalid IP address: %s; provide a list of "
                     "space-separated IP addresses" % ip)
         return " ".join(ips)
Esempio n. 27
0
class Guess(models.Model):
    x = models.IntegerField(validators=[
        validators.MinValueValidator(0),
        validators.MaxValueValidator(BOARD_WIDTH)
    ])
    y = models.IntegerField(validators=[
        validators.MinValueValidator(0),
        validators.MaxValueValidator(BOARD_HEIGHT)
    ])
    # empty (incorrect) or 1 letter
    key = models.CharField(max_length=1)

    ip = GenericIPAddressField(null=True)
    created_on = models.DateTimeField(auto_now_add=True)
Esempio n. 28
0
class Ip(Model):
    address = GenericIPAddressField(verbose_name='IP Address', unique=True)
    #address_value = IntegerField(verbose_name='IP Address Value')
    country = CharField(max_length=10,
                        verbose_name='Country Code',
                        null=True,
                        blank=True)

    def __unicode__(self):
        return u'%s (%s)' % (unicode(self.address), self.country)

    class Meta:
        ordering = ["country", "address"]
        verbose_name = "IP Address"
        verbose_name_plural = "IP Addresses"
Esempio n. 29
0
class WeatherUsage(Model):
    ip = GenericIPAddressField()
    location = CharField(max_length=255)
    lat = CharField(max_length=50)
    lng = CharField(max_length=50)
    temperature = DecimalField(decimal_places=3, max_digits=5)
    created_at = DateField(auto_now=True)

    class Meta:
        verbose_name = _("Weather Usage")
        verbose_name_plural = _("Weather Usages")

    def __str__(self):
        return 'Temperature at {} is {} <b>C˚</b>.'.format(
            self.location.title(), self.temperature)
Esempio n. 30
0
class ChatSession(Model):
    first_name = CharField(max_length=30,
                           blank=False,
                           verbose_name="First Name",
                           validators=[alphanumeric])
    last_name = CharField(max_length=30,
                          blank=False,
                          verbose_name="Last Name",
                          validators=[alphanumeric])
    date_of_birth = CharField(max_length=30,
                              blank=True,
                              null=True,
                              verbose_name="Date of Birth")
    user = ForeignKey(settings.AUTH_USER_MODEL,
                      blank=True,
                      null=True,
                      on_delete=DO_NOTHING)
    ip_address = GenericIPAddressField(blank=True, null=True)
    session_id = CharField(max_length=64, blank=True, null=True)
    created = DateTimeField(auto_now_add=True, blank=True, editable=False)
    last_replied = DateTimeField(auto_now_add=True, blank=True, editable=False)

    def get_messages(self, include_sent=False):
        if include_sent:
            messages = ChatMessage.objects.filter(
                session=self).order_by("sent")
        else:
            messages = ChatMessage.objects.filter(session=self,
                                                  shown=False).order_by("sent")
            message_count = messages.count()
            if message_count > 0:
                self.last_replied = messages[message_count - 1].sent
                self.save()

        return messages

    def delete(self, using=None, keep_parents=False):
        ChatMessage.objects.filter(session_id=self.pk).delete()

        super(ChatSession, self).delete(using, keep_parents)

    @property
    def expired(self):
        session_expiration = datetime.datetime.now() - datetime.timedelta(
            days=1)

        return self.last_replied < session_expiration