Exemple #1
0
class Body(Model):
    """
    A meeting body. This can be full council, a subcommittee, or "off-council" matters
    such as election debates.
    """

    id = fields.IDField()
    name = fields.TextField(required=True)
    description = fields.TextField()
    start_datetime = fields.DateTime(required=True)
    end_datetime = fields.DateTime()
    is_active = fields.BooleanField(required=True)
    external_source_id = fields.TextField()

    class Meta:
        ignore_none_field = False

    @classmethod
    def Example(cls) -> Model:
        body = cls()
        body.name = "Full Council"
        body.is_active = True
        body.start_datetime = datetime.utcnow()
        return body

    _PRIMARY_KEYS = ("name", )
    _INDEXES = ()
Exemple #2
0
class Person(Model):
    """
    Primarily the council members, this could technically include the mayor or city
    manager, or any other "normal" presenters and attendees of meetings.
    """

    name = fields.TextField(required=True)
    router_string = fields.TextField(
        required=True, validator=validators.router_string_is_valid)
    email = fields.TextField(validator=validators.email_is_valid)
    phone = fields.NumberField()
    website = fields.TextField(validator=validators.resource_exists)
    picture_ref = fields.ReferenceField(File)
    is_active = fields.BooleanField(required=True)
    external_source_id = fields.TextField()

    @classmethod
    def Example(cls) -> Model:
        person = cls()
        person.name = "M. Lorena González"
        person.router_string = "lorena-gonzalez"
        person.is_active = True
        return person

    _PRIMARY_KEYS = ("name", )
    _INDEXES = ()
Exemple #3
0
class Person(Model):
    """
    Primarily the council members, this could technically include the mayor or city
    manager, or any other "normal" presenters and attendees of meetings.
    """

    id = fields.IDField()
    name = fields.TextField(required=True)
    router_string = fields.TextField(
        required=True, validator=validators.router_string_is_valid)
    email = fields.TextField(validator=validators.email_is_valid)
    phone = fields.TextField()
    website = fields.TextField(validator=validators.resource_exists)
    picture_ref = fields.ReferenceField(File, auto_load=False)
    is_active = fields.BooleanField(required=True)
    external_source_id = fields.TextField()

    class Meta:
        ignore_none_field = False

    def set_validator_kwargs(self, kwargs: Dict) -> None:
        field = fields.TextField(
            validator=validators.resource_exists,
            validator_kwargs=kwargs,
        )

        field.contribute_to_model(Person, "website")

    @classmethod
    def Example(cls) -> Model:
        person = cls()
        person.name = "M. Lorena González"
        person.router_string = "lorena-gonzalez"
        person.is_active = True
        return person

    _PRIMARY_KEYS = ("name", )
    _INDEXES = ()

    @staticmethod
    def strip_accents(name: str) -> str:
        return "".join(char for char in unicodedata.normalize("NFKD", name)
                       if unicodedata.category(char) != "Mn")

    @staticmethod
    def generate_router_string(name: str) -> str:
        non_accented = Person.strip_accents(name)
        char_cleaner = re.compile(r"[^a-zA-Z0-9\s\-]")
        char_cleaned = re.sub(char_cleaner, "", non_accented)
        whitespace_cleaner = re.compile(r"[\s]+")
        whitespace_cleaned = re.sub(whitespace_cleaner, " ", char_cleaned)
        spaces_replaced = whitespace_cleaned.replace(" ", "-")
        if spaces_replaced[-1] == "-":
            fully_cleaned = spaces_replaced[:-1]
        else:
            fully_cleaned = spaces_replaced

        return fully_cleaned.lower()
Exemple #4
0
class Vote(Model):
    """
    A reference tying a specific person and an event minutes item together.
    """

    id = fields.IDField()
    matter_ref = fields.ReferenceField(Matter, required=True, auto_load=False)
    event_ref = fields.ReferenceField(Event, required=True, auto_load=False)
    event_minutes_item_ref = fields.ReferenceField(EventMinutesItem,
                                                   required=True,
                                                   auto_load=False)
    person_ref = fields.ReferenceField(Person, required=True, auto_load=False)
    decision = fields.TextField(
        required=True,
        validator=validators.create_constant_value_validator(
            VoteDecision, True),
    )
    in_majority = fields.BooleanField()
    external_source_id = fields.TextField()

    class Meta:
        ignore_none_field = False

    @classmethod
    def Example(cls) -> Model:
        vote = cls()
        vote.matter_ref = Matter.Example()
        vote.event_ref = Event.Example()
        vote.event_minutes_item_ref = EventMinutesItem.Example()
        vote.person_ref = Person.Example()
        vote.decision = VoteDecision.APPROVE
        vote.in_majority = True
        return vote

    _PRIMARY_KEYS = (
        "matter_ref",
        "event_ref",
        "event_minutes_item_ref",
        "person_ref",
        "decision",
    )
    _INDEXES = (IndexedFieldSet((
        IndexedField(name="event_ref", order=Order.ASCENDING),
        IndexedField(name="person_ref", order=Order.ASCENDING),
    )), )
Exemple #5
0
class Vote(Model):
    """
    A reference tying a specific person and an event minutes item together.
    """

    matter_ref = fields.ReferenceField(Matter, required=True)
    event_ref = fields.ReferenceField(Event, required=True)
    event_minutes_item_ref = fields.ReferenceField(EventMinutesItem,
                                                   required=True)
    person_ref = fields.ReferenceField(Person, required=True)
    decision = fields.TextField(
        required=True,
        validator=validators.create_constant_value_validator(
            VoteDecision, True),
    )
    in_majority = fields.BooleanField(required=True)
    external_source_id = fields.TextField()

    @classmethod
    def Example(cls) -> Model:
        vote = cls()
        vote.matter_ref = Matter.Example()
        vote.event_ref = Event.Example()
        vote.event_minutes_item_ref = EventMinutesItem.Example()
        vote.person_ref = Person.Example()
        vote.decision = VoteDecision.APPROVE
        vote.in_majority = True
        return vote

    _PRIMARY_KEYS = (
        "matter_ref",
        "event_ref",
        "event_minutes_item_ref",
        "person_ref",
        "decision",
    )
    _INDEXES = ()