def get_color(self) -> Color: if self.tone is not None: c = Color() c.set_hue(self.tone.get_hue()) c.set_saturation(0.5) c.set_luminance(0.4) return c if self.color is not None: return self.color return DEFAULT_COLOR
def add_trace_and_uncertainty(df, figure, color_of_trajectory, name): uncertainty_color = Color(color_of_trajectory) uncertainty_color.set_hue(uncertainty_color.get_hue() + .15) figure.add_trace( go.Scattermapbox(lat=df.lat, lon=df.lon, mode='markers+lines', name=f'{name}', line={'color': color_of_trajectory})) figure.add_trace( go.Scattermapbox(lat=df.l_lat, lon=df.l_lon, mode='lines', name=f'{name} - left uncertainty', line={'color': f'{uncertainty_color.hex}'})) figure.add_trace( go.Scattermapbox(lat=df.r_lat, lon=df.r_lon, mode='lines', name=f'{name} - right uncertainty', line={'color': f'{uncertainty_color.hex}'}))
def _marks_to_excel(data): """ :type discipline: students.models.Discipline :type group: students.models.Group """ from students.models.group import Group # data = json.loads(json.loads(DisciplineMarksCache.get(discipline.pk, group.pk))) lessons = data['lessons'] students = data['students'] mark_types = data['mark_types'] lesson_types = data['lesson_types'] group = None if len(students) > 0: group = Group.objects.filter(pk=students[0]['group']).first() else: return '' students.sort(key=lambda s: s['sum'], reverse=True) # Create an in-memory output file for the new workbook. output = io.BytesIO() workbook = xlsxwriter.Workbook(output, {'in_memory': True}) frmt_student = workbook.add_format() frmt_student.set_border() frmt_student.set_align('center') frmt_student.set_align('vcenter') frmt_student.set_rotation(90) frmt_student.set_text_wrap() frmt_header = workbook.add_format() frmt_header.set_border() frmt_header.set_align('center') frmt_header.set_align('vcenter') frmt_header.set_text_wrap() worksheet = workbook.add_worksheet(u"{}".format(group.title if group else u'студенты')) bg_colors = { # Mark.MARK_ABSENT: "#ffeeee", Mark.MARK_NORMAL: "#aef28c", Mark.MARK_GOOD: "#aef28c", Mark.MARK_EXCELLENT: "#4bb814", Mark.MARK_AWESOME: "#388a0f", Mark.MARK_FANTASTIC: "#255c0a", Mark.MARK_INCREDIBLE: "#3a4408", Mark.MARK_BLACK_HOLE: "black", Mark.MARK_SHINING: "yellow", } mark_formats = {} lesson_formts = {} # Подготовка стилей for lt in lesson_types: frmt = workbook.add_format() frmt.set_align('center') frmt.set_align('vcenter') frmt.set_text_wrap() frmt.set_border() if lt['id'] >= 2: bg_color = Color(bg_colors[Mark.MARK_NORMAL]) bg_color.set_hue({ 2: 0.15, 3: 0.5, 4: 0.6, 5: 0.8 }.get(lt['id'], bg_color.get_hue())) frmt.set_bg_color(bg_color.get_hex_l()) lesson_formts[lt['id']] = frmt for mt in mark_types: if mark_formats.get(lt['id']) is None: mark_formats[lt['id']] = {} frmt = workbook.add_format() frmt.set_align('center') frmt.set_align('vcenter') frmt.set_border() bg_color = bg_colors.get(mt['k'], 'white') color = { Mark.MARK_BLACK_HOLE: 'white', Mark.MARK_AWESOME: 'white', Mark.MARK_EXCELLENT: 'white', Mark.MARK_FANTASTIC: 'white', Mark.MARK_INCREDIBLE: 'white', }.get(mt['k'], 'black') bg_color = Color(bg_color) color = Color(color) if mt['k'] > 0: if lt['id'] == 2: bg_color.set_hue(0.15) bg_color.set_luminance(min(bg_color.get_luminance() * 1.4, 0.9)) elif lt['id'] == 3: bg_color.set_hue(0.5) bg_color.set_luminance(min(bg_color.get_luminance() * 1.1, 0.9)) elif lt['id'] == 4: bg_color.set_hue(0.6) bg_color.set_luminance(min(bg_color.get_luminance() * 1.1, 0.9)) elif lt['id'] == 5: bg_color.set_hue(0.8) bg_color.set_luminance(min(bg_color.get_luminance() * 1.1, 0.9)) else: bg_color.set_hue(0.25) bg_color = { Mark.MARK_SHINING: Color(bg_colors[Mark.MARK_SHINING]), Mark.MARK_BLACK_HOLE: Color(bg_colors[Mark.MARK_BLACK_HOLE]), }.get(mt['k'], bg_color) frmt.set_bg_color(bg_color.get_hex_l()) frmt.set_color(color.get_hex_l()) mark_formats[lt['id']][mt['k']] = frmt # заполнение строки занятий worksheet.set_row(0, 90) for r, l in enumerate(lessons, 2): worksheet.write(r, 0, l['dn_raw'].strip(), lesson_formts[l['lt']]) h = 20 * max(1, l['dn_raw'].strip().count("\n") + 1) worksheet.set_row(r, h) # заполнение таблицы оценок max_width = 1 for c, s in enumerate(students, 1): name = "%s %s" % (s['second_name'], s['name']) score = Discipline.compute_percents(s['marks'], lessons=lessons) score = "{score} / {percents}%".format(**{ 'percents': int(score * 100), 'score': s['sum'], }) # ячейка имени worksheet.write(0, c, name, frmt_student) worksheet.write(1, c, score, frmt_header) # заполняем оценки marks = s['marks'] for r, m in enumerate(marks, 2): if m['m'] is not None: if abs(m['m']) > Mark.MARK_SPECIAL: mark = { Mark.MARK_BLACK_HOLE: u'∅', Mark.MARK_SHINING: u'∞', Mark.MARK_MERCY: u'○', Mark.MARK_KEEP: u'=', }.get(m['m'], '') else: mark = u'н' if m['m'] == -2 else m['m'] else: mark = '' lt = lessons[r - 2]['lt'] worksheet.write(r, c, mark, mark_formats[lt].get(0 if m['m'] is None else m['m'], None)) if len(name) > max_width: max_width = len(name) # декоративные улучшения worksheet.set_column(0, 0, max_width) worksheet.merge_range('A1:A2', group.title, frmt_header) # print setup if len(lessons) < len(students): worksheet.set_landscape() worksheet.fit_to_pages(1, 1) # Close the workbook before streaming the data. workbook.close() # Rewind the buffer. output.seek(0) return output