예제 #1
0
class User(UserMixin, db.Document):
    meta = {'collection': 'users'}
    username = db.StringField(max_length=20)
    email = db.StringField(max_length=30)
    password = db.StringField()
    image_file = db.StringField(default='default.jpg')
    bio = db.StringField(max_length=200, default='This is my bio...')
    entries = db.LazyReferenceField('Calculation')
    models = db.LazyReferenceField('UserModel')
    posts = db.LazyReferenceField('Post')

    def get_reset_token(self, expires_sec=1800):
        s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'user_id': self.id}).decode('utf-8')

    @staticmethod
    def verify_reset_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            user_id = s.loads(token)['user_id']
        except:
            return None
        return User.query.get(user_id)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"

    def get_entries(self):
        return Calculation.objects(owner=self.id)

    def get_models(self):
        return UserModel.objects(owner=self.id)
예제 #2
0
class Ticket(db.Document):
    title = db.StringField(min_length=5, max_length=50, required=True)
    price = db.FloatField(min_value=1, required=True)
    user_id = db.StringField(required=True)
    order_id = db.StringField(default=None)
    version = db.IntField(default=0)

    def response(self):
        return {
            "id": str(self.id),
            "title": self.title,
            "price": self.price,
            "user_id": self.user_id,
            "order_id": self.order_id,
            "version": self.version
        }

    def update_version_if_record_exists(self):
        if not self.id:
            return

        existing_record = Ticket.objects(id=self.id)
        if existing_record:
            self.version += 1

    def save(self, *args, **kwargs):
        self.update_version_if_record_exists()
        super().save(*args, **kwargs)
예제 #3
0
class Order(db.Document):
    user_id = db.StringField()
    status = db.StringField(choices=tuple(
        types.get_events(types.EventType.Order())),
                            default=types.EventType.Order.CREATED)
    expires_at = db.DateTimeField(
        default=datetime.datetime.now() +
        datetime.timedelta(minutes=Config.ORDER_EXPIRE_TIME_MIN))
    ticket = db.ReferenceField('Ticket')
    version = db.IntField(default=0)

    def response(self):
        return {
            "id": str(self.id),
            "user_id": self.user_id,
            "status": self.status,
            "expires_at": str(self.expires_at),
            "ticket": self.ticket.response(),
            "version": self.version
        }

    def update_version_if_record_exists(self):
        if not self.id:
            return

        existing_record = Order.objects(id=self.id)
        if existing_record:
            self.version += 1

    def save(self, *args, **kwargs):
        self.update_version_if_record_exists()
        super().save(*args, **kwargs)
예제 #4
0
class Post(UserMixin, db.Document):
    meta = {'collection': 'posts'}
    title = db.StringField(max_length=30)
    date = db.DateTimeField()
    content = db.StringField(max_length=1000)
    author = db.StringField(max_length=30)
    tags = db.ListField()
    owner = db.LazyReferenceField('User')
예제 #5
0
class User(UserMixin, db.Document):
    phonenumber = db.StringField(max_length=13, required=True, unique=True)
    email = db.EmailField(max_length=128)
    password = db.StringField(min_length=8, max_length=128, required=True)
    fname = db.StringField(max_length=128)
    lname = db.StringField(max_length=256)
    sex = db.StringField()
    age = db.StringField(min_length=1, max_length=2)
    address = db.StringField()
    melli_code = db.StringField(min_length=10, max_length=10)
    role = db.StringField(default=ROLES['USER'], choices=ROLES)
    datetime = db.DateTimeField()

    # phonenumber_status = db.StringField(default=USER_INFO_STATUS['PENDING'])
    # email_status = db.StringField(default=USER_INFO_STATUS['NOT_FILLED'])
    # melli_code_status = db.StringField(default=USER_INFO_STATUS['NOT_FILLED'])
    # status = db.StringField(default=USER_STATUS['ACTIVE'], choices=USER_STATUS)
    # authorization_errors = db.ListField(db.EmbeddedDocumentField(AuthorizationError))
    # email_notifications = db.ListField(db.StringField(choices=EMAIL_NOTIFICATION))
    # email_verification_code = db.StringField()

    meta = {'indexes': ['phonenumber']}

    def register(self):
        pass
