class ModelConnectionsCache(Document): meta = { "collection": "noc.inv.objectconnectionscache", "allow_inheritance": False, "indexes": ["model", ("type", "gender")] } # Connection type type = ObjectIdField() gender = StringField(choices=["s", "m", "f"]) model = ObjectIdField() name = StringField() @classmethod def rebuild(cls): """ Rebuild cache """ nc = [] for m in ObjectModel.objects.all(): for c in m.connections: nc += [{ "type": c.type.id, "gender": c.gender, "model": m.id, "name": c.name }] collection = ModelConnectionsCache._get_collection() collection.drop() if nc: collection.insert(nc)
class OAuth2Client(Document): meta = {'collection': 'oauth2_client'} id = ObjectIdField(primary_key=True, required=True) client_id = StringField(required=True) account_id = ObjectIdField(required=True) secret = StringField(required=True) scopes = ListField(required=True) created_time = DateTimeField(default=datetime.utcnow())
class Tips(mongoengine.DynamicDocument): """Tips Document Schema""" title = StringField(required=True) content = StringField(required=True) author = ObjectIdField(required=True) posted_time = DateTimeField(required=True) status = StringField(required=True) latitude = FloatField(required=True) longitude = FloatField(required=True) category = StringField(required=True) upvotes = ListField(ObjectIdField()) downvotes = ListField(ObjectIdField())
class Loan(Document): meta = { 'collection': 'loans', 'strict': False, } _id = ObjectIdField() borrower_id = ObjectIdField() loan_category = StringField() city = StringField() state = StringField() zip_code = StringField() stage = StringField() number = StringField() value = FloatField()
class Answer(Document): ''' 测试 :param id: 答案ID :param account_id: 用户ID :param test_id: 测试 id :param score: 分数 :param status: 测试状态(pending|finished) :param created_time: 开始答题时间 :param updated_time: 最后答题时间 :param answers: 答案 {question_id: [options]} ''' STATUS_FINISHED = 'finished' STATUS_PENDING = 'pending' id = ObjectIdField(primary_key=True) test_id = StringField(required=True) account_id = StringField(required=True) score = IntField(default=0) answers = DictField(default={}) status = StringField(required=True, default=STATUS_PENDING) created_time = DateTimeField(default=datetime.utcnow()) updated_time = DateTimeField() meta = { "collection_name": 'answer', 'indexes': [ ('account_id', 'status', '-score'), ('account_id', 'status', '-updated_time'), ] }
class Role(mongo.Document): name = StringField(required=True, max_length=50) guard_name = StringField(max_length=50, default="api") created_at = DateTimeField(default=datetime.datetime.now) updated_at = DateTimeField(null=True) profile_ids = ListField(ObjectIdField()) meta = {"collection": 'roles'} def __str__(self): return self.name @staticmethod def input_roles(): return [ 'Super Admin', 'Admin', 'Moderator', 'Citizen', 'State Admin', 'District Admin', 'ULB Admin', 'Civic Agency Admin', 'Civic Agency User', 'Engineer', 'Escalations Engineer', 'MP', 'MLA', 'Corporator', 'SQS admin', 'Nodal Officer', 'MOUH', 'Event Admin', 'Event Moderator', ]
class Account(Document): ''' 帐号 :param _id: account ID :param username: 用户ID :param created_time: 创建时间 :param password: 密码 :param authentications: 认证信息 {'wxapp': 'openid', 'mobile': 'mobile_num'} :param status: 状态(active|发布|forbidden) ''' meta = { 'collection': 'account', 'indexes': [ '$username', # text index ] } id = ObjectIdField(primary_key=True, required=True) nickname = StringField(required=True) avatar = StringField(required=True) username = StringField() password = StringField() authentications = EmbeddedDocumentField(Authentications) created_time = DateTimeField(default=datetime.utcnow()) updated_time = DateTimeField() @classmethod def get_by_wxapp(cls, openid): try: account = cls.objects(authentications__wxapp=openid).first() return account except Exception as e: print(e) return None
class EmailJob(EmbeddedDocument): job_id = ObjectIdField() subject = StringField() emails = EmbeddedDocumentListField(Email) type = StringField(choices=["Manual", "Scheduled"]) initiated_at = DateTimeField(default=datetime.utcnow) included_feedback = BooleanField()
class Cluster(Document): meta = {"collection": "clusters"} ID = ObjectIdField(primary_key=True) value = StringField() label = StringField() status = StringField() containers = ListField(ReferenceField(Container))
class Posts(Document): post_id = IntField() username = StringField() author_id = ObjectIdField() created = DateTimeField(default=datetime.datetime.utcnow) title = StringField() body = StringField()
class Capability(Document): meta = { "collection": "noc.inv.capabilities", "json_collection": "inv.capabilities" } name = StringField(unique=True) uuid = UUIDField(binary=True) description = StringField(required=False) type = StringField(choices=["bool", "str", "int", "float"]) category = ObjectIdField() def __unicode__(self): return self.name @property def json_data(self): r = { "name": self.name, "$collection": self._meta["json_collection"], "uuid": self.uuid, "description": self.description, "type": self.type } return r def to_json(self): return to_json( self.json_data, order=["name", "$collection", "uuid", "description", "type"]) def get_json_path(self): p = [quote_safe_path(n.strip()) for n in self.name.split("|")] return os.path.join(*p) + ".json"
class ObjectLog(Document): meta = { "collection": "noc.objectlog", "strict": False, "auto_create_index": False, "indexes": ["object"] } # Inventory object reference object = ObjectIdField() # Timestamp ts = DateTimeField() # Username user = StringField() # NOC subsystem system = StringField() # Managed object name managed_object = StringField() # Operation # * CREATE - Object created # * CHANGE - Object changed # * CONNECT - Object connected # * DISCONNECT - Object disconnected # * INSERT - Object moved into container # * REMOVE - Object removed from container op = StringField() # Message message = StringField()
class ChatMessage(Document): meta = {"collection": "chatmessages"} user = StringField(required=True) message = StringField(required=True) timestamp = DateTimeField(required=False) chat_id = ObjectIdField(required=True)
class LayerUserSettings(Document): meta = { "collection": "noc.layerusersettings", "allow_inheritance": False } # User Id user = IntField() # Layer Id layer = ObjectIdField() # Visibility is_visible = BooleanField(default=True) @classmethod def is_visible_by_user(cls, user, layer): s = LayerUserSettings.objects.filter(user=user.id, layer=layer.id).first() if s: return s.is_visible else: return True @classmethod def set_layer_visibility(cls, user, layer, status): s = LayerUserSettings.objects.filter(user=user.id, layer=layer.id).first() if not s: s = LayerUserSettings(user=user.id, layer=layer.id) s.is_visible = status s.save()
class Vulnerability(Document): meta = {"collection": "vulnerabilities"} ID = ObjectIdField(primary_key=True) value = StringField() label = StringField() type = StringField() exploitDbUrl = URLField()
class Credential(Document): meta = {"collection": "credentials"} ID = ObjectIdField() username = StringField() password = StringField() publicKey = StringField() privateKey = StringField()
class ObjectFile(Document): """ Inventory object """ meta = { "collection": "noc.objectfiles", "strict": False, "auto_create_index": False, "indexes": ["object"] } object = ObjectIdField() name = StringField() file = FileField() ts = DateTimeField() description = StringField() size = IntField() mime_type = StringField() def __unicode__(self): return unicode(self.name or self.id) def delete_file(self): if self.file: self.file.delete() @classmethod def delete_files(cls, sender, document, target=None): for o in ObjectFile.objects.filter(object=document.id): o.delete_file() o.delete() @classmethod def on_delete(cls, sender, document, target=None): document.delete_file()
class Subscription(Document): meta = {"collection": "subscriptions"} ID = ObjectIdField() stripeCustomerPlan = StringField() stripeCustomerId = StringField() stripeCustomerSubscriptionId = StringField() active = BooleanField()
class Service(Document): meta = {"collection": "services"} ID = ObjectIdField() value = StringField() label = StringField() type = StringField() applications = ListField(ReferenceField(Application))
class Question(Document): meta = {"collection": "questions"} ID = ObjectIdField() solutions = ReferenceField(Solution) scope = ReferenceField(Scope) attempts = IntField() value = StringField()
class StrainProject(EmbeddedDocument): _id = ObjectIdField() name = StringField(required=True) description = StringField(default="") date = DateTimeField(default=datetime.datetime.now) strains = ListField(StringField()) trees = ListField(DictField()) user = StringField(default="demo")
class Metric(Document): meta = {"collection": "metrics"} ID = ObjectIdField() uptime = DateTimeField() downtime = DateTimeField() activeUsers = IntField() purchases = IntField() revenue = FloatField()
class Application(Document): meta = {"collection": "applications"} ID = ObjectIdField() name = StringField() version = StringField() configuration = ReferenceField(Configuration) questions = ListField(ReferenceField(Question)) dummies = ListField(ReferenceField(Dummy))
class InformationTypes(Document): name = StringField(max_length=100, required=True) security_reasoning = StringField(max_length=2000, null=True) triad_rating = DictField(required=True) information_categories = ListField(field=ObjectIdField()) meta = {'collection': settings.COLLECTION_NAMES.get('information_types')}
class Application(BaseDocument): client_id = ObjectIdField(required=True) name = StringField(required=True) description = StringField() type = StringField(choices=APPLICATION_TYPES) is_active = BooleanField(default=True)
class Capability(Document): meta = { "collection": "noc.inv.capabilities", "strict": False, "auto_create_index": False, "json_collection": "inv.capabilities", "json_unique_fields": ["name", "uuid"], } name = StringField(unique=True) uuid = UUIDField(binary=True) description = StringField(required=False) type = StringField(choices=["bool", "str", "int", "float"]) # Jinja2 template for managed object's card tags card_template = StringField(required=False) category = ObjectIdField() _id_cache = cachetools.TTLCache(maxsize=1000, ttl=60) _name_cache = cachetools.TTLCache(maxsize=1000, ttl=60) def __str__(self): return self.name @classmethod @cachetools.cachedmethod(operator.attrgetter("_id_cache"), lock=lambda _: id_lock) def get_by_id(cls, id): return Capability.objects.filter(id=id).first() @classmethod @cachetools.cachedmethod(operator.attrgetter("_name_cache"), lock=lambda _: id_lock) def get_by_name(cls, name): return Capability.objects.filter(name=name).first() @property def json_data(self): r = { "name": self.name, "$collection": self._meta["json_collection"], "uuid": self.uuid, "description": self.description, "type": self.type, "card_template": self.card_template, } return r def to_json(self): return to_json( self.json_data, order=[ "name", "$collection", "uuid", "description", "type", "card_template" ], ) def get_json_path(self): p = [quote_safe_path(n.strip()) for n in self.name.split("|")] return os.path.join(*p) + ".json"
class Bike(Document): meta = {"collection": "bike"} ID = ObjectIdField() name = StringField() brand = StringField() year = StringField() size = ListField(StringField()) wheel_size = FloatField() type = StringField()
class Unit(Document): ID = ObjectIdField() title = StringField(unique=True, required=True) about = ListField(StringField()) description = StringField() image_url = URLField() date_created = DateTimeField(default=datetime.utcnow) position = IntField(default=0, required=True) slug = StringField(unique=True, required=True)
class LightPollution(Document): meta = {"collection": "lightpollution"} ID = ObjectIdField() sourceposition = ListField() targetPosition = ListField() longitude = FloatField() latitude = FloatField()
class Weather(Document): meta = {"db_alias": "db_weather", "collection": "weather"} _id = ObjectIdField() country = StringField() time_pulled = DateTimeField(default=datetime.now) currentsummary = StringField() weeklysummary = StringField() dailysummary = StringField()