diff --git a/ptulsconv/pdf/line_count.py b/ptulsconv/pdf/line_count.py index b30313f..7563021 100644 --- a/ptulsconv/pdf/line_count.py +++ b/ptulsconv/pdf/line_count.py @@ -1,7 +1,7 @@ from typing import List, Optional -from reportlab.pdfbase import pdfmetrics -from reportlab.pdfbase.ttfonts import TTFont +# from reportlab.pdfbase import pdfmetrics +# from reportlab.pdfbase.ttfonts import TTFont from reportlab.lib.units import inch from reportlab.lib.pagesizes import letter, portrait @@ -18,8 +18,8 @@ def build_columns(lines: List[ADRLine], reel_list: Optional[List[str]], show_priorities=False, include_omitted=False): columns = list() reel_numbers = reel_list or sorted( - set([x.reel for x in lines if x.reel is not None]) - ) + set([x.reel for x in lines if x.reel is not None]) + ) num_column_width = 15. / 32. * inch @@ -46,35 +46,49 @@ def build_columns(lines: List[ADRLine], reel_list: Optional[List[str]], columns.append({ 'heading': 'TV', - 'value_getter': (lambda recs: len([r for r in recs if r.tv])), - 'value_getter2': (lambda recs: - time_format(sum([r.time_budget_mins or 0. - for r in recs if r.tv]))), - 'style_getter': (lambda col_index: - [('ALIGN', (col_index, 0), (col_index, -1), 'CENTER'), + 'value_getter': lambda recs: len([r for r in recs if r.tv]), + 'value_getter2': (lambda recs: + time_format(sum([r.time_budget_mins or 0. + for r in recs if r.tv])) + ), + 'style_getter': (lambda col_index: + [('ALIGN', (col_index, 0), (col_index, -1), + 'CENTER'), ('LINEBEFORE', (col_index, 0), (col_index, -1), 1., colors.black), ('LINEAFTER', (col_index, 0), (col_index, -1), - .5, colors.gray)]), + .5, colors.gray)] + ), 'width': num_column_width }) columns.append({ 'heading': 'Opt', 'value_getter': lambda recs: len([r for r in recs if r.optional]), - 'value_getter2': lambda recs: time_format(sum([r.time_budget_mins or 0. - for r in recs if r.optional])), - 'style_getter': lambda col_index: [('ALIGN', (col_index, 0), (col_index, -1), 'CENTER'), - ('LINEAFTER', (col_index, 0), (col_index, -1), .5, colors.gray)], + 'value_getter2': (lambda recs: + time_format(sum([r.time_budget_mins or 0. + for r in recs if r.optional])) + ), + 'style_getter': (lambda col_index: + [('ALIGN', (col_index, 0), (col_index, -1), + 'CENTER'), + ('LINEAFTER', (col_index, 0), (col_index, -1), + .5, colors.gray)] + ), 'width': num_column_width }) columns.append({ 'heading': 'Eff', 'value_getter': lambda recs: len([r for r in recs if r.effort]), - 'value_getter2': lambda recs: time_format(sum([r.time_budget_mins or 0. - for r in recs if r.effort])), - 'style_getter': lambda col_index: [('ALIGN', (col_index, 0), (col_index, -1), 'CENTER')], + 'value_getter2': (lambda recs: + time_format(sum([r.time_budget_mins or 0. + for r in recs if r.effort])) + ), + 'style_getter': (lambda col_index: + [('ALIGN', (col_index, 0), (col_index, -1), + 'CENTER')] + ), 'width': num_column_width }) @@ -90,23 +104,26 @@ def build_columns(lines: List[ADRLine], reel_list: Optional[List[str]], }) if len(reel_numbers) > 0: - # columns.append({ - # 'heading': 'RX', - # 'value_getter': lambda recs: blank_len([r for r in recs if 'Reel' not in r.keys()]), - # 'value_getter2': lambda recs: time_format(sum([r.get('Time Budget Mins', 0.) for r in recs - # if 'Reel' not in r.keys()])), - # 'style_getter': lambda col_index: [('ALIGN', (col_index, 0), (col_index, -1), 'CENTER')], - # 'width': num_column_width - # }) for n in reel_numbers: columns.append({ 'heading': n, - 'value_getter': lambda recs, n1=n: len([r for r in recs if r.reel == n1]), - 'value_getter2': lambda recs, n1=n: time_format(sum([r.time_budget_mins or 0. for r - in recs if r.reel == n1])), - 'style_getter': lambda col_index: [('ALIGN', (col_index, 0), (col_index, -1), 'CENTER'), - ('LINEAFTER', (col_index, 0), (col_index, -1), .5, colors.gray)], + 'value_getter': (lambda recs, n1=n: + len([r for r in recs if r.reel == n1]) + ), + 'value_getter2': (lambda recs, n1=n: + time_format(sum([r.time_budget_mins or 0. + for r in recs + if r.reel == n1])) + ), + 'style_getter': (lambda col_index: + [('ALIGN', (col_index, 0), (col_index, -1), + 'CENTER'), + ('LINEAFTER', (col_index, 0), + (col_index, -1), + .5, colors.gray)] + ), + 'width': num_column_width }) @@ -114,18 +131,26 @@ def build_columns(lines: List[ADRLine], reel_list: Optional[List[str]], for n in range(1, 6,): columns.append({ 'heading': 'P%i' % n, - 'value_getter': lambda recs: len([r for r in recs if r.priority == n]), - 'value_getter2': lambda recs: time_format(sum([r.time_budget_mins or 0. - for r in recs if r.priority == n])), + 'value_getter': lambda recs: len([r for r in recs + if r.priority == n]), + 'value_getter2': (lambda recs: + time_format(sum([r.time_budget_mins or 0. + for r in recs + if r.priority == n])) + ), 'style_getter': lambda col_index: [], 'width': num_column_width }) columns.append({ 'heading': '>P5', - 'value_getter': lambda recs: len([r for r in recs if (r.priority or 5) > 5]), - 'value_getter2': lambda recs: time_format(sum([r.time_budget_mins or 0. - for r in recs if (r.priority or 5) > 5])), + 'value_getter': lambda recs: len([r for r in recs + if (r.priority or 5) > 5]), + 'value_getter2': (lambda recs: + time_format(sum([r.time_budget_mins or 0. + for r in recs + if (r.priority or 5) > 5])) + ), 'style_getter': lambda col_index: [], 'width': num_column_width }) @@ -134,32 +159,47 @@ def build_columns(lines: List[ADRLine], reel_list: Optional[List[str]], columns.append({ 'heading': 'Omit', 'value_getter': lambda recs: len([r for r in recs if r.omitted]), - 'value_getter2': lambda recs: time_format(sum([r.time_budget_mins or 0. - for r in recs if r.omitted])), - 'style_getter': lambda col_index: [('ALIGN', (col_index, 0), (col_index, -1), 'CENTER')], + 'value_getter2': (lambda recs: + time_format(sum([r.time_budget_mins or 0. + for r in recs if r.omitted]))), + 'style_getter': (lambda col_index: + [('ALIGN', (col_index, 0), (col_index, -1), + 'CENTER')] + ), 'width': num_column_width }) columns.append({ 'heading': 'Total', 'value_getter': lambda recs: len([r for r in recs if not r.omitted]), - 'value_getter2': lambda recs: time_format(sum([r.time_budget_mins or 0. - for r in recs if not r.omitted]), zero_str=None), - 'style_getter': lambda col_index: [('LINEBEFORE', (col_index, 0), (col_index, -1), 1.0, colors.black), - ('ALIGN', (col_index, 0), (col_index, -1), 'CENTER')], + 'value_getter2': (lambda recs: + time_format( + sum([r.time_budget_mins or 0. + + for r in recs if not r.omitted]) + ) + ), + 'style_getter': (lambda col_index: + [('LINEBEFORE', (col_index, 0), (col_index, -1), + 1.0, colors.black), + ('ALIGN', (col_index, 0), (col_index, -1), + 'CENTER')] + ), 'width': 0.5 * inch }) return columns -def populate_columns(lines: List[ADRLine], columns, include_omitted, _page_size): +def populate_columns(lines: List[ADRLine], columns, include_omitted, + _page_size): data = list() styles = list() columns_widths = list() - sorted_character_numbers: List[str] = sorted(set([x.character_id for x in lines]), - key=lambda x: str(x)) + sorted_character_numbers: List[str] = sorted( + set([x.character_id for x in lines]), + key=lambda x: str(x)) # construct column styles @@ -184,8 +224,10 @@ def populate_columns(lines: List[ADRLine], columns, include_omitted, _page_size) row_data.append(col['value_getter'](list(char_records))) row_data2.append(col['value_getter2'](list(char_records))) - styles.extend([('TEXTCOLOR', (0, row2_index), (-1, row2_index), colors.red), - ('LINEBELOW', (0, row2_index), (-1, row2_index), 0.5, colors.black)]) + styles.extend([('TEXTCOLOR', (0, row2_index), (-1, row2_index), + colors.red), + ('LINEBELOW', (0, row2_index), (-1, row2_index), + 0.5, colors.black)]) data.append(row_data) data.append(row_data2) @@ -202,7 +244,8 @@ def populate_columns(lines: List[ADRLine], columns, include_omitted, _page_size) summary_row1.append("") summary_row2.append("") - styles.append(('LINEABOVE', (0, row1_index), (-1, row1_index), 2.0, colors.black)) + styles.append(('LINEABOVE', (0, row1_index), (-1, row1_index), 2.0, + colors.black)) data.append(summary_row1) data.append(summary_row2) @@ -214,17 +257,20 @@ def populate_columns(lines: List[ADRLine], columns, include_omitted, _page_size) # pass -def output_report(lines: List[ADRLine], reel_list: List[str], include_omitted=False, - page_size=portrait(letter), font_name='Helvetica'): - columns = build_columns(lines, include_omitted=include_omitted, reel_list=reel_list) - data, style, columns_widths = populate_columns(lines, columns, include_omitted, page_size) +def output_report(lines: List[ADRLine], reel_list: List[str], + include_omitted=False, page_size=portrait(letter), + font_name='Helvetica'): + columns = build_columns(lines, include_omitted=include_omitted, + reel_list=reel_list) + data, style, columns_widths = populate_columns(lines, columns, + include_omitted, page_size) style.append(('FONTNAME', (0, 0), (-1, -1), font_name)) style.append(('FONTSIZE', (0, 0), (-1, -1), 9.)) style.append(('LINEBELOW', (0, 0), (-1, 0), 1.0, colors.black)) # style.append(('LINEBELOW', (0, 1), (-1, -1), 0.25, colors.gray)) - #pdfmetrics.registerFont(TTFont('Futura', 'Futura.ttc')) + # pdfmetrics.registerFont(TTFont('Futura', 'Futura.ttc')) title = "%s Line Count" % lines[0].title filename = title + '.pdf' @@ -236,7 +282,8 @@ def output_report(lines: List[ADRLine], reel_list: List[str], include_omitted=Fa document_header='Line Count') # header_data, header_style, header_widths = build_header(columns_widths) - # header_table = Table(data=header_data, style=header_style, colWidths=header_widths) + # header_table = Table(data=header_data, style=header_style, + # colWidths=header_widths) table = Table(data=data, style=style, colWidths=columns_widths) @@ -251,6 +298,7 @@ def output_report(lines: List[ADRLine], reel_list: List[str], include_omitted=Fa omitted_count = len([x for x in lines if x.omitted]) if not include_omitted and omitted_count > 0: - story.append(Paragraph("* %i Omitted lines are excluded." % omitted_count, style)) + story.append(Paragraph("* %i Omitted lines are excluded." % + omitted_count, style)) doc.build(story) diff --git a/ptulsconv/pdf/recordist_log.py b/ptulsconv/pdf/recordist_log.py index fc93317..38f2245 100644 --- a/ptulsconv/pdf/recordist_log.py +++ b/ptulsconv/pdf/recordist_log.py @@ -3,4 +3,4 @@ def output_report(records): # order by start - pass \ No newline at end of file + pass diff --git a/ptulsconv/pdf/summary_log.py b/ptulsconv/pdf/summary_log.py index 11d1cd6..c66df6e 100644 --- a/ptulsconv/pdf/summary_log.py +++ b/ptulsconv/pdf/summary_log.py @@ -27,23 +27,28 @@ def build_aux_data_field(line: ADRLine): tag_field = "" if line.effort: bg_color = 'red' - tag_field += "%s " % (bg_color, fg_color, "EFF") + tag_field += "%s " \ + % (bg_color, fg_color, "EFF") elif line.tv: bg_color = 'blue' - tag_field += "%s " % (bg_color, fg_color, "TV") + tag_field += "%s " \ + % (bg_color, fg_color, "TV") elif line.adlib: bg_color = 'purple' - tag_field += "%s " % (bg_color, fg_color, "ADLIB") + tag_field += "%s " \ + % (bg_color, fg_color, "ADLIB") elif line.optional: bg_color = 'green' - tag_field += "%s" % (bg_color, fg_color, "OPTIONAL") + tag_field += "%s" \ + % (bg_color, fg_color, "OPTIONAL") entries.append(tag_field) return "
".join(entries) -def build_story(lines: List[ADRLine], tc_rate: TimecodeFormat, font_name='Helvetica'): +def build_story(lines: List[ADRLine], tc_rate: TimecodeFormat, + font_name='Helvetica'): story = list() this_scene = None @@ -60,7 +65,8 @@ def build_story(lines: List[ADRLine], tc_rate: TimecodeFormat, font_name='Helvet ('LEFTPADDING', (0, 0), (0, 0), 0.0), ('BOTTOMPADDING', (0, 0), (-1, -1), 24.)] - cue_number_field = "%s
%s" % (line.cue_number, line.character_name) + cue_number_field = "%s
%s" \ + % (line.cue_number, line.character_name) time_data = time_format(line.time_budget_mins) @@ -79,7 +85,8 @@ def build_story(lines: List[ADRLine], tc_rate: TimecodeFormat, font_name='Helvet ]] line_table = Table(data=line_table_data, - colWidths=[inch * 0.75, inch, inch * 3., 0.5 * inch, inch * 2.], + colWidths=[inch * 0.75, inch, inch * 3., 0.5 * inch, + inch * 2.], style=table_style) if (line.scene or "[No Scene]") != this_scene: @@ -97,7 +104,7 @@ def build_story(lines: List[ADRLine], tc_rate: TimecodeFormat, font_name='Helvet def build_tc_data(line: ADRLine, tc_format: TimecodeFormat): tc_data = tc_format.seconds_to_smpte(line.start) + "
" + \ - tc_format.seconds_to_smpte(line.finish) + tc_format.seconds_to_smpte(line.finish) third_line = [] if line.reel is not None: if line.reel[0:1] == 'R': @@ -111,11 +118,12 @@ def build_tc_data(line: ADRLine, tc_format: TimecodeFormat): return tc_data -def generate_report(page_size, lines: List[ADRLine], tc_rate: TimecodeFormat, character_number=None, - include_omitted=True): +def generate_report(page_size, lines: List[ADRLine], tc_rate: TimecodeFormat, + character_number=None, include_omitted=True): if character_number is not None: lines = [r for r in lines if r.character_id == character_number] - title = "%s ADR Report (%s)" % (lines[0].title, lines[0].character_name) + title = "%s ADR Report (%s)" % (lines[0].title, + lines[0].character_name) document_header = "%s ADR Report" % lines[0].character_name else: title = "%s ADR Report" % lines[0].title