예제 #6
0
class InvitationNotification(GenericNotification):
    params = {'inviter_id': 'inviter_name', 'task_id': 'task_name'}

    contents = {
        'en': '{inviter_name} invites you to join {task_name}.',
        'zh': '{inviter_name}邀请你加入{task_name}。'
    }
    _cls = 'InvitationNotification'

    inviter_id = db.StringField(max_length=40, required=True, null=False)
    task_id = db.StringField(max_length=40, required=True, null=False)
class ClubEvent(BaseDocument):
    name = db.StringField(required=True)
    image = db.ImageField(size=(500, 500), thumbnail_size=(20, 20))
    tags = db.ListField(db.StringField())
    presenter = db.EmbeddedDocumentField(Presenter)
    start = db.DateTimeField(requried=True)
    end = db.DateTimeField(requried=True)
    description = db.StringField()
    location = db.StringField()

    meta = {"ordering": ["start"]}
예제 #8
0
class Event(BaseDocument):
    name = db.StringField(unique=True, required=True)
    date_time = db.DateTimeField(required=True)
    description = db.StringField()
    image = db.URLField()
    link = db.URLField(required=True)
    end_date_time = db.DateTimeField(required=True)
    attendees_count = db.IntField()
    event_status = db.StringField()
    event_type = db.StringField()
    loc = db.StringField()
예제 #9
0
class Model(UserMixin, db.Document):
    meta = {'collection': 'models'}
    keep = db.BooleanField(default=True)
    mod_type = db.StringField(max_length=3, choices=TYPES)
    ticker = db.StringField(max_length=6)
    period = db.StringField(max_length=6)
    interval = db.StringField(max_length=6)
    money = db.FloatField()
    buy = db.FloatField()
    sell = db.FloatField()
    av_length = db.IntField()
    trade_cost = db.FloatField()
예제 #10
0
class UserModel(UserMixin, db.Document):
    meta = {'collection': 'user_models'}
    name = db.StringField(max_length=30)
    mod_type = db.StringField(max_length=3, choices=TYPES)
    period = db.StringField(max_length=6)
    interval = db.StringField(max_length=6)
    money = db.FloatField()
    buy = db.FloatField()
    sell = db.FloatField()
    av_length = db.IntField()
    trade_cost = db.FloatField()
    owner = db.LazyReferenceField('User')
예제 #11
0
class Feed(db.Document):
    title = db.StringField()
    url = db.StringField(required=True)

    articles = db.ListField(db.ReferenceField("Article"))

    users = db.ListField(db.ReferenceField("User"))

    def as_dict(self):
        return dict(title=self.title, url=self.url)

    def __repr__(self):
        return '<Feed %r (%s)>' % (self.title, self.url)
예제 #12
0
class Patient(db.Document):
    ssnid = db.StringField(max_length=9, unique=True)
    patientId = db.IntField()
    name = db.StringField(required=True)
    age = db.IntField(max_length=3)
    address = db.StringField()
    dateOfJoining = db.StringField()
    roomType = db.StringField()
    city = db.StringField()
    state = db.StringField()
    pharmacy = db.ListField(db.StringField())
    diagnostics = db.ListField(db.StringField())
    status = db.StringField(default="active")
예제 #13
0
class Vote(db.Document):
    CUSTOM_VOTE_ID = 6
    voteFields = {
        1: 'Easy to read',
        2: 'Easy to use',
        3: 'Internet of things opportunities',
        4: 'Asynchronous coding benefits',
        5: 'Multiparadigm approach bests Java'
    }

    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    ip = db.StringField(max_length=15, required=True)
    votes = db.DictField(required=True)

    def get_absolute_url(self):
        return url_for('post', kwargs={"slug": self.slug})

    def __unicode__(self):
        return self.title

    def get_vote_title(self, vote_id):
        """
        Get title by identifier
        :type vote_id: int
        """
        vote_id = int(vote_id)
        return self.voteFields[vote_id] if vote_id in self.voteFields.keys(
        ) else None

    meta = {
        'allow_inheritance': True,
        'indexes': ['-created_at', 'ip'],
        'ordering': ['-created_at']
    }
