def new_mark(): form = MarkForm() if form.validate_on_submit(): m = Mark() form.populate_obj(m) m.owner_id = g.user.id m.created = datetime.utcnow() if form.tags.data: m.tags = ' '.join([t.strip() for t in form.tags.data.strip().split(',')])\ .lower() m.clicks = 0 if not form.title.data: soup = BSoup(urlopen(form.url.data)) m.title = soup.title.string db.session.add(m) db.session.commit() flash('New mark %s added' % (m.title), category='info') return redirect(url_for('marks')) if request.args.get('url'): form.url.data = request.args.get('url') if request.args.get('title'): form.title.data = request.args.get('title') if request.args.get('type') == 'feed': form.type.data = 'feed' return render_template('mark/new.html', title='New mark', form=form)
def giveMark(request, grade_id, lesson_id): render = {} grade = get_object_or_404(Grade, id = grade_id) lesson = get_object_or_404(Lesson, id = lesson_id) if (grade in request.user.grades.all()) and (lesson.teacher == request.user): if not request.POST.get('send'): marks = [] pupilsForMarks = [] for pupil in Pupil.objects.filter(grade = grade): if request.POST.get('pupil-%d' % pupil.id): try: mark = Mark.objects.get(lesson = lesson, pupil = pupil) markForm = MarkForm(prefix = pupil.id, instance = mark) except ObjectDoesNotExist: markForm = MarkForm(prefix = pupil.id) marks.append({'name': pupil.fi(), 'form': markForm}) pupilsForMarks.append(pupil.id) render['marks'] = marks return render_to_response('marks/teacher/giveMark.html', render, context_instance = RequestContext(request)) else: error = 0 for pupil in Pupil.objects.filter(grade = grade): if request.POST.get('%d-mark' % pupil.id) or request.POST.get('%d-absent' % pupil.id): form = MarkForm(request.POST, prefix = pupil.id) if form.is_valid(): try: mark = Mark.objects.get(pupil = Pupil.objects.get(id = pupil.id), lesson = lesson) except ObjectDoesNotExist: mark = Mark() mark.pupil = Pupil.objects.get(id = pupil.id) mark.lesson = lesson mark.mark = form.cleaned_data['mark'] mark.absent = form.cleaned_data['absent'] mark.comment = form.cleaned_data['comment'] mark.save() else: error = 1 if error == 0: return HttpResponseRedirect('/marks/grade/%d/' % grade.id) else: marks = [] for pupil in Pupil.objects.filter(grade = grade): if request.POST.get('%d-mark' % pupil.id) or request.POST.get('%d-absent' % pupil.id): marks.append({'name': pupil.fi(), 'form': MarkForm(request.POST, prefix = pupil.id)}) render['marks'] = marks return render_to_response('marks/teacher/giveMark.html', render, context_instance = RequestContext(request)) return Http404
def check_mark(): form = MarkForm() form.fsrar.choices = Utm.utm_choices() params = { 'template_name_or_list': 'mark.html', 'title': 'Проверка марок УТМ', 'description': 'Запрос наличия марки в УТМ (для помарочного учета)', 'form': form, } if request.method == 'POST': res = None file = 'queryfilter.xml' xml = get_xml_template(file) url_suffix = '/opt/in/QueryFilter' mark = request.form['mark'].strip() utm = Utm.get_one(fsrar=request.form['fsrar']) form.fsrar.data = utm.fsrar query = create_unique_mark_xml(utm.fsrar, mark, xml) url = utm.url() + url_suffix files = {'xml_file': (file, open(query, 'rb'), 'application/xml')} try: r = requests.post(url, files=files) for sign in ET.fromstring( r.text).iter('{http://fsrar.ru/WEGAIS/QueryFilter}result'): res = sign.text except requests.ConnectionError: res = 'УТМ недоступен' except UnicodeError: res = 'Ошибка в URL проверьте переменные окружения' log = f'Проверка марки: {utm.title} [{utm.fsrar}] {mark[:16]}...{mark[-16:]} {res}' flash(log) logging.info(log) return render_template(**params)
def convert_base36(): """ Расшифровка алккода из АМ PDF417 (cтарого образца)""" def base36encode(number: int, alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') -> str: """Converts an integer to a base36 string.""" if not isinstance(number, int): raise TypeError('number must be an integer') base36 = '' sign = '' if number < 0: sign = '-' number = -number if 0 <= number < len(alphabet): return sign + alphabet[number] while number != 0: number, i = divmod(number, len(alphabet)) base36 = alphabet[i] + base36 return sign + base36 def base36decode(number: str): return int(number[3:19], 36) def convert_to_alccode(number): return str(base36decode(number)).zfill(19) def convert_to_pdf417_part(code): return base36encode(int(code)).zfill(16) form = MarkForm() params = { 'form': form, 'template_name_or_list': 'base36.html', 'title': 'Преобразование PDF и алкокода', 'description': f'Расшифровываем алкокод из PDF417, формирует часть PDF417 для поиска из алкокода', } if request.method == 'POST': mark = form.mark.data.rstrip() if len(mark) == 68: flash(convert_to_alccode(mark)) elif len(mark) == 19: flash(convert_to_pdf417_part(mark)) elif len(mark) == 150: flash('Невозможно извлечь алкокод из марки нового образца') else: flash('Неожиданная длина марки') return render_template(**params)
def edit_mark(id): m = g.user.mid(id) form = MarkForm(obj=m) if not m: abort(403) if form.validate_on_submit(): form.populate_obj(m) m.updated = datetime.utcnow() db.session.add(m) db.session.commit() flash('Mark %s updated' % (form.title.data), category='info') if form.referrer.data and is_safe_url(form.referrer.data): return redirect(form.referrer.data) return redirect(url_for('marks')) form.referrer.data = request.referrer return render_template('mark/edit.html', title='Edit mark - %s' % m.title, form=form)