Пример #1
0
class Storehouse(db.Document):
    """
    储存中的书籍
    """
    STATUS_NORMAL = 0
    STATUS_PROCESSING = 1
    STATUS_RETURNED = 2
    STATUS_IN_ENTREPOT = 3

    book = db.ReferenceField(Book)
    price = db.DecimalField(required=True)
    real_price = db.DecimalField()

    create_time = db.IntField(required=True, default=time_int)

    status = db.IntField(required=True, default=STATUS_NORMAL)
    process_status = db.StringField()
    status_changed_time = db.IntField()
    source = db.StringField()  # 来源地

    def __eq__(self, other):
        if isinstance(other, Cart):
            if self.book == other.book and self.price == self.price and self.status == other.status:
                return True
        return False
Пример #2
0
class Posts(db.Document):
    city = db.StringField(max_length=200, required=True)
    uf = db.StringField(max_length=3, required=True)
    latitude = db.DecimalField(max_length=60, required=True)
    longitude = db.DecimalField(max_length=60, required=True)
    file = db.URLField(required=True)
    created_at = db.DateTimeField(default=datetime.utcnow(), required=True)
Пример #3
0
class Document(db.Document):
    url = db.StringField()
    title = db.StringField()
    snippet = db.StringField()
    sentiment = db.DecimalField()# db.EmbeddedDocumentField('Sentiment')
    emotion = db.DictField() #db.EmbeddedDocumentField('Emotion') #db.DictField()
    entities = db.ListField(db.DictField())
    trustworthiness = db.DecimalField()
    source = db.StringField()
Пример #4
0
class Cart(db.Document):
    """
    订单中书籍
    """
    STATUS_NORMAL = 0  # 正常状态
    STATUS_REPLACE_PROCESSING = 1  # 退货处理中
    STATUS_REPLACE_END = 2  # 退货结束
    STATUS_REFUND_PROCESSING = 3  # 换货处理中
    STATUS_REFUND_END = 4  # 换货借宿
    STATUS_CANCELED = 5

    book = db.ReferenceField(Book)
    price = db.DecimalField(required=True)
    real_price = db.DecimalField()
    create_time = db.IntField(required=True, default=time_int)

    status = db.IntField(required=True, default=STATUS_NORMAL)
    in_after_selling_time = db.IntField()
    status_changed_time = db.IntField()
    user = db.ReferenceField(User)

    def __unicode__(self):
        return u'<Cart id({}) <{}> ${}>'.format(str(self.pk), self.book.title,
                                                self.price)

    def __eq__(self, other):
        if isinstance(other, Cart):
            if self.book == other.book \
                    and self.price == other.price \
                    and self.status == other.status:
                if self.status != self.STATUS_NORMAL:
                    if self.in_after_selling_time == other.in_after_selling_time \
                            and self.status_changed_time == other.status_changed_time:
                        return True
                    else:
                        return False
                else:

                    return True

        return False

    def change_status(self, next_status):
        self.status = next_status
        self.status_changed_time = time_int()
        self.save()

    @classmethod
    def status_to_string(cls, index):
        status = {
            "0": "STATUS_NORMAL",
            "1": "STATUS_REPLACE_PROCESSING",
            "2": "STATUS_REPLACE_END",
            "3": "STATUS_REFUND_PROCESSING",
            "4": "STATUS_REFUND_END",
        }
        return status.get(str(index))
Пример #5
0
class JobInstance(db.Document):
    instanceId = db.StringField()
    jobName = db.StringField()
    jobDisplayName = db.StringField()
    jobJson = db.StringField()  # 来自哪个job实例
    jobJsonPath = db.StringField()
    result = db.IntField()
    executeOutput = db.StringField()  # 输出结果
    executeTime = db.DecimalField(default=time.time, required=True)  # 执行时间
    endTime = db.DecimalField(default=time.time, required=True)  #执行结束时间
