class UndoneTrade(mongoengine.Document):
    user_id: mongoengine.LongField()
    calculation_start_date = mongoengine.DateField()

    undue_trades_count = mongoengine.IntField()
    past_due_trades_count_with_less_than_30_day_delays = mongoengine.IntField()
    arrear_trades_count_with_more_than_30_day_delays = mongoengine.IntField()

    undue_trades_total_balance_of_last_year = mongoengine.DecimalField()
    past_due_trades_total_balance_of_last_year = mongoengine.DecimalField()
    arrear_trades_total_balance_of_last_year = mongoengine.DecimalField()

    meta = {'db_alias': 'core', 'collection': 'undoneTrades'}
예제 #2
0
class UserDocument(BaseDocument):
    username = mongo.StringField(unique=True)
    password = mongo.StringField()
    email = mongo.EmailField(unique=True)
    birth_date = mongo.DateField()
    active = mongo.BooleanField()
    document = mongo.StringField(unique=True)

    def set_password(self, password):
        self.password = bcrypt.hash(password)
        self.save()

    def verify_password(self, password):
        return bcrypt.verify(password, self.password)
예제 #3
0
class Proyecto(_db.Document):
    titulo = _db.StringField()
    descripcion = _db.StringField()
    cover = _db.ReferenceField(Media)
    fecha_publicacion = _db.DateField()
    productores_proyecto = _db.ListField(_db.ReferenceField(Estudio))
    colaboradores_proyecto = \
        _db.ListField(_db.ReferenceField(Colaborador))
    rated = _db.StringField()
    menciones = _db.ListField(_db.EmbeddedDocumentField(menciones))
    tags = _db.ListField(_db.ReferenceField(Tag))
    keywords = _db.ListField()
    # allow
    meta = {'allow_inheritance': True}
예제 #4
0
class Cart(me.Document):
    user = me.ReferenceField(User, required=True)
    products = me.ListField(me.ReferenceField(Product))
    is_active = me.BooleanField(default=True)
    created_at = me.DateField()

    def save(self, *args, **kwargs):
        self.created_at = datetime.datetime.now()
        super().save(*args, **kwargs)

    def add_product(self, product):
        self.products.append(product)
        self.save()

    def remove_product(self, product):
        self.products.remove(product)
        self.save()

    def get_products(self):
        data = []

        for i in set(self.products):
            product = {'id': i.id, 'description': self.get_detail(i.id)}
            data.append(product)
        return data

    def get_cost_cart(self):
        len_obj = [j.price for j in self.products]

        if len_obj:
            return sum(len_obj)
        return 0

    def get_active_order(self):
        order = Order.objects(user=self.user, cart=self).first()
        if not order or order.sum_order == 0:
            order = Order()
            order.user = self.user
            order.cart = self
            order.sum_order = self.get_cost_cart()
            if order.sum_order > 0:
                order.save()
            else:
                return None
        return order

    def get_detail(self, id_):
        product = Product.objects.get(id=id_)
        len_obj = [j for j in self.products if j == product]
        return f'{product.title} \nprice {product.price} x {len(len_obj)} = {len(len_obj) * product.price}'
예제 #5
0
class finance(mongoengine.Document):
    abstract = mongoengine.StringField(max_length=20, )
    checkPeople = mongoengine.StringField(max_length=20)
    city = mongoengine.StringField(max_length=20)
    cityarea = mongoengine.StringField(max_length=20)
    classify = mongoengine.StringField(max_length=20)
    FEATURE = mongoengine.StringField(max_length=100)
    indicatorOfAdvert = mongoengine.IntField(default=0)
    indicatorOfComplaint = mongoengine.IntField(default=0)
    indicatorOfIllegal = mongoengine.IntField(default=0)
    indicatorOfIncome = mongoengine.IntField(default=0)
    indicatorOfInfluence = mongoengine.IntField(default=0)
    modifyDate = mongoengine.DateField(default=datetime.datetime.now)
    monitorCompanySource = mongoengine.StringField(max_length=200)
    monitorTime = mongoengine.DateField()
    name = mongoengine.StringField(max_length=200)
    province = mongoengine.StringField(max_length=20)
    RATEOFRETURN = mongoengine.IntField(default=0)
    score = mongoengine.IntField(default=0)
    shortname = mongoengine.StringField(max_length=20)
    state = mongoengine.StringField(max_length=20)
    status = mongoengine.IntField(default=0)
    url = mongoengine.StringField(max_length=50)
