示例#1
0
class Member(Document):
    class Meta:
        collection_name = "member"

    # vouch = fields.ListField(fields.IntegerField, default=list)
    id = fields.IntegerField(attribute="_id")
    balance = fields.IntegerField(default=0)
    banker_balance = fields.IntegerField(default=0)
    joined_at = fields.DateTimeField(default=None)
    suspended = fields.BooleanField(default=False)
    invites = fields.IntegerField(default=0)

    gatcha_counter = fields.DictField(fields.StringField(),
                                      fields.IntegerField(),
                                      default=dict)

    # shitty event collected code
    has_collected = fields.BooleanField(default=False)

    # even more shitty reputation system
    vouched_for = fields.ListField(fields.IntegerField())
    vouched_by = fields.ListField(fields.IntegerField())

    reported_for = fields.ListField(fields.IntegerField())
    reported_by = fields.ListField(fields.IntegerField())

    pray_count = fields.IntegerField(default=0)
    pray_winnings = fields.IntegerField(default=0)

    #event system
    event_activated = fields.BooleanField(default=False)
    event_multiplier = fields.FloatField(default=1.0)
    work_activated = fields.BooleanField(default=False)
    bonus_bought = fields.BooleanField(default=False)
    points = fields.FloatField(default=0.0)
示例#2
0
class Guild(Document):
    class Meta:
        strict = False

    id = fields.IntegerField(attribute="_id")
    channel = fields.IntegerField(default=None)
    channels = fields.ListField(fields.IntegerField, default=list)
    prefix = fields.StringField(default=None)
    silence = fields.BooleanField(default=False)
    display_images = fields.BooleanField(default=True)
    auction_channel = fields.IntegerField(default=None)

    lat = fields.FloatField(default=37.7790262)
    lng = fields.FloatField(default=-122.4199061)
    loc = fields.StringField(
        default=
        "San Francisco, San Francisco City and County, California, United States of America"
    )

    @property
    def is_day(self):
        sun = Sun(self.lat, self.lng)
        sunrise, sunset = sun.get_sunrise_time(), sun.get_sunset_time()
        if sunset < sunrise:
            sunset += timedelta(days=1)

        now = datetime.now(timezone.utc)
        return (sunrise < now < sunset
                or sunrise < now + timedelta(days=1) < sunset
                or sunrise < now + timedelta(days=-1) < sunset)
class Event(EmbeddedDocument):
    title = fields.StringField(required=True, allow_none=False)
    description = fields.StringField(allow_none=True, default="")
    event_type = fields.StringField(required=True, allow_none=False)
    event_start = fields.StringField(required=True, allow_none=False)
    event_end = fields.StringField(required=True, allow_none=False)
    event_length = fields.FloatField(required=True, allow_none=False)
    probability = fields.FloatField(required=True, allow_none=False)
    markers = fields.ListField(fields.EmbeddedField(Marker),
                               allow_none=True,
                               default=[])
示例#4
0
class Movie(Document):
    name = fields.StringField(required=True)
    director = fields.StringField(required=True)
    categories = fields.ListField(fields.StringField())
    imdb_score = fields.FloatField()
    popularity_99 = fields.FloatField()

    def __str__(self):
        return f"{self.name} : {self.director}"

    def __repr__(self):
        return f"<{self.name} : {self.director}>"
示例#5
0
class Anime(Document):
    name = fields.DictField(required=True)
    format = fields.StrField(validate=validate.OneOf(
        ["ONA", "OVA", "TV", "Movie", "Special", "Music", "TV Short"]))
    tags = fields.ListField(fields.StrField())  #array
    genres = fields.ListField(fields.StrField())  #array
    synopsis = fields.StrField()
    season = fields.StrField()
    duration = fields.IntField()
    release_date = fields.StrField()
    studios = fields.ListField(fields.StrField())  #array
    episodes = fields.IntField()
    source = fields.StrField(validate=validate.OneOf([
        "Original", "Manga", "Light Novel", "Visual Novel", "Novel",
        "Video Game", "Doujinshi"
    ]))

    #TODO: controller logic will have to implement String ID to ObjectID from bson.objectid.ObjectId for queries
    id = fields.StrField()
    #TODO: client facing JSON response in API controller will have to output characters with proper structure/dictionary
    #TODO: client facing JSON request in API controller will have to parse through characters and make separate queries for them.
    #TODO: frontend will use the same API
    #TODO: same goes with staff, as in their pictures, names, roles
    rating = fields.FloatField()
    cover = fields.ReferenceField("Image")

    class Meta:
        collection = db.anime