Пример #6
0
class Restaurant(db.Document):

    profile_picture = db.StringField(
        verbose_name=u'Profile Picture',
        default='https://s3.amazonaws.com/foodtruckfinder45/fast-food.png')
    name = db.StringField(verbose_name=u'Name', max_length=100, required=True)
    email = db.EmailField(verbose_name=u'Email',
                          max_length=100,
                          required=True,
                          unique=True)

    pwd = db.StringField(verbose_name='Password',
                         max_length=100,
                         required=True)

    cuisine = db.StringField(
        verbose_name=u'Cuisine',
        max_length=100,
        required=True,
    )
    isOpen = db.BooleanField(verbose_name=u'Open', default=False)
    hours = db.IntField(verbose_name=u'Hours', default=0)
    lat = db.DecimalField(verbose_name=u'Lat', default=0.00, precision=9)
    lng = db.DecimalField(verbose_name=u'Lng', default=0.00, precision=9)
    menu = db.ListField(db.DictField(verbose_name=u'Menu'))

    def __unicode__(self):
        return self.email

    def __init__(self, *args, **kwargs):
        super(Restaurant, self).__init__(*args, **kwargs)

    def set_password(self, password):
        self.pwd = generate_password_hash(
            password,
            method=current_app.config['PROJECT_PASSWORD_HASH_METHOD'])

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

    def get_token(self):
        serializer = TimedSerializer(current_app.config['SECRET_KEY'])
        token = serializer.dumps(self.email)
        return token

    def check_token_password(self, token):
        serializer = TimedSerializer(current_app.config['SECRET_KEY'])
        full_token = '"' + self.email + '".' + token

        return serializer.loads(full_token, max_age=1800)

    def change_password(self, new_password):
        self.set_password(new_password)
Пример #7
0
class Sensor(db.Document):
    #     __tablename__ = 'sensors'
    #     id = db.Column(db.Integer, primary_key=True)
    #     name = db.Column(db.String(64), index=True)
    #     items = db.relationship('Item', backref='sensor', lazy='dynamic')
    created_at = db.DateTimeField(default=datetime.now(), required=True)
    idd = db.StringField(max_length=255, required=True, unique=True)
    name = db.StringField(max_length=255, required=True)
    items = db.DecimalField()

    def __repr__(self):
        return '<Product %r>' % self.idd

    def get_url(self):
        return url_for('api.get_sensor', idd=str(self.idd), _external=True)

    def export_data(self):
        return {'self_url': self.get_url(), 'name': self.name, 'idd': self.idd}

    def import_data(self, data):
        try:
            self.name = data['name']
            self.idd = data['idd']
        except KeyError as e:
            raise ValidationError('Invalid sensor: missing ' + e.args[0])
        return self
Пример #8
0
class GBGrade(db.Document):
  '''
  A grade contains a dictionary mapping rubric sections to scores.
  '''
  #Map score name (eg. GrutorScore or TestScore) to scores
  submission = db.ReferenceField('Submission')
  scores = db.MapField(db.DecimalField())

  def totalScore(self):
    return sum(self.scores.values())
Пример #9
0
class customer_stats(db.Document):
    category = db.IntField()
    annualSpent = db.DecimalField()
    ads = db.DecimalField()
    aur = db.DecimalField()
    upt = db.DecimalField()
    numberDept = db.DecimalField()
    age = db.DecimalField()
    income = db.DecimalField()
    category2016 = db.IntField()
Пример #10
0
class Post(db.Document):
    title = db.StringField(max_length=120, required=True)
    slug = db.StringField(max_length=64, unique=True)
    # ReferenceField 是引用字段,在数据库中真正存储的是 ObjectID
    # reverse_delete_rule=db.CASCADE 定义了,author 这个引用字段当被引用的对象删除时,它如何处理
    # 比如 author 引用了用户 ross,当我们删除 ross 时,由于定义了 db.CASCADE,所以会 [级联删除] ross 用户所发表过的所有 Post 文章
    author = db.ReferenceField(User, reverse_delete_rule=db.CASCADE)
    category = db.ReferenceField(Category, reverse_delete_rule=db.NULLIFY)
    # ListField 表明它是一个列表,可以保存多个其它类型的字段值,比如 StringField、ReferenceField、EmbeddedDocumentField 都可以
    tags = db.ListField(db.ReferenceField(Tag, reverse_delete_rule=db.PULL))
    comments = db.ListField(db.EmbeddedDocumentField(Comment))
    # 创建的时间,建议在数据库中全部存储 UTC 时间
    # default=datetime.utcnow 表明不指定此字段的值时,它会默认保存当前的时间
    created_at = db.DateTimeField(default=datetime.utcnow)
    # 价格。需要数学计算时,请使用 DecimalField,不要用 FloatField (计算结果不对)
    price = db.DecimalField(default='0.00')
    # 是否发布
    published = db.BooleanField(default=True)

    meta = {
        'allow_inheritance': True,  # 允许被继承,比如下面的 TextPost 就继承自 Post
        'indexes': ['title', 'author'],  # 索引字段,后续按这两个字段值查询时可以加快速度
        'ordering': ['-created_at']  # 表示按 created_at 降序排列,没有减号表示升序排列
    }

    @queryset_manager
    def live_posts(doc_cls, queryset):
        '''非默认的objects查询集,此查询集只返回发布状态为True的博客文章'''
        return queryset.filter(published=True)

    def clean(self):
        '''
        MongoEngine allows you to create custom cleaning rules for your documents when calling save().
        By providing a custom clean() method you can do any pre validation / data cleaning.
        '''
        # 如果创建Post对象时没有提供slug,则根据title自动生成;如果提供了slug,用slugify再清理
        if self.slug:
            self.slug = slugify(self.slug)
        else:
            self.slug = slugify(self.title)
        # 判断slug是否唯一
        filters = dict(slug=self.slug)
        if self.id:
            filters['id__ne'] = self.id
        # 不能用 exist = self.__class__.objects(**filters),因为可能创建 TextPost 对象时,其它子类有相同的 slug
        exist = Post.objects(**filters)
        if exist.count():
            self.slug = "{0}-{1}".format(self.slug, random.getrandbits(32))

    def __str__(self):
        return self.title