예제 #14
0
class Sponsor(BaseDocument):

    private_fields = [
        "id",
    ]

    sponsor_name = db.StringField(unique=True, required=True)
    description = db.StringField()
    logo = db.URLField()
    subscription_tier = db.StringField()
    socials = db.DictField()
    sponsor_website = db.URLField()

    def to_mongo(self, *args, **kwargs):
        data = super().to_mongo(*args, **kwargs)

        return data
예제 #15
0
class Check(UserMixin, db.Document):
    meta = {'collection': 'checks'}
    ticker = db.StringField()
    name = db.StringField()
    previous_close = db.FloatField()
    three_mo_avg_vol = db.FloatField()
    year_range = db.StringField()


    def get_info(self):
        stock = yf.Ticker(self.ticker)
        info = stock.info
        if info['quoteType'] == 'EQUITY':
            self.name = info['longName']
            self.previous_close = info['regularMarketPreviousClose']
            self.three_mo_avg_vol = info['averageDailyVolume3Month']
            self.year_range = info['fiftyTwoWeekRange']
        self.save()
        return self.id
class Subscriber(BaseDocument):
    cellphone = db.StringField()
    email = db.EmailField()
    vaccine_site = db.ListField(db.ReferenceField(Maps))

    def to_mongo(self, *args, **kwargs):
        data = super().to_mongo(*args, **kwargs)

        data["vaccine_site"] = [s.name for s in self.vaccine_site]

        return data
예제 #17
0
class Hacker(BaseDocument):  # Stored in the "user" collection

    meta = {"indexes": ["email"]}

    private_fields = ["id", "email_token_hash"]

    first_name = db.StringField()
    last_name = db.StringField()
    birthday = db.DateTimeField()
    country = db.StringField()
    phone_number = db.StringField()
    isaccepted = db.BooleanField(default=False)
    can_share_info = db.BooleanField(default=False)
    rsvp_status = db.BooleanField(default=False)
    beginner = db.BooleanField(default=False)
    ethnicity = db.StringField()
    pronouns = db.StringField()
    edu_info = db.EmbeddedDocumentField(Education_Info)
    resume = db.ReferenceField(Resume)
    socials = db.EmbeddedDocumentField(Socials)
    why_attend = db.StringField()
    what_learn = db.ListField()
    in_person = db.BooleanField(default=False)
    dietary_restrictions = db.StringField()

    email = db.EmailField(unique=True, required=True)
    date = db.DateTimeField(default=datetime.utcnow)

    mlh = db.EmbeddedDocumentField(MLH_Authorizations)

    def encode_email_token(self) -> str:
        """Encode the email token"""
        email_token = encode_jwt(sub=self.email)

        conf = app.config["BCRYPT_LOG_ROUNDS"]
        email_token_hash = bcrypt.generate_password_hash(email_token, conf)

        self.modify(set__email_token_hash=email_token_hash)
        self.save()

        return email_token

    @staticmethod
    def decode_email_token(email_token: str) -> str:
        """Decodes the email token"""
        return decode_jwt(email_token)["sub"]

    @classmethod
    def pre_delete(cls, sender, document, **kwargs):
        if document.resume:
            document.resume.delete()
예제 #18
0
class User(db.Document):
    email = db.EmailField()
    password = db.StringField()

    def response(self):
        return {"id": str(self.id), "email": self.email}

    def hash_password(self):
        self.password = hash_password(self.password)
        return self

    def check_password(self, password):
        return check_password(self.password, password)
class Presenter(db.EmbeddedDocument):
    name = db.StringField()
    image = db.ImageField(size=(500, 500), thumbnail_size=(20, 20))
예제 #20
0
class Education_Info(db.EmbeddedDocument):
    college = db.StringField()
    major = db.StringField()
    graduation_date = db.StringField()
    level_of_study = db.StringField()
