예제 #1
0
파일: models.py 프로젝트: moevm/bsc_fokin
class MoodleCourse(db.Document):
	serial_id = db.SequenceField()
	moodle_id = db.IntField(unique=True)
	short_name = db.StringField(default='')
	full_name = db.StringField(default='')
	display_name = db.StringField(default='')
	summary = db.StringField(default='')
	enrolled_user_count = db.IntField(default=0)
	visible = db.BooleanField(default=False)
	format = db.StringField(default='')
	grade_max = db.IntField()
	show_grades = db.BooleanField(default=False)
	start_date = db.IntField(default=0)
	cover = db.StringField(default='')
	forum_list = db.ListField(db.ReferenceField('MoodleForum'), default=[])
	forum_count = db.IntField(default=0)

	def get_info(self):
		return self.to_json()

	def update_course(self, course_info):
		self.short_name = course_info.get('short_name')
		self.full_name = course_info.get('full_name')
		self.display_name = course_info.get('display_name')
		self.summary = course_info.get('summary')
		self.enrolled_user_count = course_info.get('enrolled_user_count')
		self.visible = course_info.get('visible')
		self.format = course_info.get('format')
		self.show_grades = course_info.get('show_grades')
		self.start_date = course_info.get('start_date')
		self.cover = course_info.get('cover')

		print('Update moodle course #{}: {}'.format(self.serial_id, self.short_name))

		return self
예제 #2
0
class StepicUserStep(db.EmbeddedDocument):
    score = db.IntField(default=0)
    is_passed = db.BooleanField(default=False)
    is_passed_on_comment = db.BooleanField(default=False)
    total_submissions = db.IntField(default=0)
    submissions_on_comment = db.IntField(default=0)

    def get_info(self):
        return self.to_json()

    def update_user_step(self, step_grades):
        self.score = step_grades.get('score')
        self.is_passed = step_grades.get('is_passed')
        self.total_submissions = step_grades.get('total_submissions')

        return self
예제 #3
0
파일: models.py 프로젝트: moevm/bsc_fokin
class MoodleTag(db.Document):
	serial_id = db.SequenceField()
	moodle_id = db.IntField(unique=True)
	tag_id = db.IntField()
	is_standard = db.BooleanField(default=False)
	display_name = db.StringField(default='')

	def get_info(self):
		return self.to_json()
예제 #4
0
class Clan(db.Document):
    serial_id = db.SequenceField()
    clan_id = db.IntField(unique=True)
    accepts_join_requests = db.BooleanField()
    color = db.StringField()
    created_at = db.IntField()
    description = db.StringField()
    description_html = db.StringField()
    members_count = db.IntField()
    motto = db.StringField()
    name = db.StringField()
    tag = db.StringField()
    updated_at = db.IntField()

    # emblem = db.StringField() - много ссылок на эмблемы разных размеров
    # online_members = db.ListField(db.IntField()) - вообще не приходит это поле
    # clan_treasury - казна клана (credits, crystal, gold) - приходит только gold, а в crystal - null

    def get_info(self):
        return self.to_json()
예제 #5
0
class AccountPrivate(db.Document):
    serial_id = db.SequenceField()
    account_id = db.IntField(unique=True)
    ban_info = db.StringField()
    ban_time = db.IntField()
    bonds = db.IntField()
    gold = db.IntField()
    credits = db.IntField()
    free_xp = db.IntField()
    is_premium = db.BooleanField()
    premium_expires_at = db.IntField()
    # значение берется из account и показывает последнее обновление "приватных" полей (на случай прекращения действия токена)
    updated_at = db.IntField()

    def get_info(self):
        return self.to_json()

    def update_account_private(self, account_private_info):
        self.ban_info = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_BAN_INFO)
        self.ban_time = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_BAN_TIME)
        self.bonds = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_BONDS)
        self.gold = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_GOLD)
        self.credits = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_CREDITS)
        self.free_xp = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_FREE_XP)
        self.is_premium = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_IS_PREMIUM)
        self.premium_expires_at = account_private_info.get(
            WG_API_CONST().ACCOUNT_PRIVATE_PREMIUM_EXPIRES_AT)

        return self