Пример #11
0
class LogisticProvider(db.Document, WeightPrice):
    meta = {
        'db_alias': 'db_order',
    }
    name = db.StringField()
    display_name = db.StringField()
    description = db.StringField()
    service_intro = db.DictField()
    logo = db.StringField()
    country = db.StringField()
    is_active = db.BooleanField(default=False)

    rule_desc = db.StringField()
    init_price = db.FloatField(required=True)
    init_weight = db.IntField(required=True)
    continued_price = db.FloatField(required=True)
    continued_weight = db.FloatField(required=True)
    init_coin = db.IntField(default=0)

    features = db.ListField(db.StringField())
    promotion = db.StringField(default='')

    limited_weight = db.IntField(required=True)
    limited_category = db.ListField(db.StringField())
    is_recommended = db.BooleanField(default=False)

    rating = db.DecimalField(precision=1)
    rating_users = db.IntField()

    def __repr__(self):
        return '<LogisticProvider {}>'.format(self.name)

    @classmethod
    def get_provider_shipping(cls, logistic_name, country, weight):
        if not logistic_name:
            logistic_name = 'default'
        provider = cls.objects(name=logistic_name, country=country).first()
        return provider.get_shipping(weight)

    @queryset_manager
    def active(doc_cls, queryset):
        return queryset.filter(is_active=True)

    def to_json(self):
        return dict(
            name=self.name,
            display_name=self.display_name,
            service_intro=self.service_intro,
            desc=self.description,
        )
Пример #12
0
class Book(db.Document):
    isbn = db.StringField(required=True, unique=True, primary_key=True)
    title = db.StringField(required=True)
    origin_title = db.StringField()
    subtitle = db.StringField()
    author = db.ListField(db.StringField())
    translator = db.ListField(db.StringField())
    create_time = db.IntField(default=time_int, required=True)
    publish_time = db.StringField()
    image = db.EmbeddedDocumentField(CDNImage, required=True)
    page = db.IntField()
    catelog = db.StringField()
    price = db.DecimalField()
    publisher = db.StringField()
    description = db.StringField()
    author_description = db.StringField()
    tag = db.ListField(db.EmbeddedDocumentField(BookTag))
    binding = db.StringField()
    rate = db.FloatField()
    reason = db.StringField(require=True)

    enabled = db.BooleanField(default=True)

    need_to_refund = db.IntField(default=0)
    need_to_replace = db.IntField(default=0)

    class NotBookInstance(Exception):
        pass

    def __unicode__(self):
        return u'《{}》'.format(self.title)

    def save(self):
        me = super(Book, self).save()
        if not me.image.is_cdn:
            image_url = save_image(me.image.url, str(me.pk))
            me.image.url = image_url
            me.image.is_cdn = True
            me.save()
        return me

    def add_storehouse(self, number, add_type):
        if add_type == 'REFUND':
            self.need_to_refund += number
            self.save()
        elif add_type == 'REPLACE':
            self.need_to_replace += number
            self.save()