class Calculation(UserMixin, db.Document):
    meta = {'collection': 'entries'}
    keep = db.BooleanField(default=True)
    date_stamp = db.StringField(max_length=40)
    type_info = db.StringField()
    buy = db.FloatField()
    sell = db.FloatField()
    av_length = db.IntField()
    ticker = db.StringField()
    period = db.StringField()
    interval = db.StringField()
    money = db.FloatField()
    trade_cost = db.FloatField()
    owner = db.LazyReferenceField('User')
    final_money = db.FloatField()
    final_owned = db.FloatField()
    final_liquid = db.FloatField()
    td = db.ListField()
    tt = db.ListField()
    ty = db.ListField()
    tp = db.ListField()
    tv = db.ListField()
    graph_x = db.ListField()
    graph_y = db.ListField()
    chart_x = db.ListField()
    chart_y = db.ListField()
    model = db.LazyReferenceField('Model')
    user_model = db.LazyReferenceField('UserModel')


    def static_range(self):
        stock = yf.Ticker(self.ticker)
        df = stock.history(period=self.period, interval=self.interval)
        owned = 0
        count = 0
        trade_money = self.money
        trade_cost = self.trade_cost
        buy = self.buy
        sell = self.sell
        td = []     #trade date
        tt = []     #trade time
        ty = []     #trade type
        tp = []     #trade price
        tv = []     #trade volume
        store_chart_x = []
        store_chart_y = []
        for index, row in df.iterrows():
            count += 1
            available_money = trade_money - trade_cost
            available_volume = row['Volume']/40
            low = round(row['Low'], 4)
            high = round(row['High'], 4)
            date = index.to_pydatetime().strftime("%d-%m-%Y")
            time = index.to_pydatetime().strftime("%H:%M")
            etime = index.to_pydatetime() + timedelta(minutes=2)
            endtime = etime.strftime("%H:%M")
            if low != high:
                if float(row['Open']) > float(row['Close']):
                    store_chart_y.append(float(high))
                    store_chart_x.append(date[6:10]+'-'+date[3:5]+'-'+date[0:2] + 'T' + time + ':00')
                    store_chart_y.append(float(low))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T' + endtime + ':00')
                elif float(row['Close']) > float(row['Open']):
                    store_chart_y.append(float(low))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T' + time + ':00')
                    store_chart_y.append(float(high))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T' + endtime + ':00')
            elif low == high:
                store_chart_y.append(low)
                store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T' + time + ':00')
            lvalue = (low * available_volume)
            hvalue = (high * available_volume)
            if available_money > 0 and low <= buy and lvalue > trade_cost:
                if lvalue>available_money>0:
                    owned += (available_money/low)
                    trade_money = 0
                    td.append(date)
                    tt.append(time)
                    ty.append('b')
                    tp.append(low)
                    tv.append(available_volume)
                elif available_money>lvalue>0:
                    owned += (lvalue/low)
                    trade_money -= trade_cost
                    trade_money -= lvalue
                    td.append(date)
                    tt.append(time)
                    ty.append('b')
                    tp.append(low)
                    tv.append(available_volume)
            if owned > 0 and high >= sell and hvalue > trade_cost:
                if available_volume > owned:
                    trade_money += (owned*high)
                    trade_money -= trade_cost
                    owned = 0
                    td.append(date)
                    tt.append(time)
                    ty.append('s')
                    tp.append(high)
                    tv.append(available_volume)
                elif owned > available_volume:
                    trade_money += (available_volume*high)
                    trade_money -= trade_cost
                    owned -= available_volume
                    td.append(date)
                    tt.append(time)
                    ty.append('s')
                    tp.append(high)
                    tv.append(available_volume)
        if owned > 0:
            liquid_money = (trade_money - trade_cost) + df.Low.ix[count-1]*owned
        else:
            liquid_money = trade_money
        self.chart_x = store_chart_x
        self.chart_y = store_chart_y
        self.final_money = round(trade_money, 2)
        self.final_owned = round(owned)
        self.final_liquid = round(liquid_money, 2)
        self.td = td
        self.tt = tt
        self.ty = ty
        self.tp = tp
        self.tv = tv
        self.save()
        return self.id

    def moving_average(self):
        stock = yf.Ticker(self.ticker)
        df = stock.history(period=self.period, interval='1d')
        owned = 0
        count = 0
        trade_money = self.money
        trade_cost = self.trade_cost
        bd = self.buy
        sd = self.sell
        ma_length = self.av_length
        ma_conv = ma_length - 1
        ma_sum = 0
        td = []  # trade date
        tt = []  # trade time
        ty = []  # trade type
        tp = []  # trade price
        tv = []  # trade volume
        store_ma = []
        store_ma_x = []
        store_chart_x = []
        store_chart_y = []
        for i in range(0, df.shape[0] - ma_conv):
            for j in range(0, ma_length):
                ma_sum += df.iloc[i + j, 3]
            df.loc[df.index[i + ma_conv], 'SMA_' + str(ma_length)] = np.round((ma_sum / ma_length), 4)
            ma_sum = 0
        for index, row in df.iloc[ma_length:].iterrows():
            count += 1
            available_money = trade_money - trade_cost
            available_volume = row['Volume'] / 40
            low = round(row['Low'], 4)
            high = round(row['High'], 4)
            date = index.to_pydatetime().strftime("%d-%m-%Y")
            time = index.to_pydatetime().strftime("%H:%M")
            if low != high:
                if float(row['Open']) > float(row['Close']):
                    store_chart_y.append(float(high))
                    store_chart_x.append(date[6:10]+'-'+date[3:5]+'-'+date[0:2]+'T09:30:00')
                    store_chart_y.append(float(low))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T16:00:00')
                elif float(row['Close']) > float(row['Open']):
                    store_chart_y.append(float(low))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T09:30:00')
                    store_chart_y.append(float(high))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T16:00:00')
            elif low == high:
                store_chart_y.append(low)
                store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T12:45:00')
            lvalue = (low * available_volume)
            hvalue = (high * available_volume)
            buy = row['SMA_' + str(ma_length)] - bd
            sell = row['SMA_' + str(ma_length)] + sd
            store_ma.append(float(row['SMA_' + str(ma_length)]))
            store_ma_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T' + time + ':00')
            if available_money > 0 and low <= buy and lvalue > trade_cost:
                if lvalue > available_money > 0:
                    owned += (available_money / low)
                    trade_money = 0
                    td.append(date)
                    tt.append(time)
                    ty.append('b')
                    tp.append(low)
                    tv.append(available_volume)
                elif available_money > lvalue > 0:
                    owned += (lvalue / low)
                    trade_money -= trade_cost
                    trade_money -= lvalue
                    td.append(date)
                    tt.append(time)
                    ty.append('b')
                    tp.append(low)
                    tv.append(available_volume)
            if owned > 0 and high >= sell and hvalue > trade_cost:
                if available_volume > owned:
                    trade_money += (owned * high)
                    trade_money -= trade_cost
                    owned = 0
                    td.append(date)
                    tt.append(time)
                    ty.append('s')
                    tp.append(high)
                    tv.append(available_volume)
                elif owned > available_volume:
                    trade_money += (available_volume * high)
                    trade_money -= trade_cost
                    owned -= available_volume
                    td.append(date)
                    tt.append(time)
                    ty.append('s')
                    tp.append(high)
                    tv.append(available_volume)
        if owned > 0:
            liquid_money = (trade_money - trade_cost) + df.Low.ix[count - 1] * owned
        else:
            liquid_money = trade_money
        self.chart_x = store_chart_x
        self.chart_y = store_chart_y
        self.graph_y = store_ma
        self.graph_x = store_ma_x
        self.final_money = round(trade_money, 2)
        self.final_owned = round(owned)
        self.final_liquid = round(liquid_money, 2)
        self.td = td
        self.tt = tt
        self.ty = ty
        self.tp = tp
        self.tv = tv
        self.save()
        return self.id

    def weighted_moving_average(self):
        stock = yf.Ticker(self.ticker)
        df = stock.history(period=self.period, interval='1d')
        owned = 0
        count = 0
        trade_money = self.money
        trade_cost = self.trade_cost
        bd = self.buy
        sd = self.sell
        wma_length = self.av_length
        wma_conv = wma_length - 1
        wma_sum = 0
        weight = 0
        weight_sum = 0
        for k in range(1, wma_length + 1):
            weight_sum += k
        td = []  # trade date
        tt = []  # trade time
        ty = []  # trade type
        tp = []  # trade price
        tv = []  # trade volume
        store_wma = []
        store_wma_x = []
        store_chart_y = []
        store_chart_x = []
        for i in range(0, df.shape[0] - wma_conv):
            for j in range(0, wma_length):
                weight += 1
                wma_sum += (df.iloc[i + j, 3]*weight)
            weight = 0
            df.loc[df.index[i + wma_conv], 'WMA_' + str(wma_length)] = np.round((wma_sum / weight_sum), 4)
            wma_sum = 0
        for index, row in df.iloc[wma_length:].iterrows():
            count += 1
            available_money = trade_money - trade_cost
            available_volume = row['Volume'] / 40
            low = round(row['Low'], 4)
            high = round(row['High'], 4)
            date = index.to_pydatetime().strftime("%d-%m-%Y")
            time = index.to_pydatetime().strftime("%H:%M")
            if low != high:
                if float(row['Open']) > float(row['Close']):
                    store_chart_y.append(float(high))
                    store_chart_x.append(date[6:10]+'-'+date[3:5]+'-'+date[0:2]+'T09:30:00')
                    store_chart_y.append(float(low))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T16:00:00')
                elif float(row['Close']) > float(row['Open']):
                    store_chart_y.append(float(low))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T09:30:00')
                    store_chart_y.append(float(high))
                    store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T16:00:00')
            elif low == high:
                store_chart_y.append(low)
                store_chart_x.append(date[6:10] + '-' + date[3:5] + '-' + date[0:2] + 'T12:45:00')
            lvalue = (low * available_volume)
            hvalue = (high * available_volume)
            buy = row['WMA_' + str(wma_length)] - bd
            sell = row['WMA_' + str(wma_length)] + sd
            store_wma.append(float(row['WMA_' + str(wma_length)]))
            store_wma_x.append(date[6:10]+'-'+date[3:5]+'-'+date[0:2]+'T'+time+':00')
            if available_money > 0 and low <= buy and lvalue > trade_cost:
                if lvalue > available_money > 0:
                    owned += (available_money / low)
                    trade_money = 0
                    td.append(date)
                    tt.append(time)
                    ty.append('b')
                    tp.append(low)
                    tv.append(available_volume)
                elif available_money > lvalue > 0:
                    owned += (lvalue / low)
                    trade_money -= trade_cost
                    trade_money -= lvalue
                    td.append(date)
                    tt.append(time)
                    ty.append('b')
                    tp.append(low)
                    tv.append(available_volume)
            if owned > 0 and high >= sell and hvalue > trade_cost:
                if available_volume > owned:
                    trade_money += (owned * high)
                    trade_money -= trade_cost
                    owned = 0
                    td.append(date)
                    tt.append(time)
                    ty.append('s')
                    tp.append(high)
                    tv.append(available_volume)
                elif owned > available_volume:
                    trade_money += (available_volume * high)
                    trade_money -= trade_cost
                    owned -= available_volume
                    td.append(date)
                    tt.append(time)
                    ty.append('s')
                    tp.append(high)
                    tv.append(available_volume)
        if owned > 0:
            liquid_money = (trade_money - trade_cost) + df.Low.ix[count - 1] * owned
        else:
            liquid_money = trade_money
        self.chart_x = store_chart_x
        self.chart_y = store_chart_y
        self.graph_x = store_wma_x
        self.graph_y = store_wma
        self.final_money = round(trade_money, 2)
        self.final_owned = round(owned)
        self.final_liquid = round(liquid_money, 2)
        self.td = td
        self.tt = tt
        self.ty = ty
        self.tp = tp
        self.tv = tv
        self.save()
        return self.id
