Beispiel #1
0
class Provider(models.Base):
  id = fields.IntField()
  endpoint = fields.StringField(required=True)
  type = fields.StringField(required=True)
  available = fields.BoolField(required=True)
  available_at = fields.DateTimeField(required=True)
  available_expires_at = fields.DateTimeField(required=True)
  created_at = fields.DateTimeField(required=True)
  tasks = fields.EmbeddedField(ProviderMetrics, required=True)
  open_tasks = fields.EmbeddedField(ProviderOpenMetrics, required=True)
  sent_tasks = fields.EmbeddedField(ProviderMetrics, required=True)
  stats = fields.EmbeddedField(ProviderStats, required=True)
  
  @staticmethod
  def build(json):
    return Provider(
      id = json["id"],
      endpoint = json["endpoint"],
      type = json["type"],
      available = json["available"],
      available_at = json["available_at"],
      available_expires_at = json["available_expires_at"],
      created_at = json["created_at"],
      tasks = ProviderMetrics.build(json["tasks"]),
      open_tasks = ProviderOpenMetrics.build(json["open_tasks"]),
      sent_tasks = ProviderMetrics.build(json["sent_tasks"]),
      stats = ProviderStats.build(json["stats"])
    )
Beispiel #2
0
class BaseModel(Model):
    __tablename__ = "BaseModel"

    last_update = fields.DateTimeField(required=True)
    created_at = fields.DateTimeField(required=True)

    def __init__(self, eid=0, *args, **kwargs):
        self.eid = eid
        self.last_update = datetime.utcnow()
        self.created_at = datetime.utcnow()
        super(BaseModel, self).__init__(*args, **kwargs)

    @property
    def location(self):
        return "Earth"

    @property
    def id(self):
        return self.eid

    def created_at_datetime(self):
        return self.created_at

    def save(self):
        table = self.Meta.database.table(self.__tablename__)
        print("UPDATE: ", table.update(self.to_struct(), eids=[self.eid]))

    def insert(self):
        table = self.Meta.database.table(self.__tablename__)
        newid = table.insert(self.to_struct())
        if newid > 0:
            print("EID: ", newid)
            self.eid = newid
        else:
            print("Failed to get eid for the new insert record")
Beispiel #3
0
class Instantiated(object):
    id = fields.IntField(required=True)
    created_at = fields.DateTimeField()
    # Creation time. This field is read only.
    updated_at = fields.DateTimeField()
    # Time of last update. This field is read only.

    def __str__(self):
        return "id='{}'".format(self.id)
Beispiel #4
0
class Grouping(models.Base):
    groupKey = fields.EmbeddedField(GroupKey, required=True)
    groupKeyShortLabel = fields.EmbeddedField(GroupKeyShortLabel,
                                              required=True)
    explanation = fields.ListField([fields.StringField()], required=True)
    debug = fields.EmbeddedField([fields.StringField()], required=True)
    dateTime = fields.DateTimeField(required=True)
def test_datetime_field_to_struct():

    field = fields.DateTimeField()

    assert field.str_format is None

    tt = datetime.datetime(2014, 5, 7, 12, 45, 56)
    assert '2014-05-07T12:45:56' == field.to_struct(tt)
 class Person(models.Base):
     name = fields.StringField(default=default_name)
     age = fields.IntField(default=default_age)
     height = fields.FloatField(default=default_height)
     job = fields.EmbeddedField(Job, default=default_job)
     hobbies = fields.ListField(items_types=str, default=default_hobbies)
     last_ate = fields.TimeField(default=default_last_ate)
     birthday = fields.DateField(default=default_birthday)
     time_of_death = fields.DateTimeField(default=default_time_of_death)
def test_datetime_field_to_struct_with_tz():

    field = fields.DateTimeField()

    tt = datetime.datetime(2014, 5, 7, 12, 45, 56, tzinfo=_TestCet())
    assert '2014-05-07T12:45:56+02:00' == field.to_struct(tt)

    tt = datetime.datetime(2014, 5, 7, 12, 45, 56, tzinfo=_TestUtc())
    assert '2014-05-07T12:45:56+00:00' == field.to_struct(tt)
Beispiel #8
0
class User(models.Base):
    name = fields.StringField()
    email = fields.StringField(required=True)
    wallet = fields.StringField(required=True)
    created_at = fields.DateTimeField(required=True)

    @staticmethod
    def build(json):
        return User(name=json["name"],
                    email=json["email"],
                    wallet=json["wallet"],
                    created_at=json["created_at"])
