class StopLoss(DynamicEmbeddedDocument): transaction_id = StringField() amount_invested = DecimalField(precision=6) price = DecimalField(precision=6) result = DecimalField(precision=6) ratio = FloatField() is_closed = BooleanField(default=False) # is closed naturally has_reached_level_before_days_limit = BooleanField() closed_date = DateTimeField(default=None) duration = FloatField(default=None) retries_founding_price_when_days_exceed = IntField() is_transaction_already_closed = BooleanField(default=None) ratio_default = FloatField(default=None) def generate_stop_loss_id(self): return f"{self.transaction_id}_sl" def on_reach(self, closed_date=None): pass def cancel(self): self.is_closed = True def save(self, *args, **kwargs): return super(StopLoss, self).save(*args, **kwargs) def __str__(self): return f"SL: {self.price}"
class TakeProfit(DynamicEmbeddedDocument): order_number = IntField(min_value=1) transaction_id = StringField() amount_invested = DecimalField(precision=6) price = DecimalField(precision=6) result = DecimalField(precision=6) ratio = FloatField() ratio_default = FloatField(default=None) is_closed = BooleanField(default=False) is_last = BooleanField(default=False) has_reached_level_before_days_limit = BooleanField() closed_date = DateTimeField(default=None) duration = FloatField(default=None) retries_founding_price_when_days_exceed = IntField() is_transaction_already_closed = BooleanField(default=None) def generate_take_profit_id(self): return f"{self.transaction_id}_tp#{self.order_number}" def on_reach(self, closed_date=None): pass def cancel(self): self.is_closed = True def on_last_finish(self): pass def __str__(self): return f"TP#{self.order_number}: {self.price}"
class NotificationModel(Document): objects = QuerySetManager() meta = {'collection': 'notification'} timestamp = DateTimeField(default=datetime.utcnow()) notification_type = StringField(required=True) description = StringField() probability = DecimalField() confidence = DecimalField() impact_expect = DecimalField() external_url = StringField() notification_list = StringField(required=True) @classmethod def find_all(cls): return cls.objects() @classmethod def find_by_time(cls, limit): try: notification = cls.objects(timestamp__lte=limit) except Exception: return None return notification @classmethod def find_by_notification_list(cls, list): notifications = cls.objects(notification_list=list) if not notifications: return None return notifications
class Transaction(DocumentValidation): coin_token = StringField(required=True, choices=get_coin_tokens(s.SYMBOLS_PER_EXCHANGE)) units = DecimalField(required=True, min_value=0, precision=s.SYMBOL_FLOAT_PRECISION) amount = DecimalField(required=True, min_value=0, precision=s.SYMBOL_FLOAT_PRECISION) unit_price = DecimalField(required=True, min_value=0, precision=s.SYMBOL_FLOAT_PRECISION) user = ReferenceField(User, required=True) added_on = DateField(required=True) in_or_out = StringField(required=True, choices=( "in", "out", )) meta = { "collection": "transaction", "ordering": ["-added_on"], } _pre_save_hooks = (_calculate_unit_price, )
class Hotel(Document): id = IntField() name = StringField(max_length=200) test = BooleanField(default=True) target_area = StringField(required=False, max_length=1, choices=AREAS) selection = StringField(required=False, choices=OPTIONS) district = StringField(required=False) postal_code = StringField(required=False) address = MultiLineStringField(required=False) web = URLField(required=False) stars = StringField(choices=STARS) management = StringField(choices=MANAGEMENT, default=N_I) brand_name = StringField(default=N_I) typology = StringField(choices=TYPOLOGY, default=N_I) segment_style = StringField(choices=SEGMENT, default=N_I) m2_built = IntField(required=False) m2_built_per_hab = DecimalField(required=False) pax_beds = IntField(required=False) rooms = IntField(required=False) std = IntField(required=False) dis = IntField(required=False) sin = IntField(required=False) exe = IntField(required=False) js = IntField(required=False) sui = IntField(required=False) psui = IntField(required=False) ap = IntField(required=False) num_salas = IntField(required=False) m2_salas = IntField(required=False) salas_pax = IntField(required=False) business_center = StringField(required=False, choices=OPTIONS) restaurante = IntField(required=False) bar = IntField(required=False) fitness = StringField(required=False, choices=OPTIONS) belleza = StringField(required=False, choices=OPTIONS) sauna_turco = StringField(required=False, choices=OPTIONS) pool_interior = StringField(required=False, choices=OPTIONS) pool_exterior = StringField(required=False, choices=OPTIONS) terraza_azotea = StringField(required=False, choices=OPTIONS) parking = StringField(required=False, choices=OPTIONS) sellos_calidad_sostenibilidad = StringField(required=False) additional_services = StringField(required=False) points_bk = DecimalField(required=False) ta_rank = IntField(required=False) total_rank = IntField(required=False) points_ta = DecimalField(required=False) q_reviews = IntField(required=False) price_booking = IntField(required=False) price_min_ta = IntField(required=False) price_max_ta = IntField(required=False) price_bar_per_2 = IntField(required=False) price_band = IntField(required=False) notas = MultiLineStringField(required=False) created_at = models.DateTimeField(auto_now_add=True) modified_at = models.DateTimeField(auto_now=True) description = models.TextField(default="") def __unicode__(self): # 0 param method return self.name
class SessionPulseStudent(Document): session = LazyReferenceField(Session) attentiveness = DecimalField() engagement = DecimalField() student = LazyReferenceField(Student) datetime_modified = DateTimeField(default=datetime.now()) datetime_sequence = DateTimeField(default=datetime.now()) version = StringField()
class Tick(Document): vtSymbol = StringField() lastPrice = DecimalField() bidPrice1 = DecimalField() askPrice1 = DecimalField() openInterest = DecimalField() volume = FloatField() bidVolume1 = FloatField() askVolume1 = FloatField()
class RatioAttr(Attr): top = DecimalField() bottom = DecimalField() def __unicode__(self): return self.attrname + ": " + unicode(self.top) + ":" + unicode( self.bottom) def getKeywords(self): return [unicode(self.top) + ":" + unicode(self.bottom)]
class RatioAttr(Attr): top = DecimalField() bottom = DecimalField() def __unicode__(self): return (super(RatioAttr, self).__unicode__() + unicode(self.top) + ":" + unicode(self.bottom)) def getKeywords(self): return [unicode(self.top) + ":" + unicode(self.bottom)]
class Price(EmbeddedDocument): ''' Holds the data related to a specific price of an item at a specific store. ''' user = StringField(min_length=1, max_length=64, required=True) upvotes = ListField(StringField(min_length=1, max_length=64)) downvotes = ListField(StringField(min_length=1, max_length=64)) price = DecimalField(min_value=0, precision=2, required=True) date = DecimalField(min_value=0, precision=6, required=True)
class Product(Document): price = DecimalField(required=True, min_value=0.01, precision=2) image = StringField(required=True, min_length=1, max_length=400) brand = StringField(required=True, min_length=1, max_length=400) title = StringField(required=True, min_length=1, max_length=400) reviewScore = DecimalField(min_value=0.01, max_value=5, precision=2) def clean(self): self.brand = self.brand.upper() self.title = self.title.upper()
class Candle(Document): time = IntField(required=True) low = DecimalField(required=True) high = DecimalField(required=True) open = DecimalField(required=True) close = DecimalField(required=True) volume = DecimalField(required=True) interval = IntField(required=True) product_id = StringField(required=True) meta = {'collection': 'candles'}
class SessionIntervention(Document): session = LazyReferenceField(Session) datetime_created = DateTimeField(default=datetime.now()) datetime_sequence = DateTimeField(default=datetime.now()) version = StringField() intervention_reason = StringField() # engagement, attention etc. intervention_period_start = DateTimeField() intervention_period_end = DateTimeField() intervention_reason_value = DecimalField() intervention_reason_threshold = DecimalField() meta = {'allow_inheritance': True}
class DualRatioAttr(RatioAttr): top2 = DecimalField() bottom2 = DecimalField() def __unicode__(self): return (super(DualRatioAttr, self).__unicode__() + " and " + unicode(self.top2) + ":" + unicode(self.bottom2)) def getKeywords(self): return [unicode(self.top) + ":" + unicode(self.bottom), unicode(self.top2) + ":" + unicode(self.bottom2)]
class Anomaly(Base): """ 电流异常数据表 """ device_id = StringField() # 设备Id normal = DecimalField() # 阈值 anomaly = DecimalField() # 异常值 diff = StringField() # 差值,可以是一个百分比 meta = { 'collection': 'anomaly', 'strict': True }
class Category(Base): uid = StringField(index=True) orderId = StringField() title = StringField() slug = StringField() auth = StringField() visible = BooleanField() status = StringField() uploadedFile = StringField() parent = ReferenceField('Category', deref_document=False) description = StringField(fulltext=True) externalUrl = StringField() email = StringField() phone = StringField() address = StringField() postcode = StringField() locality = StringField() country = StringField() lat = DecimalField(precision=6) lon = DecimalField(precision=6) licenceName = StringField() licenceUrl = StringField() licenceAuthorName = StringField() licenceAuthorUrl = StringField() def get_dict_with_children(self, recursive=False, level=1): result = self.to_dict() if not recursive and level > 1: return result result['children'] = [] for category in Category.objects( parent=self.id).order_by('+title').all(): result['children'].append( category.get_dict_with_children(recursive, level + 1)) return result def get_children_list(self): result = [] for category in Category.objects( parent=self.id).order_by('+title').all(): result.append(category) result += category.get_children_list() return result def __repr__(self): return '<Category %r>' % self.title @property def subsite(self): return Subsite.objects(categories__contains=self).first()
class OrderModel(db.Document): ''' Order ''' meta = {'collection': 'order', 'strict': False} order_code = StringField() order_status = StringField() created = DateTimeField(default=datetime.now) order_values = DecimalField(default=0) cashback = DecimalField(default=0) cashback_values = DecimalField(default=0) cpf_dealer = StringField(required=True, unique=False)
class Employee(BaseRecord): userName = StringField(max_length=50, required=True, unique=True) name = EmbeddedDocumentField(Name, required=True) birthDate = DateField(required=True) address = EmbeddedDocumentField(Address, required=True) email = EmailField(required=True, unique=True) phone = StringField(max_length=20, required=True) pin = StringField(regex=re.compile('^\d{4}'), max_length=4, required=True) rateOfPay = DecimalField() active = BooleanField(default=False) durationMultiplier = DecimalField(min_value=0) type = StringField(max_length=10, required=True) meta = {'collection': 'Employee'} def __str__(self): return f'{self.userName} - {self.name}'
class ControlPanel(Document): _created_date = DateTimeField(default=datetime.datetime.utcnow) _key_created_user = ObjectIdField() _last_modified_date = DateTimeField(default=datetime.datetime.utcnow) _key_last_modified_user = ObjectIdField() _key_owner_user = ObjectIdField() _key_brand = ReferenceField(Brand, required=True, reverse_delete_rule=3) _key_room_type = ReferenceField(EngineRoomType, required=True, reverse_delete_rule=3) _key_cp_size = ReferenceField(ControlPanelSize, required=True, reverse_delete_rule=3) _key_cp_button_type = ReferenceField(ControlPanelButtonType, required=True, reverse_delete_rule=3) _key_extra_type = ReferenceField(ControlPanelExtra, required=True, reverse_delete_rule=3) _key_organization = ReferenceField(Organization, required=True, reverse_delete_rule=2) _key_discount = ReferenceField(Discount, required=True, reverse_delete_rule=3) analysis_date = DateTimeField(default=datetime.datetime.utcnow) ready_installation = StringField(required=True) rfid_card = StringField(required=True) price = DecimalField(required=True)
class Medicine(Document): medicineID = StringField(required=True, primary_key=True) name = StringField(required=True) amount = DecimalField(required=True, default=0, MinValue=0, rounding='ROUND_HALF_UP') lot_num = StringField(required=True) MFG = StringField(required=True) EXP = StringField(required=True, NotNull=True) price = DecimalField(required=True, default=0, MinValue=0, rounding='ROUND_HALF_UP') create_at = DateTimeField(required=False, default=datetime.utcnow()) update_at = DateTimeField(required=False, default=datetime.utcnow())
class Transfer(Document): SenderAccount = IntField(required=True) ReceiverAccount = IntField(required=True) Amount = DecimalField(required=True, min_value=0) SenderIP = StringField(max_length=15, min_length=8) Date = DateTimeField(required=True, default=datetime.datetime.now()) def save(self, *args, **kwargs): if self.SenderAccount == self.ReceiverAccount: raise Exception("InvalidTransaction") if (len(str(self.SenderAccount)) != 10) or (len( str(self.ReceiverAccount)) != 10): raise Exception("InvalidAccountNumber") if User.objects.get( accountNo=self.SenderAccount).balance <= self.Amount: raise Exception("InsufficientBalance") else: self.transferMoney() super().save(self, *args, **kwargs) def transferMoney(self): senderAcc = User.objects.get(accountNo=self.SenderAccount) senderAcc.update(set__balance=senderAcc.balance - self.Amount) recieverAcc = User.objects.get(accountNo=self.ReceiverAccount) recieverAcc.update(set__balance=recieverAcc.balance + self.Amount)
class Rail(Document): _created_date = DateTimeField(default=datetime.datetime.now) _key_created_user = ObjectIdField() _last_modified_date = DateTimeField(default=datetime.datetime.now) _key_last_modified_user = ObjectIdField() _key_owner_user = ObjectIdField() analysis_date = DateTimeField(default=datetime.datetime.now) _key_organization = ReferenceField(Organization, required=True, reverse_delete_rule=2) _key_brand = ReferenceField(Brand, required=True, reverse_delete_rule=3) _key_kur_cinsi = ReferenceField(Currency, required=True, reverse_delete_rule=3) _key_iskonto = ReferenceField(Discount, required=True, reverse_delete_rule=3) _key_rail_size_1 = ReferenceField(RailSize, required=True, reverse_delete_rule=3) _key_rail_size_2 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_size_3 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_size_4 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_size_5 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_size_6 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_size_7 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_size_8 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_flans_size_1 = ReferenceField(RailSize, required=True, reverse_delete_rule=3) _key_rail_flans_size_2 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_flans_size_3 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_flans_size_4 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_flans_size_5 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_flans_size_6 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_flans_size_7 = ReferenceField(RailSize, reverse_delete_rule=1) _key_rail_flans_size_8 = ReferenceField(RailSize, reverse_delete_rule=1) birim_fiyat = DecimalField(required=True)
class CartItem(EmbeddedDocument): product = ReferenceField('Product') qty = IntField() # For orders price = DecimalField(precision=2) def serialize(self, order=False): if order: return { 'id': str(self.product.id), 'product': self.product.serialize(), 'qty': self.qty, 'price': float(self.price) } else: return { 'id': str(self.product.id), 'name': self.product.title, 'price': float(self.product.price) if self.product.price else 0, 'slug': self.product.slug, 'img': self.product.img[0] if len(self.product.img) > 0 else None, 'qty': self.qty }
class ProductModel(Document): # 指定collection meta={'collection': 'projects'} # 原始产品编号 original_id = StringField() # 产品归属平台 (网易:1;小米:2) website_id = IntField() # 产品名称 project_name = StringField() # 产品价格 project_price = DecimalField() # 产品地址 project_url = StringField() # 产品简介 project_desc = StringField() # 产品销售商 project_platform = StringField() # 产品评分 project_score = StringField() # 产品图片 project_picUrl = StringField() # 标签关键字 tags = ListField() # 设置关键字的人 默认值:Geekview tags_user = ListField() # 设置关键字的时间 tags_time = DateTimeField() # 关键字状态 0:未分词或分词异常 1:已分词 tags_status = IntField() # 评论数 comment_count = IntField() # 更新时间 last_updated = DateTimeField()
class Currency(Document): name = StringField(max_length=100, required=True) color = StringField(max_length=7, required=True) active = BooleanField(default=True) type = StringField(max_length=10, required=True, choices=CURRENCY_TYPE) symbol = StringField(max_length=10, required=True, unique=True) price = DecimalField(min_value=0)
class DecisionSignal(Document): created_at = DateTimeField(default=datetime.datetime.now) date = DateTimeField(default=datetime.datetime.now) processor_used = StringField(choices=ChannelNameChoices.choices) message = ReferenceField(Message) initial_price = DecimalField(precision=6) pair = StringField(choices=pairs_without_slash, required=True) take_profits = ListField() stop_loss = DictField() type = StringField(choices=DecisionSignalTypeChoices.choices) def clean(self): if self.pair is not None: self.pair = self.pair.replace('/', '').upper() return super(DecisionSignal, self).clean() def validate(self, clean=True): self.clean() if self.pair not in pairs_without_slash: raise IncorrectDecisionSignalPair(**{"pair": self.pair}) if self.message.type not in [ MessageTypeChoices.SIGNAL, MessageTypeChoices.SIGNAL_EXTRA ]: raise IncorrectDecisionSignalMessageType return super(DecisionSignal, self).validate(clean) def save(self, *args, **kwargs): return super(DecisionSignal, self).save(*args, **kwargs)
class Deal(Document): deal_id = IntField(required=True) name = StringField(required=True) stage = StringField() close_date = DateTimeField() deal_type = StringField() amount = DecimalField()
class MachineEngine(Document): _created_date = DateTimeField(default=datetime.datetime.utcnow) _key_created_user = ObjectIdField() _last_modified_date = DateTimeField(default=datetime.datetime.utcnow) _key_last_modified_user = ObjectIdField() _key_owner_user = ObjectIdField() analysis_date = StringField(required=True) _key_organization = ReferenceField(Organization, required=True, reverse_delete_rule=2) _key_room_type = ReferenceField(EngineRoomType, required=True, reverse_delete_rule=3) _key_engine_speed = ReferenceField(EngineSpeed, required=True, reverse_delete_rule=3) _key_volume = ReferenceField(Volume, required=True, reverse_delete_rule=3) _key_capacity = ReferenceField(Capacity, required=True, reverse_delete_rule=3) _key_engine_type = ReferenceField(EngineType, required=True, reverse_delete_rule=3) _key_kur_cinsi = ReferenceField(Currency, required=True, reverse_delete_rule=3) _key_iskonto = ReferenceField(Discount, required=True, reverse_delete_rule=3) birim_fiyat = DecimalField(required=True)
class Snapshot(Document): """ A Snapshot contains how much cash a user has and what stocks a user owns on a particular date. """ user_id = ObjectIdField() # Reference to the User's _id cash = DecimalField(max_length=255, default=50000, precision=2) stocks_owned = DictField(default={})
class ArticleNumberState(BaseRecord): # Need Batch Upload state = StringField(max_length=2, min_length=2, required=True, unique_with="fkArticleNumber") price = DecimalField(required=True) fkArticleNumber = ReferenceField(ArticleNumber, required=True, dbref=False) meta = {'collection': 'ArticleNumberState'} def __str__(self): return f'{self.state} {self.fkArticleNumber.description}'