Пример #13
0
class Recipe(db.DynamicDocument):
	title = db.StringField(max_length=120, required=True)
	author = db.ReferenceField(User, reverse_delete_rule=CASCADE)
	# image of the recipe
	# img = db.FileField(required=True)
	# description of the recipe
	desc = db.StringField(max_length=200, required=True)
	# ingredient
	ing = db.StringField(max_length=200, required=True)
	# step??
	step = db.StringField(required=True)
	prl = db.StringField(required=True)
	rid = db.SequenceField(required=True)
	region = db.StringField(max_length=40, required=True)
	ming = db.StringField(max_length=40, required=True)
	kind = db.StringField(max_length=40, required=True)
	works = db.ListField(ReferenceField(Dish))
	ts  = db.DateTimeField(default=datetime.datetime.now)
	rate = db.DecimalField(default=0.0,precision=1)
	ppl = db.IntField(default=1)
	def get_recipe():
		return Recipe.objects().first()

	@staticmethod
	def generate_fakes():
		import json
		from random import seed, randint
		import os

		counts = User.objects.count()
		path_to_fakes = url_for("static",filename="fakes/recipes/recipes.json")
		basedir = os.path.abspath(os.path.dirname(__file__))
		static_path = basedir+path_to_fakes
		recipes = json.load(open(static_path))
		for recipe in recipes:
			r = Recipe.from_json(recipe)
			while 1:
				try:
					r.author = User.objects(id=randint(0,counts-1)).first()
					break
				except:
					continue

			r.save(force_insert=True)
Пример #14
0
class Recipe(db.DynamicDocument):
    title = db.StringField(max_length=120, required=True)
    author = db.ReferenceField(User, reverse_delete_rule=CASCADE)
    prl = db.StringField(required=True)
    desc = db.StringField(max_length=200, required=True)
    ing = db.StringField(max_length=200, required=True)
    step = db.StringField(required=True)

    region = db.StringField(max_length=40, required=True)
    ming = db.StringField(max_length=40, required=True)
    kind = db.StringField(max_length=40, required=True)

    works = db.ListField(ReferenceField(Dish))
    ts = db.DateTimeField(default=datetime.datetime.now)
    rate = db.DecimalField(default=0.0, precision=1)
    ppl = db.IntField(default=1)

    def get_recipe():
        return Recipe.objects().first()
Пример #15
0
class GBColumn(db.Document):
  '''
  A column represents a single list of entries. It can be a single problem or
  one days participation, or one test.
  '''
  name = db.StringField()
  maxScore = db.DecimalField(default=0)

  #Map usernames to grade entries
  scores = db.MapField(db.ReferenceField('GBGrade'))

  def __init__(self, name, **data):
    super(GBColumn, self).__init__(**data)
    self.name = name

  def getUserScore(self, user):
    '''Returns a single user grade'''
    return self.scores[user.keyOfUsername()].totalScore()

  def cleanup(self):
    pass
Пример #16
0
class Pet(db.Document):
    external_id = db.StringField(db_field='ei')
    name = db.StringField(db_field='n')
    species = db.StringField(db_field='s')
    breed = db.StringField(db_field='b')
    age = db.IntField(db_field='a')
    store = db.ReferenceField(Store, db_field='st')
    price = db.DecimalField(
        db_field='p',
        precision=2,
        rounding='ROUND_HALF_UP'
    )
    sold = db.BooleanField(db_field='sl', default=False)
    received_date = db.DateTimeField(db_field='rd')
    sold_date = db.DateTimeField(db_field='sd')
    live = db.BooleanField(db_field='l', default=True)

    meta = {
        'indexes': [
            ('external_id', 'live'),
            ('species', 'breed',  'live'),
            ('store', 'live')
        ]
    }