def test_datetime_field_parse_value():

    field = fields.DateTimeField()

    assert (datetime.datetime(2014, 4, 21, 12, 45,
                              56) == field.parse_value('2014-04-21T12:45:56'))
    assert (datetime.datetime(
        2014, 4, 21, 12, 45, 56, tzinfo=tzoffset(
            None, 7200)) == field.parse_value('2014-04-21T12:45:56+02:00'))

    with pytest.raises(ValueError):
        field.parse_value('not a datetime')
Beispiel #10
0
def test_datetime_field():
    field = fields.DateTimeField()

    class Event(models.Base):
        when = field

    event = Event()
    assert event.when is None
    event.when = datetime.datetime(2019, 10, 30, 1, 2, 3)
    assert field.toBsonEncodable(event.when) == \
        datetime.datetime(2019, 10, 30, 1, 2, 3)
    assert event.when == datetime.datetime(2019, 10, 30, 1, 2, 3)
    assert field.parse_value("2019-10-30T01:02:03.000000Z") == \
        datetime.datetime(2019, 10, 30, 1, 2, 3, tzinfo=timezone.utc)
Beispiel #11
0
class App(models.Base):
  id = fields.IntField(required=True)
  slug = fields.StringField(required=True)
  versions = fields.IntField()
  name = fields.StringField(required=True)
  description = fields.StringField(required=True)
  description_short = fields.StringField(required=True)
  created_at = fields.DateTimeField(required=True)
  tasks = fields.EmbeddedField(AppMetrics, required=True)
  
  @staticmethod
  def build(json):
    return App(
      id = json["id"],
      slug = json["slug"],
      versions = json["versions"],
      name = json["name"],
      description = json["description"]["plain"],
      description_short = json["description"]["plain"].strip().split(".")[0][0:70] + ".",
      created_at = json["created_at"],
      tasks = AppMetrics.build(json["tasks"])
    )
Beispiel #12
0
class Model(models.Base):
  app_id = fields.IntField(required=True)
  version = fields.IntField(required=True)
  input_scheme = None
  output_scheme = None
  created_at = fields.DateTimeField(required=True)
  urls = fields.EmbeddedField(ModelUrls, required=True)
  tasks = fields.EmbeddedField(ModelMetrics, required=True)
  stats = fields.EmbeddedField(ModelStats, required=True)
  
  @staticmethod
  def build(json):
    model = Model(
      app_id = json["app_id"],
      version = json["version"],
      urls = ModelUrls.build(json["urls"]),
      created_at = json["created_at"],
      tasks = ModelMetrics.build(json["tasks"]),
      stats = ModelStats.build(json["stats"])
    )
    model.input_scheme = json["schemes"]["input"]
    model.output_scheme = json["schemes"]["output"]
    return model
Beispiel #13
0
    class Event(models.Base):

        time = fields.TimeField()
        date = fields.DateField()
        end = fields.DateTimeField()
def test_datetime_field_is_none():
    """If field nullable, dateutil raises error"""

    datetime_field = fields.DateTimeField()

    assert datetime_field.parse_value(None) is None
def test_datetime_field_format_has_precedence():

    field = fields.DateTimeField(str_format='%H:%M %Y/%m')

    tt = datetime.datetime(2014, 5, 7, 12, 45, 56, tzinfo=_TestCet())
    assert '12:45 2014/05' == field.to_struct(tt)