예제 #22
0
class PahrmacyInventory(db.Document):
    name = db.StringField()
    quantity = db.IntField()
    price = db.FloatField()
예제 #23
0
파일: article.py 프로젝트: fltrbbl/fltrbbl
class Article(db.Document):
    feed = db.ReferenceField(Feed, required=True)
    source_id = db.StringField(required=True)
    url = db.StringField()

    title = db.StringField()
    top_image = db.StringField()
    movies = db.ListField()
    keywords = db.ListField()
    tags = db.ListField()
    authors = db.ListField()
    publish_date = db.DateTimeField()
    summary = db.StringField()
    html = db.StringField()
    meta_data = db.DictField()

    language = db.StringField()

    text = db.StringField()
    active = db.BooleanField(default=True)

    vector = db.ListField(db.FloatField())
    vector_2d = db.ListField(db.FloatField())

    def as_dict(self):
        return dict(feed=self.feed.url,
                    source_id=self.source_id,
                    url=self.url,
                    title=self.title,
                    top_image=self.top_image,
                    movies=self.movies,
                    keywords=self.keywords,
                    tags=self.tags,
                    authors=self.authors,
                    publish_date='%s' % self.publish_date,
                    summary=self.summary,
                    html=self.html,
                    meta_data=self.meta_data,
                    language=self.language,
                    text=self.text,
                    vector=self.vector,
                    vector_2d=self.vector_2d)

    @staticmethod
    def update_vectors(model, vectors_2d=[]):
        # https://stackoverflow.com/questions/30943076/mongoengine-bulk-update-without-objects-update
        bulk_operations = []

        keys = model.docvecs.doctags.keys()
        vectors = model.docvecs.vectors_docs

        for key, vector, vector_2d in zip(keys, vectors, vectors_2d):
            bulk_operations.append(
                UpdateOne({'_id': key}, {
                    '$set':
                    dict(vector=vector.tolist(), vector_2d=vector_2d)
                }))

        if bulk_operations:
            collection = Article._get_collection() \
                .bulk_write(bulk_operations, ordered=False)