예제 #6
0
class GRB(moe.Document):

    name = moe.StringField(required=True)
    date = moe.DateField()
    detectors = moe.ListField(moe.StringField(max_length=2), max_lenght=14)
    brightest_detector = moe.StringField(max_length=2)

    background_selection = moe.ListField(moe.FloatField(), max_length=2)

    location = moe.ListField(moe.FloatField(), max_lenght=3)

    selection = moe.ReferenceField(Selection)

    data = moe.DictField()
예제 #7
0
class Watchlist(me.EmbeddedDocument):  # Embedded in User
    name = me.StringField(required=True, max_length=30)
    id = me.ObjectIdField(default=ObjectId)
    tickers = me.ListField(me.DictField())
    columns = me.ListField(me.DictField())
    date_created = me.DateField(default=datetime.utcnow)

    def to_json(self):
        return {
            "name": self.name,
            "id": str(self.id),
            "tickers": self.tickers,
            "columns": self.columns,
            "date_created": datetime.strftime(self.date_created, "%Y/%m/%d"),
        }
예제 #8
0
class Profile(mongoengine.Document):
    user_id: mongoengine.LongField()
    has_kyc = mongoengine.BooleanField()
    military_service_status = mongoengine.StringField()
    sim_card_ownership = mongoengine.BooleanField()
    address_verification = mongoengine.BooleanField()
    membership_date = mongoengine.DateField()
    recommended_to_others_count = mongoengine.IntField()
    star_count = mongoengine.IntField()
    score = mongoengine.IntField()

    meta = {
        'db_alias': 'core',
        'collection': 'profiles'
    }
예제 #9
0
class Case(mongoengine.EmbeddedDocument):
    _id = mongoengine.IntField(required=True)
    _type = mongoengine.StringField(required=True)
    date = mongoengine.DateTimeField(default=datetime.datetime.now,
                                     required=True)
    until = mongoengine.DateTimeField(default=None)
    mod_id = mongoengine.IntField(required=True)
    mod_tag = mongoengine.StringField(required=True)
    reason = mongoengine.StringField(required=True)
    punishment = mongoengine.StringField()
    lifted = mongoengine.BooleanField(default=False)
    lifted_by_tag = mongoengine.StringField()
    lifted_by_id = mongoengine.IntField()
    lifted_reason = mongoengine.StringField()
    lifted_date = mongoengine.DateField()
예제 #10
0
class GradeSheetModel(BaseMixin, me.Document):
    '''
    Grade sheets
    '''

    grade_sheet_id = me.StringField(primary_key=True, default=uuid_value)
    student = me.ReferenceField(UserModel, required=True)
    instructor = me.ReferenceField(UserModel, required=True)
    event = me.ReferenceField(EventModel, required=True)
    date = me.DateField()
    grade = me.StringField()
    status = me.StringField()
    lesson_type = me.StringField()
    comments = me.StringField(default="")

    meta = {'collection': 'grade_sheets'}