示例#6
0
class BaseStudent(Document):
    name = fields.StrField(required=True)
    birthday = fields.DateTimeField()
    gpa = fields.FloatField()

    class Meta:
        abstract = True
示例#7
0
class Meeting(Document):
    owner = fields.ReferenceField('User', required=True)
    members = fields.ListField(fields.ReferenceField('MeetingMember'))
    meeting_type = fields.StrField(validate=validate.OneOf(MEETING_TYPES),
                                   required=True)
    state = fields.StrField(validate=validate.OneOf(MEETING_STATES))
    description = fields.StrField()

    place_address = fields.StrField()
    latitude = fields.FloatField()
    longitude = fields.FloatField()
    google_place_id = fields.IntField()
    google_place_city_id = fields.IntField()

    date_created = fields.DateTimeField(missing=datetime.now())
    date_resolved = fields.DateTimeField(required=True)
示例#8
0
class ProductDocument(Document):
    category = fields.ObjectIdField(required=True)
    name = fields.StringField(required=True)
    description = fields.StringField(required=True)
    price = fields.FloatField(required=True)
    image_url = fields.StringField()
    available_from = fields.StringField(required=True)
    available_till = fields.StringField(required=True)
示例#9
0
class OrderDocument(Document):
    products = fields.ListField(fields.ReferenceField(ProductDocument),
                                required=True)
    cafe = fields.ObjectIdField(required=True)
    user_id = fields.StringField(required=True, unique=True)
    order_time = fields.DateTimeField(required=True)
    code = fields.IntegerField(required=True)
    price = fields.FloatField(required=True)
    deletion_time = fields.DateTimeField(allow_none=True)
示例#10
0
 class MySchema(Schema):
     string = fields.StringField()
     uuid = fields.UUIDField()
     number = fields.NumberField()
     integer = fields.IntegerField()
     decimal = fields.DecimalField()
     boolean = fields.BooleanField()
     float = fields.FloatField()
     url = fields.UrlField()
     email = fields.EmailField()
     constant = fields.ConstantField("const")
示例#11
0
 class MySchema(EmbeddedSchema):
     string = fields.StringField()
     uuid = fields.UUIDField()
     number = fields.NumberField()
     integer = fields.IntegerField()
     decimal = fields.DecimalField()
     boolean = fields.BooleanField()
     formattedstring = fields.FormattedStringField('Hello {to_format}')
     float = fields.FloatField()
     # localdatetime = fields.LocalDateTimeField()
     url = fields.UrlField()
     email = fields.EmailField()
     constant = fields.ConstantField("const")
示例#12
0
        class MyEmbeddedDoc(EmbeddedDocument):
            _prop = fields.FloatField()

            @property
            def prop(self):
                return self._prop

            @prop.setter
            def prop(self, value):
                self._prop = value

            @prop.deleter
            def prop(self):
                del self._prop
示例#13
0
        class HeavyStudent(BaseStudent):
            _weight = fields.FloatField()

            @property
            def weight(self):
                return self._weight

            @weight.setter
            def weight(self, value):
                self._weight = value

            @weight.deleter
            def weight(self):
                del self._weight
示例#14
0
class CustomerGoodsDetail(Document):
    customer = fields.ReferenceField(Customer)  # 顾客
    stock_name = fields.StringField()  # 货物
    stock_num = fields.IntField(missing=0)  # 数量
    stock_price = fields.FloatField(missing=0)  # 单价
    stock_amount = fields.FloatField(missing=0)  # 金额
    is_active = fields.BooleanField(missing=True)  # 记录有效性
    created_time = fields.DateTimeField(missing=datetime.datetime.now)  # 记录时间

    @classmethod
    async def new_c_detail(cls, customer_id='', stock_name=''):
        customer = await Customer.find_one({'id': ObjectId(customer_id)})
        stock = await Stock.find_one({'name': stock_name})
        detail = await cls.find_one({'customer': ObjectId(customer_id), 'stock_name': stock_name})
        if customer and stock:
            if detail:
                pass
            else:
                c_detail = await cls(customer=customer,
                          stock_name=stock_name,
                          stock_price=stock.price).commit()
                return {'id': str(c_detail.inserted_id),'stock_name': stock_name, 'stock_num': 0,'stock_price': stock.price, 'stock_amount': 0}
        return None

    @classmethod
    async def get_customer_goods(cls, customer_id=''):
        return await cls.find({'customer': ObjectId(customer_id)}).to_list(length=None)

    @classmethod
    async def update_customer_goods(cls, id='', customer_id='', num=0, price=0):
        customer_goods = await cls.find_one({'id': ObjectId(id), 'customer': ObjectId(customer_id)})
        if customer_goods:
            customer_goods.stock_num = num
            customer_goods.stock_price = price
            customer_goods.stock_amount = num * price
            await customer_goods.commit()
