def post(self): user_id = int(self.request.get("user_id")) user = UserData.get_by_id(user_id) user = user or UserData.get_current_user() if user is None: return resource_id = self.request.get("resource_id") resource = Resource.get_by_id(int(resource_id)) content = self.request.get("content") new_comment = Comment(parent=resource.key, comment_user=user.key, comment_content=content) new_comment.put() return
def get(self, resource_id): user = UserData.get_current_user() resource = Resource.get_by_id(int(resource_id)) if not resource.is_visible_to_user(user): return self.render("resource/show-resource-no-auth.html") else: contents = [key.get() for key in resource.contents] admins = [key.get().user_nickname for key in resource.admins] is_admin = user and user.key in resource.admins comments = Comment.get_by_resource(resource) comments.sort(key=lambda x: x.created_time, reverse=False) for comment in comments: comment.created_time = comment.created_time + timedelta(hours=8) comment.user_nickname = comment.comment_user.get().user_nickname data = { "resource": resource, "keywords": ", ".join(resource.keywords), "admins": ", ".join(admins), "contents": contents, "is_admin": is_admin, "comments": comments, } return self.render("resource/show-resource.html", data)
def get(self): user = UserData.get_current_user() keywords = self.request.get("keywords") if keywords: keywords = keywords.split(",") resources = Resource.list_resources_for_user(user, keywords, number=20) else: resources = Resource.list_resources_for_user(user, number=20) resources.sort(key=lambda x: x.get_avg_download_count(), reverse=True) keyword_str_list = [] avg_download_count_list = [] for resource in resources: keyword_str_list.append(", ".join(resource.keywords)) avg_download_count_list.append(resource.get_avg_download_count()) keyword_index_list = [i.key_word for i in KeyWordIndex.query().fetch()] data = { "resources": resources, "keyword_str_list": keyword_str_list, "keyword_index_list": keyword_index_list, "avg_download_count_list": avg_download_count_list, } return self.render("resource/find-resource.html", data)
def post(self): # create or update feature bet user = UserData.get_current_user() if not user.is_server_admin(): # make sure user has an account to create course self.redirect('/') feature_key = self.request.get('feature_wanted') feature = Feature.get_by_id(int(feature_key)) options = self.request.get('options').split('\n') start_time = self.request.get('start-time') start_time = datetime.datetime.strptime(start_time, "%Y-%m-%d") end_time = self.request.get('end-time') end_time = datetime.datetime.strptime(end_time, "%Y-%m-%d") billing_time = self.request.get('billing-time') billing_time = datetime.datetime.strptime(billing_time, "%Y-%m-%d") new_bet = FeatureBet(performance_bet=feature.performances[0], bet_options=options, start_time=start_time, end_time=end_time, billing_time=billing_time ) new_bet.put() self.redirect('/show-feature/%s' % feature.key.id()) #
def get(self, course_id): user = UserData.get_current_user() course = Resource.get_by_id(int(course_id)) if not course.is_visible_to_user(user): return self.render('course/show-course-no-auth.html') else: materials = [key.get() for key in course.materials] admins = [key.get().user_nickname for key in course.admins] is_admin = user and user.key in course.admins comments = Comment.get_by_course(course) comments.sort(key=lambda x: x.created_time, reverse=False) for comment in comments: comment.created_time = comment.created_time + timedelta(hours=8) comment.user_nickname = comment.comment_user.get().user_nickname data = { 'course': course, 'keywords': ', '.join(course.keywords), 'admins': ', '.join(admins), 'materials': materials, 'is_admin': is_admin, 'comments': comments } return self.render('course/show-course.html', data)
def post(self): # upload new material on google drive user = UserData.get_current_user() if not user.is_server_admin(): # make sure user has an account to create course self.redirect('/') # [TODO]Benny: scheduled_update_date超醜,要改掉 # [TODO]Benny: new_feature_performance要搬到CreateFeaturePerformance 這個handler scheduled_update_date = self.request.get('scheduled_update_date') scheduled_update_date = datetime.datetime.strptime(scheduled_update_date, "%Y-%m-%d") logging.info('scheduled_update_date: %s' %scheduled_update_date) index = self.request.get('performance_index') new_feature_performance = FeaturePerformance( scheduled_update_date=scheduled_update_date, index=index) new_feature_performance.put() feature_name = self.request.get('feature-name') summary = self.request.get('summary') KPIs = self.request.get('KPI') new_feature = Feature(name=feature_name, summary=summary, KPIs=KPIs.strip().split(','), performances=[new_feature_performance.key] ) new_feature.put() self.redirect('/show-feature/%s' % new_feature.key.id()) #
def get(self): user = UserData.get_current_user() keywords = self.request.get('keywords') if keywords: keywords = keywords.split(',') courses = Resource.list_courses_for_user(user, keywords, number=20) else: courses = Resource.list_courses_for_user(user, number=20) courses.sort(key=lambda x: x.get_avg_download_count(), reverse=True) keyword_str_list = [] avg_download_count_list = [] for course in courses: keyword_str_list.append(', '.join(course.keywords)) avg_download_count_list.append(course.get_avg_download_count()) keyword_index_list = [i.key_word for i in KeyWordIndex.query().fetch()] data = { 'courses': courses, 'keyword_str_list': keyword_str_list, 'keyword_index_list': keyword_index_list, 'avg_download_count_list': avg_download_count_list } return self.render('course/find-course.html', data)
def post(self): # upload new content on google drive user = UserData.get_current_user() if not user: # make sure user has an account to create resource self.redirect("find-resource") content_index_list = self.request.get("content-index-list").split(",") logging.info("content_index_list: %s" % content_index_list) content_list = [] for i in content_index_list: content_name = self.request.get("content-name-%s" % i) content_content = io.BytesIO(self.request.get("content-%s" % i)) content_file = google_drive_api.insert_file( service, content_name, content_content, google_drive_api.DOCX_MIME_TYPE ) new_content = Content(content_name=content_name, related_file_id=content_file["id"]) new_content.put() content_list.append(new_content.key) # 我們不在這個時候寄邀請信給使用者,請他同意獲得講義的writer權限 # 因為我認為使用者很可能不會去收信,我們在使用者第一次真的要使用線上編輯功能的時候 # 再告知他們我們會寄信邀請他們,請他們去收信 -- By EN resource_name = self.request.get("resource-name") grade_chunk = self.request.get("grade-chunk") difficulty = self.request.get("difficulty") subject = self.request.get("subject") is_public = bool(int(self.request.get("is_public"))) keywords = self.request.get("keywords") keyword_list = [] if keywords: keyword_list = keywords.strip().split(",") keyword_list.append(subject) keyword_list.append(grade_chunk) keyword_list = set(keyword_list) new_resource = Resource( resource_name=resource_name, grade_chunk=grade_chunk, difficulty=difficulty, subject=subject, keywords=keyword_list, contents=content_list, creator=user.key, admins=[user.key], is_public=is_public, ) new_resource.put() for keyword in keyword_list: keywordindex = KeyWordIndex.get_by_keyword_and_subject(keyword, subject) if keywordindex: keywordindex.resource_count = keywordindex.resource_count + 1 else: keywordindex = KeyWordIndex(key_word=keyword, related_subject=subject) keywordindex.put() self.redirect("/show-resource/%s" % new_resource.key.id())
def post(self): user_id = int(self.request.get('user_id')) user = UserData.get_by_id(user_id) user = user or UserData.get_current_user() if user is None: return comment_parent_key = self.request.get('comment_parent_key') parent = "# get by key" comment_content = self.request.get('content') new_comment = Comment(parent=parent.key, comment_user=user.key, comment_content=content) new_comment.put() return
def post(self): # upload new material on google drive user = UserData.get_current_user() if not user: # make sure user has an account to create course self.redirect('find-course') material_index_list = self.request.get('material-index-list').split(',') logging.info("material_index_list: %s" % material_index_list) material_list = [] for i in material_index_list: material_name = self.request.get('material-name-%s' % i) material_content = io.BytesIO(self.request.get('material-content-%s' % i)) material_file = google_drive_api.insert_file(service, material_name, material_content, google_drive_api.DOCX_MIME_TYPE) new_content = Content(material_name=material_name, related_file_id=material_file['id'] ) new_content.put() material_list.append(new_content.key) # 我們不在這個時候寄邀請信給使用者,請他同意獲得講義的writer權限 # 因為我認為使用者很可能不會去收信,我們在使用者第一次真的要使用線上編輯功能的時候 # 再告知他們我們會寄信邀請他們,請他們去收信 -- By EN course_name = self.request.get('resource-name') grade_chunk = self.request.get('grade-chunk') difficulty = self.request.get('difficulty') subject = self.request.get('subject') is_public = bool(int(self.request.get('is_public'))) keywords = self.request.get('keywords') keyword_list = [] if keywords: keyword_list = keywords.strip().split(',') keyword_list.append(subject) keyword_list.append(grade_chunk) keyword_list = set(keyword_list) new_course = Resource(course_name=course_name, grade_chunk=grade_chunk, difficulty=difficulty, subject=subject, keywords=keyword_list, materials=material_list, creator=user.key, admins=[user.key], is_public=is_public ) new_course.put() for keyword in keyword_list: keywordindex = KeyWordIndex.get_by_keyword_and_subject(keyword, subject) if keywordindex: keywordindex.course_count = keywordindex.course_count + 1 else: keywordindex = KeyWordIndex(key_word=keyword, related_subject=subject) keywordindex.put() self.redirect('/show-course/%s' % new_course.key.id())
def post(self): user_id = int(self.request.get('user_id')) user = UserData.get_by_id(user_id) user = user or UserData.get_current_user() if user is None: return course_id = self.request.get('course_id') course = Resource.get_by_id(int(course_id)) content = self.request.get('content') new_comment = Comment(parent=course.key, comment_user=user.key, comment_content=content ) new_comment.put() return
def post(self): user_id = int(self.request.get('user_id')) user = UserData.get_by_id(user_id) user = user or UserData.get_current_user() if user is None: return comment_parent_key = self.request.get('comment_parent_key') parent = "# get by key" comment_content = self.request.get('content') new_comment = Comment(parent=parent.key, comment_user=user.key, comment_content=content ) new_comment.put() return
def get(self): user = UserData.get_current_user() if user: self.redirect('/find-course') google_login_url = users.create_login_url('/login') data = {'google_login_url': google_login_url} return self.render('home_page.html', data)
def get(self): user = UserData.get_current_user() if user: # we already have this user in datastore, do nothing at this time pass else: logging.info('into Login handler') google_user_property = users.get_current_user() user = UserData.get_by_user_email(google_user_property.email()) if user: # 內部已經有一個帳號有此email,目前沒有預備要處理這種問題 logging.error('Email %s already used by one of our user' % user.user_email) raise Exception('Email %s already used by one of our user' % user.user_email) else: # email 也沒有重複,可以新增一個使用者 new_user = UserData(google_user_id=google_user_property.user_id(), user_email=google_user_property.email(), user_nickname=google_user_property.nickname() ) new_user.put() self.redirect('/find-course')
def get(self): user = UserData.get_current_user() if not user.is_server_admin(): self.redirect('find-resource') root_subjects = Subject.getSubjectByLevel(0) data = { 'root_subjects': root_subjects } self.render('admin/upload-subject-tree.html', data)
def get(self): user = UserData.get_current_user() if user: self.redirect('/find-course') google_login_url = users.create_login_url('/login') data = { 'google_login_url': google_login_url } return self.render('home_page.html', data)
def post(self, resource_id): # add new admins... user = UserData.get_current_user() resource = Resource.get_by_id(int(resource_id)) if not (user.key in resource.admins): # only admin can edit the resource self.redirect("resource/show-resource/%s" % resource_id) admins_email = self.request.get("admins-email") if admins_email: # we will need to update the admin list admin_key_list = resource.admins email_list = admins_email.strip().split(",") for email in email_list: user = UserData.get_by_user_email(email) if user and not (user.key in admin_key_list): admin_key_list.append(user.key) # 我們不在這個時候寄邀請信給使用者,請他同意獲得講義的writer權限 # 因為我認為使用者很可能不會去收信,我們在使用者第一次真的要使用線上編輯功能的時候 # 再告知他們我們會寄信邀請他們,請他們去收信 -- By EN admin_key_list = set(admin_key_list) resource.admins = admin_key_list change_public_state = self.request.get("change_public_state") if change_public_state: resource.is_public = not resource.is_public resource.put() content_uploaded = self.request.get("content_uploaded") if content_uploaded: new_content_content = io.BytesIO(content_uploaded) content_file_id = self.request.get("content-related-file-id") google_drive_api.update_file(service, content_file_id, new_content_content, google_drive_api.DOCX_MIME_TYPE) logging.info("%s is uploaded" % content_file_id) self.redirect("/show-resource/%s" % resource_id)
def get(self): logging.info('ShowPerformance') user = UserData.get_current_user() features = Feature.query().fetch() feature_performances = [] for feature in features: performance = feature.performances[0].get() feature_performances.append({ 'name': feature.name, 'index': performance.index, 'scheduled_update_date': performance.scheduled_update_date, 'key': performance.key.id() }) logging.info('feature_performances: %s' %feature_performances) data = { 'feature_performances': feature_performances } return self.render('feature/show-performance.html', data)
def get(self): user = UserData.get_current_user() if user is None: self.redirect("resource/find-resource") resources = Resource.query(Resource.admins == user.key).fetch() resources.sort(key=lambda x: x.get_avg_download_count(), reverse=True) keyword_str_list = [] avg_download_count_list = [] for resource in resources: keyword_str_list.append(", ".join(resource.keywords)) avg_download_count_list.append(resource.get_avg_download_count()) data = { "resources": resources, "keyword_str_list": keyword_str_list, "avg_download_count_list": avg_download_count_list, } return self.render("resource/my-resource.html", data)
def get(self): user = UserData.get_current_user() if user is None: self.redirect('course/find-course') courses = Resource.query(Resource.admins == user.key).fetch() courses.sort(key=lambda x: x.get_avg_download_count(), reverse=True) keyword_str_list = [] avg_download_count_list = [] for course in courses: keyword_str_list.append(', '.join(course.keywords)) avg_download_count_list.append(course.get_avg_download_count()) data = { 'courses': courses, 'keyword_str_list': keyword_str_list, 'avg_download_count_list': avg_download_count_list } return self.render('course/my-course.html', data)
def get(self, feature_id): user = UserData.get_current_user() feature = Feature.get_by_id(int(feature_id)) feature_KPIs = ','.join(feature.KPIs) feature_performance = feature.performances[0].get() feature_bets = FeatureBet.get_by_feature_performance(feature_performance) # get feature bets by feature # get user_feature bets by feature bets # get feature performance by feature # show all these data in the proper way data = { 'user': user, 'feature': feature, 'feature_KPIs': feature_KPIs, 'feature_bets': feature_bets, 'feature_performance': feature_performance } return self.render('feature/show-feature.html', data)
def post(self): user = UserData.get_current_user() feature_bet_id = self.request.get('feature-bet-id') bet_option_index = self.request.get('bet-option') bet_capital = self.request.get('bet-capital') feature_bet = FeatureBet.get_by_id(int(feature_bet_id)) if user.capital < float(bet_capital): self.render_json(({"error_msg": "你根本沒有那麼多錢!您太貪心了!!"})) return user_bet = UserFeatureBet(user=user.key, feature_bet=feature_bet.key, option_index_bet=int(bet_option_index), bet_capital=float(bet_capital), bet_state='can change') user_bet.put() user.capital = user.capital - float(bet_capital) user.put() logging.info("finish final result") self.render_json({"success_msg": "投注成功!!"}) return
def post(self): def append_node_to_tree(node_list, tree): # tree is empty list at first cursor = tree for index, value in enumerate(node_list): if value in [c['name'] for c in cursor]: cursor = cursor[[c['name'] for c in cursor].index(value)]['children'] else: if index+1 != len(node_list): cursor.append({'name': value, 'children': []}) cursor = cursor[-1]['children'] else: cursor.append({'name': value}) user = UserData.get_current_user() if not user.is_server_admin(): self.redirect('find-resource') csv_file = self.request.get("subject-tree-csv") logging.info('csv file : %s' % csv_file) tree = [] if csv_file: for line in csv_file.splitlines(): append_node_to_tree(line.split(','), tree) logging.info("tree: %s" % tree) if len(tree) > 1: self.render_json({"error": "系統目前不支援同時上傳多個科目,換句話說,您上傳的csv的第一行名稱需要全部相同。"}) return root_subject = Subject.buildSubjectTree(tree[0]) tree[0]['root_subject_id'] = root_subject.key.id() self.render_json(tree[0]) return
def get(self): user = UserData.get_current_user() if user: # we already have this user in datastore, do nothing at this time pass else: logging.info('into Login handler') google_user_property = users.get_current_user() user = UserData.get_by_user_email(google_user_property.email()) if user: # 內部已經有一個帳號有此email,目前沒有預備要處理這種問題 logging.error('Email %s already used by one of our user' % user.user_email) raise Exception('Email %s already used by one of our user' % user.user_email) else: # email 也沒有重複,可以新增一個使用者 new_user = UserData( google_user_id=google_user_property.user_id(), user_email=google_user_property.email(), user_nickname=google_user_property.nickname()) new_user.put() self.redirect('/')
def get(self): user = UserData.get_current_user() if not user: # make sure user has an account to create course self.render('course/create-course-no-auth.html') else: return self.render('course/create-course.html')
def render(self, template_name, data={}): user = UserData.get_current_user() data['user'] = user template = JINJA_ENVIRONMENT.get_template(template_name) self.response.write(template.render(data))
def get(self): user = UserData.get_current_user() if not user: # make sure user has an account to create resource self.render("resource/create-resource-no-auth.html") else: return self.render("resource/create-resource.html")