Beispiel #16
0
class Model(Base):
    __metaclass__ = ModelMeta
    """Firestore Models all inherit from jsonmodels.models.Base.\n
    This is exposed as `from firestore_orm import model`.

    Arguments:
        Base {:class:`jsonmodels.models.Base`} -- To create models you need to create class that inherits from :class:`jsonmodels.models.Base`.\n
        For more details, refer to https://jsonmodels.readthedocs.io/en/latest/usage.html.\n
        __tablename__ {str} -- Collection name of model in firestore
    Keyword Arguments:
        metaclass {:class:`firestore_orm.models.ModelMeta`} --  (default: {ModelMeta})

    Example:

    .. code-block:: python

        from jsonmodels import fields
        from firestorm import model, utils

        class Pet(model.Model):
            __tablename__ = 'pet'

            name = fields.StringField(required=True)

        class Person(model.Model):
            __tablename__ = 'person'

            name = fields.StringField(required=True)
            surname = fields.StringField(nullable=False)
            age = fields.FloatField()
            pet_id = fields.StringField(required=True)

            def __init__(self, **kwargs):
                super(Person, self).__init__(**kwargs)
                self.pet = utils.relationship(self, Pet, 'pet_id')

    Usage:

    After that you can use it as normal object.\n
    You can pass kwargs in constructor or :meth:`jsonmodels.models.PreBase.populate` method.

    .. code-block:: python

        >>> pet = Pet(name='Katty')
        >>> pet.id
        '26b353d6-f5a1-4a38-b61a-b9371de5b92f'
        >>> pet.save()  # save to firestore
        >>> person = Person(name='Chuck', pet_id=pet.id)
        >>> person.name
        'Chuck'
        >>> person.surname
        None
        >>> person.populate(surname='Norris', age=20)
        >>> person.surname
        'Norris'
        >>> person.name
        'Chuck'
        >>> person.id
        '1286f8ae-710f-4fb7-a804-31fbed525390'
        >>> person.save()   # save to firestore
        >>> Person.query.fetch()
        [Person(created_at=datetime.datetime(2019, 3, 24, 13, 57, 21, 761746), name='Chuck', surname='Norris', age=20, pet_id='26b353d6-f5a1-4a38-b61a-b9371de5b92f', id='1286f8ae-710f-4fb7-a804-31fbed525390')]
        >>> Person.query.get('1286f8ae-710f-4fb7-a804-31fbed525390')
        Person(created_at=datetime.datetime(2019, 3, 24, 13, 57, 21, 761746), name='Chuck', surname='Norris', age=20, pet_id='26b353d6-f5a1-4a38-b61a-b9371de5b92f', id='1286f8ae-710f-4fb7-a804-31fbed525390')
        >>> person = Person.query.get('1286f8ae-710f-4fb7-a804-31fbed525390')
        >>> person.pet
        'Pet(created_at=datetime.datetime(2019, 3, 24, 13, 57, 21, 761746), name='Katty', id='26b353d6-f5a1-4a38-b61a-b9371de5b92f')'

    Filter
    --------

    You can filter the results of a query using the following functions

    .. code-block:: python

        >>> Person.query.fetch(filters=[('name', '==', 'Chuck'), ('age', '<=', 20)])
        [Person(created_at=datetime.datetime(2019, 3, 24, 13, 57, 21, 761746), name='Chuck', surname='Norris', age=20, pet_id='26b353d6-f5a1-4a38-b61a-b9371de5b92f', id='1286f8ae-710f-4fb7-a804-31fbed525390')]

    Order by
    ---------

    You can also order the results of a query
    .. code-block:: python

        >>> Person.query.fetch(order_by={"population": 'DESCENDING'})  # orders query by DESCENDING order: set to `ASCENDING` for ascending order
    """

    hidden_fields = ['password', 'is_deleted']
    show_relationships = []

    __tablename__ = None
    id = fields.StringField()  # type: StringField
    created_at = fields.DateTimeField()

    def __init__(self, *args, **kwargs):
        super(Model, self).__init__(*args, **kwargs)
        self.id = uuid.uuid4().__str__() if not self.id else self.id

    def save(self):
        # type: () -> bool
        """Save model instance to firestore
        """

        return self.query.commit(self.id, self)

    @classmethod
    def __call__(cls, *args, **kw):
        constructor = getattr(cls, "__new__")
        instance = constructor(
            cls) if constructor is object.__new__ else constructor(cls, *args, **kw)
        instance.__init__(cls, *args, **kw)
        return instance

    def to_dict(self, show=None, hide=None):
        # type: (list, list) -> dict
        """ Return a dictionary representation of this model.
        """
        if hide is None:
            hide = []
        if show is None:
            show = []
        hidden = []

        if hasattr(self, 'hidden_fields'):
            hidden = self.hidden_fields
            hidden.extend(hide)

        resp = {}
        for _, name, field in self.iterate_with_name():
            value = field.__get__(self)
            if name not in show and name in hidden:
                continue

            if value is None:
                resp[name] = None
                continue
            value = field.to_struct(value)
            resp[name] = value

        # jsonify relationships
        for key in self.show_relationships:
            val = getattr(self, key)  # type: Model
            if not val or not isinstance(val, Base):
                continue
            resp[key] = val.to_dict()
        return resp

    def delete(self):
        return self.query.delete(self)
    class Event(models.Base):

        date = fields.DateTimeField()
Beispiel #18
0
 class Event(models.Base):
     start = fields.DateTimeField()