Пример #17
0
class Recipe(db.DynamicDocument):
	title = db.StringField(max_length=120, required=True)
	author = db.ReferenceField(User, reverse_delete_rule=CASCADE)
	desc = db.StringField(max_length=500, required=True)
	ing = db.StringField(max_length=1000, required=True)
	step = db.StringField(required=True)
	prl = db.StringField(required=True)
	rid = db.SequenceField(required=True)
	region = db.StringField(max_length=40, required=True)
	ming = db.StringField(max_length=40, required=True)
	kind = db.StringField(max_length=40, required=True)
	works = db.ListField(ReferenceField(Dish))
	ts  = db.DateTimeField(default=datetime.datetime.now)
	rate = db.DecimalField(default=0.0,precision=1)
	ppl = db.IntField(default=1)
	

	def to_json(self):
		recipe = {
			'url':url_for('api.get_recipe',recipe_id = self.rid, _external=True),
			'title':self.title,
			'author_id':self.author.id,
			'description':self.desc,
			'ingredients':self.ing,
			'steps':self.step,
			'img_url':url_for('static',filename=self.prl,_external =True),			
			'tags':[self.region,self.ming,self.kind],
			'date_created':self.ts,
			'rate':str(self.rate),
			'people_rated':self.ppl
		}
		return recipe

	@staticmethod
	def from_json_custom(recipe):
		title = recipe.get('title')
		desc = recipe.get('desc')
		ing = recipe.get('ing')
		prl = recipe.get('prl')
		step = recipe.get('step')
		tags = recipe.get('tags')

		if tags:
			region=tags[0]
			ming = tags[1]
			kind = tags[2]
		if title is None or\
			desc is None or step is None or\
			ing is None or prl is None or\
			region is None or ming is None or kind is None:
				raise ValueError('field missing')
		recipe = Recipe(title=title,ing=ing,prl=prl,desc=desc,step=step,
				region=region,ming=ming,kind=kind)
		return recipe


	@staticmethod
	def generate_fakes():
		import json
		from random import seed, randint
		import os

		seed()
		counts = User.objects.count()
		path_to_fakes = url_for("static",filename="fakes/recipes/recipes.json")
		basedir = os.path.abspath(os.path.dirname(__file__))
		static_path = basedir+path_to_fakes
		print (static_path)
		recipes = json.load(open(static_path,encoding='utf-8')).get('recipes')
		# print (recipes)
		for recipe in recipes:
			print (json.dumps(recipe))
			r = Recipe.from_json(json.dumps(recipe))
			
			users_count = User.objects.count()
			offset = randint(0,users_count-1)
			print (offset)
			user = User.objects[offset:].first()
			print (user.id)
			r.author = user

			r.save(force_insert=True)
Пример #18
0
class Review(db.Document):
    title = db.StringField()
    content = db.StringField()
    rating = db.DecimalField(min_value=1, max_value=10, precision=1)
    titleparent = db.ObjectIdField()
    author = db.ObjectIdField()
    points = db.ListField(db.ReferenceField(ReviewPoint))
    recommended = db.BooleanField()

    @staticmethod
    def get_by_id(id):
        try:
            return Review.objects.get(id=id)
        except:
            return None

    @staticmethod
    def get_by_title(title):
        reviews = Review.objects.filter(titleparent=title.id)
        return reviews

    @staticmethod
    def get_avg_rating(title):
        reviews = Review.get_by_title(title)

        avg = 0
        review_count = reviews.count()
        if review_count <= 0:
            return 0

        for review in reviews:
            avg += review.rating

        return avg / review_count

    def get_author(self):
        try:
            return User.get_by_id(self.author)
        except:
            return None

    def is_author(self, user):
        author = self.get_author()
        return author.id == getattr(user, "id", "")

    def __query_points(self, point_type):
        p = []
        for point in self.points:
            if point.role == point_type:
                p.append(point)
        return p

    def pros(self):
        return self.__query_points(ReviewPoint.PROS_ID)

    def cons(self):
        return self.__query_points(ReviewPoint.CONS_ID)

    def pros_as_string(self):
        pros = self.pros()
        pros_string = []
        for pro in pros:
            pros_string.append(pro.content)

        return pros_string

    def cons_as_string(self):
        cons = self.cons()
        cons_string = []
        for con in cons:
            cons_string.append(con.content)

        return cons_string

    def remove_all_points(self):
        for point in self.points:
            point.delete

        self.points = []

    def put_pros(self, pros):
        pros_object = []
        for pro in pros:
            pro_obj = ReviewPoint(content=pro,
                                  role=ReviewPoint.PROS_ID,
                                  parent=self.id)

            pro_obj.save()
            pros_object.append(pro_obj)

        self.points = pros_object

    def add_pros(self, pros):
        for pro in pros:
            pro_obj = ReviewPoint(content=pro,
                                  role=ReviewPoint.PROS_ID,
                                  parent=self.id)

            pro_obj.save()
            self.points.append(pro_obj)

    def put_cons(self, cons):
        cons_object = []
        for con in cons:
            con_obj = ReviewPoint(content=con,
                                  role=ReviewPoint.CONS_ID,
                                  parent=self.id)

            con_obj.save()
            cons_object.append(con_obj)

        self.points = cons_object

    def add_cons(self, cons):
        for con in cons:
            con_obj = ReviewPoint(content=con,
                                  role=ReviewPoint.CONS_ID,
                                  parent=self.id)

            con_obj.save()
            self.points.append(con_obj)