예제 #11
0
class Event(mongoengine.DynamicDocument):
    """
    Document object for a outcome event. All records will relate to a unique Patient via "parent-referencing".
    Outcome events log when a change has happened during a patients stay and are "time-series" in nature.

    Parameters
    -----------
    patient_id: str, required
        Unique patient ID
    component: str, optional
        Even component (for further stratification of event types)
    eventType: str, required
        The type of event
    eventDate: Date, required
        Date of event
    eventTime: float, optional
        Time passed in minutes (relative to 0:00am event date)
    covidStatus: str, (default="U")
        COVID-19 status at time of event (options: "P", "N", "U")
    death: int, (default=0)
        1 = event corresponds to patient death, else 0
    criticalCareAdmission, int (default=0)
        1 = event corresponds to a critical care admission, else 0
    source: str, optional
        Source of event
    sourceType: str, optional
        Type of source
    destination: str, optional
        The patients destination as a result of the event
    wimd: int, optional
        Welsh deprivation score
    """

    patientId = mongoengine.StringField(required=True)
    component = mongoengine.StringField(required=False)
    eventType = mongoengine.StringField(required=True)
    eventDate = mongoengine.DateField(required=True)
    eventTime = mongoengine.FloatField(required=False)
    covidStatus = mongoengine.StringField(default="U", choices=("P", "N", "U"))
    death = mongoengine.IntField(default=0, choices=(1, 0))
    criticalCareAdmission = mongoengine.IntField(default=0, choices=(1, 0))
    source = mongoengine.StringField(required=False)
    sourceType = mongoengine.StringField(required=False)
    destination = mongoengine.StringField(required=False)
    wimd = mongoengine.IntField(required=False)

    meta = {"db_alias": "core", "collection": "outcomes"}
예제 #12
0
class Measurement(mongoengine.DynamicDocument):
    """
    Base class for measurements.
    """
    patientId = mongoengine.StringField(required=True)
    name = mongoengine.StringField(required=True)
    date = mongoengine.DateField(required=False)
    time = mongoengine.FloatField(required=False)
    requestSource = mongoengine.StringField(required=False)
    notes = mongoengine.StringField(required=False)
    flags = mongoengine.ListField(required=False)

    meta = {
        "db_alias": "core",
        "collection": "testResults",
        "allow_inheritance": True
    }
class DoneTrade(mongoengine.Document):
    user_id = mongoengine.LongField()
    calculation_start_date = mongoengine.DateField()

    timely_trades_count_of_last_3_months = mongoengine.IntField()
    past_due_trades_count_of_last_3_months = mongoengine.IntField()
    arrear_trades_count_of_last_3_months = mongoengine.IntField()

    timely_trades_count_between_last_3_to_12_months = mongoengine.IntField()
    past_due_trades_count_between_last_3_to_12_months = mongoengine.IntField()
    arrear_trades_count_between_last_3_to_12_months = mongoengine.IntField()

    trades_total_balance = mongoengine.DecimalField()

    total_delay_days = mongoengine.IntField()

    meta = {'db_alias': 'core', 'collection': 'doneTrades'}
예제 #14
0
class Account(me.Document):
    id = me.StringField(primary_key=True)
    twitter_handle = me.StringField(required=True, unique=True)
    name = me.StringField()
    update_date = me.DateField(default=datetime.datetime.utcnow)
    group_type = me.ReferenceField(Group)
    profile_image_url = me.URLField()
    following = me.EmbeddedDocumentListField(FollowingConnections)
    total_following = me.IntField(default=0)
    total_followers = me.IntField(default=0)
    followers = me.EmbeddedDocumentListField(FollowerConnections)
    top_words_positive = me.EmbeddedDocumentListField(Top_Word)
    top_words_negative = me.EmbeddedDocumentListField(Top_Word)
    tweets = me.EmbeddedDocumentListField(Tweet)
    tweets_context = me.EmbeddedDocumentListField(Context)
    favorite_tweets = me.EmbeddedDocumentListField(Tweet)
    favorite_context = me.EmbeddedDocumentListField(Context)
    requested = me.IntField(default=0)
