コード例 #1
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def add_language(lang):
	
	# Authenticate the user
	user_profile = verify_auth_token()
	if not user_profile:
		return json_result({
			'success': 0,
			'error'  : 'authentication failed',
		})

	# Get user properties
	email = user_profile['email']

	print lang
	print user_profile['langs']
		
	if lang not in user_profile['langs']:
		# Append the language to the array
		user_profile['langs'].append(lang)

		user_profile['langs'] = f7(user_profile['langs'])

		# Perform the upsert
		mongo.db.user_profiles.update(
			{ 'email': email },
			user_profile,
			upsert = True,
		)

	# Return success
	return json_result({
		'success': 1,
	})
コード例 #2
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def update_progress():

	# Authenticate the user
	user_profile = verify_auth_token()
	if user_profile is None:
		return json_result({
			'success': 0,
			'error'  : 'authentication failed',
		})

	# Get user properties
	email = user_profile['email']

	try:
		# Read the parameters
		card_updates_json = request.form['progress_updates']
		deck_updates_json = request.form['deck_updates']
		lang			  = request.form['lang']

		# Decode JSON parameter
		card_updates = json.loads(card_updates_json)
		deck_updates = json.loads(deck_updates_json)
	except KeyError:
		# Return failure if the arguments don't exist
		return json_result({
			'success': 0,
			'error'  : 'invalid parameters',
		})

	if deck_updates != {}:
		for deck_id, phrase_ids in deck_updates.iteritems():
			deck = mongo.db.excerpts.update(
				{ '_id': ObjectId(deck_id) },
				{ '$set': { 'phrase_ids': [ObjectId(p) for p in phrase_ids] } },
			)

	if card_updates != {}:

		# Get user progress, or initialize an empty progress history if none exists
		user_progress = mongo.db.user_progress.find_one({ 'email': email, 'lang': lang })

		for studyMode in card_updates.keys():

			# Iterate over the phrase ids and the new progress values, altering values
			for phrase_id, progress in card_updates[studyMode].iteritems():
				user_progress['progress'][studyMode][phrase_id] = progress

	# Perform the upsert
	mongo.db.user_progress.update(
		{ 'email': email, 'lang': lang },
		user_progress,
		upsert = True
	)

	# Return success
	return json_result({
		'success': 1,
	})
コード例 #3
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def get_plan():
	# Authenticate the user
	user_profile = verify_auth_token()
	if user_profile is None:
		return json_result({
			'success': 0,
			'error'  : 'authentication failed',
		})

	try:
		# Read the parameters
		lang = request.form['lang']
		planMode = request.form['plan_mode']
	except KeyError:
		# Return failure if the arguments don't exist
		return json_result({
			'success': 0,
			'error'  : 'invalid parameters',
		})

	email = user_profile['email']

	# Create the documents dcitionary
	docs_cursor = mongo.db.documents.find({
		'lang': lang,
		'email': email })
	doc_dict = { str(d['_id']): d for d in docs_cursor }

	# Create the excerpts dictionary
	excerpt_cursor = mongo.db.excerpts.find({
		'lang': lang,
		'email': email })
	excerpt_dict = { str(e['_id']): e for e in excerpt_cursor }

	plan = {}
	coll = mongo.db["phrases_%s" % lang]
	for document_id in doc_dict.keys():
		excerpt_cursor = mongo.db.excerpts.find({ 'document_id': ObjectId(document_id) }).sort('_id', pymongo.ASCENDING)
		plan[document_id] = [str(e['_id']) for e in excerpt_cursor]

	# Return success
	return json_result({
		'success': 1,
		'result' : {
			'docs': doc_dict,
			'excerpts': excerpt_dict,
			'plan': plan,
		},
	})
コード例 #4
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def get_excerpt_dictionary():

	# Authenticate the user
	user_profile = verify_auth_token()
	if user_profile is None:
		return json_result({
			'success': 0,
			'error'  : 'authentication failed',
		})

	try:
		# Read the parameters
		lang = request.form['lang']
	except KeyError:
		# Return failure if the arguments don't exist
		return json_result({
			'success': 0,
			'error'  : 'invalid parameters',
		})

	email = user_profile['email']

	excerpts = mongo.db.excerpts.find({
		'lang': lang,
		'email': email })

	phrase_ids = []
	for excerpt in excerpts:
		phrase_ids += excerpt['phrase_ids']

	print len(set(phrase_ids))

	coll = mongo.db["phrases_%s" % lang]

	d = {}
	for phrase_id_chunk in dbutils.chunk_list(phrase_ids, 1000):
		cursor = coll.find({ '_id': { '$in': phrase_id_chunk } })
		d.update(dictionary.create_dictionary_from_cursor(lang, cursor))

	print len(set(d.keys()))

	return json_result({
		'success': 1,
		'result' : d,
	})