Пример #19
0
class Problem(db.Document):
  '''
  One problem that a student can submit files to.
  '''
  name = db.StringField()
  gradeColumn = db.ReferenceField('GBColumn', reverse_delete_rule=NULLIFY)
  duedate = db.DateTimeField()

  #The problem rubric
  rubric = db.MapField(db.DecimalField())

  #List of the names of the files we test with
  testfiles = db.ListField(db.StringField())

  #Can students have partners
  allowPartners = db.BooleanField(default=True)

  #Which files must a student submit
  requiredFiles = db.StringField(default=None)
  strictFiles = db.StringField(default=None)
  bannedFiles = db.StringField(default=None)

  #URLs for grader notes and for problem specification
  gradeNotes = db.StringField()
  problemPage = db.StringField()

  #Settings for releasing grades
  releaseAutoComments = db.BooleanField(default=True)
  autoGradeOnly = db.BooleanField(default=False)

  #Settings for opening and closing a problem
  isOpen = db.BooleanField(default=True)


  #Map usernames to submission lists
  studentSubmissions = db.MapField(db.EmbeddedDocumentField('StudentSubmissionList'))

  meta = {"cascade": True}

  def __init__(self, name, **data):
    super(Problem, self).__init__(**data)
    self.name = name

  def getStatusCount(self):
    c,a = self.getParents()
    users = User.objects.filter(courseStudent=c)
    ungraded = 0
    ip = 0
    done = 0
    for u in users:
      sub = self.getLatestSubmission(u)
      if sub == None:
        continue
      if sub.status < 3:
        ungraded += 1
      elif sub.status == 3:
        ip += 1
      else:
        done += 1
    return ungraded, ip, done

  def cleanup(self):
    if self.gradeColumn != None:
      self.gradeColumn.cleanup()
      self.gradeColumn.delete()
    for k in self.studentSubmissions:
      self.studentSubmissions[k].cleanup()

  def totalPoints(self):
    total = 0
    for k in self.rubric:
      total += self.rubric[k]
    return total

  def getSubmissionNumber(self, user):
    '''gets the number of the latest submission'''
    if user.keyOfUsername() in self.studentSubmissions:
      return len(self.studentSubmissions[user.keyOfUsername()].submissions)
    else:
      return 0

  def getSubmission(self, user, subnum):
    '''Returns a single submission'''
    return self.studentSubmissions[user.keyOfUsername()].submissions[int(subnum)-1]

  def getLatestSubmission(self, user):
    '''Gets the latest submission for a user'''
    if self.getSubmissionNumber(user) == 0:
      return None
    else:
      latestSubmission = self.getSubmission(user, self.getSubmissionNumber(user))
      if isinstance(latestSubmission, Submission):
        return latestSubmission
      else:
        return None

  def getParents(self):
    a = AssignmentGroup.objects.get(problems=self)
    c = Course.objects.get(assignments=a)
    return c,a

  def getFiles(self, user, subnum):
    from os import listdir
    from os.path import isfile, join
    c, a = self.getParents()
    filePath = getSubmissionPath(c, a, self, user, subnum)
    return [ f for f in listdir(filePath) if isfile(join(filePath,f)) ]

  def getFilePath(self, user, subnum):
    c, a = self.getParents()
    return getSubmissionPath(c, a, self, user, subnum)

  def getTestFilePath(self):
    c, a = self.getParents()
    ensurePathExists(getTestPath(c, a, self))
    return getTestPath(c, a, self)

  def getRequiredFiles(self):
    import re
    if self.requiredFiles != None and len(self.requiredFiles) > 0:
      return re.split(' *, *', self.requiredFiles)
    else:
      return []

  def getStrictFiles(self):
    import re
    if self.strictFiles != None and len(self.strictFiles) > 0:
      return re.split(' *, *', self.strictFiles)
    else:
      return []

  def getSubmissionInfo(self, sub):
    I = self.studentSubmissions.iteritems()
    for key, value in self.studentSubmissions.iteritems():
      if sub in value.submissions:
        return User.objects.get(username=key.replace("&dot;",".")), (value.submissions.index(sub)+1)
    return None, -1