class User(db.Document):
    name = db.StringField(max_length=50)
    email = db.StringField(max_length=50, unique=True)
    password = db.StringField(max_length=500)
    dept = db.StringField()
예제 #25
0
class Socials(db.EmbeddedDocument):
    github = db.StringField()
    linkedin = db.StringField()
예제 #26
0
class LabInventory(db.Document):
    name = db.StringField()
    price = db.FloatField()
예제 #27
0
class Exam(db.Document):
    user = db.ReferenceField('User')
    type = db.StringField(choices=EXAM_TYPE)
    pure_tone = db.EmbeddedDocumentField('PureTone')
    speech_noise = db.EmbeddedDocumentField('SpeechNoise')
    dichotic = db.EmbeddedDocumentField('Dichotic')

    def __repr__(self):
        return '[Exam] user :{} type:{} pure_tone:{}'.format(
            self.user, self.type, self.pure_tone)

    @classmethod
    def passed_exam_before(cls, userid):
        return cls.objects.get(user=userid) if cls.objects(
            user=userid) else False

    @classmethod
    def passed_pure_before(cls, userid):
        return cls.objects.get(
            user=userid, type=EXAM_TYPE['PURE_TONE']) if cls.objects(
                user=userid, pure_tone__exists=True) else False

    @classmethod
    def passed_dichotic_before(cls, userid):
        return cls.objects.get(
            user=userid, type=EXAM_TYPE['DICHOTIC']) if cls.objects(
                user=userid, dichotic__exists=True) else False

    @classmethod
    def passed_dicho_type_before(cls, userid, dicho_type):
        dicho_type_phrase = 'dichotic__' + dicho_type + '__exists'
        args = {'user': userid, dicho_type_phrase: True}
        return cls.objects.get(user=userid) if cls.objects(**args) else False

    @classmethod
    def passed_speech_noise_before(cls, userid):
        return cls.objects.get(
            user=userid, speech_noise__exists=True) if cls.objects.get(
                user=userid, speech_noise__exists=True) else False

    @classmethod
    def get_puretone_by_user_id(cls, userid):
        return cls.objects.get(user=userid, type=EXAM_TYPE['PURE_TONE'])

    def pure_tone_report(self):
        result = {}
        result['Right_250'] = self.pure_tone.Right_250
        result['Right_500'] = self.pure_tone.Right_500
        result['Right_1000'] = self.pure_tone.Right_1000
        result['Right_2000'] = self.pure_tone.Right_2000
        result['Right_4000'] = self.pure_tone.Right_4000
        result['Right_8000'] = self.pure_tone.Right_8000
        result['Left_250'] = self.pure_tone.Left_250
        result['Left_500'] = self.pure_tone.Left_500
        result['Left_1000'] = self.pure_tone.Left_1000
        result['Left_2000'] = self.pure_tone.Left_2000
        result['Left_4000'] = self.pure_tone.Left_4000
        result['Left_8000'] = self.pure_tone.Left_8000

        lentgh = 0
        for i in result:
            if result[i] != None:
                lentgh = lentgh + 1

        count = 0
        for i in result:
            if result[i] == False:
                count += 1
        if count >= 1:
            need_to_clinic = True
        elif lentgh != 12:
            need_to_clinic = True
        else:
            need_to_clinic = False
        return {'result': result, 'need': need_to_clinic}

    @classmethod
    def get_dichotic_by_user_id(cls, userid):
        return cls.objects.get(user=userid, dichotic__exists=True)

    def dichotic_report(self):
        self.result = {}
        self.result['Single'] = {}
        self.result['Binary'] = {}
        self.result['Ternary'] = {}

        # print(self.dichotic.Ternary)
        if self.dichotic.Single != None:
            for i in self.dichotic.Single:
                self.result['Single'][i] = self.dichotic.Single[i]

        if self.dichotic.Binary != None:
            for i in self.dichotic.Binary:
                self.result['Binary'][i] = self.dichotic.Binary[i]

        if self.dichotic.Ternary != None:
            for i in self.dichotic.Ternary:
                self.result['Ternary'][i] = self.dichotic.Ternary[i]

        return {'result': self.result}

    def count_dichotic_score(self):
        self.dichotic_report()
        if self.result['Single'] != {}:
            pass
        elif self.result['Binary'] != {}:
            score_left = 0
            score_right = 0
            right_answer = 0
            left_answer = 0

            count = 0
            for i, j in self.result['Binary'].items():
                if i == 'start_time':
                    continue
                right_flag = 0
                left_flag = 0
                for key, value in enumerate(j):
                    if value in right_dichotic_binary[count]:
                        if right_flag >= 2:
                            continue
                        right_flag += 1
                        right_answer += 1
                        if right_flag == 2:
                            score_right = score_right + 4
                    elif value in left_dichotic_binary[count]:
                        if left_flag >= 2:
                            continue
                        left_flag += 1
                        left_answer += 1
                        if left_flag == 2:
                            score_left = score_left + 4
                count += 1
            return (score_right, score_left, right_answer, left_answer)
        elif self.result['Ternary'] != {}:
            score_left = 0
            score_right = 0
            right_answer = 0
            left_answer = 0

            count = 0
            for i, j in self.result['Ternary'].items():
                if i == 'start_time':
                    continue
                right_flag = 0
                left_flag = 0
                for key, value in enumerate(j):
                    if value in right_dichotic_ternary[count]:
                        if right_flag >= 3:
                            continue
                        right_flag += 1
                        right_answer += 1
                        if right_flag == 3:
                            score_right = score_right + 4
                    elif value in left_dichotic_ternary[count]:
                        if left_flag >= 3:
                            continue
                        left_flag += 1
                        left_answer += 1
                        if left_flag == 3:
                            score_left = score_left + 4
                count += 1
            return (score_right, score_left, right_answer, left_answer)

    def speech_noise_report(self):
        right_silence_score = 0
        left_silence_score = 0
        right_noise_score = 0
        left_noise_score = 0

        for i in self.speech_noise:
            if i == 'start_time':
                continue
            elif i == 'right_silence':
                for k, v in enumerate(self.speech_noise[i]):
                    if v in right_silence:
                        right_silence_score += 1
            elif i == 'left_silence':
                for k, v in enumerate(self.speech_noise[i]):
                    if v in left_silence:
                        left_silence_score += 1
            elif i == 'right_noise':
                for k, v in enumerate(self.speech_noise[i]):
                    if v in right_noise:
                        right_noise_score += 1
            elif i == 'left_noise':
                for k, v in enumerate(self.speech_noise[i]):
                    if v in left_noise:
                        left_noise_score += 1

        return (right_silence_score, left_silence_score, right_noise_score,
                left_noise_score)