def render_indicia_publisher(self, record): from apps.gcd.templatetags.display import absolute_url,\ show_indicia_pub from apps.gcd.templatetags.credits import get_country_flag return_val = show_indicia_pub(record) if record.series.publisher != self.brand.parent: return_val += " (%s%s)" % (get_country_flag( record.series.publisher.country), absolute_url(record.series.publisher)) return mark_safe(return_val)
def _show_feature_logo(self, story): from apps.gcd.templatetags.display import absolute_url first = True features = '' for feature in story.feature_logo.all(): if first: first = False else: features += '; ' features += absolute_url(feature, feature.logo) return mark_safe(features)
def field_value(revision, field): value = getattr(revision, field) if field in ['is_surrogate', 'no_volume', 'display_volume_with_number', 'no_brand', 'page_count_uncertain', 'title_inferred', 'no_barcode', 'no_indicia_frequency', 'no_isbn', 'year_began_uncertain', 'year_ended_uncertain', 'on_sale_date_uncertain', 'is_comics_publication']: return yesno(value, 'Yes,No') elif field in ['is_current']: res_holder_display = '' if revision.previous(): reservation = revision.source.get_ongoing_reservation() if revision.previous().is_current and not value and reservation: res_holder = reservation.indexer res_holder_display = ' (ongoing reservation held by %s %s)' % \ (res_holder.first_name, res_holder.last_name) return yesno(value, 'Yes,No') + res_holder_display elif field in ['publisher', 'indicia_publisher', 'series', 'origin_issue', 'target_issue']: return absolute_url(value) elif field in ['origin', 'target']: return value.full_name_with_link() elif field == 'brand': if value and value.emblem: return mark_safe('<img src="' + value.emblem.icon.url + '"> ' \ + absolute_url(value)) return absolute_url(value) elif field in ['notes', 'tracking_notes', 'publication_notes', 'characters', 'synopsis']: return linebreaksbr(value) elif field == 'reprint_notes': reprint = '' if value.strip() != '': for string in split_reprint_string(value): string = string.strip() reprint += '<li> ' + esc(string) + ' </li>' if reprint != '': reprint = '<ul>' + reprint + '</ul>' return mark_safe(reprint) elif field in ['url']: return urlize(value) elif field in ['indicia_pub_not_printed']: return yesno(value, 'Not Printed,Printed') elif field == 'group': brand_groups = '' for brand in value.all(): brand_groups += absolute_url(brand) + '; ' if brand_groups: brand_groups = brand_groups[:-2] return mark_safe(brand_groups) elif field in ['no_editing', 'no_script', 'no_pencils', 'no_inks', 'no_colors', 'no_letters']: return yesno(value, 'X, ') elif field in ['page_count']: if revision.source_name == 'issue' and \ revision.changeset.storyrevisions.count(): # only calculate total sum for issue not sequences total_pages = sum_page_counts(revision.active_stories()) if revision.variant_of: if revision.changeset.issuerevisions.count() > 1: stories = revision.changeset.storyrevisions\ .exclude(issue=revision.issue) else: stories = revision.variant_of.active_stories() if revision.active_stories().count(): # variant has cover sequence, add page counts without cover stories = stories.exclude(sequence_number=0) total_pages += sum_page_counts(stories) else: # variant has no extra cover sequence total_pages = sum_page_counts(stories) sum_story_pages = format_page_count(total_pages) return u'%s (note: total sum of story page counts is %s)' % \ (format_page_count(value), sum_story_pages) return format_page_count(value) elif field == 'isbn': if value: if validated_isbn(value): return u'%s (note: valid ISBN)' % value elif len(value.split(';')) > 1: return_val = value + ' (note: ' for isbn in value.split(';'): return_val = return_val + u'%s; ' % ("valid ISBN" \ if validated_isbn(isbn) else "invalid ISBN") return return_val + 'ISBNs are inequal)' elif value: return u'%s (note: invalid ISBN)' % value elif field == 'barcode': if value: barcodes = value.split(';') return_val = value + ' (note: ' for barcode in barcodes: return_val = return_val + u'%s; ' % ("valid UPC/EAN" \ if valid_barcode(barcode) \ else "invalid UPC/EAN or non-standard") return return_val[:-2] + ')' elif field == 'leading_article': if value == True: return u'Yes (sorted as: %s)' % remove_leading_article(revision.name) else: return u'No' elif field in ['has_barcode', 'has_isbn', 'has_issue_title', 'has_indicia_frequency', 'has_volume', 'has_rating']: if hasattr(revision, 'changed'): if revision.changed[field] and value == False: kwargs = {field[4:]: ''} if field[4:] == 'issue_title': kwargs = {'title': ''} if revision.series: value_count = revision.series.active_issues()\ .exclude(**kwargs).count() if value_count: return 'No (note: %d issues have a non-empty %s value)' % \ (value_count, field[4:]) return yesno(value, 'Yes,No') elif field == 'is_singleton': if hasattr(revision, 'changed'): if revision.changed[field] and value == True: if revision.series: value_count = revision.series.active_base_issues().count() if value_count: return 'Yes (note: the series has %d issue%s)' % \ (value_count, pluralize(value_count)) return yesno(value, 'Yes,No') elif field == 'after' and not hasattr(revision, 'changed'): # for previous revision (no attr changed) display empty string return '' return value
def render_publisher(self, value): from apps.gcd.templatetags.display import absolute_url from apps.gcd.templatetags.credits import show_country_info display_publisher = "<img %s>" % (show_country_info(value.country)) return mark_safe(display_publisher) + absolute_url(value)
def field_value(revision, field): value = getattr(revision, field) if field in ['script', 'pencils', 'inks', 'colors', 'letters', 'editing']: if type(revision).__name__ == 'IssueRevision': credits = revision.issue_credit_revisions.filter( credit_type__id=CREDIT_TYPES[field], deleted=False) else: credits = revision.story_credit_revisions.filter( credit_type__id=CREDIT_TYPES[field], deleted=False) if value and credits: value += '; ' for credit in credits: value += credit.creator.display_credit(credit, url=True) + '; ' if credits: value = value[:-2] return mark_safe(value) if field in [ 'is_surrogate', 'no_volume', 'display_volume_with_number', 'no_brand', 'page_count_uncertain', 'title_inferred', 'no_barcode', 'no_indicia_frequency', 'no_isbn', 'year_began_uncertain', 'year_overall_began_uncertain', 'year_ended_uncertain', 'year_overall_ended_uncertain', 'on_sale_date_uncertain', 'is_comics_publication', 'no_indicia_printer' ]: return yesno(value, 'Yes,No') elif field in ['is_current']: res_holder_display = '' if revision.previous(): reservation = revision.source.get_ongoing_reservation() if revision.previous().is_current and not value and reservation: res_holder = reservation.indexer res_holder_display = ' (ongoing reservation held by %s %s)' % \ (res_holder.first_name, res_holder.last_name) return yesno(value, 'Yes,No') + res_holder_display elif field in [ 'publisher', 'indicia_publisher', 'series', 'origin_issue', 'target_issue', 'award', 'from_feature', 'to_feature' ]: return absolute_url(value) elif field in ['origin', 'target']: return value.full_name_with_link() elif field == 'brand': if value and value.emblem: if settings.FAKE_IMAGES: return absolute_url(value) else: return mark_safe('<img src="' + value.emblem.icon.url + '"> ' + absolute_url(value)) return absolute_url(value) elif field in ['feature_object', 'feature_logo']: first = True features = '' for feature in value.all(): if first: first = False else: features += '; ' features += '<a href="%s">%s</a>' % (feature.get_absolute_url(), esc(feature.name)) return mark_safe(features) elif field in [ 'notes', 'tracking_notes', 'publication_notes', 'characters', 'synopsis' ]: return linebreaksbr(value) elif field == 'reprint_notes': reprint = '' if value.strip() != '': for string in split_reprint_string(value): string = string.strip() reprint += '<li> ' + esc(string) + ' </li>' if reprint != '': reprint = '<ul>' + reprint + '</ul>' return mark_safe(reprint) elif field in ['url']: return urlize(value) elif field in ['indicia_pub_not_printed']: return yesno(value, 'Not Printed,Printed') elif field == 'group': brand_groups = '' for brand in value.all(): brand_groups += absolute_url(brand) + '; ' if brand_groups: brand_groups = brand_groups[:-2] return mark_safe(brand_groups) elif field in [ 'no_editing', 'no_script', 'no_pencils', 'no_inks', 'no_colors', 'no_letters' ]: return yesno(value, 'X, ') elif field in ['page_count']: if revision.source_name == 'issue' and \ revision.changeset.storyrevisions.count(): # only calculate total sum for issue not sequences total_pages = sum_page_counts(revision.active_stories()) if revision.variant_of: if revision.changeset.issuerevisions.count() > 1: stories = revision.changeset.storyrevisions\ .exclude(issue=revision.issue) else: stories = revision.variant_of.active_stories() if revision.active_stories().count(): # variant has cover sequence, add page counts without cover stories = stories.exclude(sequence_number=0) total_pages += sum_page_counts(stories) else: # variant has no extra cover sequence total_pages = sum_page_counts(stories) sum_story_pages = format_page_count(total_pages) return '%s (note: total sum of story page counts is %s)' % \ (format_page_count(value), sum_story_pages) return format_page_count(value) elif field == 'isbn': if value: if validated_isbn(value): return '%s (note: valid ISBN)' % show_isbn(value) elif len(value.split(';')) > 1: return_val = show_isbn(value) + ' (note: ' for isbn in value.split(';'): return_val = return_val + '%s; ' % ("valid ISBN" if validated_isbn(isbn) else "invalid ISBN") return return_val + 'ISBNs are inequal)' elif value: return '%s (note: invalid ISBN)' % value elif field == 'barcode': if value: barcodes = value.split(';') return_val = show_barcode(value) + ' (note: ' for barcode in barcodes: return_val = return_val + '%s; ' % ( "valid UPC/EAN part" if valid_barcode(barcode) else "invalid UPC/EAN part or non-standard") return return_val[:-2] + ')' elif field == 'leading_article': if value is True: return 'Yes (sorted as: %s)' % remove_leading_article( revision.name) else: return 'No' elif field in [ 'has_barcode', 'has_isbn', 'has_issue_title', 'has_indicia_frequency', 'has_volume', 'has_rating' ]: if hasattr(revision, 'changed'): if revision.changed[field] and value is False: kwargs = {field[4:]: ''} if field[4:] == 'issue_title': kwargs = {'title': ''} if revision.series: value_count = revision.series.active_issues()\ .exclude(**kwargs).count() if value_count: return 'No (note: %d issues have a non-empty %s value)' % \ (value_count, field[4:]) return yesno(value, 'Yes,No') elif field == 'is_singleton': if hasattr(revision, 'changed'): if revision.changed[field] and value is True: if revision.series: value_count = revision.series.active_base_issues().count() if value_count != 1: return 'Yes (note: the series has %d issue%s)' % \ (value_count, pluralize(value_count)) elif revision.series.active_issues()\ .exclude(indicia_frequency='').count(): return 'Yes (note: the issue has an indicia frequency)' return yesno(value, 'Yes,No') elif field == 'after' and not hasattr(revision, 'changed'): # for previous revision (no attr changed) display empty string return '' elif field == 'cr_creator_names': creator_names = ", ".join(value.all().values_list('name', flat=True)) return creator_names elif field == 'creator_name': creator_names = "; ".join(value.all().values_list('name', flat=True)) return creator_names elif field == 'feature_object': features = "; ".join(value.all().values_list('name', flat=True)) return features elif field == 'feature_logo': features = "; ".join(value.all().values_list('name', flat=True)) return features elif field == 'indicia_printer': features = "; ".join(value.all().values_list('name', flat=True)) return features elif field == 'feature' and \ revision._meta.model_name == 'featurelogorevision': features = '' for feature in value.all(): features += absolute_url(feature) + '; ' if features: features = features[:-2] return mark_safe(features) return value
def render_name(self, record): from apps.gcd.templatetags.display import absolute_url return absolute_url(record.creator)
def render_brand(self, value): from apps.gcd.templatetags.display import absolute_url return absolute_url(value)
def header_link(changeset): if changeset.inline(): revision = changeset.inline_revision() else: if changeset.issuerevisions.count(): revision = changeset.issuerevisions.all()[0] elif changeset.change_type == CTYPES['series_bond']: revision = changeset.seriesbondrevisions.get() else: raise NotImplementedError if changeset.change_type == CTYPES['publisher']: return absolute_url(revision) elif changeset.change_type == CTYPES['brand_group'] or \ changeset.change_type == CTYPES['indicia_publisher']: return mark_safe(u'%s : %s' % (absolute_url(revision.parent), absolute_url(revision))) elif changeset.change_type == CTYPES['brand']: header_link = u'' if revision.parent: return mark_safe(u'%s : %s' % (absolute_url(revision.parent), absolute_url(revision))) for group in revision.group.all(): header_link += absolute_url(group) + '; ' header_link = header_link[:-2] return mark_safe(u'%s : %s' % (header_link, absolute_url(revision))) elif changeset.change_type == CTYPES['brand_use']: return mark_safe(u'%s at %s (%s)' % (absolute_url(revision.emblem), absolute_url(revision.publisher), revision.year_began)) elif changeset.change_type == CTYPES['series']: if revision.previous() and (revision.previous().publisher != revision.publisher): publisher_string = u'<span class="comparison_highlight">%s</span>'\ % absolute_url(revision.publisher) else: publisher_string = absolute_url(revision.publisher) return mark_safe(u'%s (%s)' % (absolute_url(revision), publisher_string)) elif changeset.change_type in [CTYPES['cover'], CTYPES['issue'], CTYPES['variant_add'], CTYPES['two_issues']]: if changeset.change_type == CTYPES['variant_add']: # second issue revision is base issue and does exist in any case revision = changeset.issuerevisions.all()[1] if changeset.change_type == CTYPES['two_issues']: revision = changeset.issuerevisions.all()[0] series_url = absolute_url(revision.issue.series) pub_url = absolute_url(revision.issue.series.publisher) issue_url = revision.issue.get_absolute_url() issue_num = revision.issue.display_number header_link = mark_safe(u'%s (%s) <a href="%s">%s</a>' % (series_url, pub_url, issue_url, issue_num)) if changeset.change_type == CTYPES['two_issues']: revision = changeset.issuerevisions.all()[1] series_url = absolute_url(revision.issue.series) pub_url = absolute_url(revision.issue.series.publisher) issue_url = revision.issue.get_absolute_url() issue_num = revision.issue.display_number header_link += mark_safe(u' and %s (%s) <a href="%s">%s</a>' % (series_url, pub_url, issue_url, issue_num) ) if changeset.change_type == CTYPES['cover']: if revision.issue.variant_name: header_link += mark_safe(' [%s]' % esc(revision.issue.variant_name)) if changeset.change_type == CTYPES['issue']: if revision.variant_name: header_link += mark_safe(' [%s]' % esc(revision.variant_name)) return header_link elif changeset.change_type == CTYPES['issue_add']: series_url = absolute_url(revision.series) pub_url = absolute_url(revision.series.publisher) # get first skeleton's display num revision = changeset.issuerevisions.order_by('revision_sort_code')[0] issue_num = revision.display_number if revision.issue: # if it's been approved, make it a link to real issue issue_num = u'<a href="%s">%s</a>' % \ (revision.issue.get_absolute_url(), issue_num) if changeset.issuerevisions.count() > 1: # if it was a bulk skeleton, do same for last issue number last_revision = \ changeset.issuerevisions.order_by('-revision_sort_code')[0] last_issue_num = last_revision.display_number if last_revision.issue: last_issue_num = u'<a href="%s">%s</a>' % \ (last_revision.issue.get_absolute_url(), last_issue_num) issue_num = u'%s - %s' % (issue_num, last_issue_num) return mark_safe(u'%s (%s) %s' % (series_url, pub_url, issue_num)) elif changeset.change_type in [CTYPES['feature'], CTYPES['feature_logo']]: return mark_safe(u'%s' % (absolute_url(revision))) elif changeset.change_type == CTYPES['image']: return absolute_url(revision.object) elif changeset.change_type == CTYPES['award']: return mark_safe(u'%s' % (absolute_url(revision))) elif changeset.change_type == CTYPES['creator']: return mark_safe(u'%s' % (absolute_url(revision))) elif changeset.change_type == CTYPES['creator_art_influence']: return mark_safe(u'%s : %s' % (absolute_url(revision.creator), absolute_url(revision))) elif changeset.change_type == CTYPES['received_award']: return mark_safe(u'%s : %s' % (absolute_url(revision.recipient), absolute_url(revision))) elif changeset.change_type == CTYPES['creator_membership']: return mark_safe(u'%s : %s' % (absolute_url(revision.creator), absolute_url(revision))) elif changeset.change_type == CTYPES['creator_non_comic_work']: return mark_safe(u'%s : %s' % (absolute_url(revision.creator), absolute_url(revision))) elif changeset.change_type == CTYPES['creator_relation']: return mark_safe(u'%s : %s' % (absolute_url(revision.from_creator), absolute_url(revision.to_creator))) elif changeset.change_type == CTYPES['creator_school']: return mark_safe(u'%s : %s' % (absolute_url(revision.creator), absolute_url(revision))) elif changeset.change_type == CTYPES['creator_degree']: return mark_safe(u'%s : %s' % (absolute_url(revision.creator), absolute_url(revision))) else: return u''
def header_link(changeset): if changeset.inline(): revision = changeset.inline_revision() else: if changeset.issuerevisions.count(): revision = changeset.issuerevisions.all()[0] elif changeset.change_type == CTYPES['series_bond']: revision = changeset.seriesbondrevisions.get() else: raise NotImplementedError if changeset.change_type == CTYPES['publisher']: return absolute_url(revision) elif changeset.change_type == CTYPES['brand_group'] or \ changeset.change_type == CTYPES['indicia_publisher']: return mark_safe(u'%s : %s' % (absolute_url(revision.parent), absolute_url(revision))) elif changeset.change_type == CTYPES['brand']: header_link = u'' if revision.parent: return mark_safe(u'%s : %s' % (absolute_url(revision.parent), absolute_url(revision))) for group in revision.group.all(): header_link += absolute_url(group) + '; ' header_link = header_link[:-2] return mark_safe(u'%s : %s' % (header_link, absolute_url(revision))) elif changeset.change_type == CTYPES['brand_use']: return mark_safe(u'%s at %s (%s)' % (absolute_url(revision.emblem), absolute_url(revision.publisher), revision.year_began)) elif changeset.change_type == CTYPES['series']: if revision.previous() and (revision.previous().publisher != revision.publisher): publisher_string = u'<span class="comparison_highlight">%s</span>'\ % absolute_url(revision.publisher) else: publisher_string = absolute_url(revision.publisher) return mark_safe(u'%s (%s)' % (absolute_url(revision), publisher_string)) elif changeset.change_type in [CTYPES['cover'], CTYPES['issue'], CTYPES['variant_add'], CTYPES['two_issues']]: if changeset.change_type == CTYPES['variant_add']: # second issue revision is base issue and does exist in any case revision = changeset.issuerevisions.all()[1] if changeset.change_type == CTYPES['two_issues']: revision = changeset.issuerevisions.all()[0] series_url = absolute_url(revision.issue.series) pub_url = absolute_url(revision.issue.series.publisher) issue_url = revision.issue.get_absolute_url() issue_num = revision.issue.display_number header_link = mark_safe(u'%s (%s) <a href="%s">%s</a>' % (series_url, pub_url, issue_url, issue_num)) if changeset.change_type == CTYPES['two_issues']: revision = changeset.issuerevisions.all()[1] series_url = absolute_url(revision.issue.series) pub_url = absolute_url(revision.issue.series.publisher) issue_url = revision.issue.get_absolute_url() issue_num = revision.issue.display_number header_link += mark_safe(u' and %s (%s) <a href="%s">%s</a>' % (series_url, pub_url, issue_url, issue_num)) if changeset.change_type == CTYPES['cover']: if revision.issue.variant_name: header_link += mark_safe(' [%s]' % esc(revision.issue.variant_name)) if changeset.change_type == CTYPES['issue']: if revision.variant_name: header_link += mark_safe(' [%s]' % esc(revision.variant_name)) return header_link elif changeset.change_type == CTYPES['issue_add']: series_url = absolute_url(revision.series) pub_url = absolute_url(revision.series.publisher) # get first skeleton's display num revision = changeset.issuerevisions.order_by('revision_sort_code')[0] issue_num = revision.display_number if revision.issue: # if it's been approved, make it a link to real issue issue_num = u'<a href="%s">%s</a>' % \ (revision.issue.get_absolute_url(), issue_num) if changeset.issuerevisions.count() > 1: # if it was a bulk skeleton, do same for last issue number last_revision = \ changeset.issuerevisions.order_by('-revision_sort_code')[0] last_issue_num = last_revision.display_number if last_revision.issue: last_issue_num = u'<a href="%s">%s</a>' % \ (last_revision.issue.get_absolute_url(), last_issue_num) issue_num = u'%s - %s' % (issue_num, last_issue_num) return mark_safe(u'%s (%s) %s' % (series_url, pub_url, issue_num)) elif changeset.change_type == CTYPES['image']: return absolute_url(revision.object) else: return u''
def field_value(revision, field): value = getattr(revision, field) if field in [ 'is_surrogate', 'no_volume', 'display_volume_with_number', 'no_brand', 'page_count_uncertain', 'title_inferred', 'no_barcode', 'no_indicia_frequency', 'no_isbn', 'year_began_uncertain', 'year_ended_uncertain', 'on_sale_date_uncertain', 'is_comics_publication' ]: return yesno(value, 'Yes,No') elif field in ['is_current']: res_holder_display = '' if revision.previous(): reservation = revision.source.get_ongoing_reservation() if revision.previous().is_current and not value and reservation: res_holder = reservation.indexer res_holder_display = ' (ongoing reservation held by %s %s)' % \ (res_holder.first_name, res_holder.last_name) return yesno(value, 'Yes,No') + res_holder_display elif field in [ 'publisher', 'indicia_publisher', 'series', 'origin_issue', 'target_issue' ]: return absolute_url(value) elif field in ['origin', 'target']: return value.full_name_with_link() elif field == 'brand': if value and value.emblem: return mark_safe('<img src="' + value.emblem.icon.url + '"> ' \ + absolute_url(value)) return absolute_url(value) elif field in [ 'notes', 'tracking_notes', 'publication_notes', 'characters', 'synopsis' ]: return linebreaksbr(value) elif field == 'reprint_notes': reprint = '' if value.strip() != '': for string in split_reprint_string(value): string = string.strip() reprint += '<li> ' + esc(string) + ' </li>' if reprint != '': reprint = '<ul>' + reprint + '</ul>' return mark_safe(reprint) elif field in ['url']: return urlize(value) elif field in ['indicia_pub_not_printed']: return yesno(value, 'Not Printed,Printed') elif field == 'group': brand_groups = '' for brand in value.all(): brand_groups += absolute_url(brand) + '; ' if brand_groups: brand_groups = brand_groups[:-2] return mark_safe(brand_groups) elif field in [ 'no_editing', 'no_script', 'no_pencils', 'no_inks', 'no_colors', 'no_letters' ]: return yesno(value, 'X, ') elif field in ['page_count']: if revision.source_name == 'issue' and \ revision.changeset.storyrevisions.count(): # only calculate total sum for issue not sequences total_pages = sum_page_counts(revision.active_stories()) if revision.variant_of: if revision.changeset.issuerevisions.count() > 1: stories = revision.changeset.storyrevisions\ .exclude(issue=revision.issue) else: stories = revision.variant_of.active_stories() if revision.active_stories().count(): # variant has cover sequence, add page counts without cover stories = stories.exclude(sequence_number=0) total_pages += sum_page_counts(stories) else: # variant has no extra cover sequence total_pages = sum_page_counts(stories) sum_story_pages = format_page_count(total_pages) return u'%s (note: total sum of story page counts is %s)' % \ (format_page_count(value), sum_story_pages) return format_page_count(value) elif field == 'isbn': if value: if validated_isbn(value): return u'%s (note: valid ISBN)' % value elif len(value.split(';')) > 1: return_val = value + ' (note: ' for isbn in value.split(';'): return_val = return_val + u'%s; ' % ("valid ISBN" \ if validated_isbn(isbn) else "invalid ISBN") return return_val + 'ISBNs are inequal)' elif value: return u'%s (note: invalid ISBN)' % value elif field == 'barcode': if value: barcodes = value.split(';') return_val = value + ' (note: ' for barcode in barcodes: return_val = return_val + u'%s; ' % ("valid UPC/EAN" \ if valid_barcode(barcode) \ else "invalid UPC/EAN or non-standard") return return_val[:-2] + ')' elif field == 'leading_article': if value == True: return u'Yes (sorted as: %s)' % remove_leading_article( revision.name) else: return u'No' elif field in [ 'has_barcode', 'has_isbn', 'has_issue_title', 'has_indicia_frequency', 'has_volume', 'has_rating' ]: if hasattr(revision, 'changed'): if revision.changed[field] and value == False: kwargs = {field[4:]: ''} if field[4:] == 'issue_title': kwargs = {'title': ''} if revision.series: value_count = revision.series.active_issues()\ .exclude(**kwargs).count() if value_count: return 'No (note: %d issues have a non-empty %s value)' % \ (value_count, field[4:]) return yesno(value, 'Yes,No') elif field == 'is_singleton': if hasattr(revision, 'changed'): if revision.changed[field] and value == True: if revision.series: value_count = revision.series.active_base_issues().count() if value_count: return 'Yes (note: the series has %d issue%s)' % \ (value_count, pluralize(value_count)) return yesno(value, 'Yes,No') elif field == 'after' and not hasattr(revision, 'changed'): # for previous revision (no attr changed) display empty string return '' return value
def display_credit(self, credit, url=True, compare=False): co_name = '' as_name = '' compare_info = False if self.is_official_name: name = self.name else: name = self.creator.gcd_official_name if credit.is_credited \ or (self.type and self.type_id == NAME_TYPES['studio']) \ or (self.in_script != self.creator.creator_names.get( is_official_name=True).in_script): as_name = self elif compare: as_name = self compare_info = True if self.type and self.type_id == NAME_TYPES['studio'] \ and self.creator_relation.count(): co_name = self.creator_relation.get().to_creator if credit.uncertain: name += ' ?' # no credited_as, signed_as if hasattr(credit, 'is_signed') and ( credit.is_signed and not credit.signed_as ) and (credit.is_signed and not credit.signature) and ( credit.is_credited and not credit.credited_as) and ( credit.is_credited and credit.creator.is_official_name): credit_attribute = 'credited, signed' elif hasattr(credit, 'is_signed') and (credit.is_signed and not credit.signed_as) and ( credit.is_signed and not credit.signature): credit_attribute = 'signed' elif (credit.is_credited and not credit.credited_as and credit.creator.is_official_name): credit_attribute = 'credited' else: credit_attribute = '' if url: credit_text = '<a href="%s">%s</a>' % \ (self.creator.get_absolute_url(), esc(name)) if co_name: credit_text += ' of <a href="%s">%s</a>' % \ (co_name.get_absolute_url(), esc(co_name.gcd_official_name)) if as_name: if credit.is_credited and not credit.credited_as: attribute = 'credited ' else: attribute = '' credit_text += ' (%sas <a href="%s">%s</a>)' % \ (attribute, as_name.get_absolute_url(), esc(as_name.name)) if compare_info: credit_text += ' Note: Non-official name selected without '\ 'credited-flag.' if credit_attribute: credit_text += ' (%s)' % credit_attribute if hasattr(credit, 'signature') and credit.signature: from apps.gcd.templatetags.display import absolute_url credit_text += ' (signed as %s)' % \ absolute_url(credit.signature, credit.signature.signature, esc(credit.signature.name)) else: credit_text = esc(name) if as_name: credit_text += ' [as %s]' % esc(as_name.name) if credit.credited_as and getattr(credit, 'signed_as', None) and \ (credit.credited_as == credit.signed_as): credit_text += ' (credited, signed as %s)' % \ esc(credit.credited_as) else: if credit.credited_as: credit_text += ' (credited as %s)' % esc(credit.credited_as) if hasattr(credit, 'is_signed') and credit.signed_as: credit_text += ' (signed as %s)' % esc(credit.signed_as) if credit.credit_name: credit_text += ' (%s)' % esc(credit.credit_name) return mark_safe(credit_text)
def display_credit(self, credit, url=True, compare=False, search=False, show_sources=False): co_name = '' as_name = '' extra_name = '' compare_info = '' if search: url = False if self.is_official_name: name = self.name if self.type and self.type_id == NAME_TYPES['house']: if credit.credit_name: credit.credit_name += ', house name' else: credit.credit_name = 'house name' else: name = self.creator.gcd_official_name if (credit.is_credited and not credit.credited_as) \ or (self.type and self.type_id == NAME_TYPES['studio']) \ or (self.in_script != self.creator.creator_names.get( is_official_name=True).in_script): as_name = self if self.type and self.type_id == NAME_TYPES['ghost']: if self.creator_relation.exists(): as_name = self.creator_relation.get().to_creator else: as_name = self elif self.type and self.type_id == NAME_TYPES['house']: if self.creator_relation.exists(): as_name = self.creator_relation.get().to_creator\ .active_names().get(is_official_name=True) else: as_name = self elif compare or search: # for compare and search use uncredited non-official-name as_name = self if self.type and self.type_id == NAME_TYPES['studio'] \ and self.creator_relation.count(): co_name = self.creator_relation.get().to_creator if credit.uncertain: name += ' ?' # no credited_as, signed_as if hasattr(credit, 'is_signed') and ( credit.is_signed and not credit.signed_as ) and (credit.is_signed and not credit.signature) and ( credit.is_credited and not credit.credited_as) and ( credit.is_credited and credit.creator.is_official_name): credit_attribute = 'credited, signed' elif hasattr(credit, 'is_signed') and (credit.is_signed and not credit.signed_as) and ( credit.is_signed and not credit.signature): credit_attribute = 'signed' elif (credit.is_credited and not credit.credited_as and credit.creator.is_official_name): credit_attribute = 'credited' else: credit_attribute = '' if url: credit_text = '<a href="%s">%s</a>' % \ (self.creator.get_absolute_url(), esc(name)) else: credit_text = esc(name) if co_name: if self.type_id == NAME_TYPES['studio']: if url: credit_text += ' of <a href="%s">%s</a>' % \ (co_name.get_absolute_url(), esc(co_name.gcd_official_name)) else: credit_text += ' of %s' % esc(co_name.gcd_official_name) else: raise ValueError if as_name: if self.type_id == NAME_TYPES['ghost']: attribute = 'ghosted for' if self.creator_relation.exists(): display_as_name = as_name.gcd_official_name if self.name != display_as_name: extra_name = self.name else: display_as_name = as_name.name elif self.type_id == NAME_TYPES['house']: attribute = 'under house name' display_as_name = as_name.name elif credit.is_credited and not credit.credited_as: attribute = 'credited as' display_as_name = as_name.name else: attribute = 'as' display_as_name = as_name.name if compare and self.type_id != NAME_TYPES['studio']: compare_info = '<br> Note: Non-official name '\ 'selected without credited-flag.' if url: credit_text += ' (%s <a href="%s">%s</a>)' % \ (attribute, as_name.get_absolute_url(), esc(display_as_name)) else: credit_text += ' (%s %s)' % \ (attribute, esc(display_as_name)) if extra_name: credit_text = credit_text[:-1] + ' as %s)' % extra_name if credit_attribute: credit_text += ' (%s)' % credit_attribute if hasattr(credit, 'signature') and credit.signature: if url: from apps.gcd.templatetags.display import absolute_url credit_text += ' (signed as %s)' % \ absolute_url(credit.signature, credit.signature.signature, esc(credit.signature.name)) else: credit_text += ' (signed as %s)' % esc(credit.signature.name) if credit.credited_as and getattr(credit, 'signed_as', None) and \ (credit.credited_as == credit.signed_as): credit_text += ' (credited, signed as %s)' % \ esc(credit.credited_as) else: if credit.credited_as: credit_text += ' (credited as %s)' % esc(credit.credited_as) if hasattr(credit, 'is_signed') and credit.signed_as: credit_text += ' (signed as %s)' % esc(credit.signed_as) if credit.is_sourced: if show_sources: credit_text += ' (sourced: %s)' % esc(credit.sourced_by) else: if url: credit_text += ' <a hx-get="/credit/%d/source/"' % \ credit.id credit_text += ' hx-target="body" hx-swap="beforeend"' +\ ' style="color: #00e;">(sourced)</a>' else: credit_text += ' (sourced)' if credit.credit_name: credit_text += ' (%s)' % esc(credit.credit_name) if compare_info: credit_text += compare_info return mark_safe(credit_text)