Пример #20
0
class Menu(db.Document):
    meal_name = db.StringField(max_length=50)
    meal_price = db.DecimalField(precision=2)
    meal_description = db.StringField()
    meal_special = db.BooleanField()
Пример #21
0
class Parts(db.Document):
    part_name = db.StringField(max_length=50)
    part_price = db.DecimalField(precision=2)
    stock = db.IntField()
    image = db.ImageField()
Пример #22
0
class Bot(db.Document):
    """
    Bot Document Schema
    """

    _id = db.StringField(primary_key=True)
    createdOn = db.DateTimeField(default=None, null=True, required=True)
    isRemoved = db.BooleanField(required=True, default=False)
    removedOn = db.DateTimeField(default=None, null=True)
    isPublic = db.BooleanField(required=True, default=True)
    price = db.DecimalField(required=True)
    description = db.StringField()
    keywords = db.ListField()
    installations = db.IntField(default=0, required=True)
    overviewMediaUrl = db.StringField()
    overviewRichText = db.StringField()
    marketplaceCardMediaUrl = db.StringField()
    tags = db.ListField()
    name = db.StringField()
    botMeta = db.DictField(default={}, required=True)

    meta = {'collection': 'bots', 'strict': False}

    def __init__(self, *args, **kwargs):
        super(Bot, self).__init__(*args, **kwargs)
        if not self._id:
            self._id = f"bot_{util.get_unique_id()}"

    def create(self, userObj=None, *args, **kwargs):
        self.createdOn = util.get_current_time()
        self.isRemoved = False
        self.save()

    def save(self, *args, **kwargs):
        super(Bot, self).save(*args, **kwargs)
        return self
        # return self.encode_auth_token(self.loginId)

    @staticmethod
    def get_by_id(bot_id):
        """
        Filter a playground by Id.
        :param srv_id:
        :return: Bot or None
        """
        return Bot.objects(_id=bot_id).first()

    @staticmethod
    def get_by_id_no_template(bot_id):
        """
        Filter a playground by Id.
        :param srv_id:
        :return: Bot or None
        """
        return Bot.objects(_id=bot_id).exclude("botMeta.template").first()

    def remove(self):
        """
        Soft deletes the user
        """
        self.isRemoved = True
        self.removedOn = util.get_current_time()
        self.save()

    @staticmethod
    def get_catalog(filterObj):
        if filterObj:
            return Bot.objects(
                Q(isPublic=True) & Q(isRemoved=False)
                & Q(tags__contains=filterObj)).only('_id', 'description',
                                                    'price',
                                                    'marketplaceCardMediaUrl',
                                                    'name', 'tags').all()
        else:
            return Bot.objects(Q(isPublic=True) & Q(isRemoved=False)).only(
                '_id', 'description', 'price', 'marketplaceCardMediaUrl',
                'name', 'tags').all()

    @staticmethod
    def get_tags(filterObj):
        res = Bot.objects(Q(isPublic=True)
                          & Q(isRemoved=False)).only('tags').all()
        payload = []
        for item in res:
            payload.extend(item.tags)

        return payload

    @staticmethod
    def search_bots(query, filter_obj, pageNum, itemsPerPage, projectId):
        regex = re.compile(f".*{query}.*", re.IGNORECASE)
        regex = query
        bot_payload = []

        if query and not filter_obj:
            objects = Bot.objects(
                Q(isRemoved=False) & Q(keywords__icontains=regex)).skip(
                    (pageNum - 1) * itemsPerPage).limit(itemsPerPage).only(
                        '_id', 'description', 'price',
                        'marketplaceCardMediaUrl', 'name', 'tags').all()

        elif filter_obj and not query:
            objects = Bot.get_catalog(filter_obj)

        else:
            objects = Bot.objects(
                Q(isPublic=True) & Q(isRemoved=False)
                & Q(tags__contains=filter_obj)
                & Q(keywords__icontains=regex)).skip(
                    (pageNum - 1) * itemsPerPage).limit(itemsPerPage).only(
                        '_id', 'description', 'price',
                        'marketplaceCardMediaUrl', 'name', 'tags').all()

        return objects