示例#15
0
class MSReadySample(Document):
    name = fields.StrField(required=True)
    projectId = fields.ObjectIdField(required=True)
    clinicalSamples = fields.ListField(fields.ObjectIdField, required=False)
    intermediateSampleId = fields.ObjectIdField(required=True)
    msReadySampleName = fields.StrField(required=False)
    workflowTag = fields.StrField(required=False)
    quality = fields.StrField(required=False)
    peptideNo = fields.FloatField(required=False)
    description = fields.StrField(required=False)
    concentration = fields.StrField(required=False)
    processingPerson = fields.StrField(required=False)
    currentLocation = fields.StrField(required=False)
    createdDate = fields.DateTimeField(
        validate=validate.Range(min=datetime(1900, 1, 1)))
    updatedDate = fields.DateTimeField(
        validate=validate.Range(min=datetime(1900, 1, 1)))

    class Meta:
        collection_name = "msReadySample"
class GeographicLocation(EmbeddedDocument):
    latitude = fields.FloatField(required=True, allow_none=False)
    longitude = fields.FloatField(required=True, allow_none=False)
示例#17
0
class Point(EmbeddedDocument, metaclass=MetaBaseTemplate):
    latitude = fields.FloatField()
    longitude = fields.FloatField()
示例#18
0
class Bubble(EmbeddedDocument):
    position_x = fields.FloatField()
    position_y = fields.FloatField()
    tags = fields.ListField(fields.ReferenceField('Tag'))
示例#19
0
class Stock(Document):
    name = fields.StringField(unique=True, required=True)  # 名称
    num = fields.IntField(missing=0)  # 数量
    unit = fields.StringField()  # 单位
    opening_price = fields.FloatField()  # 进价
    price = fields.FloatField()  # 单价
    opening_amount = fields.FloatField()  # 进价总额
    amount = fields.FloatField()  # 总额
    remarks = fields.StringField()  # 备注
    is_active = fields.BooleanField(missing=True)  # 记录有效性
    created_time = fields.DateTimeField(missing=datetime.datetime.now)  # 记录时间

    class Meta:
        collection_name = 'stock'

    @classmethod
    async def create_stock(cls, name='', num=0, unit='', opening_price=0, price=0, remarks=''):
        stock = await cls.find_one({"name": name})
        if stock:
            return {'errcode': 1, 'msg': '已经有了物料,换个名字吧'}
        await cls(name=name,
                  num=num,
                  unit=unit,
                  opening_price=opening_price,
                  price=price,
                  opening_amount=opening_price * num,
                  amount=price * num,
                  remarks=remarks).commit()
        return {'errcode': 0, 'msg': '添加成功'}

    # 获取物料列表
    @classmethod
    async def get_stocks(cls, is_active=None):
        if is_active == 'true' or is_active == True:
            return await cls.find({"is_active": True}).sort([('created_time', 1)]).to_list(length=None)
        return await cls.find({"is_active": False}).sort([('created_time', 1)]).to_list(length=None)

    @classmethod
    async def get_stocks_count(cls):
        return await cls.find({"is_active": True}).count()

    # 获取物料
    @classmethod
    async def get_stock(cls, id=''):
        try:
            return await cls.find_one({'id': ObjectId(id)})
        except:
            return None

    # 删除物料
    @classmethod
    async def delete_stock(cls, id=''):
        try:
            stock = await cls.get_stock(id)
            stock.is_active = False
            await stock.commit()
            return {'errcode': 0, 'msg': '已删除'}
        except:
            return {'errcode': 1, 'msg': '没有此物料,请检查物料列表'}

    # 修改物料
    @classmethod
    async def update_stock(cls, name='', num=0, unit='', opening_price=0, price=0, remarks=''):
        stock = await cls.find_one({"name": name})
        if stock:
            if stock.num == num and stock.unit == unit and stock.opening_price == opening_price and stock.price == price and stock.remarks == remarks:
                return {'errcode': 1, 'msg': '您没有任何修改'}
            stock.num = num
            stock.unit = unit
            stock.opening_price = opening_price
            stock.price = price
            stock.opening_amount = opening_price * num
            stock.amount = price * num
            stock.remarks = remarks
            await stock.commit()
            return {'errcode': 0, 'msg': '已修改'}
        return {'errcode': 1, 'msg': '没有此货物'}
 class EmbeddedStudent(EmbeddedDocument):
     name = fields.StrField(required=True)
     birthday = fields.DateTimeField()
     gpa = fields.FloatField()