kopia lustrzana https://gitlab.com/jaywink/federation
Start modeling of entities.
rodzic
1661f7aa6a
commit
4b4661423e
|
@ -0,0 +1,21 @@
|
|||
from federation.entities.fields import TextField, GUIDField, HandleField, BooleanField, DateTimeField
|
||||
|
||||
|
||||
class GUIDMixin(object):
|
||||
guid = GUIDField(required=True)
|
||||
|
||||
|
||||
class HandleMixin(object):
|
||||
handle = HandleField(required=True)
|
||||
|
||||
|
||||
class BaseEntity(object):
|
||||
pass
|
||||
|
||||
|
||||
class PostEntity(GUIDMixin, HandleMixin, BaseEntity):
|
||||
"""Reflects a post, status message, etc, which will be composed from the message or to the message."""
|
||||
raw_content = TextField(required=True)
|
||||
public = BooleanField()
|
||||
created_at = DateTimeField(required=True)
|
||||
provider_display_name = TextField() # For example, client info
|
|
@ -0,0 +1,66 @@
|
|||
from datetime import datetime
|
||||
|
||||
from dirty_validators.basic import Email
|
||||
|
||||
|
||||
class BaseField(object):
|
||||
value = None
|
||||
|
||||
def __init__(self, required=False):
|
||||
self.required = required
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key == "value":
|
||||
if not value and self.required:
|
||||
raise ValueError("Required value")
|
||||
return super(BaseField, self).__setattr__(key, value)
|
||||
|
||||
|
||||
class TextField(BaseField):
|
||||
"""A base field with value."""
|
||||
value = ""
|
||||
|
||||
def __init__(self, required=False, min_length=None):
|
||||
super(TextField, self).__init__(required)
|
||||
self.min_length = min_length
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key == "value":
|
||||
if self.min_length and (not value or len(value) < self.min_length):
|
||||
raise ValueError("Minimum lenght is %s" % self.min_length)
|
||||
return super(TextField, self).__setattr__(key, value)
|
||||
|
||||
|
||||
class GUIDField(TextField):
|
||||
"""A GUID field."""
|
||||
min_length = 16
|
||||
|
||||
|
||||
class HandleField(TextField):
|
||||
"""A field with a handle, ie username@domain.tld."""
|
||||
validator = Email()
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key == "value" and not self.validator.is_valid(value):
|
||||
raise ValueError("Handle is not valid")
|
||||
return super(HandleField, self).__setattr__(key, value)
|
||||
|
||||
|
||||
class BooleanField(BaseField):
|
||||
"""A boolean field."""
|
||||
value = False
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key == "value":
|
||||
if not isinstance(value, bool):
|
||||
raise ValueError("Value must be True or False")
|
||||
return super(BooleanField, self).__setattr__(key, value)
|
||||
|
||||
|
||||
class DateTimeField(BaseField):
|
||||
"""A field with datetime."""
|
||||
def __setattr__(self, key, value):
|
||||
if key == "value" and value is not None:
|
||||
if not isinstance(value, datetime):
|
||||
raise ValueError("Value must be a datetime object")
|
||||
return super(DateTimeField, self).__setattr__(key, value)
|
|
@ -1,3 +1,4 @@
|
|||
dirty-validators==0.3.2
|
||||
lxml==3.4.4
|
||||
pycrypto==2.6.1
|
||||
python-dateutil==2.4.2
|
||||
|
|
Ładowanie…
Reference in New Issue