コード例 #5
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def get_progress():

	# Authenticate the user
	user_profile = verify_auth_token()
	if user_profile is None:
		return json_result({
			'success': 0,
			'error'  : 'authentication failed',
		})

	# Get user properties
	email = user_profile['email']

	try:
		# Read the parameters
		lang = request.form['lang']
	except KeyError:
		# Return failure if the arguments don't exist
		return json_result({
			'success': 0,
			'error'  : 'invalid parameters',
		})

	# Get user progress, or initialize an empty progress history if none exists
	user_progress = mongo.db.user_progress.find_one({ 'email': email, 'lang': lang })
	if user_progress == None:
		user_progress = {
			'email'   : email,
			'lang'	: lang,
			'progress': {
				'defs': { },
				'pron': { },
			},
		}
		mongo.db.user_progress.insert(user_progress)

	# Return success
	return json_result({
		'success': 1,
		'result' : user_progress,
	})
コード例 #6
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def get_dictionary(lang):

	# Authenticate the user
	user_profile = verify_auth_token()
	if not user_profile:
		return json_result({
			'success': 0,
			'error'  : 'authentication failed',
		})

	# Return success
	return send_from_directory(os.path.join(app.appconfig.template_folder, 'dictionaries'), "%s.json" % lang)
コード例 #7
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def test():
	return json_result({
		'success': 1,
	})
コード例 #8
0
ファイル: apiviews.py プロジェクト: tlemberg10/glossify
def add_document():
	# Authenticate the user
	user_profile = verify_auth_token()
	if user_profile is None:
		return json_result({
			'success': 0,
			'error'  : 'authentication failed',
		})

	# Get user properties and params
	email = user_profile['email']
	try:
		title = request.form['title']
		text = request.form['text']
		lang = request.form['lang']
	except KeyError:
		# Return failure if the arguments don't exist
		return json_result({
			'success': 0,
			'error'  : 'invalid parameters',
		})

	# 1. segment the document into excerpts given the language
	excerpts = api_utils.segment_doc(text, lang)

	# Insert the document
	document_id = mongo.db.documents.insert({
		'title': title,
		'text': text,
		'lang': lang,
		'email': email })

	# 2. Get the set of unique phrases to be looked up
	phrases_list, unique_phrases = api_utils.get_phrases_from_excerpts(excerpts, lang)
	
	# 3. Look up all phrases and get phrase-to-ID mapping
	phrase_id_map = api_utils.get_phrase_ids(unique_phrases, lang)

	# 3.5 TODO(kgu) handle phrases not found

	# 4. Insert each excerpt with corresponding phrase ids
	num_ph = sum([len(phrases) for phrases in phrases_list])
	num_hit = 0
	missed_phrases = set()
	new_excerpts = []
	bulk = mongo.db.excerpts.initialize_unordered_bulk_op()
	for excerpt, phrases in zip(excerpts, phrases_list):
		phrase_ids = [phrase_id_map[ph] for ph in phrases if phrase_id_map[ph] != None]
		bulk.insert({
			'email': email,
			'lang': lang,
			'excerpt': excerpt,
			'phrase_ids': phrase_ids,
			'document_id': document_id})
		num_hit += len([1 for ph in phrases if phrase_id_map[ph] != None])
		missed_phrases |= set([ph for ph in phrases if phrase_id_map[ph] == None])
	bulk.execute()

	# Return success, stats for analysis, and missing phrases.
	return json_result({
		'success': 1,
		'document_id': document_id,
		# excerpts stats
		'num_excerpts': len(excerpts),
		'total_phrase_count': num_ph,
		'total_hit_count': num_hit,
		'total_hit_rate': num_hit / float(num_ph),
		# missed phrases
		'missed_phrases': list(missed_phrases)
		})