예제 #15
0
class Female(Member):
    nickName = me.StringField()
    birthDate = me.DateField()
    personality = me.StringField()
    hobit = me.StringField(max_length=20)
    job = me.StringField()
    pictUri = me.URLField()
    email = me.StringField()
    phone = me.StringField()

    userId = me.StringField(unique=True)
    status = me.IntField()
    meta = {'collection': 'Female'}

    def createDate(self):
        """發起約會"""
        replyT = "上班在哪一區呀?"
        Date(femaleId=self.userId, status=1).save()
        self.status += 10
        self.save()
        return replyT

    def readInvList(self, token, userId, client):
        """觀看邀請名單"""
        colLis = []
        date = Member.getDate(self.userId)
        for invId in date.invList:
            user = Member.getUser(invId)
            text = f'個性{user.personality}喜歡{user.hobit}的{user.getConstellation()}男孩'
            action = actions.PostbackAction(data=invId,
                                            label="選他",
                                            display_text="選他")
            column = template.CarouselColumn(title=user.nickName,
                                             text=text,
                                             thumbnail_image_url=user.pictUri,
                                             actions=[action])
            colLis.append(column)
        carouse = template.CarouselTemplate(columns=colLis)
        if token != userId:
            client.reply_message(token, [
                template.TemplateSendMessage(template=carouse,
                                             alt_text="broke")
            ])
        return
예제 #16
0
class Male(Member):
    nickName = me.StringField()
    birthDate = me.DateField()
    personality = me.StringField()
    hobit = me.StringField(max_length=20)
    job = me.StringField()
    pictUri = me.URLField()
    email = me.StringField()
    phone = me.StringField()

    userId = me.StringField(unique=True)
    status = me.IntField()
    meta = {'collection': 'Male'}

    def readDate(self, token, userId, client):
        """觀看約會"""
        colLis = []
        for dating in Date.objects(status=10):
            girl = Member.getUser(dating.femaleId)
            action = actions.PostbackAction(data=dating.femaleId,
                                            label="邀請她",
                                            display_text="邀請她")
            column = template.CarouselColumn(
                actions=[action],
                title=f'{girl.calculate_age()},{girl.nickName}',
                text=
                f'我在{dating.workDist}上班,喜歡吃{dating.eatype},禮拜{str(dating.dateDate.isoweekday())}有空嗎?',
                thumbnail_image_url=girl.pictUri,
            )
            colLis.append(column)
        if colLis == []:
            if token != userId:
                client.reply_message(token, TextSendMessage(text='目前無約會'))
            return
        carouse = template.CarouselTemplate(columns=colLis)
        if token != userId:
            client.reply_message(token, [
                template.TemplateSendMessage(template=carouse,
                                             alt_text="broke")
            ])
        return
예제 #17
0
class Products(me.Document):
    title = me.StringField(min_length=1, max_length=512)
    description = me.StringField(min_length=2 ,max_length=4096)
    created = me.DateField(default=datetime.datetime.now())
    price = me.DecimalField(required=True)
    in_stock = me.BooleanField(default=True)
    discount = me.IntField(min_value=0, max_value=100, default=0)
    image = me.FileField(required=False, default=None)
    category = me.ObjectIdField(required=True)

    @property
    def extended_price(self):
        return self.price * (100 - self.discount) / 100

    @classmethod
    def get_discount_products(cls):
        return cls.objects(discount__ne=0, in_stock=True)

    @classmethod
    def get_category_products(cls, category):
        return cls.objects(category=category)
예제 #18
0
class Orders(me.Document):
    created_dt = me.DateField(default=datetime.datetime.now(), required=True)
    updated_dt = me.DateTimeField(default=datetime.datetime.now(),
                                  required=True)
    order_type = me.StringField(required=True, max_length=50)
    description = me.StringField(max_length=200)
    status = me.StringField(max_length=50)
    serial_no = me.IntField(max_value=999)
    creator_id = me.IntField()
    order_id = me.IntField(min_value=1, max_value=1000)

    def __str__(self):
        return f'ID: {self.pk}' \
               f'\nCreated_dt: {self.created_dt}' \
               f'\nUpdated_dt: {self.updated_dt}' \
               f'\nOrder_type: {self.order_type}' \
               f'\nDescription: {self.description}' \
               f'\nStatus: {self.status}' \
               f'\nSerial_no: {self.serial_no}' \
               f'\nCreator_id: {self.creator_id}' \
               f'\nOrder_id: {self.order_id}'