예제 #6
0
파일: models.py 프로젝트: moevm/bsc_fokin
class MoodlePost(db.Document):
	serial_id = db.SequenceField()
	moodle_id = db.IntField(unique=True)
	user = db.ReferenceField('MoodleUser')
	course = db.ReferenceField('MoodleCourse')
	forum = db.ReferenceField('MoodleForum')
	discussion = db.ReferenceField('MoodleDiscussion')
	subject = db.StringField(default='')
	reply_subject = db.StringField(default='')
	message = db.StringField(default='')
	has_parent = db.BooleanField(default=False)
	parent_post = db.ReferenceField('MoodlePost')
	time_created = db.IntField(default=0)
	view_url = db.StringField(default='')
	rating = db.IntField(default=0)
	rating_count = db.IntField(default=0)
	rating_label = db.StringField(default='')
	tag_list = db.ListField(db.ReferenceField('MoodleTag'))
	post_list = db.ListField(db.ReferenceField('MoodlePost'), default=[])
	num_replies = db.IntField(required=True)
	status = db.StringField(required=True)
	progress = db.FloatField(required=True)

	def get_info(self):
		return self.to_json()

	def update_post(self, post_info):
		self.subject = post_info.get('subject')
		self.reply_subject = post_info.get('reply_subject')
		self.message = post_info.get('message')
		self.has_parent = post_info.get('has_parent')
		self.time_created = post_info.get('time_created')
		self.view_url = post_info.get('view_url')
		self.tag_list = [
			MoodleTag.objects(moodle_id=tag_info.get('id')).modify(
				moodle_id=tag_info.get('id'),
				tag_id=tag_info.get('tagid'),
				is_standard=tag_info.get('isstandard'),
				display_name=tag_info.get('displayname'),
				upsert=True,
				new=True)
			for tag_info in post_info.get('tags')]
		self.status = self.status if self.status else 'new' # Иначе не работает фильтрация по дефолтному значению
		self.progress = 0
		if not self.has_parent:
			self.discussion.modify(
				discussion_post=self,
				view_url=self.view_url,
				tag_list=self.tag_list,
				status=self.status,
				progress=self.progress)
		else:
			parent_post = MoodlePost.objects(moodle_id=post_info.get('parent_id')).first()
			if parent_post:
				if not self in parent_post.post_list:
					parent_post.post_list.append(self)
			else:
				parent_post = MoodlePost.objects(moodle_id=post_info.get('parent_id')).modify(
					post_list=[self],
					status='new',
					progress=0,
					upsert=True,
					new=True)
				self.parent_post = parent_post
			parent_post.num_replies = len(parent_post.post_list)
			parent_post.save()
		if post_info.get('rating'):
			self.rating = post_info.get('rating').get('rating')
			self.rating_count = post_info.get('rating').get('count')
			self.rating_label = post_info.get('rating').get('aggregatelabel')
		self.num_replies = self.num_replies if self.num_replies else 0 # Иначе не работает фильтрация по дефолтному значению

		print('Update moodle post #{}'.format(self.serial_id))

		return self

	def update_post_status(self, status_info):
		self.status = status_info.get('post_status')
		if not self.has_parent:
			self.discussion.modify(status=self.status)

		return self

	def update_post_progress(self):
		self.progress = round((self.user.course_grade_dict[str(self.course.moodle_id)] / self.course.grade_max * 100), 2) if self.course.grade_max else 0
		if not self.has_parent:
			self.discussion.modify(progress=self.progress)

		return self
예제 #7
0
class StepicComment(db.Document):
    serial_id = db.SequenceField()
    stepic_id = db.IntField(unique=True)
    parent_id = db.IntField()
    step_id = db.IntField()
    user = db.ReferenceField('StepicUser')
    course = db.ReferenceField('StepicCourse')
    user_role = db.StringField(default='')
    time = db.IntField(default=0)
    last_time = db.IntField(default=0)
    text = db.StringField(default='')
    # replies = db.ListField(db.ReferenceField('self'))
    reply_count = db.IntField(required=True)
    is_deleted = db.BooleanField(required=True)
    is_pinned = db.BooleanField(default=False)
    is_staff_replied = db.BooleanField(default=False)
    is_reported = db.BooleanField(default=False)
    # attachments = db.ListField(default=[])
    epic_count = db.IntField(default=0)
    abuse_count = db.IntField(default=0)
    status = db.StringField(required=True)
    progress = db.FloatField(required=True)
    user_reputation = db.IntField(required=True)

    def get_info(self):
        return self.to_json()

    def update_comment(self, comment_info):
        self.stepic_id = comment_info.get('stepic_id')
        self.parent_id = comment_info.get('parent_id')
        self.step_id = comment_info.get('step_id')
        self.user_role = comment_info.get('user_role')
        self.time = parse(comment_info.get('time')).timestamp()
        self.last_time = parse(comment_info.get('last_time')).timestamp()
        self.text = comment_info.get('text')
        # self.replies = comment_info.get('replies')
        self.reply_count = comment_info.get('reply_count') if comment_info.get(
            'reply_count'
        ) else 0  # Иначе не работает фильтрация по дефолтному значению
        self.is_deleted = comment_info.get('is_deleted') if comment_info.get(
            'is_deleted') else False
        self.is_pinned = comment_info.get('is_pinned')
        self.is_staff_replied = comment_info.get('is_staff_replied')
        self.is_reported = comment_info.get('is_reported')
        self.attachments = comment_info.get('attachments')
        self.epic_count = comment_info.get('epic_count')
        self.abuse_count = comment_info.get('abuse_count')
        self.status = self.status if self.status else 'new'  # Иначе не работает фильтрация по дефолтному значению
        self.progress = 0
        self.user_reputation = 0

        print('Update stepic comment #{}'.format(self.serial_id))

        return self

    def update_comment_status(self, status_info):
        self.status = status_info.get('comment_status')

        return self

    def update_comment_progress(self):
        self.progress = round(
            (self.user.courses[str(self.course.stepic_id)].score /
             self.course.score * 100), 2) if self.course.score else 0
        self.user_reputation = self.user.reputation if self.user.reputation else 0

        return self