def lecture_create(campus_id): try: request_data = request.get_json() year = request_data.get('year') term = Lecture.term_str_to_int(request_data.get('term')) code = request_data.get('code') if not (year and term and code): raise ValueError except TypeError or ValueError: return jsonify({'error': {'code': 'invalid_request'}}) lecture = Lecture( campus_id=campus_id, year=year, term=term, code=code ) try: lecture.save() except NotUniqueError: return jsonify({'error': {'code': 'lecture_exist'}}), 400 return jsonify({ 'id': str(lecture.id), 'year': year, 'term': Lecture.term_int_to_str(lecture.term), 'code': lecture.code })
def search(campus_id, query, page, size=24, year=None, term=None): from opencampus.module.lecture.models import Lecture results = [] page -= 1 if query == '': if not year or not term: query = Lecture.objects(campus_id=campus_id) else: query = Lecture.objects(campus_id=campus_id, year=year, term=term) for lecture in query.skip(page*size).limit(size): results.append({ 'year': lecture.year, 'term_code': lecture.term, 'term': lecture.get_term_text(), 'code': lecture.code, 'type': lecture.type, 'subject_code': lecture.subject_code, 'subject_name': lecture.subject_name, 'credit': lecture.credit, 'grade': lecture.grade, 'departments': lecture.departments, 'professors': lecture.professors, 'tags': lecture.tags if lecture.tags else [], 'term_str': Lecture.term_int_to_str(lecture.term) }) else: es = Elasticsearch(hosts=app.config.get('ELASTICSEARCH_HOSTS')) search_body = { 'from': page*size, 'size': size, 'sort': ['_score', {'year': 'desc'}, {'term_code': 'desc'}], 'query': { 'bool': { 'must': [ { 'query_string': { 'default_field': '_all', 'query': query } } ] } } } if year and term: search_body['query']['bool']['must'] += [ { 'term': { 'lecture.year': year } }, { 'term': { 'lecture.term_code': term } } ] res = es.search(index=_get_index_name(campus_id), body=search_body) for lecture in res.get('hits').get('hits'): lecture = lecture.get('_source') lecture['term_str'] = Lecture.term_int_to_str(lecture['term_code']) results.append(lecture) return results