예제 #19
0
class Chats(mongoengine.Document):
    creator_id = mongoengine.IntField()
    invited_users = mongoengine.ListField()
    connected_users = mongoengine.ListField()
    book_id = mongoengine.StringField()
    smiles = mongoengine.DictField()  # associate id with emodzi
    creation_date = mongoengine.DateField(default=datetime.datetime.now())
    visited = mongoengine.BooleanField(default=False)
    out_of_time = mongoengine.BooleanField(default=False)

    def close(self):
        for user in self.invited_users:
            user.disconnect_chat()
        self.delete()

    def disconnect_user(self, user):
        user.disconnect_chat()
        if user in self.connected_users:
            self.connected_users.remove(user)
        self.save()

    def get_emodzi(self):
        smile_list = random.sample(emodzi_list, k=len(self.invited_users) + 1)
        for ind, user in enumerate(self.invited_users):
            self.smiles[str(user.user_id)] = smile_list[ind]

        self.smiles[str(self.creator_id)] = smile_list[-1]

        self.save()
        return self.smiles

    def time_out(self):
        self.out_of_time = True
        self.save()

    @queryset_manager
    def get_not_visited(doc_cls, queryset):

        return queryset.filter(visited=False, out_of_time=True)
예제 #20
0
class User(CommonDocument, SearchableMixin):
    """Basic user model
    """
    # 基础字段
    username = mongo.StringField(required=True, max_length=100, unique=True)
    email = mongo.StringField(required=False, max_length=80, default='')
    password = mongo.StringField(required=True, max_length=255)
    active = mongo.BooleanField(default=True)
    phone = mongo.StringField(max_length=16, required=False, default='')
    # roles = mongo.ListField()
    gender = mongo.StringField(choices=['F', 'M', ''], default='')
    avatar = mongo.StringField(default='', max_length=512)
    weixin = mongo.StringField(default='', max_length=64)
    qq = mongo.StringField(default='', max_length=64)
    birthday = mongo.DateField(required=False, default=date(1, 1, 1))
    country = mongo.StringField(required=False, max_length=128,
                                default='')  # 国家
    city = mongo.StringField(required=False, max_length=128, default='')  # 城市
    graduated_school = mongo.StringField(required=False,
                                         max_length=128,
                                         default='')  # 毕业学校
    company = mongo.StringField(required=False, max_length=128,
                                default='')  # 就职公司
    title = mongo.StringField(required=False, max_length=64, default='')  # 职位
    brief = mongo.StringField(required=False, max_length=1024, default='')

    # permissions = mongo.ListField(required=True, default=[])

    # __searchable__ = ['username', 'email']  # 定义需要es搜索的字段,不定义则不需要es搜索功能

    # 扩展字段

    def clean(self, **kwargs):
        self.password = pwd_context.hash(self.password)

    def __repr__(self):
        return "<User %s>" % self.username
예제 #21
0
class BookInfo(mongoengine.Document):
    rid = mongoengine.StringField(max_length=30)
    bid = mongoengine.StringField(max_length=30)
    used = mongoengine.BooleanField()
    lend_date = mongoengine.DateField()
예제 #22
0
파일: models.py 프로젝트: Kcepriu/Itea
class Manufacturer(me.Document):
    name = me.StringField(min_length=2, max_length=128, required=True)
    created = me.DateField()

    def __str__(self):
        return str(self.id)
예제 #23
0
class DrivesSleepingTime(me.Document):
    date = me.DateField()
    drivers = me.ListField()
예제 #24
0
class Drivers(me.Document):
    mac = me.StringField()
    ID = me.StringField()
    name = me.StringField()
    date_birth = me.DateField()
    data_drivers_sleeping = me.EmbeddedDocumentField(DataDriversSleeping)
예제 #25
0
class Tweet(me.EmbeddedDocument):
    id = me.StringField(primary_key=True)
    created_at = me.DateField()
    text = me.StringField()
예제 #26
0
class BookingDates(me.EmbeddedDocument):
    checkIn = me.DateField(required=True)
    checkOut = me.DateField(required=True)
예제 #27
0
class User(UserMixin, me.Document):
    meta = {"collection": "user"}

    # User permissions in ascending order
    USER_PERMS = {
        "certification": 0,  # Can also receive certificates
        "data": 1,  # Has access to data dashboard and report generation
        "admin": 2  # Full set of permissions
    }

    email = me.StringField(max_length=db_str_len, required=True)
    first_name = me.StringField(max_length=db_str_len,
                                required=True)  # Or names
    paternal_last_name = me.StringField(max_length=db_str_len, required=True)
    maternal_last_name = me.StringField(max_length=db_str_len, required=True)
    birth_date = me.DateField(required=True)
    gender = me.StringField(required=True)
    occupation = me.StringField(required=True)
    password_hash = me.StringField(max_length=db_hash_len, required=True)
    registered_on = me.DateTimeField(required=True)

    quiz_data = me.DictField()
    certified_on = me.DateTimeField()
    perm_level = me.IntField(default=USER_PERMS["certification"])

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def has_perm(self, perm_tag):
        """Returns wether of not the user has at least the specified permission level
        identified by the given permission level tag.
        Returns None if the tag is invalid."""
        if perm_tag not in User.USER_PERMS:
            return None
        return self.perm_level >= User.USER_PERMS[perm_tag]

    def update_perm(self, perm_tag):
        """Changes the user's permissions given the matchin permission label string
        Has no effect if no matching tag is provided"""
        if perm_tag in User.USER_PERMS:
            self.perm_level = User.USER_PERMS[perm_tag]

    def has_passed_quiz(self, quiz_code):
        """Tells if the user has completed succesfully the spefied quiz given a code
        Returns None if invalid quiz code"""
        if quiz_code not in QUIZ_CODES:
            return None
        return self.quiz_data[quiz_code]["is_passed"]

    def set_passed_quiz(self, quiz_code, is_passed=True, date=None):
        """Takes a quiz code and updates the user's passing status and datetime.
        Fail silently if given an invalid quiz code."""
        if quiz_code in QUIZ_CODES:
            quiz_field = self.quiz_data[quiz_code]
            quiz_field["is_passed"] = is_passed
            if is_passed:
                quiz_field["passed_on"] = date or datetime.now()
            else:
                quiz_field["passed_on"] = ""

    # Checks if the user has passed the needed tests to be certified.
    def can_be_certified(self):
        for qc in QUIZ_CODES:
            if QUIZ_CODES[qc][
                    "is_obligatory"] and not self.quiz_data[qc]["is_passed"]:
                return False
        return True

    # Gets user document instance from me. Returns None if it does not exist.
    @staticmethod
    def get_user(email):
        return User.objects(email=email).first()

    # Creates user without saving it the database.
    @staticmethod
    def create_new_user(email,
                        first_name,
                        paternal_last_name,
                        maternal_last_name,
                        birth_date,
                        gender,
                        occupation,
                        password,
                        registered_on=datetime.now()):
        return User(email=email,
                    first_name=first_name,
                    paternal_last_name=paternal_last_name,
                    maternal_last_name=maternal_last_name,
                    birth_date=birth_date,
                    gender=gender,
                    occupation=occupation,
                    password_hash=generate_password_hash(password),
                    registered_on=registered_on,
                    quiz_data=USER_QUIZ_DATA)

    # Print function
    def __repr__(self):
        return "<User email:{}>".format(self.email)

    def generate_reset_token(self, expiration=3600):
        s = Serializer(current_app.config["SECRET_KEY"], expiration)
        return s.dumps({"reset": self.email}).decode("utf-8")

    @staticmethod
    def reset_password(token, new_password):
        s = Serializer(current_app.config["SECRET_KEY"])
        try:
            data = s.loads(token.encode("utf-8"))
        except:
            return False
        user = User.objects(email=data.get("reset")).first()
        if user is None:
            return False
        user.password_hash = generate_password_hash(new_password)
        user.save()
        return True
예제 #28
0
class PowResult(ModelMixin, mg.Document):
    meta = {"collection": "zil_pow_results"}

    header = mg.StringField(max_length=128, required=True)
    seed = mg.StringField(max_length=128, required=True)
    boundary = mg.StringField(max_length=128, required=True)
    pub_key = mg.StringField(max_length=128, required=True)

    mix_digest = mg.StringField(max_length=128, required=True)
    nonce = mg.StringField(max_length=128, required=True)
    hash_result = mg.StringField(max_length=128, required=True)

    block_num = mg.IntField(default=0)
    pow_fee = mg.FloatField(default=0.0)
    finished_date = mg.DateField()
    finished_time = mg.DateTimeField()
    verified_time = mg.DateTimeField()

    verified = mg.BooleanField(default=False)
    miner_wallet = mg.StringField(max_length=128)
    worker_name = mg.StringField(max_length=64, default="")

    def __str__(self):
        return f"[PowResult: {self.pub_key}, {self.header}]"

    @classmethod
    def get_pow_result(cls,
                       header,
                       boundary,
                       pub_key=None,
                       order="-finished_time"):
        query = Q(header=header) & Q(boundary=boundary)
        if pub_key is not None:
            query = query & Q(pub_key=pub_key)
        cursor = cls.objects(query).order_by(
            order)  # default to get latest one
        return cursor.first()

    @classmethod
    def epoch_rewards(cls,
                      block_num=None,
                      miner_wallet=None,
                      worker_name=None):
        match = {}
        if block_num is not None:
            if isinstance(block_num, int):
                match = {
                    "block_num": {
                        "$eq": block_num,
                    }
                }
            else:
                start, end = block_num
                match = {
                    "block_num": {
                        "$gte": start,
                        "$lte": end,
                    }
                }

        if miner_wallet is not None:
            match.update({"miner_wallet": {
                "$eq": miner_wallet,
            }})

        if worker_name is not None:
            match.update({"worker_name": {
                "$eq": worker_name,
            }})

        group = {
            "_id": None,
            "rewards": {
                "$sum": "$pow_fee"
            },
            "count": {
                "$sum": 1
            },
            "verified": {
                "$sum": {
                    "$cond": ["$verified", 1, 0]
                }
            },
            "first_work_at": {
                "$min": "$finished_time"
            },
            "last_work_at": {
                "$max": "$finished_time"
            }
        }

        pipeline = [
            {
                "$match": match
            },
            {
                "$group": group
            },
        ]

        res = list(cls.objects.aggregate(*pipeline))
        if res:
            rewards = res[0]
            rewards.pop("_id", None)
            return rewards

        return {
            "rewards": None,
            "count": 0,
            "verified": 0,
            "first_work_at": None,
            "last_work_at": None
        }

    @classmethod
    def rewards_by_miners(cls, block_num):
        if block_num is None:
            block_num = PowWork.get_latest_block_num()

        match = {
            "block_num": {
                "$eq": block_num,
            }
        }

        group = {
            "_id": "$miner_wallet",
            "block_num": {
                "$first": "$block_num"
            },
            "date": {
                "$first": "$finished_date"
            },
            "date_time": {
                "$first": "$finished_time"
            },
            "rewards": {
                "$sum": "$pow_fee"
            },
            "finished": {
                "$sum": 1
            },
            "verified": {
                "$sum": {
                    "$cond": ["$verified", 1, 0]
                }
            },
        }

        project = {
            "_id": 0,
            "miner_wallet": "$_id",
            "block_num": 1,
            "date": 1,
            "date_time": 1,
            "rewards": 1,
            "finished": 1,
            "verified": 1,
        }

        pipeline = [{
            "$match": match
        }, {
            "$group": group
        }, {
            "$project": project
        }]

        return list(cls.objects.aggregate(*pipeline))

    def get_worker(self):
        return miner.Worker.get_or_create(self.miner_wallet, self.worker_name)
예제 #29
0
class Treatment(mongoengine.EmbeddedDocument):
    treatment_date = mongoengine.DateField(required=True)
    category = mongoengine.StringField()
    medication = mongoengine.StringField()
    dosage = mongoengine.StringField()
예제 #30
0
class TrackStatus(me.EmbeddedDocument):
    kickoffDate = me.DateField()
    dueDate = me.DateField()