SYMBOL INDEX (2770 symbols across 415 files) FILE: cloudformation/add_cloudflare_ips_to_sgs.py function add_ingess_rules_for_group (line 23) | def add_ingess_rules_for_group(sg_id, existing_permissions): function get_security_groups (line 60) | def get_security_groups(): FILE: concordia/admin/__init__.py class ConcordiaUserAdmin (line 119) | class ConcordiaUserAdmin(UserAdmin): method get_queryset (line 136) | def get_queryset( method transcription_count (line 159) | def transcription_count(self, obj: User) -> int: method review_count (line 166) | def review_count(self, obj: User) -> int: method export_users_as_csv (line 188) | def export_users_as_csv( method export_users_as_excel (line 211) | def export_users_as_excel( class BannerAdmin (line 242) | class BannerAdmin(admin.ModelAdmin): class CustomListDisplayFieldsMixin (line 249) | class CustomListDisplayFieldsMixin: method truncated_description (line 258) | def truncated_description(self, obj): method truncated_metadata (line 262) | def truncated_metadata(self, obj): class CampaignAdmin (line 270) | class CampaignAdmin(admin.ModelAdmin, CustomListDisplayFieldsMixin): method get_form (line 338) | def get_form( method get_urls (line 368) | def get_urls(self): method retire (line 425) | def retire( method log_retirement (line 504) | def log_retirement( class HelpfulLinkAdmin (line 532) | class HelpfulLinkAdmin(admin.ModelAdmin, CustomListDisplayFieldsMixin): method formfield_for_foreignkey (line 542) | def formfield_for_foreignkey( class ConcordiaFileAdmin (line 568) | class ConcordiaFileAdmin(admin.ModelAdmin): method file_url (line 574) | def file_url(self, obj: ConcordiaFile) -> str: method get_fields (line 595) | def get_fields( class TopicProjectInline (line 624) | class TopicProjectInline(admin.TabularInline): class TopicAdmin (line 634) | class TopicAdmin(admin.ModelAdmin): class ProjectTopicInline (line 656) | class ProjectTopicInline(admin.TabularInline): class ProjectAdmin (line 665) | class ProjectAdmin(admin.ModelAdmin, CustomListDisplayFieldsMixin): method lookup_allowed (line 684) | def lookup_allowed(self, key: str, value: str) -> bool: method get_urls (line 700) | def get_urls(self): method item_import_view (line 743) | def item_import_view( class ItemAdmin (line 811) | class ItemAdmin(admin.ModelAdmin): method lookup_allowed (line 833) | def lookup_allowed(self, key: str, value: str) -> bool: method get_deleted_objects (line 849) | def get_deleted_objects( method get_queryset (line 898) | def get_queryset( method campaign_title (line 912) | def campaign_title(self, obj: Item) -> str: class AssetTranscriptionReservationAdmin (line 926) | class AssetTranscriptionReservationAdmin( class AssetAdmin (line 941) | class AssetAdmin(admin.ModelAdmin, CustomListDisplayFieldsMixin): method get_queryset (line 990) | def get_queryset( method lookup_allowed (line 1003) | def lookup_allowed(self, key: str, value: str) -> bool: method response_action (line 1019) | def response_action( method item_id (line 1058) | def item_id(self, obj: Asset) -> str: method truncated_storage_image (line 1062) | def truncated_storage_image(self, obj: Asset) -> str: method get_readonly_fields (line 1069) | def get_readonly_fields( method change_view (line 1091) | def change_view( method has_reopen_permission (line 1147) | def has_reopen_permission(self, request: HttpRequest) -> bool: class TagAdmin (line 1163) | class TagAdmin(admin.ModelAdmin): method lookup_allowed (line 1172) | def lookup_allowed(self, key: str, value: str) -> bool: method export_tags_as_csv (line 1187) | def export_tags_as_csv( class UserAssetTagCollectionAdmin (line 1234) | class UserAssetTagCollectionAdmin(admin.ModelAdmin): class TranscriptionAdmin (line 1248) | class TranscriptionAdmin(admin.ModelAdmin): method get_queryset (line 1310) | def get_queryset( method truncated_text (line 1338) | def truncated_text(self, obj: Transcription) -> str: method superseded (line 1351) | def superseded(self, obj: Transcription) -> bool: method lookup_allowed (line 1367) | def lookup_allowed(self, key: str, value: str) -> bool: method export_to_csv (line 1382) | def export_to_csv( method export_to_excel (line 1401) | def export_to_excel( class CarouselSlideAdmin (line 1424) | class CarouselSlideAdmin(admin.ModelAdmin): class SimplePageAdmin (line 1430) | class SimplePageAdmin(admin.ModelAdmin): class SiteReportAdmin (line 1441) | class SiteReportAdmin(admin.ModelAdmin): method report_type (line 1500) | def report_type(self, obj: "SiteReport") -> str: method report_json (line 1520) | def report_json(self, obj: "SiteReport") -> str: method previous_in_series_link (line 1536) | def previous_in_series_link(self, obj: "SiteReport") -> str: method next_in_series_link (line 1558) | def next_in_series_link(self, obj: "SiteReport") -> str: method export_to_csv (line 1579) | def export_to_csv( method export_to_excel (line 1598) | def export_to_excel( class UserProfileActivityAdmin (line 1621) | class UserProfileActivityAdmin(admin.ModelAdmin): class CampaignRetirementProgressAdmin (line 1649) | class CampaignRetirementProgressAdmin(admin.ModelAdmin): method completion (line 1694) | def completion(self, obj: CampaignRetirementProgress) -> str: class CardAdmin (line 1712) | class CardAdmin(admin.ModelAdmin): class TutorialInline (line 1719) | class TutorialInline(admin.TabularInline): class CardFamilyAdmin (line 1726) | class CardFamilyAdmin(admin.ModelAdmin): class Media (line 1729) | class Media: class GuideAdmin (line 1734) | class GuideAdmin(admin.ModelAdmin): class NextTranscribableCampaignAssetAdmin (line 1739) | class NextTranscribableCampaignAssetAdmin(admin.ModelAdmin): class NextReviewableCampaignAssetAdmin (line 1770) | class NextReviewableCampaignAssetAdmin(admin.ModelAdmin): class NextTranscribableTopicAssetAdmin (line 1796) | class NextTranscribableTopicAssetAdmin(admin.ModelAdmin): class NextReviewableTopicAssetAdmin (line 1827) | class NextReviewableTopicAssetAdmin(admin.ModelAdmin): class KeyMetricsReportAdmin (line 1853) | class KeyMetricsReportAdmin(admin.ModelAdmin): method download_csv_link (line 1955) | def download_csv_link(self, obj: "KeyMetricsReport") -> str: method get_urls (line 1971) | def get_urls(self): method download_csv_view (line 1989) | def download_csv_view( method download_selected_as_zip (line 2016) | def download_selected_as_zip( FILE: concordia/admin/actions.py function anonymize_action (line 28) | def anonymize_action( function publish_item_action (line 68) | def publish_item_action( function unpublish_item_action (line 104) | def unpublish_item_action( function publish_action (line 137) | def publish_action( function unpublish_action (line 162) | def unpublish_action( function change_status_to_completed (line 187) | def change_status_to_completed( function change_status_to_needs_review (line 246) | def change_status_to_needs_review( function change_status_to_in_progress (line 289) | def change_status_to_in_progress( function verify_assets_action (line 336) | def verify_assets_action( FILE: concordia/admin/filters.py class NullableTimestampFilter (line 8) | class NullableTimestampFilter(admin.SimpleListFilter): method lookups (line 23) | def lookups(self, request, model_admin): method queryset (line 26) | def queryset(self, request, queryset): class SubmittedFilter (line 35) | class SubmittedFilter(NullableTimestampFilter): class AcceptedFilter (line 45) | class AcceptedFilter(NullableTimestampFilter): class RejectedFilter (line 55) | class RejectedFilter(NullableTimestampFilter): class CampaignListFilter (line 65) | class CampaignListFilter(admin.SimpleListFilter): method lookups (line 77) | def lookups(self, request, model_admin): method queryset (line 83) | def queryset(self, request, queryset): class CardCampaignListFilter (line 89) | class CardCampaignListFilter(admin.SimpleListFilter): method lookups (line 100) | def lookups(self, request, model_admin): method queryset (line 105) | def queryset(self, request, queryset): class TopicListFilter (line 117) | class TopicListFilter(admin.SimpleListFilter): method lookups (line 128) | def lookups(self, request, model_admin): method queryset (line 132) | def queryset(self, request, queryset): class ProjectCampaignListFilter (line 138) | class ProjectCampaignListFilter(CampaignListFilter): class ItemCampaignListFilter (line 143) | class ItemCampaignListFilter(CampaignListFilter): class AssetCampaignListFilter (line 148) | class AssetCampaignListFilter(CampaignListFilter): class UserProfileActivityCampaignListFilter (line 153) | class UserProfileActivityCampaignListFilter(CampaignListFilter): class SiteReportCampaignListBaseFilter (line 158) | class SiteReportCampaignListBaseFilter(CampaignListFilter): method __init__ (line 170) | def __init__(self, request, params, model, model_admin): method has_output (line 175) | def has_output(self): method expected_parameters (line 182) | def expected_parameters(self): method choices (line 185) | def choices(self, changelist): class SiteReportSortedCampaignListFilter (line 211) | class SiteReportSortedCampaignListFilter(SiteReportCampaignListBaseFilter): class SiteReportCampaignListFilter (line 217) | class SiteReportCampaignListFilter(SiteReportCampaignListBaseFilter): method lookups (line 221) | def lookups(self, request, model_admin): class HelpfulLinkCampaignListFilter (line 225) | class HelpfulLinkCampaignListFilter(CampaignListFilter): class TagCampaignListFilter (line 231) | class TagCampaignListFilter(CampaignListFilter): class TranscriptionCampaignListFilter (line 238) | class TranscriptionCampaignListFilter(CampaignListFilter): class UserAssetTagCollectionCampaignListFilter (line 243) | class UserAssetTagCollectionCampaignListFilter(CampaignListFilter): class NextAssetCampaignListFilter (line 248) | class NextAssetCampaignListFilter(CampaignListFilter): method lookups (line 251) | def lookups(self, request, model_admin): class CampaignProjectListFilter (line 260) | class CampaignProjectListFilter(admin.SimpleListFilter): method lookups (line 274) | def lookups(self, request, model_admin): method queryset (line 285) | def queryset(self, request, queryset): class ItemProjectListFilter (line 291) | class ItemProjectListFilter(CampaignProjectListFilter): class AssetProjectListFilter (line 297) | class AssetProjectListFilter(CampaignProjectListFilter): class TranscriptionProjectListFilter (line 303) | class TranscriptionProjectListFilter(CampaignProjectListFilter): class CampaignStatusListFilter (line 309) | class CampaignStatusListFilter(admin.SimpleListFilter): method lookups (line 319) | def lookups(self, request, model_admin): method queryset (line 322) | def queryset(self, request, queryset): class AssetCampaignStatusListFilter (line 328) | class AssetCampaignStatusListFilter(CampaignStatusListFilter): class ItemCampaignStatusListFilter (line 332) | class ItemCampaignStatusListFilter(CampaignStatusListFilter): class ProjectCampaignStatusListFilter (line 336) | class ProjectCampaignStatusListFilter(CampaignStatusListFilter): class HelpfulLinkCampaignStatusListFilter (line 340) | class HelpfulLinkCampaignStatusListFilter(CampaignStatusListFilter): class TranscriptionCampaignStatusListFilter (line 344) | class TranscriptionCampaignStatusListFilter(CampaignStatusListFilter): class TagCampaignStatusListFilter (line 348) | class TagCampaignStatusListFilter(CampaignStatusListFilter): class UserAssetTagCollectionCampaignStatusListFilter (line 352) | class UserAssetTagCollectionCampaignStatusListFilter(CampaignStatusListF... class UserProfileActivityCampaignStatusListFilter (line 356) | class UserProfileActivityCampaignStatusListFilter(CampaignStatusListFilt... class BooleanFilter (line 360) | class BooleanFilter(admin.SimpleListFilter): method lookups (line 368) | def lookups(self, request, model_admin): method queryset (line 374) | def queryset(self, request, queryset): class OcrGeneratedFilter (line 381) | class OcrGeneratedFilter(BooleanFilter): class OcrOriginatedFilter (line 386) | class OcrOriginatedFilter(BooleanFilter): class SupersededListFilter (line 391) | class SupersededListFilter(admin.SimpleListFilter): method lookups (line 402) | def lookups(self, request, model_admin): method queryset (line 405) | def queryset(self, request, queryset): FILE: concordia/admin/forms.py class AdminItemImportForm (line 59) | class AdminItemImportForm(forms.Form): class AdminProjectBulkImportForm (line 72) | class AdminProjectBulkImportForm(forms.Form): class AdminAssetsBulkChangeStatusForm (line 91) | class AdminAssetsBulkChangeStatusForm(forms.Form): class SanitizedDescriptionAdminForm (line 103) | class SanitizedDescriptionAdminForm(forms.ModelForm): class Meta (line 112) | class Meta: method clean_description (line 116) | def clean_description(self) -> str: method clean_short_description (line 129) | def clean_short_description(self) -> str: class TopicAdminForm (line 143) | class TopicAdminForm(SanitizedDescriptionAdminForm): class Meta (line 148) | class Meta(SanitizedDescriptionAdminForm.Meta): class CampaignAdminForm (line 156) | class CampaignAdminForm(SanitizedDescriptionAdminForm): class Meta (line 161) | class Meta(SanitizedDescriptionAdminForm.Meta): class ProjectAdminForm (line 170) | class ProjectAdminForm(SanitizedDescriptionAdminForm): class Meta (line 175) | class Meta(SanitizedDescriptionAdminForm.Meta): class ProjectTopicInlineForm (line 182) | class ProjectTopicInlineForm(forms.ModelForm): class Meta (line 195) | class Meta: class ItemAdminForm (line 200) | class ItemAdminForm(forms.ModelForm): class Meta (line 205) | class Meta: class CardAdminForm (line 211) | class CardAdminForm(forms.ModelForm): class Meta (line 216) | class Meta: class GuideAdminForm (line 224) | class GuideAdminForm(forms.ModelForm): class Meta (line 229) | class Meta: function get_cache_name_choices (line 237) | def get_cache_name_choices() -> list[tuple[str, str]]: class ClearCacheForm (line 257) | class ClearCacheForm(forms.Form): class AssetStatusActionForm (line 268) | class AssetStatusActionForm(forms.Form): method __init__ (line 287) | def __init__( class KeyMetricsReportAdminForm (line 311) | class KeyMetricsReportAdminForm(forms.ModelForm): class Meta (line 319) | class Meta: FILE: concordia/admin/utils.py function _change_status (line 9) | def _change_status( function _bulk_change_status (line 77) | def _bulk_change_status( FILE: concordia/admin/views.py function project_level_export (line 58) | def project_level_export(request: HttpRequest) -> HttpResponse: function celery_task_review (line 161) | def celery_task_review(request: HttpRequest) -> HttpResponse: function admin_bulk_import_review (line 272) | def admin_bulk_import_review(request: HttpRequest) -> HttpResponse: class AdminBulkChangeAssetStatusView (line 393) | class AdminBulkChangeAssetStatusView(FormView): method form_valid (line 397) | def form_valid(self, form): function admin_bulk_import_view (line 489) | def admin_bulk_import_view(request: HttpRequest) -> HttpResponse: function admin_site_report_view (line 656) | def admin_site_report_view(request: HttpRequest) -> HttpResponse: function admin_retired_site_report_view (line 682) | def admin_retired_site_report_view(request: HttpRequest) -> HttpResponse: class SerializedObjectView (line 725) | class SerializedObjectView(View): method get (line 734) | def get( class ClearCacheView (line 772) | class ClearCacheView(FormView): method form_valid (line 784) | def form_valid(self, form: ClearCacheForm) -> HttpResponse: FILE: concordia/admin_site.py class ConcordiaAdminSite (line 11) | class ConcordiaAdminSite(admin.AdminSite): method get_urls (line 17) | def get_urls(self) -> list: FILE: concordia/api/__init__.py class AssetOut (line 70) | class AssetOut(CamelSchema): class ReviewIn (line 103) | class ReviewIn(CamelSchema): class TranscriptionIn (line 112) | class TranscriptionIn(CamelSchema): class OcrTranscriptionIn (line 124) | class OcrTranscriptionIn(CamelSchema): class TranscriptionOut (line 136) | class TranscriptionOut(CamelSchema): function serialize_asset (line 151) | def serialize_asset(asset: Asset, request: HttpRequest) -> AssetOut: function asset_detail_by_slugs (line 291) | def asset_detail_by_slugs( function asset_detail (line 324) | def asset_detail(request: HttpRequest, asset_id: int) -> AssetOut: function create_transcription (line 333) | def create_transcription( function create_ocr_transcription (line 446) | def create_ocr_transcription( function rollback (line 558) | def rollback(request: HttpRequest, asset_id: int) -> TranscriptionOut: function rollforward (line 605) | def rollforward(request: HttpRequest, asset_id: int) -> TranscriptionOut: function submit_transcription (line 650) | def submit_transcription(request: HttpRequest, pk: int) -> Transcription... function review_transcription (line 715) | def review_transcription( FILE: concordia/api/schemas.py function to_camel (line 4) | def to_camel(string: str) -> str: class CamelSchema (line 19) | class CamelSchema(Schema): class Config (line 25) | class Config(Schema.Config): FILE: concordia/api_views.py class URLAwareEncoder (line 26) | class URLAwareEncoder(DjangoJSONEncoder): method default (line 32) | def default(self, obj): class APIViewMixin (line 46) | class APIViewMixin(TemplateResponseMixin): method render_to_response (line 53) | def render_to_response(self, context, **response_kwargs): method render_to_json_response (line 62) | def render_to_json_response(self, context): method serialize_context (line 67) | def serialize_context(self, context): method serialize_object (line 72) | def serialize_object(self, obj): method make_absolute_urls (line 78) | def make_absolute_urls(self, data): class APIDetailView (line 90) | class APIDetailView(APIViewMixin, DetailView): method serialize_context (line 93) | def serialize_context(self, context): class APIListView (line 97) | class APIListView(APIViewMixin, ListView): method render_to_response (line 100) | def render_to_response(self, context, **response_kwargs): method build_url_for_page (line 124) | def build_url_for_page(self, page_number, per_page): method get_paginate_by (line 132) | def get_paginate_by(self, queryset): method serialize_context (line 140) | def serialize_context(self, context): FILE: concordia/apps.py class ConcordiaAppConfig (line 6) | class ConcordiaAppConfig(AppConfig): method ready (line 9) | def ready(self): class ConcordiaAdminConfig (line 13) | class ConcordiaAdminConfig(AdminConfig): method ready (line 16) | def ready(self): class ConcordiaStaticFilesConfig (line 20) | class ConcordiaStaticFilesConfig(StaticFilesConfig): FILE: concordia/authentication_backends.py class EmailOrUsernameModelBackend (line 10) | class EmailOrUsernameModelBackend(ModelBackend): method authenticate (line 34) | def authenticate( FILE: concordia/celery.py function import_all_submodules (line 34) | def import_all_submodules(package_name: str): function _load_all_task_modules (line 51) | def _load_all_task_modules(sender, **kwargs): FILE: concordia/consumers.py class AssetConsumer (line 6) | class AssetConsumer(AsyncJsonWebsocketConsumer): method connect (line 7) | async def connect(self): method disconnect (line 11) | async def disconnect(self, code): method asset_update (line 14) | async def asset_update(self, message): method asset_reservation_obtained (line 17) | async def asset_reservation_obtained(self, message): method asset_reservation_released (line 20) | async def asset_reservation_released(self, message): FILE: concordia/context_processors.py function system_configuration (line 8) | def system_configuration(request: HttpRequest) -> Dict[str, Any]: function site_navigation (line 34) | def site_navigation(request: HttpRequest) -> Dict[str, Any]: function maintenance_mode_frontend_available (line 73) | def maintenance_mode_frontend_available(request: HttpRequest) -> Dict[st... function request_id_context (line 92) | def request_id_context(request: HttpRequest) -> Dict[str, Any]: FILE: concordia/contextmanagers.py function cache_lock (line 17) | def cache_lock( FILE: concordia/converters.py class UnicodeSlugConverter (line 4) | class UnicodeSlugConverter(SlugConverter): class ItemIdConverter (line 10) | class ItemIdConverter(StringConverter): FILE: concordia/decorators.py function locked_task (line 13) | def locked_task(function=None, lock_by_args: bool = True): FILE: concordia/documents.py class UserDocument (line 11) | class UserDocument(Document): class Index (line 12) | class Index: class Django (line 20) | class Django: method prepare_transcription_count (line 24) | def prepare_transcription_count(self, instance): class SiteReportDocument (line 30) | class SiteReportDocument(Document): class Index (line 31) | class Index: class Django (line 40) | class Django: class TagCollectionDocument (line 72) | class TagCollectionDocument(Document): class Index (line 73) | class Index: class Django (line 102) | class Django: method get_queryset (line 106) | def get_queryset(self, *args, **kwargs): class TranscriptionDocument (line 118) | class TranscriptionDocument(Document): class Index (line 119) | class Index: class Django (line 152) | class Django: method get_queryset (line 165) | def get_queryset(self, *args, **kwargs): class AssetDocument (line 180) | class AssetDocument(Document): class Index (line 181) | class Index: method prepare_submission_count (line 218) | def prepare_submission_count(self, instance): class Django (line 223) | class Django: method get_queryset (line 227) | def get_queryset(self, *args, **kwargs): FILE: concordia/exceptions.py class CacheLockedError (line 3) | class CacheLockedError(Exception): method __init__ (line 4) | def __init__(self, message, details=None): class RateLimitExceededError (line 9) | class RateLimitExceededError(Exception): FILE: concordia/forms.py class AllowInactivePasswordResetForm (line 24) | class AllowInactivePasswordResetForm(PasswordResetForm): method get_users (line 34) | def get_users(self, email: str) -> Iterator[User]: class ActivateAndSetPasswordForm (line 52) | class ActivateAndSetPasswordForm(SetPasswordForm): method save (line 65) | def save(self, commit: bool = True) -> User: class UserRegistrationForm (line 86) | class UserRegistrationForm(RegistrationForm): class Meta (line 104) | class Meta(RegistrationForm.Meta): class UserLoginForm (line 114) | class UserLoginForm(AuthenticationForm): method confirm_login_allowed (line 128) | def confirm_login_allowed(self, user: Any) -> None: class UserNameForm (line 157) | class UserNameForm(forms.Form): class UserProfileForm (line 170) | class UserProfileForm(forms.Form): method __init__ (line 180) | def __init__(self, *, request: HttpRequest, **kwargs) -> None: method clean_email (line 190) | def clean_email(self) -> str: class AccountDeletionForm (line 213) | class AccountDeletionForm(forms.Form): method __init__ (line 220) | def __init__(self, *, request: HttpRequest, **kwargs) -> None: class TurnstileForm (line 231) | class TurnstileForm(forms.Form): FILE: concordia/logging.py function get_logging_user_id (line 8) | def get_logging_user_id(user: Any) -> str: function _register_default_extractor (line 36) | def _register_default_extractor( class ConcordiaLogger (line 89) | class ConcordiaLogger: method __init__ (line 214) | def __init__(self, logger, context: Optional[dict[str, Any]] = None): method get_logger (line 220) | def get_logger(cls, name: str) -> "ConcordiaLogger": method register_extractor (line 232) | def register_extractor( method unregister_extractor (line 252) | def unregister_extractor(self, key: str) -> None: method log (line 261) | def log( method debug (line 333) | def debug(self, message: str, *, event_code: str, **kwargs): method info (line 337) | def info(self, message: str, *, event_code: str, **kwargs): method warning (line 341) | def warning( method error (line 354) | def error( method exception (line 367) | def exception( method bind (line 392) | def bind(self, **kwargs: Any) -> "ConcordiaLogger": FILE: concordia/maintenance.py function _need_maintenence_frontend (line 16) | def _need_maintenence_frontend(request: HttpRequest) -> bool | None: function need_maintenance_response (line 42) | def need_maintenance_response(request: HttpRequest) -> bool: FILE: concordia/management/commands/calculate_difficulty_values.py class Command (line 16) | class Command(BaseCommand): method handle (line 25) | def handle(self, *, verbosity: int, **kwargs) -> None: FILE: concordia/management/commands/create_load_test_fixtures.py function _serialize_qs (line 31) | def _serialize_qs(qs): function _serialize_list (line 35) | def _serialize_list(objs): class Command (line 39) | class Command(BaseCommand): method add_arguments (line 56) | def add_arguments(self, p): method handle (line 117) | def handle(self, *args, **o): FILE: concordia/management/commands/ensure_initial_site_configuration.py class Command (line 36) | class Command(BaseCommand): method add_arguments (line 39) | def add_arguments(self, parser: ArgumentParser) -> None: method handle (line 69) | def handle( FILE: concordia/management/commands/import_site_reports.py class Command (line 39) | class Command(BaseCommand): method add_arguments (line 42) | def add_arguments(self, parser: ArgumentParser) -> None: method handle (line 55) | def handle(self, *, csv_file: str, **options) -> None: FILE: concordia/management/commands/prepare_load_test_db.py function _dbinfo (line 12) | def _dbinfo(alias: str): function _require_postgres (line 24) | def _require_postgres(engine: str): function _maintenance_dsn (line 29) | def _maintenance_dsn(info: dict) -> str: function _pg_connect (line 42) | def _pg_connect(dsn: str): function _db_exists (line 62) | def _db_exists(cur, name: str) -> bool: function _create_db_if_needed (line 67) | def _create_db_if_needed(src_info: dict, name: str, *, recreate: bool = ... function _drop_db (line 88) | def _drop_db(src_info: dict, name: str): function _switch_process_db (line 104) | def _switch_process_db(alias: str, new_name: str): function _suppress_all_django_signals (line 110) | def _suppress_all_django_signals(active: bool): class Command (line 139) | class Command(BaseCommand): method add_arguments (line 145) | def add_arguments(self, p): method handle (line 179) | def handle(self, *args, **o): FILE: concordia/management/commands/print_frontend_test_urls.py class Command (line 24) | class Command(BaseCommand): method add_arguments (line 29) | def add_arguments(self, parser: "argparse.ArgumentParser") -> None: method handle (line 37) | def handle(self, *, base_url: str, **options) -> None: FILE: concordia/middleware.py class MaintenanceModeMiddleware (line 9) | class MaintenanceModeMiddleware(BaseMaintenanceModeMiddleware): method process_request (line 10) | def process_request(self, request): FILE: concordia/migrations/0001_initial.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0001_squashed_0040_remove_campaign_is_active.py function create_groups (line 10) | def create_groups(apps, schema_editor): class Migration (line 16) | class Migration(migrations.Migration): FILE: concordia/migrations/0002_auto_20181004_1848.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0003_auto_20181004_2103.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0004_auto_20181010_1715.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0005_campaign_short_description.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0006_campaignresource.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0007_thumbnail_images.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0008_auto_20181015_1711.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0009_project_description.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0010_auto_20181021_1659.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0010_auto_20181022_1530.py function handle_items_without_projects (line 6) | def handle_items_without_projects(apps, schema_editor): class Migration (line 11) | class Migration(migrations.Migration): FILE: concordia/migrations/0011_auto_20181022_1532.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0012_merge_20181022_1554.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0013_auto_20181031_1305.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0014_auto_20181115_1411.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0015_auto_20181115_1436.py function split_edit_statuses (line 8) | def split_edit_statuses(apps, schema_editor): class Migration (line 20) | class Migration(migrations.Migration): FILE: concordia/migrations/0016_auto_20181115_1803.py function update_new_statuses (line 8) | def update_new_statuses(apps, schema_editor): class Migration (line 19) | class Migration(migrations.Migration): FILE: concordia/migrations/0017_change_transcription_supersedes_related_name.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0018_auto_20181128_1611.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0018_simplepage.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0019_merge_20181128_1715.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0020_auto_20181128_1718.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0021_sitereport.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0022_auto_20181211_1310.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0023_auto_20190130_1555.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0024_add_site_report_ordering.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0024_auto_20190211_1420.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0025_auto_20190329_1705.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0025_unicode_slugs.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0026_update_published_field_definition.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0027_merge_20190423_1657.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0028_asset_year.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0029_assettranscriptionreservation_reservation_token.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0030_auto_20190503_1559.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0031_auto_20190509_1142.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0032_topic_ordering.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0033_simple_content_blocks.py function load_legacy_content_blocks (line 6) | def load_legacy_content_blocks(apps, schema_editor): class Migration (line 22) | class Migration(migrations.Migration): FILE: concordia/migrations/0034_auto_20190627_1438.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0035_auto_20190627_1455.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0036_auto_20190703_1203.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0037_carouselslide.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0038_sitereport_topic.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0039_auto_20200129_1536.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0040_auto_20200130_1756.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0041_auto_20200203_1351.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0042_auto_20200316_1623.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0043_auto_20200323_1729.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0044_auto_20200323_1827.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0045_auto_20200323_1832.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0046_auto_20200323_1907.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0047_auto_20200324_1103.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0048_auto_20200324_1820.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0049_auto_20200324_2004.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0050_auto_20210920_1544.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0051_asset_storage_image.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0052_auto_20220531_1331.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0053_banner.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0054_banner_active.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0055_campaign_status.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0056_auto_20220922_1508.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0057_resource_resource_type.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0058_banner_slug.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0059_resourcefile.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0060_alter_resourcefile_resource.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0061_auto_20230201_1453.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0061_sitereport_registered_contributors.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0062_resourcefile_updated_on.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0062_userretiredcampaign.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0063_banner_alert_status.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0064_alter_banner_alert_status.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0065_alter_userretiredcampaign_unique_together.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0066_auto_20230217_1302.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0066_campaignretirementprogress.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0067_alter_campaignretirementprogress_campaign.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0068_campaignretirementprogress_complete.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0069_merge_20230224_1446.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0070_alter_campaign_options.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0071_auto_20230306_1456.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0072_merge_20230313_1047.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0073_auto_20230314_1327.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0074_auto_20230314_1341.py function forwards_func (line 6) | def forwards_func(apps, schema_editor): function reverse_func (line 12) | def reverse_func(apps, schema_editor): class Migration (line 19) | class Migration(migrations.Migration): FILE: concordia/migrations/0075_auto_20230327_1333.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0076_sitereport_report_name.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0077_alter_sitereport_report_name.py function update_report_names (line 6) | def update_report_names(apps, schema_editor): function backwards (line 26) | def backwards(apps, schema_editor): class Migration (line 31) | class Migration(migrations.Migration): FILE: concordia/migrations/0078_alter_sitereport_report_name.py function update_report_names (line 6) | def update_report_names(apps, schema_editor): function backwards (line 16) | def backwards(apps, schema_editor): class Migration (line 28) | class Migration(migrations.Migration): FILE: concordia/migrations/0079_auto_20230601_1234.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0080_auto_20230602_0920.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0081_sitereport_review_actions.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0082_delete_userretiredcampaign.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0083_sitereport_daily_active_users.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0084_rename_review_actions_sitereport_daily_review_actions.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0085_auto_20231016_1432.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0086_auto_20231215_1311.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0087_auto_20240213_0756.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0088_alter_simplepage_body.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0089_campaign_image_alt_text.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0090_auto_20240408_1334.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0091_guide_simple_page.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0092_auto_20240509_1522.py function set_simplepages (line 6) | def set_simplepages(apps, schema_editor): function backwards (line 15) | def backwards(apps, schema_editor): class Migration (line 22) | class Migration(migrations.Migration): FILE: concordia/migrations/0093_asset_campaign.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0094_alter_asset_campaign.py function set_field_values (line 7) | def set_field_values(apps, schema_editor): function revert_field_values (line 33) | def revert_field_values(apps, schema_editor): class Migration (line 40) | class Migration(migrations.Migration): FILE: concordia/migrations/0095_transcription_rolled_back_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0096_transcription_source.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0097_alter_sitereport_options_userprofile_review_count_and_more.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0098_userprofile_create_and_population.py function create_and_populate_profiles (line 7) | def create_and_populate_profiles(apps, schema_editor): function revert_create_and_populate_profiles (line 19) | def revert_create_and_populate_profiles(apps, schema_editor): class Migration (line 26) | class Migration(migrations.Migration): FILE: concordia/migrations/0099_alter_campaign_display_on_homepage_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0100_researchcenter.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0101_auto_20241119_1215.py function forwards_func (line 14) | def forwards_func(apps, schema_editor): function reverse_func (line 29) | def reverse_func(apps, schema_editor): class Migration (line 36) | class Migration(migrations.Migration): FILE: concordia/migrations/0102_campaign_research_centers.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0103_alter_item_title.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0104_nexttranscribabletopicasset_and_more.py class Migration (line 10) | class Migration(migrations.Migration): FILE: concordia/migrations/0105_nextreviewablecampaignasset_concordia_n_transcr_aafdba_gin_and_more.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0106_alter_nextreviewablecampaignasset_options_and_more.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0107_alter_nextreviewablecampaignasset_options_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0108_add_next_asset_cache_periodic_task.py function add_renew_next_asset_cache_task (line 6) | def add_renew_next_asset_cache_task(apps, schema_editor): function remove_renew_next_asset_cache_task (line 25) | def remove_renew_next_asset_cache_task(apps, schema_editor): class Migration (line 30) | class Migration(migrations.Migration): FILE: concordia/migrations/0109_alter_nextreviewablecampaignasset_asset_and_more.py class Migration (line 7) | class Migration(migrations.Migration): FILE: concordia/migrations/0110_remove_asset_media_url_alter_asset_storage_image.py class Migration (line 9) | class Migration(migrations.Migration): FILE: concordia/migrations/0111_auto_20250428_1023.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0112_projecttopic_url_filter_alter_projecttopic_id.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0113_create_asset_status_periodic_task.py function create_asset_status_task (line 6) | def create_asset_status_task(apps, schema_editor): function delete_asset_status_task (line 28) | def delete_asset_status_task(apps, schema_editor): class Migration (line 36) | class Migration(migrations.Migration): FILE: concordia/migrations/0114_create_daily_activity_periodic_task.py function create_daily_activity_task (line 6) | def create_daily_activity_task(apps, schema_editor): function delete_daily_activity_task (line 32) | def delete_daily_activity_task(apps, schema_editor): class Migration (line 39) | class Migration(migrations.Migration): FILE: concordia/migrations/0115_alter_asset_storage_image_alter_banner_link_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0116_item_thumbnail_image.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0117_alter_projecttopic_options_projecttopic_ordering.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0118_asset_concordia_a_item_id_f10916_idx_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0119_remove_asset_concordia_a_id_137ca8_idx_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0120_sitereport_assets_started.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0121_keymetricsreport.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0122_alter_item_title.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0123_alter_campaignretirementprogress_options.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0124_update_periodic_task_paths.py function forwards (line 45) | def forwards(apps, schema_editor): function backwards (line 53) | def backwards(apps, schema_editor): class Migration (line 61) | class Migration(migrations.Migration): FILE: concordia/migrations/0125_update_userprofile_tasks.py function forwards (line 8) | def forwards(apps, schema_editor): function reverse_func (line 14) | def reverse_func(apps, schema_editor): class Migration (line 20) | class Migration(migrations.Migration): FILE: concordia/migrations/0126_concordiafile_helpfullink_remove_resource_campaign_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/migrations/0127_alter_campaignretirementprogress_options_and_more.py class Migration (line 8) | class Migration(migrations.Migration): FILE: concordia/migrations/0128_alter_campaignretirementprogress_options.py class Migration (line 6) | class Migration(migrations.Migration): FILE: concordia/models.py function resource_file_upload_path (line 63) | def resource_file_upload_path(instance, filename): class ConcordiaUser (line 78) | class ConcordiaUser(User): class Meta (line 87) | class Meta: method email_reconfirmation_cache_key (line 91) | def email_reconfirmation_cache_key(self): method set_email_for_reconfirmation (line 97) | def set_email_for_reconfirmation(self, email): method get_email_for_reconfirmation (line 110) | def get_email_for_reconfirmation(self): method delete_email_for_reconfirmation (line 120) | def delete_email_for_reconfirmation(self): method get_email_reconfirmation_key (line 126) | def get_email_reconfirmation_key(self): method validate_reconfirmation_email (line 145) | def validate_reconfirmation_email(self, email): method review_incidents (line 157) | def review_incidents(self, recent_accepts, threshold=THRESHOLD): method transcribe_incidents (line 192) | def transcribe_incidents(self, transcriptions): method transcription_accepted_cache_key (line 222) | def transcription_accepted_cache_key(self): method check_and_track_accept_limit (line 228) | def check_and_track_accept_limit(self, transcription): class UserProfile (line 265) | class UserProfile(MetricsModelMixin("userprofile"), models.Model): class OverlayPosition (line 275) | class OverlayPosition(object): class TranscriptionStatus (line 287) | class TranscriptionStatus(object): class MediaType (line 312) | class MediaType: class PublicationQuerySet (line 324) | class PublicationQuerySet(models.QuerySet): method published (line 325) | def published(self): method unpublished (line 331) | def unpublished(self): class UnlistedPublicationQuerySet (line 338) | class UnlistedPublicationQuerySet(PublicationQuerySet): method annotated (line 339) | def annotated(self): method listed (line 418) | def listed(self): method unlisted (line 421) | def unlisted(self): method active (line 424) | def active(self): method completed (line 427) | def completed(self): method retired (line 430) | def retired(self): method get_next_transcription_campaigns (line 433) | def get_next_transcription_campaigns(self): method get_next_review_campaigns (line 436) | def get_next_review_campaigns(self): class Card (line 440) | class Card(models.Model): method __str__ (line 449) | def __str__(self): class Meta (line 452) | class Meta: class CardFamily (line 456) | class CardFamily(models.Model): class Meta (line 461) | class Meta: method __str__ (line 464) | def __str__(self): function on_cardfamily_save (line 468) | def on_cardfamily_save(sender, instance, **kwargs): class ResearchCenter (line 481) | class ResearchCenter(models.Model): method __str__ (line 484) | def __str__(self): class Campaign (line 488) | class Campaign(MetricsModelMixin("campaign"), models.Model): class Status (line 489) | class Status(models.IntegerChoices): class Meta (line 536) | class Meta: method __str__ (line 544) | def __str__(self): method get_absolute_url (line 547) | def get_absolute_url(self): class Topic (line 551) | class Topic(models.Model): class Meta (line 568) | class Meta: method __str__ (line 573) | def __str__(self): method get_absolute_url (line 576) | def get_absolute_url(self): class HelpfulLinkTypeQuerySet (line 580) | class HelpfulLinkTypeQuerySet(models.QuerySet): method related_links (line 581) | def related_links(self): method completed_transcription_links (line 584) | def completed_transcription_links(self): class HelpfulLink (line 590) | class HelpfulLink(MetricsModelMixin("resource"), models.Model): class HelpfulLinkType (line 598) | class HelpfulLinkType(models.IntegerChoices): class Meta (line 618) | class Meta: method __str__ (line 622) | def __str__(self): class ConcordiaFile (line 626) | class ConcordiaFile(models.Model): class Meta (line 641) | class Meta: method __str__ (line 645) | def __str__(self): method save (line 648) | def save(self, *args, **kwargs): method delete (line 654) | def delete(self, *args, **kwargs): class Project (line 663) | class Project(MetricsModelMixin("project"), models.Model): class Meta (line 687) | class Meta: method __str__ (line 695) | def __str__(self): method get_absolute_url (line 698) | def get_absolute_url(self): method turn_off_ocr (line 704) | def turn_off_ocr(self): class Item (line 708) | class Item(MetricsModelMixin("item"), models.Model): class Meta (line 736) | class Meta: method __str__ (line 740) | def __str__(self): method get_absolute_url (line 743) | def get_absolute_url(self): method thumbnail_link (line 754) | def thumbnail_link(self) -> str | None: method turn_off_ocr (line 773) | def turn_off_ocr(self): class AssetQuerySet (line 777) | class AssetQuerySet(PublicationQuerySet): method add_contribution_counts (line 778) | def add_contribution_counts(self): class Asset (line 788) | class Asset(MetricsModelMixin("asset"), models.Model): method get_storage_path (line 789) | def get_storage_path(self, filename): class Meta (line 839) | class Meta: method __str__ (line 856) | def __str__(self): method save (line 859) | def save(self, *args, **kwargs): method get_absolute_url (line 870) | def get_absolute_url(self): method logger (line 882) | def logger(self): method latest_transcription (line 885) | def latest_transcription(self): method get_asset_image_path (line 889) | def get_asset_image_path(item): method get_asset_image_filename (line 892) | def get_asset_image_filename(self, extension="jpg"): method get_existing_storage_image_filename (line 897) | def get_existing_storage_image_filename(self): method get_ocr_transcript (line 900) | def get_ocr_transcript(self, language=None): method get_contributor_count (line 927) | def get_contributor_count(self): method turn_off_ocr (line 938) | def turn_off_ocr(self): method can_rollback (line 941) | def can_rollback( method rollback_transcription (line 1048) | def rollback_transcription(self, user: User) -> "Transcription": method can_rollforward (line 1118) | def can_rollforward( method rollforward_transcription (line 1318) | def rollforward_transcription(self, user: User) -> "Transcription": class Tag (line 1396) | class Tag(MetricsModelMixin("tag"), models.Model): method __str__ (line 1400) | def __str__(self): class UserAssetTagCollection (line 1404) | class UserAssetTagCollection( method __str__ (line 1415) | def __str__(self): class TranscriptionManager (line 1419) | class TranscriptionManager(models.Manager): method review_actions (line 1420) | def review_actions(self, start, end=None): method recent_review_actions (line 1428) | def recent_review_actions(self, days=1): method review_incidents (line 1432) | def review_incidents(self, start=ONE_DAY_AGO): method recent_transcriptions (line 1456) | def recent_transcriptions(self, start=ONE_DAY_AGO): method transcribe_incidents (line 1461) | def transcribe_incidents(self, start=ONE_DAY_AGO): class Transcription (line 1487) | class Transcription(MetricsModelMixin("transcription"), models.Model): class Meta (line 1552) | class Meta: method __str__ (line 1557) | def __str__(self): method campaign_slug (line 1560) | def campaign_slug(self): method clean (line 1563) | def clean(self): method status (line 1576) | def status(self): function update_userprofileactivity_table (line 1585) | def update_userprofileactivity_table(user, campaign_id, field, increment... function _update_useractivity_cache (line 1664) | def _update_useractivity_cache(user_id, campaign_id, attr_name): class AssetTranscriptionReservation (line 1698) | class AssetTranscriptionReservation(models.Model): method get_token (line 1714) | def get_token(self): method get_user (line 1717) | def get_user(self): class SimplePage (line 1721) | class SimplePage(models.Model): method __str__ (line 1742) | def __str__(self): class Banner (line 1746) | class Banner(models.Model): method __str__ (line 1779) | def __str__(self): method alert_class (line 1782) | def alert_class(self): method btn_class (line 1785) | def btn_class(self): class CarouselSlide (line 1789) | class CarouselSlide(models.Model): method __str__ (line 1819) | def __str__(self): class SiteReportManager (line 1823) | class SiteReportManager(models.Manager): method _series_filter (line 1838) | def _series_filter( method previous_in_series (line 1872) | def previous_in_series( method series_filter_for_instance (line 1899) | def series_filter_for_instance(self, instance: "SiteReport") -> Q: method previous_for_instance (line 1919) | def previous_for_instance(self, instance: "SiteReport") -> "SiteReport... method next_for_instance (line 1930) | def next_for_instance(self, instance: "SiteReport") -> "SiteReport | N... method last_on_or_before_date_for_series (line 1941) | def last_on_or_before_date_for_series( method first_on_or_after_date_for_series (line 1960) | def first_on_or_after_date_for_series( method sum_assets_started_for_series_between_dates (line 1980) | def sum_assets_started_for_series_between_dates( class SiteReport (line 2002) | class SiteReport(models.Model): class ReportName (line 2003) | class ReportName(models.TextChoices): class Meta (line 2041) | class Meta: method calculate_assets_started (line 2078) | def calculate_assets_started( method previous_in_series (line 2120) | def previous_in_series(self) -> "SiteReport | None": method next_in_series (line 2126) | def next_in_series(self) -> "SiteReport | None": method to_debug_dict (line 2132) | def to_debug_dict(self) -> dict: method to_debug_json (line 2192) | def to_debug_json(self) -> str: class KeyMetricsReport (line 2202) | class KeyMetricsReport(models.Model): class PeriodType (line 2240) | class PeriodType(models.TextChoices): class Meta (line 2276) | class Meta: method __str__ (line 2325) | def __str__(self) -> str: method get_fiscal_year_for_date (line 2358) | def get_fiscal_year_for_date(d: datetime.date) -> int: method get_fiscal_quarter_for_date (line 2363) | def get_fiscal_quarter_for_date(d: datetime.date) -> int: method month_bounds (line 2374) | def month_bounds(d: datetime.date) -> tuple[datetime.date, datetime.da... method _monthly_from_sitereports (line 2385) | def _monthly_from_sitereports( method upsert_month (line 2495) | def upsert_month(cls, *, year: int, month: int) -> Optional["KeyMetric... method upsert_quarter (line 2532) | def upsert_quarter( method upsert_fiscal_year (line 2639) | def upsert_fiscal_year(cls, *, fiscal_year: int) -> Optional["KeyMetri... method csv_filename (line 2717) | def csv_filename(self) -> str: method _format_value_for_csv (line 2737) | def _format_value_for_csv(self, field_name: str, value) -> str | int |... method _calendar_year_for_month_in_fy (line 2761) | def _calendar_year_for_month_in_fy(self, month: int, fiscal_year: int)... method _fy_abbrev (line 2767) | def _fy_abbrev(self, fiscal_year: int) -> str: method _month_label (line 2776) | def _month_label(self, fiscal_year: int, month: int) -> str: method _format_cell (line 2782) | def _format_cell(self, field_name: str, value): method _csv_matrix_monthly (line 2788) | def _csv_matrix_monthly(self) -> tuple[list[str], list[list[str | int ... method _quarter_month_specs (line 2804) | def _quarter_month_specs(self) -> list[tuple[int, int]]: method _csv_matrix_quarterly (line 2820) | def _csv_matrix_quarterly(self) -> tuple[list[str], list[list[str | in... method _csv_matrix_fiscal_year (line 2940) | def _csv_matrix_fiscal_year( method render_csv (line 3051) | def render_csv(self) -> bytes: class UserProfileActivity (line 3080) | class UserProfileActivity(models.Model): class Meta (line 3101) | class Meta: method __str__ (line 3109) | def __str__(self): method get_status (line 3112) | def get_status(self): method total_actions (line 3116) | def total_actions(self): class CampaignRetirementProgress (line 3122) | class CampaignRetirementProgress(models.Model): method __str__ (line 3142) | def __str__(self): class Meta (line 3145) | class Meta: class TutorialCard (line 3149) | class TutorialCard(models.Model): class Meta (line 3158) | class Meta: class Guide (line 3162) | class Guide(models.Model): method __str__ (line 3179) | def __str__(self): function validated_get_or_create (line 3183) | def validated_get_or_create(klass, **kwargs): class NextAsset (line 3219) | class NextAsset(models.Model): class Meta (line 3238) | class Meta: method __str__ (line 3241) | def __str__(self): class NextTranscribableAsset (line 3245) | class NextTranscribableAsset(NextAsset): class Meta (line 3258) | class Meta: class NextReviewableAsset (line 3262) | class NextReviewableAsset(NextAsset): class Meta (line 3276) | class Meta: class NextCampaignAssetManager (line 3280) | class NextCampaignAssetManager(models.Manager): method needed_for_campaign (line 3290) | def needed_for_campaign(self, campaign_id, target_count=None): class NextTopicAssetManager (line 3314) | class NextTopicAssetManager(models.Manager): method needed_for_topic (line 3324) | def needed_for_topic(self, topic_id, target_count=None): class NextTranscribableCampaignAssetManager (line 3348) | class NextTranscribableCampaignAssetManager(NextCampaignAssetManager): class NextTranscribableTopicAssetManager (line 3352) | class NextTranscribableTopicAssetManager(NextTopicAssetManager): class NextReviewableCampaignAssetManager (line 3356) | class NextReviewableCampaignAssetManager(NextCampaignAssetManager): class NextReviewableTopicAssetManager (line 3360) | class NextReviewableTopicAssetManager(NextTopicAssetManager): class NextTranscribableCampaignAsset (line 3364) | class NextTranscribableCampaignAsset(NextTranscribableAsset): class Meta (line 3374) | class Meta: class NextTranscribableTopicAsset (line 3379) | class NextTranscribableTopicAsset(NextTranscribableAsset): class Meta (line 3389) | class Meta: class NextReviewableCampaignAsset (line 3395) | class NextReviewableCampaignAsset(NextReviewableAsset): class Meta (line 3405) | class Meta: class NextReviewableTopicAsset (line 3413) | class NextReviewableTopicAsset(NextReviewableAsset): class Meta (line 3423) | class Meta: class ProjectTopic (line 3432) | class ProjectTopic(models.Model): class Meta (line 3454) | class Meta: FILE: concordia/parser.py class OGImageParser (line 13) | class OGImageParser(HTMLParser): method __init__ (line 14) | def __init__(self): method handle_starttag (line 18) | def handle_starttag(self, tag, attrs): function extract_og_image (line 26) | def extract_og_image(url): function get_og_image (line 48) | def get_og_image(url): function fetch_blog_posts (line 58) | def fetch_blog_posts(): function paginate_blog_posts (line 103) | def paginate_blog_posts(): FILE: concordia/passwords/validators.py class ComplexityValidator (line 56) | class ComplexityValidator(object): method __init__ (line 78) | def __init__(self, complexities: Mapping[str, int] | None): method __call__ (line 89) | def __call__(self, value: str) -> None: FILE: concordia/secrets.py function get_secret (line 9) | def get_secret(secret_name): FILE: concordia/settings_docker.py function whitenoise_immutable_file_test (line 13) | def whitenoise_immutable_file_test(static_url): FILE: concordia/signals/handlers.py function clear_reservation_token (line 42) | def clear_reservation_token( function handle_user_login_failed (line 87) | def handle_user_login_failed( function user_successfully_activated (line 109) | def user_successfully_activated( function add_user_to_newsletter (line 166) | def add_user_to_newsletter( function update_asset_status (line 197) | def update_asset_status( function send_asset_update (line 281) | def send_asset_update( function send_asset_reservation_obtained (line 322) | def send_asset_reservation_obtained(sender: Any, **kwargs: Any) -> None: function send_asset_reservation_released (line 357) | def send_asset_reservation_released(sender: Any, **kwargs: Any) -> None: function send_asset_reservation_message (line 389) | def send_asset_reservation_message( function remove_file_from_s3 (line 428) | def remove_file_from_s3( function create_user_profile (line 450) | def create_user_profile( function on_transcription_save (line 476) | def on_transcription_save( function add_request_id_to_response (line 526) | def add_request_id_to_response( FILE: concordia/static/admin/custom-inline.js function triggerChangeOnField (line 4) | function triggerChangeOnField(win, chosenId) { FILE: concordia/static/admin/editor-preview.js function updatePreview (line 53) | function updatePreview() { function queueUpdate (line 83) | function queueUpdate() { FILE: concordia/static/js/src/asset-reservation.js function attemptToReserveAsset (line 13) | function attemptToReserveAsset(reservationURL, findANewPageURL, actionTy... function reserveAssetForEditing (line 126) | function reserveAssetForEditing() { FILE: concordia/static/js/src/base.js function csrfSafeMethod (line 20) | function csrfSafeMethod(method) { function buildErrorMessage (line 44) | function buildErrorMessage(jqXHR, textStatus, errorThrown) { function displayHtmlMessage (line 56) | function displayHtmlMessage(level, message, uniqueId) { function displayMessage (line 100) | function displayMessage(level, message, uniqueId) { function isOutdatedBrowser (line 108) | function isOutdatedBrowser() { function loadLegacyPolyfill (line 117) | function loadLegacyPolyfill(scriptUrl, callback) { function appendAccountItem (line 190) | function appendAccountItem(link, $menu) { function debounce (line 274) | function debounce(function_, timeout = 300) { function trackShareInteraction (line 298) | function trackShareInteraction($element, interactionType) { function trackUIInteraction (line 383) | function trackUIInteraction(element, category, action, label) { FILE: concordia/static/js/src/contribute.js function lockControls (line 8) | function lockControls($container) { function unlockControls (line 18) | function unlockControls($container) { function resetTurnstile (line 70) | function resetTurnstile() { function setupPage (line 76) | function setupPage() { FILE: concordia/static/js/src/filter-assets.js function filterAssets (line 1) | function filterAssets(doFilter, url) { FILE: concordia/static/js/src/guide.js function openOffcanvas (line 7) | function openOffcanvas() { function closeOffcanvas (line 25) | function closeOffcanvas() { function trackHowToInteraction (line 78) | function trackHowToInteraction(element, label) { FILE: concordia/static/js/src/modules/accessible-colors.js function adjustColorForContrast (line 10) | function adjustColorForContrast( function generateAccessibleColors (line 47) | function generateAccessibleColors( FILE: concordia/static/js/src/modules/concordia-visualization.js class ConcordiaVisualization (line 13) | class ConcordiaVisualization { method constructor (line 42) | constructor({ method render (line 90) | async render() { method _handleError (line 318) | _handleError(context, message) { method _defaultOptions (line 342) | static _defaultOptions(title, xLabel, yLabel) { method _deepMerge (line 389) | static _deepMerge(target, ...sources) { FILE: concordia/static/js/src/modules/quick-tips.js function clearCache (line 4) | function clearCache() { function initCampaignTutorial (line 13) | function initCampaignTutorial() { function setTutorialHeight (line 54) | function setTutorialHeight() { FILE: concordia/static/js/src/modules/turnstile.js function resetTurnstile (line 3) | function resetTurnstile(widgetId) { FILE: concordia/static/js/src/modules/visualization-errors.js function renderEmptyChart (line 14) | function renderEmptyChart( function renderErrorOverlay (line 76) | function renderErrorOverlay( FILE: concordia/static/js/src/ocr.js function selectLanguage (line 33) | function selectLanguage() { FILE: concordia/static/js/src/quick-tips-setup.js function trackQuickTipsInteraction (line 10) | function trackQuickTipsInteraction(element, label) { FILE: concordia/static/js/src/recent-pages.js function getPages (line 5) | function getPages(queryString = window.location.search) { function finalizePageUpdate (line 131) | function finalizePageUpdate(currentParameters) { FILE: concordia/static/js/src/viewer-split.js function saveSizes (line 37) | function saveSizes(sizes) { function saveDirection (line 49) | function saveDirection(direction) { function verticalSplit (line 56) | function verticalSplit() { function horizontalSplit (line 86) | function horizontalSplit() { FILE: concordia/static/js/src/viewer.js function updateFilters (line 146) | function updateFilters() { function stepUp (line 200) | function stepUp(id) { function stepDown (line 208) | function stepDown(id) { function resetImageFilterForms (line 216) | function resetImageFilterForms() { FILE: concordia/static/vendor/jquery.cookie.js function encode (line 23) | function encode(s) { function decode (line 27) | function decode(s) { function stringifyCookieValue (line 31) | function stringifyCookieValue(value) { function parseCookieValue (line 35) | function parseCookieValue(s) { function read (line 50) | function read(s, converter) { FILE: concordia/storage.py class LazyAssetStorage (line 5) | class LazyAssetStorage(LazyObject): method _setup (line 6) | def _setup(self): class LazyVisualizationStorage (line 10) | class LazyVisualizationStorage(LazyObject): method _setup (line 11) | def _setup(self): FILE: concordia/storage_backends.py class OverwriteS3Boto3Storage (line 4) | class OverwriteS3Boto3Storage(S3Boto3Storage): method get_available_name (line 5) | def get_available_name(self, name, max_length=None): FILE: concordia/tasks/assets.py function calculate_difficulty_values (line 19) | def calculate_difficulty_values(asset_qs=None): function populate_asset_years (line 68) | def populate_asset_years(): function fix_storage_images (line 109) | def fix_storage_images(campaign_slug=None, asset_start_id=None): FILE: concordia/tasks/blog.py function fetch_and_cache_blog_images (line 13) | def fetch_and_cache_blog_images(self): FILE: concordia/tasks/housekeeping.py function clear_sessions (line 14) | def clear_sessions(): FILE: concordia/tasks/next_asset/renew.py function renew_next_asset_cache (line 23) | def renew_next_asset_cache(self): FILE: concordia/tasks/next_asset/reviewable.py function populate_next_reviewable_for_campaign (line 28) | def populate_next_reviewable_for_campaign(self, campaign_id): function populate_next_reviewable_for_topic (line 124) | def populate_next_reviewable_for_topic(self, topic_id): function clean_next_reviewable_for_campaign (line 215) | def clean_next_reviewable_for_campaign(self, campaign_id): function clean_next_reviewable_for_topic (line 241) | def clean_next_reviewable_for_topic(self, topic_id): FILE: concordia/tasks/next_asset/transcribable.py function populate_next_transcribable_for_campaign (line 26) | def populate_next_transcribable_for_campaign(self, campaign_id): function populate_next_transcribable_for_topic (line 95) | def populate_next_transcribable_for_topic(self, topic_id): function clean_next_transcribable_for_campaign (line 159) | def clean_next_transcribable_for_campaign(self, campaign_id): function clean_next_transcribable_for_topic (line 186) | def clean_next_transcribable_for_topic(self, topic_id): FILE: concordia/tasks/reports/backfill.py function backfill_assets_started_for_site_reports (line 30) | def backfill_assets_started_for_site_reports(self, skip_existing: bool =... FILE: concordia/tasks/reports/key_metrics.py function build_key_metrics_reports (line 19) | def build_key_metrics_reports(self, recompute_all: bool = False) -> int: FILE: concordia/tasks/reports/sitereport.py function _recent_transcriptions (line 28) | def _recent_transcriptions() -> QuerySet[Transcription]: function _daily_active_users (line 55) | def _daily_active_users() -> int: function site_report (line 87) | def site_report() -> None: function topic_report (line 270) | def topic_report(topic: Topic) -> None: function campaign_report (line 406) | def campaign_report(campaign: Campaign) -> SiteReport: function retired_total_report (line 578) | def retired_total_report() -> None: FILE: concordia/tasks/reservations.py function expire_inactive_asset_reservations (line 18) | def expire_inactive_asset_reservations(): function tombstone_old_active_asset_reservations (line 56) | def tombstone_old_active_asset_reservations(): function delete_old_tombstoned_reservations (line 85) | def delete_old_tombstoned_reservations(): FILE: concordia/tasks/retirement.py function retire_campaign (line 18) | def retire_campaign(campaign_id): function project_removal_success (line 70) | def project_removal_success(project_id, campaign_id): function remove_next_project (line 103) | def remove_next_project(campaign_id): function item_removal_success (line 137) | def item_removal_success(item_id, campaign_id, project_id): function remove_next_item (line 171) | def remove_next_item(project_id): function assets_removal_success (line 200) | def assets_removal_success(asset_ids, campaign_id, item_id): function remove_next_assets (line 235) | def remove_next_assets(item_id): function delete_asset (line 267) | def delete_asset(asset_id): FILE: concordia/tasks/search_index.py function create_opensearch_indices (line 14) | def create_opensearch_indices(): function delete_opensearch_indices (line 27) | def delete_opensearch_indices(): function rebuild_opensearch_indices (line 38) | def rebuild_opensearch_indices(): function populate_opensearch_users_indices (line 51) | def populate_opensearch_users_indices(): function populate_opensearch_assets_indices (line 66) | def populate_opensearch_assets_indices(): function populate_opensearch_indices (line 87) | def populate_opensearch_indices(): FILE: concordia/tasks/thumbnails.py function download_item_thumbnail_task (line 26) | def download_item_thumbnail_task( function download_missing_thumbnails_task (line 69) | def download_missing_thumbnails_task( FILE: concordia/tasks/unusualactivity.py function unusual_activity (line 22) | def unusual_activity(ignore_env: bool = False) -> None: FILE: concordia/tasks/useractivity.py function _populate_activity_table (line 31) | def _populate_activity_table(campaigns: Iterable[Campaign]) -> None: function populate_completed_campaign_counts (line 114) | def populate_completed_campaign_counts() -> None: function populate_active_campaign_counts (line 132) | def populate_active_campaign_counts() -> None: function update_useractivity_cache (line 149) | def update_useractivity_cache( function update_userprofileactivity_from_cache (line 248) | def update_userprofileactivity_from_cache(self) -> None: FILE: concordia/tasks/visualizations.py function populate_asset_status_visualization_cache (line 24) | def populate_asset_status_visualization_cache(self) -> None: function populate_daily_activity_visualization_cache (line 152) | def populate_daily_activity_visualization_cache(self) -> None: FILE: concordia/templatetags/concordia_filtering_tags.py function transcription_status_filters (line 12) | def transcription_status_filters( FILE: concordia/templatetags/concordia_media_tags.py function asset_media_url (line 9) | def asset_media_url(asset: Any) -> str: FILE: concordia/templatetags/concordia_querystring.py class QueryStringAlterer (line 17) | class QueryStringAlterer(Node): method __init__ (line 79) | def __init__(self, base_qs: str, as_variable: Optional[str], *args) ->... method render (line 85) | def render(self, context: Any) -> str: method qs_alter_tag (line 137) | def qs_alter_tag(cls, parser: Parser, token: Token) -> "QueryStringAlt... FILE: concordia/templatetags/concordia_sharing_tags.py function share_buttons (line 9) | def share_buttons(url: str, title: str) -> Dict[str, str]: FILE: concordia/templatetags/concordia_text_tags.py function normalize_whitespace (line 11) | def normalize_whitespace(text: str) -> str: function reprchar (line 39) | def reprchar(character: str) -> str: FILE: concordia/templatetags/custom_math.py function multiply (line 9) | def multiply(value: Any, arg: Any) -> Any: FILE: concordia/templatetags/group_list.py function batch (line 9) | def batch(value: Sequence[Any], size: int) -> list[Sequence[Any]]: FILE: concordia/templatetags/reject_filter.py function reject (line 9) | def reject(value: Any, args: str) -> Any: FILE: concordia/templatetags/truncation.py class WordBreakTruncator (line 10) | class WordBreakTruncator(Truncator): method word_break (line 11) | def word_break(self, num: int, truncate: str | None = None) -> str: method _text_word_break (line 44) | def _text_word_break( function truncatechars_on_word_break (line 83) | def truncatechars_on_word_break(value: str, arg: int | str) -> str: FILE: concordia/templatetags/visualization.py function concordia_visualization (line 11) | def concordia_visualization(name: str, **attrs) -> SafeString: FILE: concordia/tests/axe.py class Axe (line 18) | class Axe: method __init__ (line 19) | def __init__(self, py, script_path=_DEFAULT_SCRIPT): method violations (line 23) | def violations(self, report=None): method inject (line 46) | def inject(self): method run (line 53) | def run(self, context=None, options=None): method report (line 80) | def report(self, violations): method write_results (line 120) | def write_results(self, data, name=None): FILE: concordia/tests/test_account_views.py class ConcordiaAccountViewTests (line 30) | class ConcordiaAccountViewTests( method setUp (line 37) | def setUp(self): method tearDown (line 40) | def tearDown(self): method test_AccountProfileView_get (line 43) | def test_AccountProfileView_get(self): method test_AccountProfileView_post (line 105) | def test_AccountProfileView_post(self): method test_AccountProfileView_post_invalid_form (line 168) | def test_AccountProfileView_post_invalid_form(self): method test_ajax_session_status_anon (line 184) | def test_ajax_session_status_anon(self): method test_ajax_session_status (line 190) | def test_ajax_session_status(self): method test_ajax_session_status_staff (line 204) | def test_ajax_session_status_staff(self): method test_ajax_messages (line 218) | def test_ajax_messages(self): method test_email_reconfirmation (line 230) | def test_email_reconfirmation(self): method test_account_letter (line 359) | def test_account_letter(self): method test_get_pages (line 369) | def test_get_pages(self): method test_AccountDeletionView (line 407) | def test_AccountDeletionView(self): FILE: concordia/tests/test_admin.py class ConcordiaUserAdminTest (line 54) | class ConcordiaUserAdminTest(TestCase, CreateTestUsers, StreamingTestMix... method setUp (line 55) | def setUp(self): method test_transcription_count (line 63) | def test_transcription_count(self): method test_review_count (line 78) | def test_review_count(self): method test_csv_export (line 98) | def test_csv_export(self): method test_excel_export (line 119) | def test_excel_export(self): class CampaignAdminTest (line 129) | class CampaignAdminTest(TestCase, CreateTestUsers, StreamingTestMixin): method setUp (line 130) | def setUp(self): method test_truncated_description (line 141) | def test_truncated_description(self): method test_truncated_metadata (line 148) | def test_truncated_metadata(self): method test_retire (line 156) | def test_retire(self): method test_campaign_admin (line 194) | def test_campaign_admin(self): class HelpfulLinkAdminTest (line 204) | class HelpfulLinkAdminTest(TestCase, CreateTestUsers): method setUp (line 205) | def setUp(self): method test_helpfullink_admin (line 208) | def test_helpfullink_admin(self): class ConcordiaFileAdminTest (line 214) | class ConcordiaFileAdminTest(TestCase, CreateTestUsers): method setUp (line 215) | def setUp(self): method test_link_url (line 224) | def test_link_url(self): method test_get_fields (line 234) | def test_get_fields(self): class ProjectAdminTest (line 245) | class ProjectAdminTest(TestCase, CreateTestUsers): method setUp (line 246) | def setUp(self): method test_lookup_allowed (line 254) | def test_lookup_allowed(self): method test_item_import_view (line 259) | def test_item_import_view(self): class ItemAdminTest (line 309) | class ItemAdminTest(TestCase, CreateTestUsers): method setUp (line 310) | def setUp(self): method test_lookup_allowed (line 321) | def test_lookup_allowed(self): method test_get_deleted_objects (line 326) | def test_get_deleted_objects(self): method test_get_queryset (line 356) | def test_get_queryset(self): method test_campaign_title (line 361) | def test_campaign_title(self): class AssetAdminTest (line 367) | class AssetAdminTest(TestCase, CreateTestUsers): method setUp (line 368) | def setUp(self): method test_get_queryset (line 378) | def test_get_queryset(self): method test_lookup_allowed (line 383) | def test_lookup_allowed(self): method test_item_id (line 390) | def test_item_id(self): method test_truncated_storage_image (line 393) | def test_truncated_storage_image(self): method test_get_readonly_fields (line 404) | def test_get_readonly_fields(self): method test_change_view (line 409) | def test_change_view(self): method test_has_reopen_permission (line 419) | def test_has_reopen_permission(self): method test_response_action_redirects_with_valid_next (line 427) | def test_response_action_redirects_with_valid_next(self): method test_response_action_falls_back_to_default_without_valid_next (line 443) | def test_response_action_falls_back_to_default_without_valid_next(self): method test_change_view_skips_asset_logic_when_no_object_id (line 462) | def test_change_view_skips_asset_logic_when_no_object_id(self): method test_change_view_handles_submitted_status_as_needs_review (line 476) | def test_change_view_handles_submitted_status_as_needs_review(self): method test_response_action_returns_default_when_no_next_url (line 514) | def test_response_action_returns_default_when_no_next_url(self): class TagAdminTest (line 536) | class TagAdminTest(TestCase, CreateTestUsers, StreamingTestMixin): method setUp (line 537) | def setUp(self): method test_lookup_allowed (line 544) | def test_lookup_allowed(self): method test_export_tags_as_csv (line 553) | def test_export_tags_as_csv(self): class TranscriptionAdminTest (line 581) | class TranscriptionAdminTest(TestCase, CreateTestUsers, StreamingTestMix... method setUp (line 582) | def setUp(self): method test_lookup_allowed (line 596) | def test_lookup_allowed(self): method test_truncated_text (line 605) | def test_truncated_text(self): method test_export_to_csv (line 615) | def test_export_to_csv(self): method test_export_to_excel (line 639) | def test_export_to_excel(self): method test_show_full_result_count_is_disabled (line 646) | def test_show_full_result_count_is_disabled(self): method test_list_display_includes_superseded (line 649) | def test_list_display_includes_superseded(self): method test_list_filter_includes_superseded_param (line 652) | def test_list_filter_includes_superseded_param(self): method test_get_queryset_adds_is_superseded_annotation (line 660) | def test_get_queryset_adds_is_superseded_annotation(self): method test_superseded_column_uses_annotation_boolean (line 674) | def test_superseded_column_uses_annotation_boolean(self): class SiteReportAdminTest (line 686) | class SiteReportAdminTest(TestCase, CreateTestUsers, StreamingTestMixin): method setUp (line 687) | def setUp(self): method test_report_type (line 701) | def test_report_type(self): method test_export_to_csv (line 721) | def test_export_to_csv(self): method test_export_to_excel (line 744) | def test_export_to_excel(self): method test_report_type_variants (line 751) | def test_report_type_variants(self): method test_report_json_pretty_wrap (line 775) | def test_report_json_pretty_wrap(self): method test_previous_and_next_in_series_links (line 783) | def test_previous_and_next_in_series_links(self): class CampaignRetirementProgressAdminTest (line 827) | class CampaignRetirementProgressAdminTest(TestCase): method setUp (line 828) | def setUp(self): method test_completion (line 847) | def test_completion(self): class KeyMetricsReportAdminTests (line 865) | class KeyMetricsReportAdminTests(CreateTestUsers, TestCase): method setUp (line 866) | def setUp(self): method _make_monthly (line 872) | def _make_monthly(self): method test_download_csv_link_builds_expected_anchor (line 882) | def test_download_csv_link_builds_expected_anchor(self): method test_get_urls_registers_named_view (line 890) | def test_get_urls_registers_named_view(self): method test_download_csv_view_success (line 895) | def test_download_csv_view_success(self): method test_download_csv_view_404_when_missing (line 920) | def test_download_csv_view_404_when_missing(self): method test_download_selected_as_zip_streams_zip_with_csvs (line 929) | def test_download_selected_as_zip_streams_zip_with_csvs(self): FILE: concordia/tests/test_admin_actions.py class MockModelAdmin (line 37) | class MockModelAdmin: class UserAdminActionTest (line 45) | class UserAdminActionTest(TestCase, CreateTestUsers): method setUp (line 46) | def setUp(self): method test_anonymize_action (line 51) | def test_anonymize_action(self): class ItemAdminActionTest (line 79) | class ItemAdminActionTest(TestCase): method _setUp (line 80) | def _setUp(self, published=True): method test_publish_item_action (line 98) | def test_publish_item_action(self): method test_unpublish_item_action (line 118) | def test_unpublish_item_action(self): class AssetAdminActionTest (line 139) | class AssetAdminActionTest(TestCase, CreateTestUsers): method setUp (line 140) | def setUp(self): method test_change_status_to_completed (line 165) | def test_change_status_to_completed(self): method test_change_status_to_needs_review (line 183) | def test_change_status_to_needs_review(self): method test_change_status_to_in_progress (line 201) | def test_change_status_to_in_progress(self): method test_change_status_to_completed_message_single (line 219) | def test_change_status_to_completed_message_single(self): method test_change_status_to_completed_message_multiple (line 231) | def test_change_status_to_completed_message_multiple(self): method test_change_status_to_needs_review_message_single (line 243) | def test_change_status_to_needs_review_message_single(self): method test_change_status_to_in_progress_message_multiple (line 255) | def test_change_status_to_in_progress_message_multiple(self): class AdminActionTest (line 273) | class AdminActionTest(TestCase): method _setUp (line 274) | def _setUp(self, published=True): method test_publish_action (line 309) | def test_publish_action(self): method test_unpublish_action (line 351) | def test_unpublish_action(self): class VerifyAssetsActionTest (line 394) | class VerifyAssetsActionTest(TestCase): method setUp (line 395) | def setUp(self): method test_verify_assets_action_for_campaign (line 421) | def test_verify_assets_action_for_campaign(self): method test_verify_assets_action_for_project (line 455) | def test_verify_assets_action_for_project(self): method test_verify_assets_action_for_item (line 472) | def test_verify_assets_action_for_item(self): method test_verify_assets_action_for_asset (line 489) | def test_verify_assets_action_for_asset(self): method test_verify_assets_action_for_unsupported_model (line 506) | def test_verify_assets_action_for_unsupported_model(self): FILE: concordia/tests/test_admin_filters.py class NullableTimestampFilterTest (line 50) | class NullableTimestampFilterTest(CreateTestUsers, TestCase): method setUp (line 51) | def setUp(self): method test_lookups (line 55) | def test_lookups(self): class CampaignListFilterTests (line 75) | class CampaignListFilterTests(CreateTestUsers, TestCase): method setUp (line 76) | def setUp(self): method test_card_filter (line 79) | def test_card_filter(self): method test_project_filter (line 100) | def test_project_filter(self): method test_site_report_filter (line 123) | def test_site_report_filter(self): class ItemFilterTests (line 157) | class ItemFilterTests(CreateTestUsers, TestCase): method setUp (line 158) | def setUp(self): method test_project_filter (line 161) | def test_project_filter(self): class ProjectFilterTests (line 185) | class ProjectFilterTests(TestCase): method setUp (line 186) | def setUp(self): method test_project_campaign_status_list_filter (line 189) | def test_project_campaign_status_list_filter(self): class TranscriptionFilterTests (line 201) | class TranscriptionFilterTests(CreateTestUsers, TestCase): method setUp (line 202) | def setUp(self): method test_ocr_filter (line 206) | def test_ocr_filter(self): class TopicListFilterTests (line 218) | class TopicListFilterTests(TestCase): method setUp (line 219) | def setUp(self): method test_helpfullink_topic_list_filter (line 224) | def test_helpfullink_topic_list_filter(self): class NextAssetCampaignListFilterTests (line 236) | class NextAssetCampaignListFilterTests(TestCase): method setUp (line 237) | def setUp(self): method test_lookups_only_includes_used_campaigns (line 251) | def test_lookups_only_includes_used_campaigns(self): class SupersededListFilterTests (line 269) | class SupersededListFilterTests(CreateTestUsers, TestCase): method setUp (line 270) | def setUp(self): method test_lookups (line 284) | def test_lookups(self): method test_queryset_superseded_yes (line 293) | def test_queryset_superseded_yes(self): method test_queryset_superseded_no (line 304) | def test_queryset_superseded_no(self): method test_queryset_no_param_returns_all (line 312) | def test_queryset_no_param_returns_all(self): method test_queryset_ignores_unknown_value (line 318) | def test_queryset_ignores_unknown_value(self): FILE: concordia/tests/test_admin_forms.py class SanitizedDescriptionAdminFormTests (line 7) | class SanitizedDescriptionAdminFormTests(TestCase): method test_clean (line 8) | def test_clean(self): class ClearCacheFormTests (line 25) | class ClearCacheFormTests(TestCase): method test_cache_name_choices (line 36) | def test_cache_name_choices(self): FILE: concordia/tests/test_admin_views.py class TestProjectLevelExportView (line 33) | class TestProjectLevelExportView(CreateTestUsers, TestCase): method setUp (line 34) | def setUp(self): method test_get (line 49) | def test_get(self): method test_get_campaign (line 56) | def test_get_campaign(self): method test_post (line 64) | def test_post(self): class TestFunctionBasedViews (line 76) | class TestFunctionBasedViews(CreateTestUsers, TestCase, StreamingTestMix... method test_admin_bulk_import_review (line 77) | def test_admin_bulk_import_review(self): method test_admin_site_report_view (line 90) | def test_admin_site_report_view(self): method test_admin_retired_site_report_view (line 116) | def test_admin_retired_site_report_view(self): class TestAdminBulkImportView (line 138) | class TestAdminBulkImportView(CreateTestUsers, TestCase): method setUp (line 139) | def setUp(self): method test_get (line 162) | def test_get(self): method test_invalid_form (line 167) | def test_invalid_form(self): method test_fully_valid_form (line 172) | def test_fully_valid_form(self): method test_missing_field (line 236) | def test_missing_field(self): method test_empty_field (line 265) | def test_empty_field(self): method test_all_empty_fields (line 300) | def test_all_empty_fields(self): method test_empty_campaign_slug (line 326) | def test_empty_campaign_slug(self): method test_bad_campaign_slug (line 365) | def test_bad_campaign_slug(self): method test_empty_project_slug (line 398) | def test_empty_project_slug(self): method test_bad_project_slug (line 435) | def test_bad_project_slug(self): method test_bad_url (line 469) | def test_bad_url(self): method test_import_task_exception (line 498) | def test_import_task_exception(self): class TestAdminBulkChangeAssetStatus (line 529) | class TestAdminBulkChangeAssetStatus(CreateTestUsers, TestCase): method setUp (line 530) | def setUp(self): method test_admin_bulk_change_asset_status (line 573) | def test_admin_bulk_change_asset_status(self): class TestAdminBulkImportReview (line 610) | class TestAdminBulkImportReview(CreateTestUsers, TestCase): method setUp (line 611) | def setUp(self): method test_get (line 634) | def test_get(self): method test_invalid_form (line 639) | def test_invalid_form(self): method test_fully_valid_form (line 644) | def test_fully_valid_form(self): method test_missing_field (line 671) | def test_missing_field(self): method test_empty_field (line 702) | def test_empty_field(self): method test_all_empty_fields (line 740) | def test_all_empty_fields(self): method test_empty_campaign_slug (line 770) | def test_empty_campaign_slug(self): method test_bad_campaign_slug (line 800) | def test_bad_campaign_slug(self): method test_empty_project_slug (line 831) | def test_empty_project_slug(self): method test_bad_project_slug (line 862) | def test_bad_project_slug(self): method test_bad_url (line 893) | def test_bad_url(self): method test_large_number_urls (line 924) | def test_large_number_urls(self): class TestCeleryTaskReview (line 957) | class TestCeleryTaskReview(CreateTestUsers, TestCase): method setUp (line 958) | def setUp(self): method add_campaigns (line 964) | def add_campaigns(self): method add_active_campaigns (line 969) | def add_active_campaigns(self): method add_completed_campaigns (line 977) | def add_completed_campaigns(self): method add_retired_campaigns (line 989) | def add_retired_campaigns(self): method add_projects (line 1001) | def add_projects(self): method add_tasks (line 1053) | def add_tasks(self, campaign): method test_empty_dashboard (line 1095) | def test_empty_dashboard(self): method test_dashboard (line 1104) | def test_dashboard(self): method test_campaign_dashboard (line 1137) | def test_campaign_dashboard(self): class TestSerializedObjectView (line 1182) | class TestSerializedObjectView(TestCase): method setUp (line 1183) | def setUp(self): method test_exists (line 1188) | def test_exists(self): method test_dne (line 1197) | def test_dne(self): function mock_cache (line 1207) | def mock_cache(object_to_patch): class TestClearCacheView (line 1241) | class TestClearCacheView(CreateTestUsers, TestCase): method setUp (line 1242) | def setUp(self): method test_get (line 1246) | def test_get(self, caches_mock, cache_mock): method test_invalid_form (line 1253) | def test_invalid_form(self, caches_mock, cache_mock): method test_valid_form (line 1260) | def test_valid_form(self, caches_mock, cache_mock): method test_form_with_invalid_data (line 1268) | def test_form_with_invalid_data(self, caches_mock, cache_mock): method test_exception (line 1275) | def test_exception(self, caches_mock, cache_mock): FILE: concordia/tests/test_api_views.py class URLAwareEncoderTest (line 30) | class URLAwareEncoderTest(TestCase): method test_default (line 31) | def test_default(self): class APIViewMixinTest (line 46) | class APIViewMixinTest(TestCase): method setUp (line 47) | def setUp(self): method test_serialize_conctext (line 50) | def test_serialize_conctext(self): method test_serialize_object (line 55) | def test_serialize_object(self, mtd_mock): class APIListViewTest (line 71) | class APIListViewTest(TestCase): method test_serialize_context (line 72) | def test_serialize_context(self, time_mock): class ConcordiaViewTests (line 82) | class ConcordiaViewTests(JSONAssertMixin, TestCase): method setUpTestData (line 84) | def setUpTestData(cls): method get_api_response (line 149) | def get_api_response(self, url, **request_args): method get_api_list_response (line 164) | def get_api_list_response(self, url, page_size=10, **request_args): method assertAbsoluteUrl (line 188) | def assertAbsoluteUrl(self, url, allow_none=True): method assertAbsoluteURLs (line 201) | def assertAbsoluteURLs(self, data): method assertAssetStatuses (line 216) | def assertAssetStatuses(self, asset_list, expected_statuses): method assertAssetsHaveLatestTranscriptions (line 226) | def assertAssetsHaveLatestTranscriptions(self, asset_list): method test_topic_detail (line 244) | def test_topic_detail(self): method test_campaign_list (line 272) | def test_campaign_list(self): method test_campaign_detail (line 289) | def test_campaign_detail(self): method test_project_detail (line 321) | def test_project_detail(self): method test_item_detail (line 363) | def test_item_detail(self): FILE: concordia/tests/test_authentication.py class AuthenticationBackendTests (line 8) | class AuthenticationBackendTests(TestCase, CreateTestUsers): method test_EmailOrUsernameModelBackend (line 9) | def test_EmailOrUsernameModelBackend(self): FILE: concordia/tests/test_celery.py class ConcordiaCeleryTests (line 11) | class ConcordiaCeleryTests(TestCase): method test_returns_early_for_non_package (line 12) | def test_returns_early_for_non_package(self): method test_imports_all_submodules_for_package (line 26) | def test_imports_all_submodules_for_package(self): method test_package_with_no_submodules (line 57) | def test_package_with_no_submodules(self): method test__load_all_task_modules_invokes_imports (line 76) | def test__load_all_task_modules_invokes_imports(self): method test_on_after_finalize_signal_triggers_handler (line 88) | def test_on_after_finalize_signal_triggers_handler(self): FILE: concordia/tests/test_consumers.py class TestAssetConsumer (line 13) | class TestAssetConsumer(CreateTestUsers, TransactionTestCase): method test_asset_update (line 21) | async def test_asset_update(self): method test_asset_reservation_obtained (line 53) | async def test_asset_reservation_obtained(self): method test_asset_reservation_released (line 74) | async def test_asset_reservation_released(self): FILE: concordia/tests/test_contextmanagers.py class CacheLockTests (line 7) | class CacheLockTests(TestCase): method setUp (line 8) | def setUp(self): method test_acquires_and_releases_lock (line 23) | def test_acquires_and_releases_lock(self): method test_does_not_release_if_lock_not_acquired (line 34) | def test_does_not_release_if_lock_not_acquired(self): method test_does_not_release_if_expired (line 42) | def test_does_not_release_if_expired(self): FILE: concordia/tests/test_decorators.py class LockedTaskDecoratorTests (line 9) | class LockedTaskDecoratorTests(TestCase): method setUp (line 10) | def setUp(self): method make_task_instance (line 20) | def make_task_instance(self, name="test-task"): method test_lock_by_args_allows_only_one_execution (line 26) | def test_lock_by_args_allows_only_one_execution(self): method test_lock_by_task_name (line 48) | def test_lock_by_task_name(self): method test_force_runs_even_if_lock_not_acquired (line 65) | def test_force_runs_even_if_lock_not_acquired(self): method test_error_in_key_generation_logs_and_raises (line 82) | def test_error_in_key_generation_logs_and_raises(self): FILE: concordia/tests/test_fields.py class TestFields (line 10) | class TestFields(TestCase): method test_TurnstileField (line 17) | def test_TurnstileField(self): FILE: concordia/tests/test_logging.py class ConcordiaLoggerTests (line 10) | class ConcordiaLoggerTests(TestCase): method setUp (line 11) | def setUp(self): method test_debug_logs_with_event (line 15) | def test_debug_logs_with_event(self): method test_info_logs_with_event (line 23) | def test_info_logs_with_event(self): method test_warning_requires_reason_and_reason_code (line 31) | def test_warning_requires_reason_and_reason_code(self): method test_error_requires_reason_and_reason_code (line 51) | def test_error_requires_reason_and_reason_code(self): method test_missing_event_raises (line 69) | def test_missing_event_raises(self): method test_log_merges_context_correctly (line 73) | def test_log_merges_context_correctly(self): method test_log_explicit_key_overrides_extracted (line 80) | def test_log_explicit_key_overrides_extracted(self): method test_bind_merges_context (line 87) | def test_bind_merges_context(self): method test_bind_merges_context_into_logging (line 93) | def test_bind_merges_context_into_logging(self): method test_unregister_extractor_removes_extractor (line 100) | def test_unregister_extractor_removes_extractor(self): method test_register_extractor_warns_on_chained_override (line 105) | def test_register_extractor_warns_on_chained_override(self): method test_log_raises_when_message_is_none (line 119) | def test_log_raises_when_message_is_none(self): method test_log_raises_when_message_is_none_direct (line 123) | def test_log_raises_when_message_is_none_direct(self): method test_log_raises_when_message_is_empty (line 127) | def test_log_raises_when_message_is_empty(self): method test_log_raises_when_message_is_empty_direct (line 131) | def test_log_raises_when_message_is_empty_direct(self): method test_log_skips_none_values_from_extractor (line 135) | def test_log_skips_none_values_from_extractor(self): method test_log_includes_nonextractor_bound_context (line 145) | def test_log_includes_nonextractor_bound_context(self): method test_log_skips_none_values_in_context (line 152) | def test_log_skips_none_values_in_context(self): method test_log_overrides_bound_and_extracted_context (line 157) | def test_log_overrides_bound_and_extracted_context(self): method test_extractor_returns_none_value_skipped (line 167) | def test_extractor_returns_none_value_skipped(self): method test_get_logger_uses_structlog (line 174) | def test_get_logger_uses_structlog(self): method test_log_raises_valueerror_for_empty_reason_and_code (line 185) | def test_log_raises_valueerror_for_empty_reason_and_code(self): method test_exception_logs_with_exc_info (line 196) | def test_exception_logs_with_exc_info(self): FILE: concordia/tests/test_maintenance.py class TestMaintenance (line 10) | class TestMaintenance(TestCase, CreateTestUsers): method setUp (line 11) | def setUp(self): method tearDown (line 15) | def tearDown(self): method test_need_maintenance_response_maintenance_default (line 18) | def test_need_maintenance_response_maintenance_default(self): method test_need_maintenance_response_maintenance_off (line 22) | def test_need_maintenance_response_maintenance_off(self): method test_need_maintenance_response_maintenance_on (line 27) | def test_need_maintenance_response_maintenance_on(self): method test_need_maintenance_response_maintenance_frontend (line 40) | def test_need_maintenance_response_maintenance_frontend(self): FILE: concordia/tests/test_management_commands.py class EnsureInitialSiteConfigurationTests (line 10) | class EnsureInitialSiteConfigurationTests(TestCase): method test_command_output (line 11) | def test_command_output(self, *args, **kwargs): class ImportSiteReportsTests (line 30) | class ImportSiteReportsTests(TestCase): method test_command_output (line 31) | def test_command_output(self, *args, **kwargs): class PrintFrontendTestUrlsTests (line 41) | class PrintFrontendTestUrlsTests(TestCase): method test_command_output (line 42) | def test_command_output(self, *args, **kwargs): FILE: concordia/tests/test_models.py class AssetTestCase (line 62) | class AssetTestCase(CreateTestUsers, TestCase): method setUp (line 63) | def setUp(self): method test_get_ocr_transcript (line 73) | def test_get_ocr_transcript(self): method test_get_contributor_count (line 83) | def test_get_contributor_count(self): method test_turn_off_ocr (line 86) | def test_turn_off_ocr(self): method test_get_storage_path (line 102) | def test_get_storage_path(self): method test_saving_without_campaign (line 108) | def test_saving_without_campaign(self): method test_rollforward_with_only_rollforward_transcriptions (line 120) | def test_rollforward_with_only_rollforward_transcriptions(self): method test_rollforward_with_too_many_rollforward_transcriptions (line 130) | def test_rollforward_with_too_many_rollforward_transcriptions(self): method test_rollforward_with_no_superseded_transcription (line 147) | def test_rollforward_with_no_superseded_transcription(self): method test_get_storage_path_handles_jpeg (line 163) | def test_get_storage_path_handles_jpeg(self): class ItemModelTests (line 169) | class ItemModelTests(TestCase): method test_thumbnail_link_prefers_image_url_when_present (line 170) | def test_thumbnail_link_prefers_image_url_when_present(self): method test_thumbnail_link_falls_back_when_image_url_raises (line 179) | def test_thumbnail_link_falls_back_when_image_url_raises(self): method test_thumbnail_link_returns_thumbnail_url_when_no_image (line 192) | def test_thumbnail_link_returns_thumbnail_url_when_no_image(self): method test_thumbnail_link_returns_none_when_no_image_or_url (line 198) | def test_thumbnail_link_returns_none_when_no_image_or_url(self): class TranscriptionManagerTestCase (line 205) | class TranscriptionManagerTestCase(CreateTestUsers, TestCase): method setUp (line 206) | def setUp(self): method test_recent_review_actions (line 215) | def test_recent_review_actions(self): method test_review_actions (line 227) | def test_review_actions(self): method test_review_incidents (line 232) | def test_review_incidents(self): method test_transcribe_incidents (line 304) | def test_transcribe_incidents(self): method test_review_incidents_returns_empty_when_counts_zero (line 350) | def test_review_incidents_returns_empty_when_counts_zero(self): method test_user_review_incidents_no_threshold_hit (line 370) | def test_user_review_incidents_no_threshold_hit(self): method test_review_incidents_no_threshold_match_inner_loop_break (line 394) | def test_review_incidents_no_threshold_match_inner_loop_break(self): method test_review_incidents_loops_until_threshold (line 417) | def test_review_incidents_loops_until_threshold(self): class TranscriptionTestCase (line 454) | class TranscriptionTestCase(CreateTestUsers, TestCase): method setUp (line 455) | def setUp(self): method test_campaign_slug (line 466) | def test_campaign_slug(self): method test_clean (line 471) | def test_clean(self): method test_save (line 495) | def test_save(self, mock_handler): method test_status (line 507) | def test_status(self): class SignalHandlersTest (line 534) | class SignalHandlersTest(CreateTestUsers, TestCase): method test_update_useractivity_cache (line 537) | def test_update_useractivity_cache(self, mock_set, mock_get): class AssetTranscriptionReservationTest (line 555) | class AssetTranscriptionReservationTest(CreateTestUsers, TestCase): method setUp (line 556) | def setUp(self): method test_get_token (line 566) | def test_get_token(self): method test_get_user (line 569) | def test_get_user(self): class UserProfileActivityTestCase (line 573) | class UserProfileActivityTestCase(TestCase): method setUp (line 574) | def setUp(self): method test_get_status (line 579) | def test_get_status(self): method test_total_actions (line 587) | def test_total_actions(self): method test_str (line 590) | def test_str(self): class UserProfileTestCase (line 595) | class UserProfileTestCase(CreateTestUsers, TestCase): method test_update_userprofileactivity_table (line 596) | def test_update_userprofileactivity_table(self): method test_update_userprofileactivity_table_updates_existing_and_profile (line 614) | def test_update_userprofileactivity_table_updates_existing_and_profile... class CampaignTestCase (line 642) | class CampaignTestCase(TestCase): method test_queryset (line 643) | def test_queryset(self): class CardTestCase (line 656) | class CardTestCase(TestCase): method test_str (line 657) | def test_str(self): class CardFamilyTestCase (line 662) | class CardFamilyTestCase(TestCase): method setUp (line 663) | def setUp(self): method test_str (line 666) | def test_str(self): method test_on_cardfamily_save (line 669) | def test_on_cardfamily_save(self): class HelpfulLinkTestCase (line 677) | class HelpfulLinkTestCase(TestCase): method setUp (line 678) | def setUp(self): method test_str (line 681) | def test_str(self): method test_queryset (line 684) | def test_queryset(self): class ConcordiaFileTestCase (line 692) | class ConcordiaFileTestCase(TestCase): method setUp (line 693) | def setUp(self): method test_str (line 696) | def test_str(self): method test_delete (line 699) | def test_delete(self): method test_concordia_file_upload_path (line 723) | def test_concordia_file_upload_path(self): class TagTestCase (line 741) | class TagTestCase(TestCase): method test_str (line 742) | def test_str(self): class UserAssetTagCollectionTestCase (line 747) | class UserAssetTagCollectionTestCase(TestCase): method test_str (line 748) | def test_str(self): class BannerTestCase (line 756) | class BannerTestCase(TestCase): method setUp (line 757) | def setUp(self): method test_str (line 760) | def test_str(self): method test_alert_class (line 763) | def test_alert_class(self): method test_btn_class (line 768) | def test_btn_class(self): class CarouselSlideTestCase (line 774) | class CarouselSlideTestCase(TestCase): method test_str (line 775) | def test_str(self): class CampaignRetirementProgressTestCase (line 780) | class CampaignRetirementProgressTestCase(TestCase): method test_str (line 781) | def test_str(self): class GuideTestCase (line 786) | class GuideTestCase(TestCase): method test_str (line 787) | def test_str(self): class SimplePageTestCase (line 792) | class SimplePageTestCase(TestCase): method test_str (line 793) | def test_str(self): class ValidatedGetOrCreateTestCase (line 798) | class ValidatedGetOrCreateTestCase(TestCase): method test_validated_get_or_create (line 799) | def test_validated_get_or_create(self): class NextAssetModelTests (line 811) | class NextAssetModelTests(TestCase): method setUp (line 812) | def setUp(self): method test_create_next_transcribable_campaign_asset (line 818) | def test_create_next_transcribable_campaign_asset(self): method test_create_next_reviewable_campaign_asset (line 831) | def test_create_next_reviewable_campaign_asset(self): method test_create_next_transcribable_topic_asset (line 844) | def test_create_next_transcribable_topic_asset(self): method test_create_next_reviewable_topic_asset (line 856) | def test_create_next_reviewable_topic_asset(self): method test_needed_for_campaign_respects_target_count (line 868) | def test_needed_for_campaign_respects_target_count(self): method test_needed_for_topic_respects_target_count (line 886) | def test_needed_for_topic_respects_target_count(self): method test_needed_for_campaign_raises_without_target (line 903) | def test_needed_for_campaign_raises_without_target(self): method test_needed_for_topic_raises_without_target (line 921) | def test_needed_for_topic_raises_without_target(self): method test_needed_for_campaign_with_explicit_target_count (line 939) | def test_needed_for_campaign_with_explicit_target_count(self): method test_needed_for_topic_with_explicit_target_count (line 959) | def test_needed_for_topic_with_explicit_target_count(self): class SiteReportAndManagerTestCase (line 978) | class SiteReportAndManagerTestCase(TestCase): method _aware (line 979) | def _aware(self, y, m, d, hh=12, mm=0, ss=0): method _mk_sr (line 983) | def _mk_sr( method test_calculate_assets_started (line 1002) | def test_calculate_assets_started(self): method test_series_navigation_and_sums (line 1030) | def test_series_navigation_and_sums(self): method test_per_campaign_and_topic_series_filters (line 1082) | def test_per_campaign_and_topic_series_filters(self): method test__series_filter_campaign_branch (line 1099) | def test__series_filter_campaign_branch(self): method test__series_filter_topic_branch (line 1120) | def test__series_filter_topic_branch(self): method test_series_filter_for_instance_topic_branch (line 1134) | def test_series_filter_for_instance_topic_branch(self): method test_series_filter_for_instance_retired_and_fallback (line 1149) | def test_series_filter_for_instance_retired_and_fallback(self): method test_to_debug_dict_includes_related_fields_and_counters (line 1161) | def test_to_debug_dict_includes_related_fields_and_counters(self): method test_first_on_or_after_with_upper_bound_campaign (line 1189) | def test_first_on_or_after_with_upper_bound_campaign(self): method test_previous_in_series_defaults_to_now (line 1203) | def test_previous_in_series_defaults_to_now(self): method test_sum_assets_started_treats_null_as_zero (line 1213) | def test_sum_assets_started_treats_null_as_zero(self): method test_to_debug_dict_campaign_status_and_topic_loop (line 1229) | def test_to_debug_dict_campaign_status_and_topic_loop(self): method test_to_debug_json_serializes_and_includes_counters (line 1251) | def test_to_debug_json_serializes_and_includes_counters(self): method test_first_on_or_after_without_upper_bound_topic (line 1268) | def test_first_on_or_after_without_upper_bound_topic(self): method test_to_debug_dict_skips_none_campaign_attrs (line 1284) | def test_to_debug_dict_skips_none_campaign_attrs(self): method test_to_debug_dict_skips_none_topic_attrs (line 1302) | def test_to_debug_dict_skips_none_topic_attrs(self): class KeyMetricsReportTestCase (line 1319) | class KeyMetricsReportTestCase(TestCase): method _aware (line 1320) | def _aware(self, y, m, d, hh=12, mm=0, ss=0): method _mk_sr (line 1324) | def _mk_sr(self, dt, report_name, **counters): method test_helpers (line 1332) | def test_helpers(self): method test_upsert_month_from_sitereports (line 1355) | def test_upsert_month_from_sitereports(self): method test_upsert_quarter_and_fiscal_year_rollups (line 1446) | def test_upsert_quarter_and_fiscal_year_rollups(self): method test___str___fallback_when_fields_incomplete (line 1511) | def test___str___fallback_when_fields_incomplete(self): method test_quarter_helper_edges (line 1536) | def test_quarter_helper_edges(self): method test__format_value_for_csv_variants (line 1545) | def test__format_value_for_csv_variants(self): method test_upsert_month_returns_none_when_no_snapshots (line 1569) | def test_upsert_month_returns_none_when_no_snapshots(self): method test_upsert_quarter_invalid_quarter_raises (line 1573) | def test_upsert_quarter_invalid_quarter_raises(self): method test_quarter_month_specs_all_quarters (line 1577) | def test_quarter_month_specs_all_quarters(self): method test_month_bounds_handles_december (line 1610) | def test_month_bounds_handles_december(self): method test__monthly_from_sitereports_returns_empty_dict_when_no_eom (line 1615) | def test__monthly_from_sitereports_returns_empty_dict_when_no_eom(self): method test__monthly_from_sitereports_baseline_fallback_inside_month (line 1622) | def test__monthly_from_sitereports_baseline_fallback_inside_month(self): method test__monthly_from_sitereports_treats_missing_series_as_zero (line 1657) | def test__monthly_from_sitereports_treats_missing_series_as_zero(self): method test_upsert_quarter_returns_none_when_no_monthlies_all_quarters (line 1680) | def test_upsert_quarter_returns_none_when_no_monthlies_all_quarters(se... method test_upsert_fiscal_year_returns_none_when_no_monthlies (line 1691) | def test_upsert_fiscal_year_returns_none_when_no_monthlies(self): method test__calendar_year_for_month_in_fy_helper (line 1695) | def test__calendar_year_for_month_in_fy_helper(self): method test_quarter_month_specs_q2 (line 1707) | def test_quarter_month_specs_q2(self): class KeyMetricsReportCsvTestCase (line 1718) | class KeyMetricsReportCsvTestCase(TestCase): method setUp (line 1719) | def setUp(self): method _csv_as_lines (line 1796) | def _csv_as_lines(self, rep: KeyMetricsReport) -> list[list[str]]: method test_monthly_csv_headers_and_values (line 1800) | def test_monthly_csv_headers_and_values(self): method test_quarterly_csv_headers_totals_and_lifetime (line 1822) | def test_quarterly_csv_headers_totals_and_lifetime(self): method test_fiscal_year_csv_headers_totals_and_lifetime (line 1855) | def test_fiscal_year_csv_headers_totals_and_lifetime(self): method test_str_formats (line 1891) | def test_str_formats(self): method test_quarterly_csv_when_no_monthlies_and_no_priors (line 1905) | def test_quarterly_csv_when_no_monthlies_and_no_priors(self): method test_fiscal_year_csv_headers_when_q1_missing (line 1935) | def test_fiscal_year_csv_headers_when_q1_missing(self): method test_format_value_for_csv_non_decimal_avg (line 1990) | def test_format_value_for_csv_non_decimal_avg(self): FILE: concordia/tests/test_parser.py class ParserTestCase (line 42) | class ParserTestCase(TestCase): method test_extract_og_image (line 44) | def test_extract_og_image(self, mock_urlopen): method test_paginate_blog_posts (line 55) | def test_paginate_blog_posts(self, mock_urlopen, mock_extract_og_image): method test_get_http_error (line 74) | def test_get_http_error(self, mock_get, mock_logger): method test_get_exception_timeout (line 86) | def test_get_exception_timeout(self, mock_get, mock_logger): method test_get_connection_error (line 94) | def test_get_connection_error(self, mock_get, mock_logger): method test_get_request_exception (line 102) | def test_get_request_exception(self, mock_get, mock_logger): method test_ogimageparser_parses_meta_and_sets_og_image (line 110) | def test_ogimageparser_parses_meta_and_sets_og_image(self): method test_extract_og_image_request_exception_logs_and_returns_none (line 123) | def test_extract_og_image_request_exception_logs_and_returns_none( method test_get_og_image_calls_extract_on_cache_miss (line 136) | def test_get_og_image_calls_extract_on_cache_miss( method test_get_og_image_uses_cache_when_present (line 146) | def test_get_og_image_uses_cache_when_present( method _make_item_element (line 154) | def _make_item_element(self, title, link): method test_paginate_blog_posts_segments_and_includes_og_images (line 166) | def test_paginate_blog_posts_segments_and_includes_og_images( method test_paginate_blog_posts_with_no_items_returns_single_empty_segment (line 196) | def test_paginate_blog_posts_with_no_items_returns_single_empty_segment( FILE: concordia/tests/test_registration_views.py class ConcordiaViewTests (line 30) | class ConcordiaViewTests( method test_send_activation_email_on_inactive_login (line 33) | def test_send_activation_email_on_inactive_login(self): method test_inactive_user_can_password_reset (line 45) | def test_inactive_user_can_password_reset(self): method test_password_reset_will_activate_user (line 53) | def test_password_reset_will_activate_user(self, signal_mock): method test_password_reset_with_activate_user (line 83) | def test_password_reset_with_activate_user(self, signal_mock): FILE: concordia/tests/test_s3.py class S3StorageAPITest (line 10) | class S3StorageAPITest(TestCase): method setUp (line 11) | def setUp(self): method tearDown (line 19) | def tearDown(self): method test_s3_upload_api_layer (line 58) | def test_s3_upload_api_layer(self, mock_send, mock_add_auth): FILE: concordia/tests/test_selenium.py class SeleniumTests (line 20) | class SeleniumTests(CreateTestUsers, StaticLiveServerTestCase): method setUpClass (line 22) | def setUpClass(cls): method tearDownClass (line 39) | def tearDownClass(cls): method reverse (line 43) | def reverse(self, name): method test_login (line 46) | def test_login(self): method test_blog_carousel (line 77) | def test_blog_carousel(self): FILE: concordia/tests/test_sentry.py class TestSentry (line 10) | class TestSentry(TestCase): method test_sentry_config (line 18) | def test_sentry_config(self): FILE: concordia/tests/test_signals.py class TestSignalHandlers (line 20) | class TestSignalHandlers(CreateTestUsers, TestCase): method setUp (line 21) | def setUp(self): method test_clear_reservation_token (line 26) | def test_clear_reservation_token(self): method test_user_successfully_activated (line 35) | def test_user_successfully_activated(self): method test_user_successfully_activated_no_request (line 44) | def test_user_successfully_activated_no_request(self): method test_user_successfully_activated_no_welcome_email (line 50) | def test_user_successfully_activated_no_welcome_email(self): method test_add_user_to_newsletter (line 59) | def test_add_user_to_newsletter(self): class UpdateAssetStatusSignalTests (line 80) | class UpdateAssetStatusSignalTests(CreateTestUsers, TestCase): method setUp (line 81) | def setUp(self): method test_accepted_transcription_sets_completed_status (line 86) | def test_accepted_transcription_sets_completed_status(self): method test_submitted_transcription_sets_submitted_status (line 92) | def test_submitted_transcription_sets_submitted_status(self): method test_rejected_transcription_sets_in_progress_status (line 100) | def test_rejected_transcription_sets_in_progress_status(self): method test_default_transcription_sets_in_progress_status (line 108) | def test_default_transcription_sets_in_progress_status(self): method test_outdated_transcription_does_not_update_status (line 116) | def test_outdated_transcription_does_not_update_status(self): method test_tasks_called_on_latest_transcription (line 141) | def test_tasks_called_on_latest_transcription(self, mock_calc, mock_re... class RequestIDHeaderTests (line 150) | class RequestIDHeaderTests(TestCase): method setUp (line 151) | def setUp(self): method tearDown (line 156) | def tearDown(self): method make_response (line 159) | def make_response(self, cache_control_header=None): method test_adds_header_when_no_cache_control (line 169) | def test_adds_header_when_no_cache_control(self, mock_contextvars): method test_adds_header_when_private (line 178) | def test_adds_header_when_private(self, mock_contextvars): method test_skips_header_when_public_with_max_age (line 187) | def test_skips_header_when_public_with_max_age(self, mock_contextvars): method test_adds_header_when_no_store_present (line 196) | def test_adds_header_when_no_store_present(self, mock_contextvars): FILE: concordia/tests/test_tasks_assets.py class CalculateDifficultyValuesTests (line 23) | class CalculateDifficultyValuesTests(CreateTestUsers, TestCase): method setUp (line 24) | def setUp(self): method test_no_changes_when_difficulty_matches (line 32) | def test_no_changes_when_difficulty_matches(self): method test_updates_difficulty_for_explicit_queryset (line 40) | def test_updates_difficulty_for_explicit_queryset(self): method test_default_published_queryset_and_chunking (line 59) | def test_default_published_queryset_and_chunking(self): class PopulateAssetYearsTests (line 89) | class PopulateAssetYearsTests(TestCase): method setUp (line 90) | def setUp(self): method _set_metadata_dates (line 109) | def _set_metadata_dates(self, asset, *years): method test_updates_year_from_last_date_key (line 116) | def test_updates_year_from_last_date_key(self): method test_skips_when_year_unchanged (line 126) | def test_skips_when_year_unchanged(self): method test_multiple_assets_count_returned (line 134) | def test_multiple_assets_count_returned(self): method test_skips_empty_date_dicts_and_uses_last_year (line 150) | def test_skips_empty_date_dicts_and_uses_last_year(self): class FixStorageImagesTests (line 168) | class FixStorageImagesTests(TestCase): method setUp (line 169) | def setUp(self): method test_skips_when_storage_image_exists (line 197) | def test_skips_when_storage_image_exists(self): method test_downloads_and_saves_when_missing_success (line 210) | def test_downloads_and_saves_when_missing_success(self): method test_raises_and_logs_when_save_fails (line 244) | def test_raises_and_logs_when_save_fails(self): method test_filters_by_campaign_and_asset_start_id (line 273) | def test_filters_by_campaign_and_asset_start_id(self): method test_skips_when_storage_image_is_falsy (line 309) | def test_skips_when_storage_image_is_falsy(self): FILE: concordia/tests/test_tasks_blog.py class BlogTaskTestCase (line 9) | class BlogTaskTestCase(TestCase): method test_fetch_and_cache_blog_images (line 12) | def test_fetch_and_cache_blog_images(self, mock_get, mock_extract): method test_skips_items_with_no_link (line 38) | def test_skips_items_with_no_link(self, mock_fetch, mock_extract): FILE: concordia/tests/test_tasks_housekeeping.py class ClearSessionsTaskTests (line 8) | class ClearSessionsTaskTests(TestCase): method test_calls_django_clearsessions_command (line 9) | def test_calls_django_clearsessions_command(self): method test_raises_when_call_command_fails (line 16) | def test_raises_when_call_command_fails(self): FILE: concordia/tests/test_tasks_next_asset.py class PopulateNextAssetTasksTests (line 36) | class PopulateNextAssetTasksTests(CreateTestUsers, TestCase): method setUp (line 37) | def setUp(self): method test_populate_next_transcribable_for_campaign (line 47) | def test_populate_next_transcribable_for_campaign(self): method test_populate_next_transcribable_for_topic (line 56) | def test_populate_next_transcribable_for_topic(self): method test_populate_next_reviewable_for_campaign (line 62) | def test_populate_next_reviewable_for_campaign(self): method test_populate_next_reviewable_for_topic (line 75) | def test_populate_next_reviewable_for_topic(self): method test_populate_next_transcribable_for_campaign_missing (line 88) | def test_populate_next_transcribable_for_campaign_missing(self, mock_l... method test_populate_next_transcribable_for_topic_missing (line 93) | def test_populate_next_transcribable_for_topic_missing(self, mock_logg... method test_populate_next_reviewable_for_campaign_missing (line 98) | def test_populate_next_reviewable_for_campaign_missing(self, mock_logg... method test_populate_next_reviewable_for_topic_missing (line 103) | def test_populate_next_reviewable_for_topic_missing(self, mock_logger): method test_populate_next_transcribable_for_campaign_none_needed (line 108) | def test_populate_next_transcribable_for_campaign_none_needed(self, mo... method test_populate_next_transcribable_for_topic_none_needed (line 127) | def test_populate_next_transcribable_for_topic_none_needed(self, mock_... method test_populate_next_reviewable_for_campaign_none_needed (line 146) | def test_populate_next_reviewable_for_campaign_none_needed(self, mock_... method test_populate_next_reviewable_for_topic_none_needed (line 170) | def test_populate_next_reviewable_for_topic_none_needed(self, mock_log... method test_populate_next_reviewable_for_campaign_none_found (line 194) | def test_populate_next_reviewable_for_campaign_none_found(self, mock_l... method test_populate_next_reviewable_for_topic_none_found (line 216) | def test_populate_next_reviewable_for_topic_none_found(self, mock_logg... method test_populate_next_transcribable_for_campaign_none_found (line 238) | def test_populate_next_transcribable_for_campaign_none_found(self, moc... method test_populate_next_transcribable_for_topic_none_found (line 257) | def test_populate_next_transcribable_for_topic_none_found(self, mock_l... class CleanNextAssetTasksTests (line 276) | class CleanNextAssetTasksTests(TestCase): method setUp (line 277) | def setUp(self): method test_clean_next_transcribable_for_campaign (line 323) | def test_clean_next_transcribable_for_campaign(self, mock_delay): method test_clean_next_transcribable_for_topic (line 337) | def test_clean_next_transcribable_for_topic(self, mock_delay): method test_clean_next_reviewable_for_campaign (line 349) | def test_clean_next_reviewable_for_campaign(self, mock_delay): method test_clean_next_reviewable_for_topic (line 361) | def test_clean_next_reviewable_for_topic(self, mock_delay): method test_renew_next_asset_cache (line 382) | def test_renew_next_asset_cache( method test_clean_next_transcribable_for_campaign_exception (line 396) | def test_clean_next_transcribable_for_campaign_exception(self, mock_lo... method test_clean_next_transcribable_for_topic_exception (line 408) | def test_clean_next_transcribable_for_topic_exception(self, mock_logger): method test_clean_next_reviewable_for_campaign_exception (line 420) | def test_clean_next_reviewable_for_campaign_exception(self, mock_logger): method test_clean_next_reviewable_for_topic_exception (line 432) | def test_clean_next_reviewable_for_topic_exception(self, mock_logger): FILE: concordia/tests/test_tasks_reports_backfill.py class BackfillAssetsStartedTaskTests (line 10) | class BackfillAssetsStartedTaskTests(TestCase): method _dt (line 11) | def _dt(self, days_ago): method test_updates_total_and_skips_existing_by_default (line 14) | def test_updates_total_and_skips_existing_by_default(self): method test_recompute_when_skip_existing_is_false (line 108) | def test_recompute_when_skip_existing_is_false(self): method test_processes_retired_campaign_and_topic_series (line 175) | def test_processes_retired_campaign_and_topic_series(self): method test_skip_existing_branch_emits_heartbeat_due_to_time (line 216) | def test_skip_existing_branch_emits_heartbeat_due_to_time(self): method test_post_scan_heartbeat_emitted_due_to_time (line 268) | def test_post_scan_heartbeat_emitted_due_to_time(self): method test_no_update_when_equal_with_skip_existing_false (line 309) | def test_no_update_when_equal_with_skip_existing_false(self): method test_total_assets_started_is_rolled_up_from_campaign_series (line 345) | def test_total_assets_started_is_rolled_up_from_campaign_series(self): FILE: concordia/tests/test_tasks_reports_key_metrics.py class BuildKeyMetricsReportsTaskTests (line 12) | class BuildKeyMetricsReportsTaskTests(TestCase): method _dt (line 13) | def _dt(self, days_ago): method test_recompute_all_calls_all_upserts (line 17) | def test_recompute_all_calls_all_upserts(self, mock_localdate): method test_incremental_refresh_and_creates (line 66) | def test_incremental_refresh_and_creates(self, mock_localdate): method test_early_return_after_backsteps (line 131) | def test_early_return_after_backsteps(self, mock_local, mock_sr, slog): method test_recompute_all_month_upsert_and_december_rollover (line 154) | def test_recompute_all_month_upsert_and_december_rollover( method test_incremental_month_create_and_refresh (line 185) | def test_incremental_month_create_and_refresh( method test_quarter_recompute_all_logs (line 232) | def test_quarter_recompute_all_logs( method test_quarter_incremental_refresh_all_quarters (line 272) | def test_quarter_incremental_refresh_all_quarters( method test_fiscal_year_recompute_all_logs (line 346) | def test_fiscal_year_recompute_all_logs( method test_fiscal_year_incremental_create_and_refresh (line 381) | def test_fiscal_year_incremental_create_and_refresh( method test_recompute_all_quarter_upserts_only (line 472) | def test_recompute_all_quarter_upserts_only( method test_incremental_quarter_refresh_only (line 517) | def test_incremental_quarter_refresh_only( method test_recompute_all_year_upsert_only (line 585) | def test_recompute_all_year_upsert_only( method test_incremental_year_create (line 624) | def test_incremental_year_create( method test_incremental_year_refresh (line 660) | def test_incremental_year_refresh( method test_quarter_recompute_all_upserts_and_continue (line 713) | def test_quarter_recompute_all_upserts_and_continue( method test_fiscal_year_recompute_all_upserts_and_continue (line 760) | def test_fiscal_year_recompute_all_upserts_and_continue( method test_quarter_recompute_all_non_none_continue_edge (line 803) | def test_quarter_recompute_all_non_none_continue_edge( method test_quarter_incremental_refresh_monthly_newer (line 847) | def test_quarter_incremental_refresh_monthly_newer( method test_fiscal_year_recompute_all_non_none_continue_edge (line 938) | def test_fiscal_year_recompute_all_non_none_continue_edge( method test_fiscal_year_incremental_create_missing (line 974) | def test_fiscal_year_incremental_create_missing( method test_fiscal_year_incremental_refresh_when_quarter_newer (line 1021) | def test_fiscal_year_incremental_refresh_when_quarter_newer( method test_quarter_recompute_all_none_branch_continue (line 1068) | def test_quarter_recompute_all_none_branch_continue( method test_quarter_incremental_refresh_none_branch_continue (line 1116) | def test_quarter_incremental_refresh_none_branch_continue( method test_fiscal_year_recompute_all_none_branch_continue (line 1190) | def test_fiscal_year_recompute_all_none_branch_continue( method test_fiscal_year_incremental_refresh_none_branch_continue (line 1241) | def test_fiscal_year_incremental_refresh_none_branch_continue( method test_incremental_fiscal_year_created_branch (line 1300) | def test_incremental_fiscal_year_created_branch( method test_incremental_fiscal_year_refresh_due_to_newer_quarter (line 1342) | def test_incremental_fiscal_year_refresh_due_to_newer_quarter( FILE: concordia/tests/test_tasks_reports_sitereport.py class SiteReportTestCase (line 28) | class SiteReportTestCase(CreateTestUsers, TestCase): method setUpTestData (line 30) | def setUpTestData(cls): method test_daily_active_users (line 133) | def test_daily_active_users(self): method test_site_report (line 136) | def test_site_report(self): method test_retired_site_report (line 159) | def test_retired_site_report(self): method test_campaign_report (line 178) | def test_campaign_report(self): method test_topic_report (line 197) | def test_topic_report(self): method test_topic_report_zero_assets_emits_warning (line 215) | def test_topic_report_zero_assets_emits_warning(self): class SiteReportAssetsStartedRollupTests (line 236) | class SiteReportAssetsStartedRollupTests(CreateTestUsers, TestCase): method test_total_assets_started_rolls_up_campaign_deltas_ignoring_retirements (line 237) | def test_total_assets_started_rolls_up_campaign_deltas_ignoring_retire... method test_retired_total_assets_started_is_always_zero (line 320) | def test_retired_total_assets_started_is_always_zero(self): FILE: concordia/tests/test_tasks_retirement.py class RetirementTasksTests (line 27) | class RetirementTasksTests(TestCase): method test_retire_campaign_initializes_totals_and_sets_status_and_triggers (line 28) | def test_retire_campaign_initializes_totals_and_sets_status_and_trigge... method test_retire_campaign_existing_progress_and_already_retired (line 54) | def test_retire_campaign_existing_progress_and_already_retired(self): method test_remove_next_project_calls_remove_next_item_when_project_exists (line 79) | def test_remove_next_project_calls_remove_next_item_when_project_exist... method test_remove_next_project_marks_complete_when_no_projects (line 89) | def test_remove_next_project_marks_complete_when_no_projects(self): method test_project_removal_success_increments_and_triggers_next (line 101) | def test_project_removal_success_increments_and_triggers_next(self): method test_remove_next_item_calls_remove_next_assets_when_item_exists (line 116) | def test_remove_next_item_calls_remove_next_assets_when_item_exists(se... method test_remove_next_item_deletes_project_and_triggers_when_no_items (line 128) | def test_remove_next_item_deletes_project_and_triggers_when_no_items(s... method test_assets_removal_success_updates_counts_and_triggers_next (line 141) | def test_assets_removal_success_updates_counts_and_triggers_next(self): method test_remove_next_assets_when_no_assets_deletes_item_and_triggers (line 158) | def test_remove_next_assets_when_no_assets_deletes_item_and_triggers(s... method test_remove_next_assets_with_assets_uses_chord_in_chunks_of_10 (line 173) | def test_remove_next_assets_with_assets_uses_chord_in_chunks_of_10(self): method test_delete_asset_deletes_storage_and_model_and_returns_id (line 210) | def test_delete_asset_deletes_storage_and_model_and_returns_id(self): method test_item_removal_success_increments_and_triggers_next (line 221) | def test_item_removal_success_increments_and_triggers_next(self): FILE: concordia/tests/test_tasks_search_index.py class SearchIndexTasksTests (line 15) | class SearchIndexTasksTests(TestCase): method test_create_opensearch_indices_calls_management_command (line 16) | def test_create_opensearch_indices_calls_management_command(self): method test_delete_opensearch_indices_calls_management_command (line 29) | def test_delete_opensearch_indices_calls_management_command(self): method test_rebuild_opensearch_indices_calls_management_command (line 37) | def test_rebuild_opensearch_indices_calls_management_command(self): method test_populate_users_indices_calls_management_command (line 50) | def test_populate_users_indices_calls_management_command(self): method test_populate_assets_indices_calls_management_command (line 64) | def test_populate_assets_indices_calls_management_command(self): method test_populate_all_indices_calls_management_command (line 78) | def test_populate_all_indices_calls_management_command(self): FILE: concordia/tests/test_tasks_thumbnails.py class ThumbnailsTasksTests (line 13) | class ThumbnailsTasksTests(TestCase): method test_download_item_thumbnail_task_returns_skip_when_no_url (line 14) | def test_download_item_thumbnail_task_returns_skip_when_no_url(self): method test_download_item_thumbnail_task_calls_helper_with_force (line 25) | def test_download_item_thumbnail_task_calls_helper_with_force(self): method test_download_missing_thumbnails_task_returns_zero_when_none (line 47) | def test_download_missing_thumbnails_task_returns_zero_when_none(self): method test_download_missing_thumbnails_task_filters_and_batches_once (line 55) | def test_download_missing_thumbnails_task_filters_and_batches_once(self): method test_download_missing_thumbnails_task_multiple_waves (line 118) | def test_download_missing_thumbnails_task_multiple_waves(self): FILE: concordia/tests/test_tasks_unusualactivity.py class UnusualActivityTaskTests (line 10) | class UnusualActivityTaskTests(TestCase): method test_noop_when_not_production_and_not_ignored (line 12) | def test_noop_when_not_production_and_not_ignored(self): method test_runs_in_production_without_default_to (line 38) | def test_runs_in_production_without_default_to(self): method test_ignore_env_appends_suffix_and_includes_default_to (line 107) | def test_ignore_env_appends_suffix_and_includes_default_to(self): FILE: concordia/tests/test_tasks_useractivity.py class UserActivityTaskTestCase (line 30) | class UserActivityTaskTestCase(CreateTestUsers, TestCase): method setUp (line 31) | def setUp(self): method test_update_userprofileactivity_from_cache_no_updates (line 38) | def test_update_userprofileactivity_from_cache_no_updates(self, mock_u... method test_update_userprofileactivity_from_cache_update (line 51) | def test_update_userprofileactivity_from_cache_update(self, mock_updat... method test_unusual_activity (line 64) | def test_unusual_activity(self, mock_transcription): method test_update_useractivity_cache (line 77) | def test_update_useractivity_cache(self, mock_update, mock_delete, moc... method test_populate_active_campaign_counts_computes_user_and_anon_rows (line 100) | def test_populate_active_campaign_counts_computes_user_and_anon_rows(s... method test_populate_completed_campaign_counts_processes_non_active_only (line 146) | def test_populate_completed_campaign_counts_processes_non_active_only(... method test_update_useractivity_cache_lock_max_retries_sends_email (line 166) | def test_update_useractivity_cache_lock_max_retries_sends_email(self): method test_update_useractivity_cache_update_exception_releases_lock (line 194) | def test_update_useractivity_cache_update_exception_releases_lock(self): class UpdateUserprofileactivityFromCacheTestCase (line 211) | class UpdateUserprofileactivityFromCacheTestCase(CreateTestUsers, TestCa... method setUp (line 212) | def setUp(self): method test_no_updates (line 219) | def test_no_updates(self, mock_update_table): method test_update (line 232) | def test_update(self, mock_update_table): FILE: concordia/tests/test_tasks_visualizations.py class VisualizationCacheTasksTests (line 27) | class VisualizationCacheTasksTests(TestCase): class _UploadFailed (line 28) | class _UploadFailed(Exception): method setUp (line 31) | def setUp(self): method test_populate_asset_status_visualization_cache (line 35) | def test_populate_asset_status_visualization_cache(self): method test_populate_daily_activity_visualization_cache (line 70) | def test_populate_daily_activity_visualization_cache(self): method test_negative_daily_saved_clamps_to_zero (line 108) | def test_negative_daily_saved_clamps_to_zero(self): method test_asset_status_unchanged_skips_upload_and_cache_update (line 137) | def test_asset_status_unchanged_skips_upload_and_cache_update(self): method test_asset_status_upload_failure_with_prior_url_falls_back (line 182) | def test_asset_status_upload_failure_with_prior_url_falls_back(self): method test_asset_status_upload_failure_without_prior_url_raises (line 226) | def test_asset_status_upload_failure_without_prior_url_raises(self): method test_daily_activity_unchanged_skips_upload_and_cache_update (line 249) | def test_daily_activity_unchanged_skips_upload_and_cache_update(self): method test_daily_activity_upload_failure_with_prior_url_falls_back (line 280) | def test_daily_activity_upload_failure_with_prior_url_falls_back(self): method test_daily_activity_upload_failure_without_prior_url_raises (line 333) | def test_daily_activity_upload_failure_without_prior_url_raises(self): FILE: concordia/tests/test_templatetags.py class TestTemplateTags (line 19) | class TestTemplateTags(TestCase): method test_truncatechars_on_word_break (line 20) | def test_truncatechars_on_word_break(self): method test_multiply (line 40) | def test_multiply(self): method test_transcription_status_filters (line 45) | def test_transcription_status_filters(self): method test_qs_alter (line 54) | def test_qs_alter(self): method test_reprchar_variants (line 99) | def test_reprchar_variants(self): class RejectFilterTests (line 111) | class RejectFilterTests(TestCase): method test_returns_input_when_falsy (line 112) | def test_returns_input_when_falsy(self): method test_string_single_reject (line 118) | def test_string_single_reject(self): method test_string_multiple_rejects (line 124) | def test_string_multiple_rejects(self): method test_string_no_match (line 130) | def test_string_no_match(self): method test_string_empty_args (line 133) | def test_string_empty_args(self): method test_string_whitespace_split_and_join (line 136) | def test_string_whitespace_split_and_join(self): method test_string_case_sensitivity (line 139) | def test_string_case_sensitivity(self): method test_iterable_list (line 142) | def test_iterable_list(self): method test_iterable_tuple_and_duplicates (line 148) | def test_iterable_tuple_and_duplicates(self): method test_iterable_no_match (line 151) | def test_iterable_no_match(self): method test_iterable_empty_args (line 154) | def test_iterable_empty_args(self): class VisualizationTagsTests (line 167) | class VisualizationTagsTests(TestCase): method test_without_attrs_renders_section_and_script (line 168) | def test_without_attrs_renders_section_and_script(self): method test_with_attrs_and_escaping (line 177) | def test_with_attrs_and_escaping(self): method test_name_escaping_in_id_and_script_src (line 193) | def test_name_escaping_in_id_and_script_src(self): FILE: concordia/tests/test_top_level_views.py class TopLevelViewTests (line 31) | class TopLevelViewTests( method setUp (line 34) | def setUp(self): method tearDown (line 37) | def tearDown(self): method test_healthz (line 40) | def test_healthz(self): method test_homepage (line 52) | def test_homepage(self): method test_contact_us_redirect (line 81) | def test_contact_us_redirect(self): method test_simple_page (line 87) | def test_simple_page(self): method test_nested_simple_page (line 121) | def test_nested_simple_page(self): method test_simple_page_with_context (line 150) | def test_simple_page_with_context(self): class HelpCenterRedirectTests (line 216) | class HelpCenterRedirectTests(TestCase): method test_HelpCenterRedirectView (line 217) | def test_HelpCenterRedirectView(self): method test_HelpCenterSpanishRedirectView (line 228) | def test_HelpCenterSpanishRedirectView(self): class MaintenanceModeTests (line 240) | class MaintenanceModeTests(TestCase, CreateTestUsers): method setUp (line 241) | def setUp(self): method tearDown (line 246) | def tearDown(self): method test_maintenance_mode_off (line 249) | def test_maintenance_mode_off(self): method test_maintenance_mode_on_without_frontend (line 274) | def test_maintenance_mode_on_without_frontend(self): method test_maintenance_mode_on_with_frontend (line 300) | def test_maintenance_mode_on_with_frontend(self): method test_maintenance_mode_frontend_available (line 325) | def test_maintenance_mode_frontend_available(self): method test_maintenance_mode_frontend_unavailable (line 348) | def test_maintenance_mode_frontend_unavailable(self): FILE: concordia/tests/test_utils_celery.py class CeleryUtilsTests (line 9) | class CeleryUtilsTests(TestCase): method test_get_registered_task_returns_task_from_registry (line 10) | def test_get_registered_task_returns_task_from_registry(self): method test_get_registered_task_raises_runtime_error_with_cause (line 24) | def test_get_registered_task_raises_runtime_error_with_cause(self): FILE: concordia/tests/test_utils_logging.py class LoggingTests (line 11) | class LoggingTests(CreateTestUsers, TestCase): method test_get_logging_user_id_authenticated_user (line 12) | def test_get_logging_user_id_authenticated_user(self): method test_get_logging_user_id_anonymous_user (line 16) | def test_get_logging_user_id_anonymous_user(self): method test_get_logging_user_id_missing_auth_attribute (line 20) | def test_get_logging_user_id_missing_auth_attribute(self): method test_get_logging_user_id_authenticated_no_id (line 24) | def test_get_logging_user_id_authenticated_no_id(self): FILE: concordia/tests/test_utils_next_asset_reviewable_campaign.py class NextReviewableCampaignAssetTests (line 36) | class NextReviewableCampaignAssetTests(CreateTestUsers, TestCase): method setUp (line 37) | def setUp(self): method test_find_new_reviewable_campaign_assets_filters_correctly (line 46) | def test_find_new_reviewable_campaign_assets_filters_correctly(self): method test_find_new_reviewable_campaign_assets_without_user (line 52) | def test_find_new_reviewable_campaign_assets_without_user(self): method test_find_reviewable_campaign_asset_from_next_table (line 58) | def test_find_reviewable_campaign_asset_from_next_table(self): method test_find_reviewable_campaign_asset_falls_back_and_spawns_task (line 76) | def test_find_reviewable_campaign_asset_falls_back_and_spawns_task( method test_find_next_reviewable_campaign_asset_orders_and_falls_back (line 89) | def test_find_next_reviewable_campaign_asset_orders_and_falls_back( method test_find_next_reviewable_campaign_asset_when_next_asset_exists (line 113) | def test_find_next_reviewable_campaign_asset_when_next_asset_exists( method test_short_circuit_same_item_excludes_users_own_work (line 142) | def test_short_circuit_same_item_excludes_users_own_work(self): method test_item_short_circuit_reviewable_respects_after_sequence_and_reservations (line 162) | def test_item_short_circuit_reviewable_respects_after_sequence_and_res... method test_project_short_circuit_when_item_has_only_users_work (line 199) | def test_project_short_circuit_when_item_has_only_users_work(self): method test_cache_excludes_user_and_triggers_spawn_task (line 223) | def test_cache_excludes_user_and_triggers_spawn_task(self, mock_get_ta... class ReviewableCampaignInternalsTests (line 261) | class ReviewableCampaignInternalsTests(CreateTestUsers, TestCase): method setUp (line 262) | def setUp(self): method test_reserved_asset_ids_subq_filters_to_campaign (line 270) | def test_reserved_asset_ids_subq_filters_to_campaign(self): method test_eligible_reviewable_base_qs_excludes_user_and_requires_submitted (line 290) | def test_eligible_reviewable_base_qs_excludes_user_and_requires_submit... method test_next_seq_after_none_missing_and_valid (line 305) | def test_next_seq_after_none_missing_and_valid(self): method test_find_reviewable_in_item_after_none_returns_first (line 310) | def test_find_reviewable_in_item_after_none_returns_first(self): method test_find_reviewable_in_item_after_asset_in_other_item_ignores_gate (line 322) | def test_find_reviewable_in_item_after_asset_in_other_item_ignores_gat... method test_find_reviewable_in_item_after_asset_missing_ignores_gate (line 340) | def test_find_reviewable_in_item_after_asset_missing_ignores_gate(self): method test_find_reviewable_in_item_after_asset_sidc_ignores_gate (line 352) | def test_find_reviewable_in_item_after_asset_sidc_ignores_gate(self): method test_find_reviewable_in_project_orders_and_excludes_user (line 376) | def test_find_reviewable_in_project_orders_and_excludes_user(self): method test_find_reviewable_in_project_returns_none_when_only_users_work (line 391) | def test_find_reviewable_in_project_returns_none_when_only_users_work(... method test_find_new_reviewable_campaign_assets_excludes_reserved_and_next_table (line 404) | def test_find_new_reviewable_campaign_assets_excludes_reserved_and_nex... method test_find_and_order_potential_reviewable_campaign_assets_ordering (line 437) | def test_find_and_order_potential_reviewable_campaign_assets_ordering(... method test_find_reviewable_campaign_asset_no_eligible_spawns_task_and_returns_none (line 491) | def test_find_reviewable_campaign_asset_no_eligible_spawns_task_and_re... method test_manual_fallback_orders_and_spawns_task (line 503) | def test_manual_fallback_orders_and_spawns_task(self, mock_get_task): method test_find_invalid_next_reviewable_campaign_assets_reserved_and_wrong_status (line 523) | def test_find_invalid_next_reviewable_campaign_assets_reserved_and_wro... method test_item_short_circuit_internal_applies_after_and_skips_reserved (line 569) | def test_item_short_circuit_internal_applies_after_and_skips_reserved(... method test_item_short_circuit_internal_excludes_users_own_work (line 587) | def test_item_short_circuit_internal_excludes_users_own_work(self): method test_project_short_circuit_internal_skips_reserved_first (line 601) | def test_project_short_circuit_internal_skips_reserved_first(self): method test_order_potential_without_after_prefers_item_then_project (line 620) | def test_order_potential_without_after_prefers_item_then_project(self): method test_next_reviewable_manual_fallback_no_after_spawns_and_picks_lowest_seq (line 687) | def test_next_reviewable_manual_fallback_no_after_spawns_and_picks_low... method test_next_reviewable_manual_fallback_invalid_after_str (line 710) | def test_next_reviewable_manual_fallback_invalid_after_str(self, mock_... method test_next_reviewable_cached_path_when_short_circuits_fail (line 731) | def test_next_reviewable_cached_path_when_short_circuits_fail(self, mo... method test_next_reviewable_uses_cache_when_bypassing_short_circuits (line 773) | def test_next_reviewable_uses_cache_when_bypassing_short_circuits( FILE: concordia/tests/test_utils_next_asset_reviewable_topic.py class NextReviewableTopicAssetTests (line 50) | class NextReviewableTopicAssetTests(CreateTestUsers, TestCase): method setUp (line 51) | def setUp(self): method test_find_new_reviewable_topic_assets_filters_correctly (line 60) | def test_find_new_reviewable_topic_assets_filters_correctly(self): method test_find_new_reviewable_topic_assets_without_user (line 66) | def test_find_new_reviewable_topic_assets_without_user(self): method test_find_reviewable_topic_asset_from_next_table (line 72) | def test_find_reviewable_topic_asset_from_next_table(self): method test_find_reviewable_topic_asset_falls_back_and_spawns_task (line 90) | def test_find_reviewable_topic_asset_falls_back_and_spawns_task( method test_find_next_reviewable_topic_asset_orders_and_falls_back (line 103) | def test_find_next_reviewable_topic_asset_orders_and_falls_back( method test_find_next_reviewable_topic_asset_when_next_asset_exists (line 127) | def test_find_next_reviewable_topic_asset_when_next_asset_exists( method test_short_circuit_same_item_topic_excludes_users_own_work (line 156) | def test_short_circuit_same_item_topic_excludes_users_own_work(self): method test_item_short_circuit_topic_reviewable_respects_after_and_reservations (line 171) | def test_item_short_circuit_topic_reviewable_respects_after_and_reserv... method test_cache_excludes_user_and_triggers_spawn_task_topic (line 198) | def test_cache_excludes_user_and_triggers_spawn_task_topic(self, mock_... method test_find_next_reviewable_topic_assets_excludes_user (line 228) | def test_find_next_reviewable_topic_assets_excludes_user(self): method test_next_reviewable_cached_path_when_short_circuits_fail_topic (line 255) | def test_next_reviewable_cached_path_when_short_circuits_fail_topic( method test_next_reviewable_uses_cache_when_bypassing_short_circuits_topic (line 302) | def test_next_reviewable_uses_cache_when_bypassing_short_circuits_topic( method test_next_reviewable_manual_fallback_no_after_spawns_and_picks_lowest_seq_topic (line 343) | def test_next_reviewable_manual_fallback_no_after_spawns_and_picks_low... method test_next_reviewable_manual_fallback_invalid_after_str_topic (line 367) | def test_next_reviewable_manual_fallback_invalid_after_str_topic( class ReviewableTopicInternalsTests (line 393) | class ReviewableTopicInternalsTests(CreateTestUsers, TestCase): method setUp (line 394) | def setUp(self): method test_topic_reserved_asset_ids_subq_unfiltered (line 401) | def test_topic_reserved_asset_ids_subq_unfiltered(self): method test_topic_eligible_reviewable_base_qs_excludes_user_and_requires_submitted (line 423) | def test_topic_eligible_reviewable_base_qs_excludes_user_and_requires_... method test_topic_next_seq_after_none_missing_and_valid (line 441) | def test_topic_next_seq_after_none_missing_and_valid(self): method test_topic_find_reviewable_in_item_after_none_returns_first (line 446) | def test_topic_find_reviewable_in_item_after_none_returns_first(self): method test_topic_find_reviewable_in_item_after_asset_in_other_item_ignores_gate (line 458) | def test_topic_find_reviewable_in_item_after_asset_in_other_item_ignor... method test_topic_find_reviewable_in_item_after_asset_missing_ignores_gate (line 478) | def test_topic_find_reviewable_in_item_after_asset_missing_ignores_gat... method test_topic_find_reviewable_in_item_after_asset_sidc_ignores_gate (line 490) | def test_topic_find_reviewable_in_item_after_asset_sidc_ignores_gate(s... method test_topic_find_reviewable_in_project_orders_and_excludes_user (line 512) | def test_topic_find_reviewable_in_project_orders_and_excludes_user(self): method test_topic_find_reviewable_in_project_returns_none_when_only_users_work (line 528) | def test_topic_find_reviewable_in_project_returns_none_when_only_users... method test_find_and_order_potential_reviewable_topic_assets_ordering (line 542) | def test_find_and_order_potential_reviewable_topic_assets_ordering(self): method test_order_potential_without_after_prefers_item_then_project_topic (line 585) | def test_order_potential_without_after_prefers_item_then_project_topic... method test_find_invalid_next_reviewable_topic_assets_reserved_and_wrong_status (line 627) | def test_find_invalid_next_reviewable_topic_assets_reserved_and_wrong_... method test_topic_project_short_circuit_internal_skips_reserved_first (line 673) | def test_topic_project_short_circuit_internal_skips_reserved_first(self): method test_topic_item_short_circuit_internal_excludes_users_own_work (line 692) | def test_topic_item_short_circuit_internal_excludes_users_own_work(self): method test_topic_item_short_circuit_internal_applies_after_and_skips_reserved (line 706) | def test_topic_item_short_circuit_internal_applies_after_and_skips_res... FILE: concordia/tests/test_utils_next_asset_transcribable_campaign.py class NextTranscribableCampaignAssetTests (line 54) | class NextTranscribableCampaignAssetTests(CreateTestUsers, TestCase): method setUp (line 55) | def setUp(self): method test_find_new_transcribable_campaign_assets_filters_correctly (line 66) | def test_find_new_transcribable_campaign_assets_filters_correctly(self): method test_find_transcribable_campaign_asset_from_next_table (line 77) | def test_find_transcribable_campaign_asset_from_next_table(self): method test_find_transcribable_campaign_asset_falls_back_and_spawns_task (line 93) | def test_find_transcribable_campaign_asset_falls_back_and_spawns_task( method test_find_next_transcribable_campaign_asset_orders_and_falls_back (line 105) | def test_find_next_transcribable_campaign_asset_orders_and_falls_back( method test_find_next_transcribable_campaign_asset_when_next_asset_exists (line 127) | def test_find_next_transcribable_campaign_asset_when_next_asset_exists( method test_short_circuit_same_item_respects_after_sequence_and_reservations (line 161) | def test_short_circuit_same_item_respects_after_sequence_and_reservati... method test_project_short_circuit_prefers_not_started_over_in_progress (line 192) | def test_project_short_circuit_prefers_not_started_over_in_progress(se... method test_project_short_circuit_when_item_id_empty_string (line 222) | def test_project_short_circuit_when_item_id_empty_string(self): method test_find_transcribable_campaign_asset_none_spawns (line 243) | def test_find_transcribable_campaign_asset_none_spawns(self, mock_get_... method test_next_transcribable_manual_no_after_prefers_not_started (line 259) | def test_next_transcribable_manual_no_after_prefers_not_started( method test_next_transcribable_manual_invalid_after_str (line 290) | def test_next_transcribable_manual_invalid_after_str(self, mock_get_ta... method test_next_transcribable_none_anywhere_spawns (line 320) | def test_next_transcribable_none_anywhere_spawns(self, mock_get_task): method test_item_short_circuit_missing_after_pk_treated_as_none_top (line 336) | def test_item_short_circuit_missing_after_pk_treated_as_none_top(self): method test_cache_excludes_original_pk_and_chooses_next (line 349) | def test_cache_excludes_original_pk_and_chooses_next(self, mock_get_ta... method test_project_short_circuit_without_original_id (line 382) | def test_project_short_circuit_without_original_id(self): method test_item_short_circuit_after_pk_in_other_item_ignores_gate (line 401) | def test_item_short_circuit_after_pk_in_other_item_ignores_gate(self): method test_next_transcribable_after_pk_missing_treats_as_no_after (line 417) | def test_next_transcribable_after_pk_missing_treats_as_no_after(self): method test_no_ns_anywhere_and_no_ip_in_item_returns_none (line 430) | def test_no_ns_anywhere_and_no_ip_in_item_returns_none(self, mock_get_... method test_after_pk_digit_string_missing_treats_as_no_after (line 452) | def test_after_pk_digit_string_missing_treats_as_no_after(self): method test_same_item_inprogress_selected_when_no_ns_and_no_after (line 465) | def test_same_item_inprogress_selected_when_no_ns_and_no_after(self): method test_manual_invalid_after_str_campaign_valueerror_branch (line 482) | def test_manual_invalid_after_str_campaign_valueerror_branch(self, moc... class TranscribableCampaignInternalsTests (line 502) | class TranscribableCampaignInternalsTests(CreateTestUsers, TestCase): method setUp (line 503) | def setUp(self): method test_new_transcribable_excludes_reserved_and_cached (line 510) | def test_new_transcribable_excludes_reserved_and_cached(self): method test_order_potential_transcribable_pref (line 533) | def test_order_potential_transcribable_pref(self): method test_order_potential_transcribable_no_after (line 576) | def test_order_potential_transcribable_no_after(self): method test_invalid_next_transcribable_reserved_and_submitted (line 619) | def test_invalid_next_transcribable_reserved_and_submitted(self): class TranscribableCampaignMoreInternalsTests (line 662) | class TranscribableCampaignMoreInternalsTests(CreateTestUsers, TestCase): method setUp (line 663) | def setUp(self): method test_tc_reserved_ids_filters_to_campaign (line 672) | def test_tc_reserved_ids_filters_to_campaign(self): method test_tc_next_seq_after_variants (line 692) | def test_tc_next_seq_after_variants(self): method test_tc_order_unstarted_first_prefers_not_started (line 697) | def test_tc_order_unstarted_first_prefers_not_started(self): method test_find_in_item_after_none_returns_first_not_started (line 704) | def test_find_in_item_after_none_returns_first_not_started(self): method test_find_in_item_skips_inprog_and_reserved_and_advances (line 709) | def test_find_in_item_skips_inprog_and_reserved_and_advances(self): method test_find_in_item_after_missing_excludes_id_only (line 722) | def test_find_in_item_after_missing_excludes_id_only(self): method test_find_ns_in_proj_excludes_item_and_reserved (line 729) | def test_find_ns_in_proj_excludes_item_and_reserved(self): method test_find_ns_in_proj_blank_slug_none (line 746) | def test_find_ns_in_proj_blank_slug_none(self): method test_cache_same_item_is_ignored_then_manual_selects (line 750) | def test_cache_same_item_is_ignored_then_manual_selects(self, mock_get... method test_manual_excludes_original_pk_and_same_item (line 785) | def test_manual_excludes_original_pk_and_same_item(self, mock_get_task): method test_same_item_inprog_after_when_no_not_started (line 809) | def test_same_item_inprog_after_when_no_not_started(self): method test_eligible_base_qs_filters_status_and_published (line 824) | def test_eligible_base_qs_filters_status_and_published(self): method test_cached_transcribable_accessor_returns_rows (line 848) | def test_cached_transcribable_accessor_returns_rows(self): method test_find_in_item_blank_item_id_none (line 862) | def test_find_in_item_blank_item_id_none(self): method test_find_ns_in_proj_without_exclude_includes_same_item (line 866) | def test_find_ns_in_proj_without_exclude_includes_same_item(self): FILE: concordia/tests/test_utils_next_asset_transcribable_topic.py class NextTranscribableTopicAssetTests (line 57) | class NextTranscribableTopicAssetTests(CreateTestUsers, TestCase): method setUp (line 58) | def setUp(self): method test_find_new_transcribable_topic_assets_filters_correctly (line 72) | def test_find_new_transcribable_topic_assets_filters_correctly(self): method test_find_transcribable_topic_asset_from_next_table (line 84) | def test_find_transcribable_topic_asset_from_next_table(self): method test_find_transcribable_topic_asset_falls_back_and_spawns_task (line 100) | def test_find_transcribable_topic_asset_falls_back_and_spawns_task( method test_find_next_transcribable_topic_asset_orders_and_falls_back (line 112) | def test_find_next_transcribable_topic_asset_orders_and_falls_back( method test_find_next_transcribable_topic_asset_when_next_asset_exists (line 134) | def test_find_next_transcribable_topic_asset_when_next_asset_exists( method test_short_circuit_same_item_topic_respects_after_sequence_and_reservations (line 162) | def test_short_circuit_same_item_topic_respects_after_sequence_and_res... method test_project_short_circuit_topic_prefers_not_started_over_in_progress (line 191) | def test_project_short_circuit_topic_prefers_not_started_over_in_progr... method test_project_short_circuit_topic_without_item_id_allows_same_item (line 218) | def test_project_short_circuit_topic_without_item_id_allows_same_item( class TranscribableTopicInternalsTests (line 241) | class TranscribableTopicInternalsTests(CreateTestUsers, TestCase): method setUp (line 242) | def setUp(self): method test_topic_transcribable_reserved_ids_is_unfiltered (line 249) | def test_topic_transcribable_reserved_ids_is_unfiltered(self): method test_topic_transcribable_eligible_base_qs_filters_correctly (line 268) | def test_topic_transcribable_eligible_base_qs_filters_correctly(self): method test_topic_next_seq_after_variants_for_transcribable (line 292) | def test_topic_next_seq_after_variants_for_transcribable(self): method test_topic_find_in_item_for_topic_after_none_returns_first_not_started (line 300) | def test_topic_find_in_item_for_topic_after_none_returns_first_not_sta... method test_topic_find_in_item_for_topic_skips_reserved_and_advances (line 306) | def test_topic_find_in_item_for_topic_skips_reserved_and_advances(self): method test_topic_find_in_item_for_topic_after_missing_excludes_only_id (line 318) | def test_topic_find_in_item_for_topic_after_missing_excludes_only_id(s... method test_topic_find_in_item_for_topic_blank_item_id_returns_none (line 326) | def test_topic_find_in_item_for_topic_blank_item_id_returns_none(self): method test_topic_find_not_started_in_project_excludes_item_and_reserved (line 332) | def test_topic_find_not_started_in_project_excludes_item_and_reserved(... method test_topic_find_not_started_in_project_blank_slug_none (line 346) | def test_topic_find_not_started_in_project_blank_slug_none(self): method test_topic_order_unstarted_first_prefers_not_started (line 351) | def test_topic_order_unstarted_first_prefers_not_started(self): method test_topic_find_not_started_in_project_without_exclude_includes_same_item (line 363) | def test_topic_find_not_started_in_project_without_exclude_includes_sa... class NextTranscribableTopicMoreTests (line 377) | class NextTranscribableTopicMoreTests(CreateTestUsers, TestCase): method setUp (line 378) | def setUp(self): method test_new_transcribable_topic_excludes_reserved_and_cached (line 387) | def test_new_transcribable_topic_excludes_reserved_and_cached(self): method test_find_and_order_potential_transcribable_topic_assets_ordering (line 411) | def test_find_and_order_potential_transcribable_topic_assets_ordering(... method test_find_invalid_next_transcribable_topic_assets_reserved_and_status (line 456) | def test_find_invalid_next_transcribable_topic_assets_reserved_and_sta... method test_cache_same_item_is_ignored_then_manual_selects_topic (line 499) | def test_cache_same_item_is_ignored_then_manual_selects_topic(self, mo... method test_cache_excludes_original_pk_and_chooses_next_topic (line 535) | def test_cache_excludes_original_pk_and_chooses_next_topic(self, mock_... method test_same_item_inprogress_selected_when_no_not_started_topic (line 563) | def test_same_item_inprogress_selected_when_no_not_started_topic(self): method test_next_transcribable_topic_none_anywhere_returns_none_no_spawn (line 575) | def test_next_transcribable_topic_none_anywhere_returns_none_no_spawn( method test_item_gate_ignored_when_original_is_other_item_topic (line 595) | def test_item_gate_ignored_when_original_is_other_item_topic(self): method test_item_digit_string_missing_treats_as_no_after_topic (line 613) | def test_item_digit_string_missing_treats_as_no_after_topic(self): method test_manual_same_item_ip_when_no_ns_anywhere_topic (line 623) | def test_manual_same_item_ip_when_no_ns_anywhere_topic(self, mock_get_... method test_item_invalid_after_str_valueerror_branch_topic (line 645) | def test_item_invalid_after_str_valueerror_branch_topic(self): method test_manual_valid_after_excludes_original_and_picks_next_topic (line 655) | def test_manual_valid_after_excludes_original_and_picks_next_topic( method test_inprogress_fallback_spawns_and_uses_after_gate_topic (line 682) | def test_inprogress_fallback_spawns_and_uses_after_gate_topic(self, mo... method test_inprogress_fallback_with_digit_string_original_id (line 707) | def test_inprogress_fallback_with_digit_string_original_id(self, mock_... method test_inprogress_fallback_spawns_and_returns_asset_topic (line 733) | def test_inprogress_fallback_spawns_and_returns_asset_topic(self, mock... method test_inprogress_fallback_with_digit_str_original_id_topic (line 764) | def test_inprogress_fallback_with_digit_str_original_id_topic(self, mo... method test_project_short_circuit_topic_excludes_current_item_via_item_filter (line 797) | def test_project_short_circuit_topic_excludes_current_item_via_item_fi... method test_inprogress_fallback_spawns_task_with_item_id_topic (line 822) | def test_inprogress_fallback_spawns_task_with_item_id_topic(self, mock... method test_manual_same_item_inprogress_triggers_spawn_task_topic (line 844) | def test_manual_same_item_inprogress_triggers_spawn_task_topic(self, m... method test_project_short_circuit_excludes_current_item_topic (line 869) | def test_project_short_circuit_excludes_current_item_topic(self, mock_... method test_manual_inprogress_fallback_triggers_spawn_task_topic (line 888) | def test_manual_inprogress_fallback_triggers_spawn_task_topic(self, mo... method test_inprogress_fallback_item_id_returns_none_when_no_candidates_topic (line 906) | def test_inprogress_fallback_item_id_returns_none_when_no_candidates_t... method test_inprogress_fallback_returns_asset_without_spawning (line 942) | def test_inprogress_fallback_returns_asset_without_spawning(self, mock... FILE: concordia/tests/test_validators.py class TestValidators (line 10) | class TestValidators(TestCase): method test_DjangoPasswordsValidator (line 11) | def test_DjangoPasswordsValidator(self): class ComplexityValidatorTests (line 46) | class ComplexityValidatorTests(TestCase): method assertValid (line 47) | def assertValid(self, validator, string): method assertInvalid (line 53) | def assertInvalid(self, validator, string): method make_validator (line 56) | def make_validator(self, **complexities): method test_empty_validator (line 59) | def test_empty_validator(self): method test_minimum_uppercase_count (line 63) | def test_minimum_uppercase_count(self): method test_minimum_lowercase_count (line 79) | def test_minimum_lowercase_count(self): method test_minimum_letter_count (line 95) | def test_minimum_letter_count(self): method test_minimum_digit_count (line 111) | def test_minimum_digit_count(self): method test_minimum_punctuation_count (line 126) | def test_minimum_punctuation_count(self): method test_minimum_nonascii_count (line 150) | def test_minimum_nonascii_count(self): method test_minimum_words_count (line 170) | def test_minimum_words_count(self): FILE: concordia/tests/test_view_decorators.py class TestNextAssetRate (line 10) | class TestNextAssetRate(TestCase): method setUp (line 11) | def setUp(self): method test_authenticated_user_returns_none (line 14) | def test_authenticated_user_returns_none(self): method test_anonymous_user_valid_rate (line 21) | def test_anonymous_user_valid_rate(self, mock_validate_rate, mock_conf... method test_anonymous_user_invalid_rate_falls_back (line 31) | def test_anonymous_user_invalid_rate_falls_back( method test_anonymous_user_missing_value_falls_back (line 42) | def test_anonymous_user_missing_value_falls_back(self, mock_config_val... FILE: concordia/tests/test_views.py function setup_view (line 52) | def setup_view(view, request, user=None, *args, **kwargs): class AccountProfileViewTests (line 64) | class AccountProfileViewTests(CreateTestUsers, TestCase): method test_get_queryset (line 69) | def test_get_queryset(self): class CompletedCampaignListViewTests (line 83) | class CompletedCampaignListViewTests(TestCase): method setUp (line 88) | def setUp(self): method test_get_all_campaigns (line 107) | def test_get_all_campaigns(self): method test_queryset (line 132) | def test_queryset(self): method test_context_data (line 152) | def test_context_data(self): method test_research_centers (line 175) | def test_research_centers(self): class ConcordiaViewTests (line 201) | class ConcordiaViewTests(CreateTestUsers, JSONAssertMixin, TestCase): method setUp (line 206) | def setUp(self): method tearDown (line 210) | def tearDown(self): method test_ratelimit_view (line 214) | def test_ratelimit_view(self): method test_campaign_topic_list_view (line 225) | def test_campaign_topic_list_view(self): method test_campaign_list_view (line 255) | def test_campaign_list_view(self): method test_campaign_detail_view (line 273) | def test_campaign_detail_view(self): method test_campaign_unicode_slug (line 353) | def test_campaign_unicode_slug(self): method test_concordiaCampaignView_get_page2 (line 364) | def test_concordiaCampaignView_get_page2(self): method test_empty_item_detail_view (line 379) | def test_empty_item_detail_view(self): method test_item_detail_view (line 402) | def test_item_detail_view(self): method test_asset_unicode_slug (line 487) | def test_asset_unicode_slug(self): method test_asset_detail_view (line 498) | def test_asset_detail_view(self): method test_generate_ocr_transcription (line 605) | def test_generate_ocr_transcription(self, mock): method test_project_detail_view (line 654) | def test_project_detail_view(self): method test_project_unicode_slug (line 707) | def test_project_unicode_slug(self): method test_campaign_report (line 718) | def test_campaign_report(self): class UserCacheControlTest (line 772) | class UserCacheControlTest(CreateTestUsers, TestCase): method setUp (line 777) | def setUp(self): method test_vary_on_cookie (line 781) | def test_vary_on_cookie(self): class FilteredCampaignDetailViewTests (line 792) | class FilteredCampaignDetailViewTests(CreateTestUsers, TestCase): method test_get_context_data (line 793) | def test_get_context_data(self): class FilteredProjectDetailViewTests (line 809) | class FilteredProjectDetailViewTests(CreateTestUsers, TestCase): method setUp (line 810) | def setUp(self): method test_get_queryset (line 819) | def test_get_queryset(self): method test_get_context_data (line 838) | def test_get_context_data(self): method tearDown (line 842) | def tearDown(self): class FilteredItemDetailViewTests (line 846) | class FilteredItemDetailViewTests(CreateTestUsers, TestCase): method setUp (line 847) | def setUp(self): method test_get_queryset (line 857) | def test_get_queryset(self): method test_get_context_data (line 872) | def test_get_context_data(self): method tearDown (line 876) | def tearDown(self): class RateLimitTests (line 880) | class RateLimitTests(CreateTestUsers, TestCase): method setUp (line 881) | def setUp(self): method test_registration_rate (line 885) | def test_registration_rate(self): method test_ratelimit_view (line 892) | def test_ratelimit_view(self): method test_reserve_rate (line 899) | def test_reserve_rate(self): class LoginTests (line 909) | class LoginTests(TestCase, CreateTestUsers): method setUp (line 910) | def setUp(self): method test_ConcordiaLoginView (line 913) | def test_ConcordiaLoginView(self): class TranscriptionViewTests (line 942) | class TranscriptionViewTests(CreateTestUsers, TestCase): method setUp (line 943) | def setUp(self): method test_rollback_transcription (line 946) | def test_rollback_transcription(self): method test_rollforward_transcription (line 1008) | def test_rollforward_transcription(self): method tearDown (line 1070) | def tearDown(self): class VisualizationDataViewTests (line 1081) | class VisualizationDataViewTests(TestCase): method setUp (line 1082) | def setUp(self): method test_get_missing_data_returns_404 (line 1089) | def test_get_missing_data_returns_404(self): method test_get_existing_data_returns_200_and_json (line 1101) | def test_get_existing_data_returns_200_and_json(self): FILE: concordia/tests/test_views_asset_reservation.py class AssetReservationViewTests (line 36) | class AssetReservationViewTests(CreateTestUsers, JSONAssertMixin, Transa... method test_asset_reservation (line 37) | def test_asset_reservation(self): method test_asset_reservation_anonymously (line 45) | def test_asset_reservation_anonymously(self): method _asset_reservation_test_payload (line 53) | def _asset_reservation_test_payload(self, user_id, anonymous=False): method test_asset_reservation_competition (line 114) | def test_asset_reservation_competition(self): method test_asset_reservation_expiration (line 141) | def test_asset_reservation_expiration(self): method test_asset_reservation_tombstone (line 176) | def test_asset_reservation_tombstone(self): method test_asset_reservation_tombstone_expiration (line 243) | def test_asset_reservation_tombstone_expiration(self): method tearDown (line 297) | def tearDown(self): FILE: concordia/tests/test_views_redirect_next_reviewable.py class NextReviewableRedirectViewTests (line 31) | class NextReviewableRedirectViewTests( method test_find_next_reviewable_no_campaign (line 34) | def test_find_next_reviewable_no_campaign(self): method test_find_next_reviewable_campaign (line 99) | def test_find_next_reviewable_campaign(self): method test_find_next_reviewable_topic (line 137) | def test_find_next_reviewable_topic(self): method test_find_next_reviewable_unlisted_campaign (line 176) | def test_find_next_reviewable_unlisted_campaign(self): method tearDown (line 216) | def tearDown(self): FILE: concordia/tests/test_views_redirect_next_transcribable.py class NextTranscribableRedirectViewTests (line 31) | class NextTranscribableRedirectViewTests( method test_find_next_transcribable_no_campaign (line 34) | def test_find_next_transcribable_no_campaign(self): method test_find_next_transcribable_campaign (line 73) | def test_find_next_transcribable_campaign(self): method test_find_next_transcribable_topic (line 97) | def test_find_next_transcribable_topic(self): method test_find_next_transcribable_unlisted_campaign (line 122) | def test_find_next_transcribable_unlisted_campaign(self): method test_find_next_transcribable_single_asset (line 152) | def test_find_next_transcribable_single_asset(self): method test_find_next_transcribable_in_singleton_campaign (line 165) | def test_find_next_transcribable_in_singleton_campaign(self): method test_find_next_transcribable_project_redirect (line 178) | def test_find_next_transcribable_project_redirect(self): method test_find_next_transcribable_hierarchy (line 196) | def test_find_next_transcribable_hierarchy(self): method tearDown (line 288) | def tearDown(self): FILE: concordia/tests/test_views_tags.py class TagSubmissionViewTests (line 27) | class TagSubmissionViewTests(CreateTestUsers, JSONAssertMixin, Transacti... method test_anonymous_tag_submission (line 28) | def test_anonymous_tag_submission(self): method test_tag_submission (line 36) | def test_tag_submission(self): method test_invalid_tag_submission (line 54) | def test_invalid_tag_submission(self): method test_tag_submission_with_diacritics (line 70) | def test_tag_submission_with_diacritics(self): method test_tag_submission_with_multiple_users (line 88) | def test_tag_submission_with_multiple_users(self): method test_duplicate_tag_submission (line 105) | def test_duplicate_tag_submission(self): method test_tag_deletion (line 135) | def test_tag_deletion(self): method test_tag_deletion_with_multiple_users (line 158) | def test_tag_deletion_with_multiple_users(self): method tearDown (line 205) | def tearDown(self): FILE: concordia/tests/test_views_topics.py class TopicDetailViewTests (line 26) | class TopicDetailViewTests(CreateTestUsers, JSONAssertMixin, TestCase): method setUp (line 31) | def setUp(self): method tearDown (line 35) | def tearDown(self): method test_topic_detail_basic (line 39) | def test_topic_detail_basic(self): method test_unlisted_topic_detail_view (line 48) | def test_unlisted_topic_detail_view(self): method test_topic_detail_with_status_sets_querystring (line 61) | def test_topic_detail_with_status_sets_querystring(self): method test_url_filter_links_without_sublevel_querystring (line 81) | def test_url_filter_links_without_sublevel_querystring(self): method test_sublevel_querystring_only_keeps_transcription_status (line 124) | def test_sublevel_querystring_only_keeps_transcription_status(self): method test_with_status_and_no_assets_excludes_projects (line 140) | def test_with_status_and_no_assets_excludes_projects(self): method test_with_status_and_assets_uses_sublevel_and_overrides_url_filter (line 188) | def test_with_status_and_assets_uses_sublevel_and_overrides_url_filter... method test_with_status_and_assets_includes_matching_url_filter (line 246) | def test_with_status_and_assets_includes_matching_url_filter(self): method test_topic_detail_with_invalid_status_ignores_filter (line 307) | def test_topic_detail_with_invalid_status_ignores_filter(self): method test_url_filter_empty_string_treated_as_missing (line 360) | def test_url_filter_empty_string_treated_as_missing(self): FILE: concordia/tests/test_views_transcription_review.py class ReviewTranscriptionViewTests (line 30) | class ReviewTranscriptionViewTests( method test_transcription_review (line 33) | def test_transcription_review(self): method test_transcription_review_rate_limit (line 63) | def test_transcription_review_rate_limit(self): method test_transcription_review_rate_limit_superuser (line 143) | def test_transcription_review_rate_limit_superuser(self): method test_transcription_review_asset_status_updates (line 223) | def test_transcription_review_asset_status_updates(self): method test_transcription_disallow_self_review (line 299) | def test_transcription_disallow_self_review(self): method test_transcription_allow_self_reject (line 315) | def test_transcription_allow_self_reject(self): method test_transcription_double_review (line 334) | def test_transcription_double_review(self): method tearDown (line 357) | def tearDown(self): FILE: concordia/tests/test_views_transcription_save.py class SaveTranscriptionViewTests (line 27) | class SaveTranscriptionViewTests(CreateTestUsers, JSONAssertMixin, Trans... method setUp (line 28) | def setUp(self): method test_turnstile_validation_fails (line 31) | def test_turnstile_validation_fails(self): method test_initial_save_success (line 44) | def test_initial_save_success(self): method test_duplicate_without_supersedes_conflict (line 55) | def test_duplicate_without_supersedes_conflict(self): method test_save_with_url_error (line 72) | def test_save_with_url_error(self): method test_unacceptable_characters_are_removed_on_save (line 91) | def test_unacceptable_characters_are_removed_on_save(self): method test_unacceptable_characters_are_removed_when_superseding (line 105) | def test_unacceptable_characters_are_removed_when_superseding(self): method test_save_with_supersedes_success (line 126) | def test_save_with_supersedes_success(self): method test_supersedes_sets_ocr_originated_when_previous_was_ocr_originated (line 145) | def test_supersedes_sets_ocr_originated_when_previous_was_ocr_originat... method test_supersede_already_superseded_conflict (line 170) | def test_supersede_already_superseded_conflict(self): method test_supersede_nonexistent_returns_400 (line 200) | def test_supersede_nonexistent_returns_400(self): method test_supersede_invalid_pk_returns_400 (line 216) | def test_supersede_invalid_pk_returns_400(self): method test_logged_in_user_can_take_over_from_anonymous (line 232) | def test_logged_in_user_can_take_over_from_anonymous(self): method tearDown (line 254) | def tearDown(self): FILE: concordia/tests/test_views_transcription_submit.py class SubmitTranscriptionViewTests (line 27) | class SubmitTranscriptionViewTests( method test_anonymous_transcription_submission (line 30) | def test_anonymous_transcription_submission(self): method test_transcription_submission (line 60) | def test_transcription_submission(self): method test_stale_transcription_submission (line 87) | def test_stale_transcription_submission(self): method tearDown (line 107) | def tearDown(self): FILE: concordia/tests/test_views_utils.py class GetPagesTests (line 30) | class GetPagesTests(CreateTestUsers, TestCase): method setUp (line 31) | def setUp(self): method _request (line 56) | def _request(self, params: dict[str, str]): method _touch_transcription_times (line 61) | def _touch_transcription_times( method test_activity_filters_transcribed_vs_reviewed_vs_default (line 77) | def test_activity_filters_transcribed_vs_reviewed_vs_default(self): method test_status_filter_exclusions (line 117) | def test_status_filter_exclusions(self): method test_date_range_and_single_day_filters_and_ordering (line 140) | def test_date_range_and_single_day_filters_and_ordering(self): method test_campaign_filter_and_six_month_cutoff (line 193) | def test_campaign_filter_and_six_month_cutoff(self): method test_status_filter_includes_completed_when_requested (line 234) | def test_status_filter_includes_completed_when_requested(self): method test_status_filter_includes_in_progress_and_excludes_submitted_not_requested (line 263) | def test_status_filter_includes_in_progress_and_excludes_submitted_not... class CalculateAssetStatsTests (line 287) | class CalculateAssetStatsTests(CreateTestUsers, TestCase): method setUp (line 288) | def setUp(self): method test_counts_percents_and_contributors_remove_none_branch (line 296) | def test_counts_percents_and_contributors_remove_none_branch(self): method test_contributors_keyerror_branch_and_cap_99 (line 360) | def test_contributors_keyerror_branch_and_cap_99(self): class AnnotateChildrenProgressStatsTests (line 405) | class AnnotateChildrenProgressStatsTests(TestCase): class Obj (line 406) | class Obj: method test_progress_stats_with_capping_and_lowest_status (line 409) | def test_progress_stats_with_capping_and_lowest_status(self): method test_progress_stats_zero_total (line 431) | def test_progress_stats_zero_total(self): class _BaseView (line 448) | class _BaseView: method get_context_data (line 453) | def get_context_data(self, **kwargs): class DummyTemplateView (line 457) | class DummyTemplateView(AnonymousUserValidationCheckMixin, _BaseView): class AnonymousUserValidationCheckMixinTests (line 466) | class AnonymousUserValidationCheckMixinTests(CreateTestUsers, TestCase): method setUp (line 467) | def setUp(self): method _attach_session (line 471) | def _attach_session(self, request): method test_unauthenticated_requires_validation_when_stale (line 477) | def test_unauthenticated_requires_validation_when_stale(self): method test_unauthenticated_recent_validation_is_not_required (line 489) | def test_unauthenticated_recent_validation_is_not_required(self): method test_authenticated_never_requires_validation (line 500) | def test_authenticated_never_requires_validation(self): FILE: concordia/tests/test_widgets.py class TestWidgets (line 7) | class TestWidgets(TestCase): method test_EmailWidget (line 8) | def test_EmailWidget(self): method test_TurnstileWidget (line 30) | def test_TurnstileWidget(self): FILE: concordia/tests/utils.py function ensure_slug (line 33) | def ensure_slug(original_function): function create_campaign (line 47) | def create_campaign( function create_simple_page (line 74) | def create_simple_page(*, do_save=True, **kwargs): function create_site_report (line 81) | def create_site_report(*, do_save=True, **kwargs): function create_topic (line 89) | def create_topic( function create_project (line 123) | def create_project( function create_item (line 145) | def create_item( function create_asset (line 173) | def create_asset( function create_transcription (line 202) | def create_transcription(*, asset=None, user=None, do_save=True, **kwargs): function create_tag (line 214) | def create_tag(*, value="tag-value", do_save=True, **kwargs): function create_tag_collection (line 222) | def create_tag_collection(*, tag=None, asset=None, user=None, **kwargs): function create_banner (line 238) | def create_banner(*, slug="Test Banner", do_save=True, **kwargs): function create_card (line 245) | def create_card(*, title="Test Card", do_save=True, **kwargs): function create_card_family (line 252) | def create_card_family(*, slug="test-card-family", do_save=True, **kwargs): function create_carousel_slide (line 259) | def create_carousel_slide(*, headline="Test Headline", do_save=True, **k... function create_guide (line 266) | def create_guide(*, do_save=True, **kwargs): function create_helpful_link (line 273) | def create_helpful_link(*, title="Test Helpful Link", do_save=True, **kw... function create_concordia_file (line 280) | def create_concordia_file( function create_user_profile_activity (line 289) | def create_user_profile_activity( function create_campaign_retirement_progress (line 306) | def create_campaign_retirement_progress( function create_research_center (line 320) | def create_research_center(*, title="Test Research Center", do_save=True... class JSONAssertMixin (line 327) | class JSONAssertMixin(object): method assertValidJSON (line 328) | def assertValidJSON(self, response, expected_status=200): class CreateTestUsers (line 343) | class CreateTestUsers(object): method login_user (line 344) | def login_user(self, username="tester", **kwargs): method logout_user (line 353) | def logout_user(self): method create_user (line 358) | def create_user(cls, username, is_active=True, **kwargs): method create_test_user (line 373) | def create_test_user(cls, username="testuser", **kwargs): method create_inactive_user (line 380) | def create_inactive_user(cls, username="testinactiveuser", **kwargs): method create_staff_user (line 387) | def create_staff_user(cls, username="teststaffuser", **kwargs): method create_super_user (line 394) | def create_super_user(cls, username="testsuperuser", **kwargs): class CacheControlAssertions (line 403) | class CacheControlAssertions(object): method assertUncacheable (line 404) | def assertUncacheable(self, response): method assertCachePrivate (line 409) | def assertCachePrivate(self, response): class StreamingTestMixin (line 414) | class StreamingTestMixin(object): method get_streaming_content (line 415) | def get_streaming_content(self, response): FILE: concordia/turnstile/context_processors.py function turnstile_default_settings (line 7) | def turnstile_default_settings(request: "HttpRequest") -> "Dict[str, Any]": FILE: concordia/turnstile/fields.py class TurnstileField (line 24) | class TurnstileField(forms.Field): method __init__ (line 78) | def __init__(self, **kwargs: Any) -> None: method widget_attrs (line 110) | def widget_attrs(self, widget: forms.Widget) -> dict[str, Any]: method validate (line 127) | def validate(self, value: str | None) -> None: FILE: concordia/turnstile/widgets.py class TurnstileWidget (line 11) | class TurnstileWidget(forms.Widget): method __init__ (line 34) | def __init__(self, *args, **kwargs) -> None: method value_from_datadict (line 48) | def value_from_datadict( method build_attrs (line 71) | def build_attrs( method get_context (line 94) | def get_context( FILE: concordia/utils/__init__.py function get_anonymous_user (line 18) | def get_anonymous_user(): function request_accepts_json (line 31) | def request_accepts_json(request): function get_or_create_reservation_token (line 37) | def get_or_create_reservation_token(request): function get_image_urls_from_asset (line 65) | def get_image_urls_from_asset(asset): FILE: concordia/utils/celery.py function get_registered_task (line 6) | def get_registered_task(name: str) -> Task: FILE: concordia/utils/next_asset/__init__.py function remove_next_asset_objects (line 69) | def remove_next_asset_objects(asset_id): FILE: concordia/utils/next_asset/reviewable/campaign.py function _reserved_asset_ids_subq (line 14) | def _reserved_asset_ids_subq( function _eligible_reviewable_base_qs (line 38) | def _eligible_reviewable_base_qs( function _next_seq_after (line 70) | def _next_seq_after(pk: int | None) -> int | None: function _find_reviewable_in_item (line 95) | def _find_reviewable_in_item( function _find_reviewable_in_project (line 189) | def _find_reviewable_in_project( function find_new_reviewable_campaign_assets (line 257) | def find_new_reviewable_campaign_assets( function find_next_reviewable_campaign_assets (line 301) | def find_next_reviewable_campaign_assets( function find_reviewable_campaign_asset (line 326) | def find_reviewable_campaign_asset( function find_and_order_potential_reviewable_campaign_assets (line 398) | def find_and_order_potential_reviewable_campaign_assets( function find_next_reviewable_campaign_asset (line 465) | def find_next_reviewable_campaign_asset( function find_invalid_next_reviewable_campaign_assets (line 593) | def find_invalid_next_reviewable_campaign_assets( FILE: concordia/utils/next_asset/reviewable/topic.py function _reserved_asset_ids_subq (line 14) | def _reserved_asset_ids_subq() -> "QuerySet[Dict[str, int]]": function _eligible_reviewable_base_qs (line 31) | def _eligible_reviewable_base_qs( function _next_seq_after (line 63) | def _next_seq_after(pk: int | None) -> int | None: function _find_reviewable_in_item (line 88) | def _find_reviewable_in_item( function _find_reviewable_in_project (line 182) | def _find_reviewable_in_project( function find_new_reviewable_topic_assets (line 251) | def find_new_reviewable_topic_assets( function find_next_reviewable_topic_assets (line 298) | def find_next_reviewable_topic_assets( function find_reviewable_topic_asset (line 323) | def find_reviewable_topic_asset( function find_and_order_potential_reviewable_topic_assets (line 396) | def find_and_order_potential_reviewable_topic_assets( function find_next_reviewable_topic_asset (line 464) | def find_next_reviewable_topic_asset( function find_invalid_next_reviewable_topic_assets (line 593) | def find_invalid_next_reviewable_topic_assets( FILE: concordia/utils/next_asset/transcribable/campaign.py function _reserved_asset_ids_subq (line 13) | def _reserved_asset_ids_subq( function _eligible_transcribable_base_qs (line 37) | def _eligible_transcribable_base_qs( function _next_seq_after (line 66) | def _next_seq_after(pk: int | None) -> int | None: function _order_unstarted_first (line 90) | def _order_unstarted_first( function _find_transcribable_in_item (line 117) | def _find_transcribable_in_item( function _find_transcribable_not_started_in_project (line 184) | def _find_transcribable_not_started_in_project( function find_new_transcribable_campaign_assets (line 227) | def find_new_transcribable_campaign_assets( function find_next_transcribable_campaign_assets (line 268) | def find_next_transcribable_campaign_assets( function find_transcribable_campaign_asset (line 290) | def find_transcribable_campaign_asset( function find_and_order_potential_transcribable_campaign_assets (line 357) | def find_and_order_potential_transcribable_campaign_assets( function find_next_transcribable_campaign_asset (line 422) | def find_next_transcribable_campaign_asset( function find_invalid_next_transcribable_campaign_assets (line 638) | def find_invalid_next_transcribable_campaign_assets( FILE: concordia/utils/next_asset/transcribable/topic.py function _reserved_asset_ids_subq (line 13) | def _reserved_asset_ids_subq() -> "QuerySet[Dict[str, int]]": function _eligible_transcribable_base_qs (line 30) | def _eligible_transcribable_base_qs( function _next_seq_after (line 59) | def _next_seq_after(pk: int | None) -> int | None: function _order_unstarted_first (line 83) | def _order_unstarted_first( function _find_transcribable_in_item_for_topic (line 109) | def _find_transcribable_in_item_for_topic( function _find_transcribable_not_started_in_project_for_topic (line 177) | def _find_transcribable_not_started_in_project_for_topic( function find_new_transcribable_topic_assets (line 221) | def find_new_transcribable_topic_assets( function find_next_transcribable_topic_assets (line 265) | def find_next_transcribable_topic_assets( function find_transcribable_topic_asset (line 285) | def find_transcribable_topic_asset( function find_and_order_potential_transcribable_topic_assets (line 352) | def find_and_order_potential_transcribable_topic_assets( function find_next_transcribable_topic_asset (line 417) | def find_next_transcribable_topic_asset( function find_invalid_next_transcribable_topic_assets (line 654) | def find_invalid_next_transcribable_topic_assets( FILE: concordia/validators.py class DjangoPasswordsValidator (line 7) | class DjangoPasswordsValidator(object): method __init__ (line 18) | def __init__(self): method get_help_text (line 21) | def get_help_text(self): method validate (line 24) | def validate(self, value, user=None): FILE: concordia/version.py function get_concordia_version (line 7) | def get_concordia_version(): FILE: concordia/views/__init__.py function healthz (line 36) | def healthz(request): class HomeView (line 53) | class HomeView(ListView): method get_context_data (line 64) | def get_context_data(self, *args, **kwargs): FILE: concordia/views/accounts.py class ConcordiaPasswordResetConfirmView (line 57) | class ConcordiaPasswordResetConfirmView(PasswordResetConfirmView): class ConcordiaPasswordResetRequestView (line 80) | class ConcordiaPasswordResetRequestView(PasswordResetView): function registration_rate (line 101) | def registration_rate(group: str, request: HttpRequest) -> Optional[str]: class ConcordiaRegistrationView (line 150) | class ConcordiaRegistrationView(RegistrationView): class ConcordiaLoginView (line 174) | class ConcordiaLoginView(LoginView): method post (line 199) | def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> Htt... method get_context_data (line 236) | def get_context_data(self, **kwargs: Any) -> dict[str, Any]: function account_letter (line 250) | def account_letter(request: HttpRequest) -> HttpResponse: function get_pages (line 312) | def get_pages(request: HttpRequest) -> JsonResponse: class AccountProfileView (line 411) | class AccountProfileView(LoginRequiredMixin, FormView, ListView): method post (line 474) | def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> Htt... method get_queryset (line 497) | def get_queryset(self) -> Any: method get_context_data (line 505) | def get_context_data(self, *args: Any, **kwargs: Any) -> dict[str, Any]: method get_initial (line 558) | def get_initial(self) -> dict[str, Any]: method get_form_kwargs (line 563) | def get_form_kwargs(self) -> dict[str, Any]: method form_valid (line 570) | def form_valid(self, form: Form) -> HttpResponse: method form_invalid (line 609) | def form_invalid(self, form: Form) -> HttpResponse: method get_success_url (line 620) | def get_success_url(self) -> str: method get_reconfirmation_email_context (line 624) | def get_reconfirmation_email_context(self, confirmation_key: str) -> d... method send_reconfirmation_email (line 631) | def send_reconfirmation_email(self, user: ConcordiaUser) -> None: class AccountDeletionView (line 686) | class AccountDeletionView(LoginRequiredMixin, FormView): method get_form_kwargs (line 731) | def get_form_kwargs(self) -> dict[str, Any]: method form_valid (line 738) | def form_valid(self, form: Form) -> HttpResponse: method delete_user (line 747) | def delete_user(self, user: ConcordiaUser, request: HttpRequest) -> None: method send_deletion_email (line 787) | def send_deletion_email(self, email: str) -> None: class EmailReconfirmationView (line 839) | class EmailReconfirmationView(TemplateView): method get_success_url (line 885) | def get_success_url(self) -> str: method get (line 888) | def get(self, *args: Any, **kwargs: Any) -> HttpResponse: method confirm (line 918) | def confirm(self, *args: Any, **kwargs: Any) -> ConcordiaUser: method validate_key (line 938) | def validate_key(self, confirmation_key: str) -> tuple[str, str]: method get_user (line 953) | def get_user(self, username: str) -> ConcordiaUser: FILE: concordia/views/ajax.py function ajax_session_status (line 51) | def ajax_session_status(request: HttpRequest) -> JsonResponse: function ajax_messages (line 123) | def ajax_messages(request: HttpRequest) -> JsonResponse: function get_transcription_superseded (line 166) | def get_transcription_superseded( function generate_ocr_transcription (line 277) | def generate_ocr_transcription( function rollback_transcription (line 422) | def rollback_transcription( function rollforward_transcription (line 530) | def rollforward_transcription( function save_transcription (line 635) | def save_transcription( function submit_transcription (line 790) | def submit_transcription(request: HttpRequest, *, pk: Union[int, str]) -... function review_transcription (line 906) | def review_transcription(request: HttpRequest, *, pk: Union[int, str]) -... function submit_tags (line 1067) | def submit_tags(request: HttpRequest, *, asset_pk: Union[int, str]) -> J... function reserve_asset (line 1170) | def reserve_asset(request: HttpRequest, *, asset_pk: Union[int, str]) ->... function update_reservation (line 1334) | def update_reservation( function obtain_reservation (line 1399) | def obtain_reservation( FILE: concordia/views/assets.py class AssetDetailView (line 55) | class AssetDetailView(AnonymousUserValidationCheckMixin, APIDetailView): method dispatch (line 73) | def dispatch( method get_queryset (line 96) | def get_queryset(self) -> QuerySet[Asset]: method get_context_data (line 107) | def get_context_data(self, **kwargs: Any) -> dict[str, Any]: function redirect_to_next_asset (line 317) | def redirect_to_next_asset( function redirect_to_next_reviewable_asset (line 402) | def redirect_to_next_reviewable_asset( function redirect_to_next_transcribable_asset (line 516) | def redirect_to_next_transcribable_asset( function redirect_to_next_reviewable_campaign_asset (line 634) | def redirect_to_next_reviewable_campaign_asset( function redirect_to_next_transcribable_campaign_asset (line 711) | def redirect_to_next_transcribable_campaign_asset( function redirect_to_next_reviewable_topic_asset (line 784) | def redirect_to_next_reviewable_topic_asset( function redirect_to_next_transcribable_topic_asset (line 862) | def redirect_to_next_transcribable_topic_asset( FILE: concordia/views/campaigns.py class CampaignListView (line 33) | class CampaignListView(APIListView): method get_context_data (line 62) | def get_context_data(self, **kwargs: Any) -> dict[str, Any]: method serialize_context (line 88) | def serialize_context(self, context: dict[str, Any]) -> dict[str, Any]: class CompletedCampaignListView (line 134) | class CompletedCampaignListView(APIListView): method _get_all_campaigns (line 154) | def _get_all_campaigns(self) -> QuerySet[Campaign]: method get_queryset (line 174) | def get_queryset(self) -> QuerySet[Campaign]: method get_context_data (line 189) | def get_context_data(self, **kwargs: Any) -> dict[str, Any]: class CampaignTopicListView (line 214) | class CampaignTopicListView(TemplateView): method get (line 230) | def get(self, request, *args: Any, **kwargs: Any) -> HttpResponse: class CampaignDetailView (line 269) | class CampaignDetailView(APIDetailView): method get_context_data (line 294) | def get_context_data(self, **kwargs: Any) -> dict[str, Any]: method serialize_context (line 374) | def serialize_context(self, context: dict[str, Any]) -> dict[str, Any]: method get_template_names (line 396) | def get_template_names(self) -> list[str]: class FilteredCampaignDetailView (line 411) | class FilteredCampaignDetailView(CampaignDetailView): method get_context_data (line 422) | def get_context_data(self, **kwargs: Any) -> dict[str, Any]: class ReportCampaignView (line 441) | class ReportCampaignView(TemplateView): method get (line 457) | def get( method add_transcription_status_summary_to_projects (line 526) | def add_transcription_status_summary_to_projects( FILE: concordia/views/decorators.py function default_cache_control (line 19) | def default_cache_control(view_function: Callable) -> Callable: function user_cache_control (line 43) | def user_cache_control(view_function: Callable) -> Callable: function validate_anonymous_user (line 69) | def validate_anonymous_user(view: Callable) -> Callable: function reserve_rate (line 120) | def reserve_rate(group: str, request: HttpRequest) -> str | None: function next_asset_rate (line 144) | def next_asset_rate(group: str, request: HttpRequest) -> str | None: FILE: concordia/views/items.py class ItemDetailView (line 17) | class ItemDetailView(APIListView): method dispatch (line 40) | def dispatch(self, request: HttpRequest, *args, **kwargs) -> HttpRespo... method _get_assets (line 58) | def _get_assets(self) -> QuerySet: method get_queryset (line 73) | def get_queryset(self): method get_context_data (line 113) | def get_context_data(self, **kwargs): method serialize_context (line 149) | def serialize_context(self, context: dict) -> dict: class FilteredItemDetailView (line 175) | class FilteredItemDetailView(ItemDetailView): method get_queryset (line 184) | def get_queryset(self): method get_context_data (line 197) | def get_context_data(self, **kwargs): FILE: concordia/views/maintenance_mode.py function maintenance_mode_off (line 8) | def maintenance_mode_off(request: HttpRequest) -> HttpResponseRedirect: function maintenance_mode_on (line 27) | def maintenance_mode_on(request: HttpRequest) -> HttpResponseRedirect: function maintenance_mode_frontend_available (line 46) | def maintenance_mode_frontend_available(request: HttpRequest) -> HttpRes... function maintenance_mode_frontend_unavailable (line 64) | def maintenance_mode_frontend_unavailable(request: HttpRequest) -> HttpR... FILE: concordia/views/projects.py class ProjectDetailView (line 16) | class ProjectDetailView(APIListView): method dispatch (line 40) | def dispatch(self, request: HttpRequest, *args, **kwargs) -> HttpRespo... method get_queryset (line 64) | def get_queryset(self, filter_by_reviewable: bool = False) -> QuerySet: method get_context_data (line 120) | def get_context_data(self, **kws) -> dict[str, object]: method serialize_context (line 179) | def serialize_context(self, context: dict[str, object]) -> dict[str, o... class FilteredProjectDetailView (line 201) | class FilteredProjectDetailView(ProjectDetailView): method get_queryset (line 211) | def get_queryset(self) -> QuerySet: method get_context_data (line 223) | def get_context_data(self, **kws) -> dict[str, object]: FILE: concordia/views/rate_limit.py function ratelimit_view (line 7) | def ratelimit_view( FILE: concordia/views/simple_pages.py function simple_page (line 20) | def simple_page( function about_simple_page (line 91) | def about_simple_page( class HelpCenterRedirectView (line 157) | class HelpCenterRedirectView(RedirectView): method get_redirect_url (line 158) | def get_redirect_url(self, *args, **kwargs): class HelpCenterSpanishRedirectView (line 163) | class HelpCenterSpanishRedirectView(RedirectView): method get_redirect_url (line 164) | def get_redirect_url(self, *args, **kwargs): FILE: concordia/views/topics.py class TopicDetailView (line 17) | class TopicDetailView(APIDetailView): method get_context_data (line 36) | def get_context_data(self, **kwargs: Any) -> dict[str, object]: method serialize_context (line 138) | def serialize_context(self, context: dict[str, object]) -> dict[str, o... FILE: concordia/views/utils.py function _get_pages (line 15) | def _get_pages(request: HttpRequest) -> QuerySet: function calculate_asset_stats (line 116) | def calculate_asset_stats(asset_qs: QuerySet, ctx: dict) -> None: function annotate_children_with_progress_stats (line 174) | def annotate_children_with_progress_stats(children: Iterable) -> None: class AnonymousUserValidationCheckMixin (line 224) | class AnonymousUserValidationCheckMixin: method get_context_data (line 236) | def get_context_data(self, *args, **kwargs) -> dict: FILE: concordia/views/visualizations.py class VisualizationDataView (line 9) | class VisualizationDataView(View): method get (line 32) | def get(self, request, name): FILE: concordia/widgets.py class EmailWidget (line 4) | class EmailWidget(forms.EmailInput): FILE: configuration/admin.py class ConfigurationAdmin (line 12) | class ConfigurationAdmin(admin.ModelAdmin): method validated_value (line 29) | def validated_value(self, obj: Configuration) -> str: method changeform_view (line 54) | def changeform_view( FILE: configuration/apps.py class ConfigurationConfig (line 4) | class ConfigurationConfig(AppConfig): method ready (line 8) | def ready(self): FILE: configuration/management/commands/configcache.py class Command (line 5) | class Command(BaseCommand): method add_arguments (line 8) | def add_arguments(self, parser): method handle (line 11) | def handle(self, *args, **options): FILE: configuration/migrations/0001_initial.py class Migration (line 6) | class Migration(migrations.Migration): FILE: configuration/migrations/0002_populate_configurations.py function populate_configuration (line 6) | def populate_configuration(apps, schema_editor): function revert_populate_configuration (line 42) | def revert_populate_configuration(apps, schema_editor): class Migration (line 49) | class Migration(migrations.Migration): FILE: configuration/migrations/0003_populate_retry_configurations.py function populate_retry_configuration (line 6) | def populate_retry_configuration(apps, schema_editor): function revert_populate_retry_configuration (line 33) | def revert_populate_retry_configuration(apps, schema_editor): class Migration (line 40) | class Migration(migrations.Migration): FILE: configuration/migrations/0004_alter_configuration_options.py class Migration (line 6) | class Migration(migrations.Migration): FILE: configuration/migrations/0005_alter_configuration_data_type.py class Migration (line 6) | class Migration(migrations.Migration): FILE: configuration/migrations/0006_populate_next_asset_rate_limit.py function populate_configuration (line 4) | def populate_configuration(apps, schema_editor): function revert_populate_configuration (line 20) | def revert_populate_configuration(apps, schema_editor): class Migration (line 27) | class Migration(migrations.Migration): FILE: configuration/models.py class Configuration (line 11) | class Configuration(models.Model): class DataType (line 31) | class DataType(models.TextChoices): class Meta (line 59) | class Meta: method __str__ (line 62) | def __str__(self) -> str: method get_value (line 68) | def get_value(self) -> "Any": FILE: configuration/signals.py function update_cached_configuration_value (line 9) | def update_cached_configuration_value( FILE: configuration/templatetags/configuration_tags.py function configuration_value (line 12) | def configuration_value(key: str) -> Any: FILE: configuration/tests/test_admin.py class TestConfigurationAdmin (line 8) | class TestConfigurationAdmin(TestCase): method setUp (line 9) | def setUp(self): method test_change_view_initial_get (line 27) | def test_change_view_initial_get(self): method test_save_triggers_confirmation (line 33) | def test_save_triggers_confirmation(self): method test_confirm_save_updates_object (line 47) | def test_confirm_save_updates_object(self): method test_cancel_preserves_input (line 83) | def test_cancel_preserves_input(self): method test_confirm_save_with_invalid_form (line 116) | def test_confirm_save_with_invalid_form(self): method test_get_value_failure_on_confirmation (line 146) | def test_get_value_failure_on_confirmation(self): method test_first_post_invalid_form (line 171) | def test_first_post_invalid_form(self): FILE: configuration/tests/test_models.py class TestConfiguration (line 9) | class TestConfiguration(TestCase): method setUp (line 10) | def setUp(self): method test_str (line 13) | def test_str(self): method test_text (line 19) | def test_text(self): method test_number (line 37) | def test_number(self): method test_boolean (line 58) | def test_boolean(self): method test_json (line 91) | def test_json(self): method test_html (line 124) | def test_html(self): method test_rate (line 163) | def test_rate(self): FILE: configuration/tests/test_signals.py class TestConfigurationSignal (line 7) | class TestConfigurationSignal(TestCase): method setUp (line 8) | def setUp(self): method test_signal_caches_valid_value (line 11) | def test_signal_caches_valid_value(self): method test_signal_does_not_cache_invalid_json (line 19) | def test_signal_does_not_cache_invalid_json(self): FILE: configuration/tests/test_templatetags.py class TestTemplatetags (line 7) | class TestTemplatetags(TestCase): method test_configuration_value (line 8) | def test_configuration_value(self): FILE: configuration/tests/test_utils.py class TestConfigurationUtils (line 14) | class TestConfigurationUtils(TestCase): method setUp (line 15) | def setUp(self): method test_configuration_value (line 19) | def test_configuration_value(self): class TestCacheConfigurationValue (line 57) | class TestCacheConfigurationValue(TestCase): method setUp (line 58) | def setUp(self): method test_explicit_value_is_cached (line 62) | def test_explicit_value_is_cached(self): method test_value_is_fetched_from_model_if_not_supplied (line 71) | def test_value_is_fetched_from_model_if_not_supplied(self): FILE: configuration/tests/test_validation.py class TestValidation (line 7) | class TestValidation(TestCase): method test_valid_rates (line 8) | def test_valid_rates(self): method test_rate_stripping_whitespace (line 14) | def test_rate_stripping_whitespace(self): method test_non_string_input (line 32) | def test_non_string_input(self): method test_invalid_format (line 42) | def test_invalid_format(self): method test_zero_or_negative_values (line 64) | def test_zero_or_negative_values(self): method test_invalid_unit (line 71) | def test_invalid_unit(self): FILE: configuration/utils.py function configuration_value (line 11) | def configuration_value(key: str) -> Any: function cache_configuration_value (line 49) | def cache_configuration_value(key: str, value: Any | None = None) -> Any: FILE: configuration/validation.py function validate_rate (line 8) | def validate_rate(rate: str) -> str: FILE: exporter/apps.py class ExporterConfig (line 4) | class ExporterConfig(AppConfig): FILE: exporter/exceptions.py class UnacceptableCharacterError (line 4) | class UnacceptableCharacterError(ValueError): method __init__ (line 17) | def __init__(self, violations: List[Tuple[int, int, str]]): FILE: exporter/tabular_export/admin.py function ensure_filename (line 34) | def ensure_filename(suffix: str) -> Callable[[Callable[..., Any]], Calla... function export_to_excel_action (line 81) | def export_to_excel_action( function export_to_csv_action (line 124) | def export_to_csv_action( FILE: exporter/tabular_export/core.py function get_field_names_from_queryset (line 43) | def get_field_names_from_queryset(qs: QuerySet[Any]) -> list[str]: function flatten_queryset (line 71) | def flatten_queryset( function convert_value_to_unicode (line 117) | def convert_value_to_unicode(v: Any) -> str: function set_content_disposition (line 140) | def set_content_disposition( function return_debug_reponse (line 171) | def return_debug_reponse( function export_to_debug_html_response (line 202) | def export_to_debug_html_response( function export_to_excel_response (line 251) | def export_to_excel_response( class Echo (line 311) | class Echo(object): method write (line 315) | def write(self, value: str) -> str: function export_to_csv_response (line 321) | def export_to_csv_response( function force_utf8_encoding (line 364) | def force_utf8_encoding( FILE: exporter/tests/test_exceptions.py class UnacceptableCharacterErrorTests (line 6) | class UnacceptableCharacterErrorTests(TestCase): method test_violations_are_stored (line 7) | def test_violations_are_stored(self): method test_message_contains_formatted_details (line 13) | def test_message_contains_formatted_details(self): FILE: exporter/tests/test_tabular_export.py class DummyModel (line 25) | class DummyModel(models.Model): class Meta (line 29) | class Meta: class DummyQuerySet (line 33) | class DummyQuerySet: method __init__ (line 34) | def __init__(self, data, field_names): method values_list (line 39) | def values_list(self, *args): method values (line 42) | def values(self): method query (line 46) | def query(self): class CoreTests (line 58) | class CoreTests(TestCase): method test_convert_value_to_unicode (line 59) | def test_convert_value_to_unicode(self): method test_echo_write (line 67) | def test_echo_write(self): method test_get_field_names_from_queryset (line 71) | def test_get_field_names_from_queryset(self): method test_flatten_queryset_defaults (line 78) | def test_flatten_queryset_defaults(self): method test_flatten_queryset_with_custom_headers (line 84) | def test_flatten_queryset_with_custom_headers(self): method test_force_utf8_encoding (line 92) | def test_force_utf8_encoding(self): method test_set_content_disposition (line 99) | def test_set_content_disposition(self): method test_export_to_debug_html_response (line 109) | def test_export_to_debug_html_response(self): method test_export_to_csv_response (line 120) | def test_export_to_csv_response(self): method test_export_to_csv_response_debug (line 129) | def test_export_to_csv_response_debug(self): method test_export_to_excel_response (line 139) | def test_export_to_excel_response(self): method test_export_to_excel_response_with_datetime (line 153) | def test_export_to_excel_response_with_datetime(self): method test_export_to_excel_response_debug (line 167) | def test_export_to_excel_response_debug(self): class AdminTests (line 176) | class AdminTests(TestCase): method setUp (line 177) | def setUp(self): method test_export_to_excel_action_default_filename (line 186) | def test_export_to_excel_action_default_filename(self): method test_export_to_excel_action_with_custom_filename_and_fields (line 197) | def test_export_to_excel_action_with_custom_filename_and_fields(self): method test_export_to_csv_action_default_filename (line 214) | def test_export_to_csv_action_default_filename(self): method test_export_to_csv_action_with_custom_filename_and_fields (line 221) | def test_export_to_csv_action_with_custom_filename_and_fields(self): FILE: exporter/tests/test_utils.py class UtilsValidationTests (line 12) | class UtilsValidationTests(TestCase): method test_printable_ascii_is_acceptable (line 13) | def test_printable_ascii_is_acceptable(self): method test_whitelisted_nonprintable_is_acceptable (line 18) | def test_whitelisted_nonprintable_is_acceptable(self): method test_control_char_is_rejected (line 23) | def test_control_char_is_rejected(self): method test_find_unacceptable_characters_returns_positions (line 27) | def test_find_unacceptable_characters_returns_positions(self): method test_duplicate_violations_are_recorded (line 33) | def test_duplicate_violations_are_recorded(self): method test_validate_text_for_export_passes_clean_text (line 38) | def test_validate_text_for_export_passes_clean_text(self): method test_validate_text_for_export_raises_on_bad_text (line 43) | def test_validate_text_for_export_raises_on_bad_text(self): method test_remove_unacceptable_characters_removes_disallowed_chars (line 50) | def test_remove_unacceptable_characters_removes_disallowed_chars(self): method test_remove_unacceptable_characters_keeps_whitelisted_chars (line 56) | def test_remove_unacceptable_characters_keeps_whitelisted_chars(self): method test_remove_unacceptable_characters_preserves_newlines_and_crlf (line 62) | def test_remove_unacceptable_characters_preserves_newlines_and_crlf(se... method test_remove_unacceptable_characters_noop_on_clean_text (line 70) | def test_remove_unacceptable_characters_noop_on_clean_text(self): method test_remove_unacceptable_characters_handles_multiple_lines (line 75) | def test_remove_unacceptable_characters_handles_multiple_lines(self): method test_remove_unacceptable_characters_preserves_carriage_return_alone (line 88) | def test_remove_unacceptable_characters_preserves_carriage_return_alon... FILE: exporter/tests/test_views.py class ViewTests (line 44) | class ViewTests(TestCase): method setUp (line 45) | def setUp(self): method test_csv_export (line 84) | def test_csv_export(self): method test_campaign_bagit_export (line 96) | def test_campaign_bagit_export(self): method test_project_bagit_export (line 108) | def test_project_bagit_export(self): method test_project_csv_export (line 123) | def test_project_csv_export(self): method test_item_bagit_export (line 137) | def test_item_bagit_export(self): method test_get_original_asset_id_fallback (line 151) | def test_get_original_asset_id_fallback(self): method test_get_original_asset_id_service_match (line 155) | def test_get_original_asset_id_service_match(self): method test_get_original_asset_id_master_match (line 160) | def test_get_original_asset_id_master_match(self): method test_get_original_asset_id_public_match (line 167) | def test_get_original_asset_id_public_match(self): method test_get_original_asset_id_failure (line 172) | def test_get_original_asset_id_failure(self): method test_write_distinct_asset_resource_file_missing_url (line 178) | def test_write_distinct_asset_resource_file_missing_url(self): method test_do_bagit_export_no_s3 (line 188) | def test_do_bagit_export_no_s3(self, mock_logger): method test_remove_incomplete_items (line 196) | def test_remove_incomplete_items(self): method test_get_tag_values_empty (line 206) | def test_get_tag_values_empty(self): method test_get_latest_transcription_data (line 210) | def test_get_latest_transcription_data(self): method test_do_bagit_export_with_s3 (line 217) | def test_do_bagit_export_with_s3(self, mock_logger, mock_boto): method test_do_bagit_export_without_transcription (line 228) | def test_do_bagit_export_without_transcription(self, mock_logger): method test_do_bagit_export_validation_errors_render (line 266) | def test_do_bagit_export_validation_errors_render(self, mock_rmtree, m... method test_do_bagit_export_validation_errors_no_request (line 317) | def test_do_bagit_export_validation_errors_no_request(self, mock_rmtree): method test_do_bagit_export_validation_errors_no_export_dir (line 356) | def test_do_bagit_export_validation_errors_no_export_dir( FILE: exporter/utils.py function is_acceptable_character (line 22) | def is_acceptable_character(character: str) -> bool: function find_unacceptable_characters (line 39) | def find_unacceptable_characters(text: str) -> List[Tuple[int, int, str]]: function validate_text_for_export (line 65) | def validate_text_for_export(text: str) -> bool: function remove_unacceptable_characters (line 86) | def remove_unacceptable_characters(text: str) -> str: FILE: exporter/views.py function get_latest_transcription_data (line 42) | def get_latest_transcription_data( function get_tag_values (line 74) | def get_tag_values(asset_qs: QuerySet[Asset]) -> QuerySet[Asset]: function remove_incomplete_items (line 98) | def remove_incomplete_items(item_qs: QuerySet[Item]) -> QuerySet[Asset]: function get_original_asset_id (line 128) | def get_original_asset_id(download_url: str) -> str: function write_distinct_asset_resource_file (line 176) | def write_distinct_asset_resource_file( function do_bagit_export (line 214) | def do_bagit_export( class ExportCampaignToCSV (line 335) | class ExportCampaignToCSV(TemplateView): method get (line 344) | def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: class ExportItemToBagIt (line 395) | class ExportItemToBagIt(TemplateView): method get (line 403) | def get( class ExportProjectToBagIt (line 449) | class ExportProjectToBagIt(TemplateView): method get (line 455) | def get( class ExportCampaignToBagIt (line 492) | class ExportCampaignToBagIt(TemplateView): method get (line 498) | def get( class ExportProjectToCSV (line 531) | class ExportProjectToCSV(TemplateView): method get (line 540) | def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: FILE: frontend/src/App.jsx function FetchAndDisplay (line 17) | function FetchAndDisplay({endpoint, method = 'GET'}) { function AssetLoader (line 62) | function AssetLoader({children}) { function AssetRoutes (line 136) | function AssetRoutes({assetData, handleTranscriptionUpdate}) { function NavLinks (line 170) | function NavLinks({assetData}) { function NotFound (line 204) | function NotFound() { function Transcriptions (line 213) | function Transcriptions() { function OCRTranscription (line 224) | function OCRTranscription() { function Rollback (line 235) | function Rollback() { function Rollforward (line 246) | function Rollforward() { function Submit (line 257) | function Submit() { function Review (line 268) | function Review() { function App (line 286) | function App() { FILE: frontend/src/ViewerSplit.jsx function ViewerSplit (line 41) | function ViewerSplit({assetData, onTranscriptionUpdate}) { FILE: frontend/src/config.js constant DEFAULT_PREFIX_URL (line 17) | const DEFAULT_PREFIX_URL = '/static/openseadragon-images/'; constant DEFAULT_CONTACT_URL (line 20) | const DEFAULT_CONTACT_URL = 'https://ask.loc.gov/crowd'; function getViewerConfig (line 41) | function getViewerConfig() { FILE: frontend/src/editor/Buttons.jsx function EditorButtons (line 52) | function EditorButtons({ FILE: frontend/src/editor/Editor.jsx function submitTranscription (line 28) | async function submitTranscription(transcriptionId) { function reviewTranscription (line 51) | async function reviewTranscription(transcriptionId, action) { function acceptTranscription (line 73) | async function acceptTranscription(transcriptionId) { function rejectTranscription (line 83) | async function rejectTranscription(transcriptionId) { function Editor (line 111) | function Editor(props) { FILE: frontend/src/editor/Header.jsx function EditorHeader (line 45) | function EditorHeader({status, registeredContributors}) { FILE: frontend/src/editor/StatusMessages.jsx function EditorStatusMessages (line 18) | function EditorStatusMessages({error, success, submitSuccess}) { FILE: frontend/src/editor/TranscriptionTextarea.jsx function TranscriptionTextarea (line 18) | function TranscriptionTextarea({value, onChange, editable}) { FILE: frontend/src/editor/buttons/Editable.jsx function EditorButtonsEditable (line 28) | function EditorButtonsEditable({ FILE: frontend/src/editor/buttons/Redo.jsx function EditorButtonRedo (line 14) | function EditorButtonRedo({redoAvailable, onClick}) { FILE: frontend/src/editor/buttons/Review.jsx function EditorButtonsReview (line 18) | function EditorButtonsReview({isReviewing, onAccept, onReject}) { FILE: frontend/src/editor/buttons/Save.jsx function EditorButtonSave (line 15) | function EditorButtonSave({onSave, isSaving, text}) { FILE: frontend/src/editor/buttons/Submit.jsx function EditorButtonSubmit (line 15) | function EditorButtonSubmit({ FILE: frontend/src/editor/buttons/Undo.jsx function EditorButtonUndo (line 14) | function EditorButtonUndo({undoAvailable, onClick}) { FILE: frontend/src/ocr/Button.jsx function OcrButton (line 17) | function OcrButton({onClick}) { FILE: frontend/src/ocr/ConfirmModal.jsx function OcrConfirmModal (line 30) | function OcrConfirmModal({show, onClose, onConfirm}) { FILE: frontend/src/ocr/Handler.jsx function OcrHandler (line 42) | function OcrHandler({ FILE: frontend/src/ocr/HelpModal.jsx function OcrHelpModal (line 15) | function OcrHelpModal() { FILE: frontend/src/ocr/LanguageModal.jsx function OcrLanguageModal (line 47) | function OcrLanguageModal({ FILE: frontend/src/ocr/Section.jsx function OcrSection (line 42) | function OcrSection({ FILE: frontend/src/viewer/Controls.jsx function ViewerControls (line 40) | function ViewerControls({ FILE: frontend/src/viewer/FilterTabNav.jsx function FilterTabNav (line 26) | function FilterTabNav() { FILE: frontend/src/viewer/GammaFilterForm.jsx function GammaFilterForm (line 23) | function GammaFilterForm({gamma, setGamma}) { FILE: frontend/src/viewer/ImageFilters.jsx function ImageFilters (line 43) | function ImageFilters({filterPluginRef}) { FILE: frontend/src/viewer/InvertFilterForm.jsx function InvertFilterForm (line 12) | function InvertFilterForm({invert, setInvert}) { FILE: frontend/src/viewer/KeyboardHelpModal.jsx function KeyboardHelpModal (line 17) | function KeyboardHelpModal() { FILE: frontend/src/viewer/KeyboardShortcutRow.jsx function KeyboardShortcutRow (line 24) | function KeyboardShortcutRow({keys, description}) { FILE: frontend/src/viewer/ThresholdFilterForm.jsx function ThresholdFilterForm (line 17) | function ThresholdFilterForm({threshold, setThreshold}) { FILE: frontend/src/viewer/Viewer.jsx function Viewer (line 33) | function Viewer({ FILE: importer/admin.py function retry_download_task (line 25) | def retry_download_task( class LastStartedFilter (line 47) | class LastStartedFilter(NullableTimestampFilter): class CompletedFilter (line 55) | class CompletedFilter(NullableTimestampFilter): class FailedFilter (line 63) | class FailedFilter(NullableTimestampFilter): class ImportJobProjectListFilter (line 71) | class ImportJobProjectListFilter(CampaignProjectListFilter): class ImportJobItemProjectListFilter (line 79) | class ImportJobItemProjectListFilter(CampaignProjectListFilter): class ImportJobAssetProjectListFilter (line 87) | class ImportJobAssetProjectListFilter(CampaignProjectListFilter): class ImportCampaignListFilter (line 95) | class ImportCampaignListFilter(CampaignListFilter): method lookups (line 98) | def lookups( class ImportJobCampaignListFilter (line 117) | class ImportJobCampaignListFilter(ImportCampaignListFilter): class ImportItemCampaignListFilter (line 124) | class ImportItemCampaignListFilter(ImportCampaignListFilter): class ImportItemAssetCampaignListFilter (line 131) | class ImportItemAssetCampaignListFilter(ImportCampaignListFilter): class BatchFilter (line 138) | class BatchFilter(admin.SimpleListFilter): method lookups (line 144) | def lookups( method queryset (line 217) | def queryset( class TaskStatusModelAdmin (line 238) | class TaskStatusModelAdmin(admin.ModelAdmin): method generate_natural_timestamp_display_property (line 261) | def generate_natural_timestamp_display_property(field_name: str): method __init__ (line 291) | def __init__(self, *args, **kwargs): class ImportJobAdmin (line 316) | class ImportJobAdmin(TaskStatusModelAdmin): class ImportItemAdmin (line 344) | class ImportItemAdmin(TaskStatusModelAdmin): class ImportItemAssetAdmin (line 369) | class ImportItemAssetAdmin(TaskStatusModelAdmin): class VerifyAssetImageJobAdmin (line 400) | class VerifyAssetImageJobAdmin(TaskStatusModelAdmin): class DownloadAssetImageJobAdmin (line 423) | class DownloadAssetImageJobAdmin(TaskStatusModelAdmin): FILE: importer/apps.py class ImporterAppConfig (line 4) | class ImporterAppConfig(AppConfig): FILE: importer/celery.py function import_all_submodules (line 18) | def import_all_submodules(package_name: str): function _load_all_task_modules (line 35) | def _load_all_task_modules(sender, **kwargs): FILE: importer/exceptions.py class ImageImportFailure (line 1) | class ImageImportFailure(Exception): FILE: importer/migrations/0001_initial.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0001_squashed_0015_auto_20180925_1851.py class Migration (line 9) | class Migration(migrations.Migration): FILE: importer/migrations/0002_auto_20180709_0833.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0003_auto_20180709_0933.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0004_auto_20180812_1007.py class Migration (line 7) | class Migration(migrations.Migration): FILE: importer/migrations/0005_auto_20180816_1702.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0006_auto_20180912_0229.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0007_auto_20180917_1654.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0008_campaigntaskdetails_project.py class Migration (line 7) | class Migration(migrations.Migration): FILE: importer/migrations/0009_convert_project_text_to_keys.py function convert_slugs_to_references (line 7) | def convert_slugs_to_references(apps, schema_editor): class Migration (line 22) | class Migration(migrations.Migration): FILE: importer/migrations/0010_auto_20180920_2013.py class Migration (line 7) | class Migration(migrations.Migration): FILE: importer/migrations/0011_auto_20180922_0208.py class Migration (line 9) | class Migration(migrations.Migration): FILE: importer/migrations/0012_auto_20180923_0231.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0013_auto_20180924_1318.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0014_auto_20180924_1943.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0015_auto_20180925_1851.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0016_importitem_failure_reason_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0017_importitem_failure_history_importitem_retry_count_and_more.py class Migration (line 7) | class Migration(migrations.Migration): FILE: importer/migrations/0018_importitem_status_history_and_more.py class Migration (line 8) | class Migration(migrations.Migration): FILE: importer/migrations/0019_alter_downloadassetimagejob_batch_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/migrations/0020_alter_downloadassetimagejob_unique_together_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: importer/models.py class TaskStatusModel (line 16) | class TaskStatusModel(models.Model): class FailureReason (line 25) | class FailureReason(models.TextChoices): class Meta (line 80) | class Meta: method retry_if_possible (line 83) | def retry_if_possible(self) -> bool: method update_failure_history (line 94) | def update_failure_history(self, do_save: bool = True) -> None: method update_status (line 111) | def update_status(self, status: str, do_save: bool = True) -> None: method reset_for_retry (line 129) | def reset_for_retry(self) -> bool: class BatchedJob (line 166) | class BatchedJob(TaskStatusModel): class Meta (line 184) | class Meta: method get_batch_admin_url (line 188) | def get_batch_admin_url(cls, batch: UUID | str | None) -> str: method batch_admin_url (line 213) | def batch_admin_url(self) -> str | None: class ImportJob (line 227) | class ImportJob(TaskStatusModel): method __str__ (line 238) | def __str__(self) -> str: class ImportItem (line 246) | class ImportItem(TaskStatusModel): class Meta (line 257) | class Meta: method __str__ (line 260) | def __str__(self) -> str: class ImportItemAsset (line 264) | class ImportItemAsset(TaskStatusModel): class Meta (line 278) | class Meta: method __str__ (line 281) | def __str__(self) -> str: method retry_if_possible (line 284) | def retry_if_possible(self) -> bool: class VerifyAssetImageJob (line 336) | class VerifyAssetImageJob(BatchedJob): method __str__ (line 343) | def __str__(self) -> str: class Meta (line 346) | class Meta: class DownloadAssetImageJob (line 350) | class DownloadAssetImageJob(BatchedJob): method __str__ (line 357) | def __str__(self) -> str: class Meta (line 360) | class Meta: FILE: importer/tasks/__init__.py function fetch_all_urls (line 10) | def fetch_all_urls(items: Iterable[str]) -> tuple[list[str], int]: FILE: importer/tasks/assets.py function download_asset_task (line 33) | def download_asset_task(self: Task, import_asset_pk: int) -> None: function download_asset (line 65) | def download_asset(self: Task, job: "models.ImportItemAsset") -> None: function download_and_store_asset_image (line 103) | def download_and_store_asset_image(download_url: str, asset_image_filena... FILE: importer/tasks/collections.py function import_collection_task (line 24) | def import_collection_task( function import_collection (line 41) | def import_collection( function requests_retry_session (line 59) | def requests_retry_session( function normalize_collection_url (line 91) | def normalize_collection_url(original_url: str) -> str: function get_collection_items (line 117) | def get_collection_items(collection_url: str) -> list[tuple[str, str]]: FILE: importer/tasks/decorators.py function update_task_status (line 17) | def update_task_status( FILE: importer/tasks/images.py function redownload_image_task (line 29) | def redownload_image_task(self: Task, asset_pk: int) -> None: function batch_verify_asset_images_task_callback (line 49) | def batch_verify_asset_images_task_callback( function batch_verify_asset_images_task (line 83) | def batch_verify_asset_images_task( function verify_asset_image_task (line 141) | def verify_asset_image_task( function create_download_asset_image_job (line 195) | def create_download_asset_image_job(asset: Asset, batch: Optional[UUID])... function verify_asset_image (line 212) | def verify_asset_image(task: Task, job: Any) -> bool: function batch_download_asset_images_task_callback (line 273) | def batch_download_asset_images_task_callback( function batch_download_asset_images_task (line 292) | def batch_download_asset_images_task( function download_asset_image_task (line 337) | def download_asset_image_task( FILE: importer/tasks/items.py function create_item_import_task (line 58) | def create_item_import_task( function import_item_task (line 139) | def import_item_task(self: Task, import_item_pk: int) -> Any: function import_item (line 154) | def import_item(self: Task, import_item: Any) -> Any: function import_item_count_from_url (line 242) | def import_item_count_from_url(import_url: str) -> Tuple[str, int]: function get_item_info_from_result (line 263) | def get_item_info_from_result( function get_item_id_from_item_url (line 315) | def get_item_id_from_item_url(item_url: str) -> str: function import_items_into_project_from_url (line 332) | def import_items_into_project_from_url( function populate_item_from_data (line 379) | def populate_item_from_data(item: Item, item_info: dict) -> Optional[str]: function get_asset_urls_from_item_resources (line 416) | def get_asset_urls_from_item_resources( function _guess_extension (line 469) | def _guess_extension(content_type: Optional[str], url_path: str) -> str: function _safe_filename (line 481) | def _safe_filename(item: Item, ext: str) -> str: function download_and_set_item_thumbnail (line 487) | def download_and_set_item_thumbnail( FILE: importer/tests/test_admin.py class ActionTests (line 23) | class ActionTests(TestCase): method test_retry_download_task (line 24) | def test_retry_download_task(self, messages_mock, task_mock): class ImportCampaignListFilterTest (line 47) | class ImportCampaignListFilterTest(TestCase): method test_lookups (line 48) | def test_lookups(self): class TaskStatusModelAdminTest (line 79) | class TaskStatusModelAdminTest(TestCase): method test_generate_natural_timestamp_display_property (line 80) | def test_generate_natural_timestamp_display_property(self, naturaltime... class BatchFilterTests (line 106) | class BatchFilterTests(TestCase): method setUp (line 107) | def setUp(self): method test_lookups_incomplete_batches (line 132) | def test_lookups_incomplete_batches(self, mock_value): method test_lookups_includes_current_batch (line 138) | def test_lookups_includes_current_batch(self, mock_value): method test_lookups_includes_recent_completed_batch (line 146) | def test_lookups_includes_recent_completed_batch(self, mock_value): method test_lookups_fills_with_completed_batches (line 156) | def test_lookups_fills_with_completed_batches(self, mock_value): method test_queryset_filters_correctly (line 166) | def test_queryset_filters_correctly(self, mock_value): method test_queryset_returns_all_when_no_batch_selected (line 173) | def test_queryset_returns_all_when_no_batch_selected(self, mock_value): FILE: importer/tests/test_celery.py class ImporterCeleryTests (line 11) | class ImporterCeleryTests(TestCase): method test_returns_early_for_non_package (line 12) | def test_returns_early_for_non_package(self): method test_imports_all_submodules_for_package (line 26) | def test_imports_all_submodules_for_package(self): method test_package_with_no_submodules (line 57) | def test_package_with_no_submodules(self): method test__load_all_task_modules_invokes_imports (line 76) | def test__load_all_task_modules_invokes_imports(self): method test_on_after_finalize_signal_triggers_handler (line 88) | def test_on_after_finalize_signal_triggers_handler(self): FILE: importer/tests/test_models.py class ImportJobTests (line 19) | class ImportJobTests(TestCase, CreateTestUsers): method test_str (line 20) | def test_str(self): method test_retry_if_possible (line 40) | def test_retry_if_possible(self): method test_update_failure_history (line 48) | def test_update_failure_history(self): class ImportItemTests (line 66) | class ImportItemTests(TestCase, CreateTestUsers): method test_str (line 67) | def test_str(self): method test_retry_if_possible (line 79) | def test_retry_if_possible(self): class ImportItemAssetTests (line 88) | class ImportItemAssetTests(TestCase, CreateTestUsers): method test_str (line 89) | def test_str(self): class VerifyAssetImageJobTests (line 102) | class VerifyAssetImageJobTests(TestCase): method setUp (line 103) | def setUp(self): method test_str_representation (line 108) | def test_str_representation(self): method test_batch_admin_url (line 111) | def test_batch_admin_url(self): method test_get_batch_admin_url (line 118) | def test_get_batch_admin_url(self): method test_get_batch_admin_url_error (line 126) | def test_get_batch_admin_url_error(self): method test_update_failure_history (line 130) | def test_update_failure_history(self): method test_update_status (line 138) | def test_update_status(self): method test_reset_for_retry (line 144) | def test_reset_for_retry(self): method test_reset_for_retry_when_not_failed (line 150) | def test_reset_for_retry_when_not_failed(self): class DownloadAssetImageJobTests (line 158) | class DownloadAssetImageJobTests(TestCase): method setUp (line 159) | def setUp(self): method test_str_representation (line 166) | def test_str_representation(self): method test_batch_admin_url (line 169) | def test_batch_admin_url(self): method test_get_batch_admin_url (line 176) | def test_get_batch_admin_url(self): method test_get_batch_admin_url_error (line 184) | def test_get_batch_admin_url_error(self): method test_update_failure_history (line 188) | def test_update_failure_history(self): method test_update_status (line 196) | def test_update_status(self): method test_reset_for_retry (line 202) | def test_reset_for_retry(self): method test_reset_for_retry_when_not_failed (line 208) | def test_reset_for_retry_when_not_failed(self): FILE: importer/tests/test_tasks_assets.py class RedownloadImageTaskTests (line 29) | class RedownloadImageTaskTests(TestCase): method test_redownload_image_task (line 31) | def test_redownload_image_task(self, mock_download): class AssetImportTests (line 36) | class AssetImportTests(TestCase): method setUp (line 37) | def setUp(self): method tearDown (line 64) | def tearDown(self): method test_get_asset_urls_from_item_resources_empty (line 68) | def test_get_asset_urls_from_item_resources_empty(self): method test_get_asset_urls_from_item_resources_url_only (line 71) | def test_get_asset_urls_from_item_resources_url_only(self): method test_get_asset_urls_from_item_resources_valid (line 77) | def test_get_asset_urls_from_item_resources_valid(self): method test_get_asset_urls_from_item_resource_no_valid (line 110) | def test_get_asset_urls_from_item_resource_no_valid(self): method test_get_asset_urls_from_item_resource_no_jpgs (line 143) | def test_get_asset_urls_from_item_resource_no_jpgs(self): method test_download_asset_task (line 176) | def test_download_asset_task(self): method test_download_asset_valid (line 197) | def test_download_asset_valid(self): method test_download_asset_valid_checksum_fail (line 220) | def test_download_asset_valid_checksum_fail(self): method test_download_asset_valid_checksum_fail_without_flag (line 247) | def test_download_asset_valid_checksum_fail_without_flag(self): method test_download_asset_invalid (line 272) | def test_download_asset_invalid(self): method test_download_asset_retry_success (line 296) | def test_download_asset_retry_success(self): method test_download_asset_retry_maximum_exceeded (line 325) | def test_download_asset_retry_maximum_exceeded(self): method test_download_asset_retry_cant_reset (line 374) | def test_download_asset_retry_cant_reset(self): method test_download_asset_retry_invalid_failure_reason (line 405) | def test_download_asset_retry_invalid_failure_reason(self): method test_download_asset_manual_retry_success (line 435) | def test_download_asset_manual_retry_success(self): method test_download_url_from_asset (line 464) | def test_download_url_from_asset(self, mock_logger, mock_download): method test_valid_file_extension (line 486) | def test_valid_file_extension(self, mock_logger, mock_download): class BatchVerifyAssetImagesTaskCallbackTests (line 510) | class BatchVerifyAssetImagesTaskCallbackTests(TestCase): method setUp (line 511) | def setUp(self): method test_no_failures_detected_no_failures_in_results (line 516) | def test_no_failures_detected_no_failures_in_results(self, mock_task): method test_no_failures_detected_some_failures_in_results (line 524) | def test_no_failures_detected_some_failures_in_results(self, mock_task): method test_failures_already_detected (line 538) | def test_failures_already_detected(self, mock_task): class BatchVerifyAssetImagesTaskTests (line 546) | class BatchVerifyAssetImagesTaskTests(TestCase): method setUp (line 547) | def setUp(self): method test_no_jobs_remaining_with_failures (line 557) | def test_no_jobs_remaining_with_failures(self, mock_batch_download, mo... method test_no_jobs_remaining_no_failures (line 570) | def test_no_jobs_remaining_no_failures(self, mock_logger): method test_jobs_remaining (line 581) | def test_jobs_remaining(self, mock_task_s, mock_chord): class VerifyAssetImageTaskTests (line 589) | class VerifyAssetImageTaskTests(TestCase): method setUp (line 590) | def setUp(self): method test_asset_not_found (line 595) | def test_asset_not_found(self, mock_logger): method test_verify_job_not_found (line 601) | def test_verify_job_not_found(self, mock_logger): method test_verify_asset_image_task_success (line 609) | def test_verify_asset_image_task_success(self, mock_verify): method test_verify_asset_image_task_failure (line 619) | def test_verify_asset_image_task_failure(self, mock_verify): method test_create_verify_asset_image_job (line 629) | def test_create_verify_asset_image_job(self, mock_verify): method test_http_error_retries (line 642) | def test_http_error_retries(self, mock_verify): class CreateDownloadAssetImageJobTests (line 649) | class CreateDownloadAssetImageJobTests(TestCase): method setUp (line 650) | def setUp(self): method test_create_new_job (line 654) | def test_create_new_job(self): method test_existing_uncompleted_job_not_duplicated (line 662) | def test_existing_uncompleted_job_not_duplicated(self): method test_create_new_job_if_previous_failed (line 670) | def test_create_new_job_if_previous_failed(self): class VerifyAssetImageTests (line 684) | class VerifyAssetImageTests(TestCase): method setUp (line 685) | def setUp(self): method test_no_storage_image (line 693) | def test_no_storage_image(self, mock_create_job, mock_logger): method test_storage_image_missing (line 710) | def test_storage_image_missing(self, mock_exists, mock_create_job, moc... method test_storage_image_invalid (line 726) | def test_storage_image_invalid( method test_storage_image_verify_fail (line 743) | def test_storage_image_verify_fail( method test_storage_image_verification_success (line 763) | def test_storage_image_verification_success( class BatchDownloadAssetImagesTaskCallbackTests (line 780) | class BatchDownloadAssetImagesTaskCallbackTests(TestCase): method setUp (line 781) | def setUp(self): method test_callback_triggers_next_batch (line 786) | def test_callback_triggers_next_batch(self, mock_task): method test_callback_with_no_results (line 796) | def test_callback_with_no_results(self, mock_task): method test_callback_with_all_successful_results (line 806) | def test_callback_with_all_successful_results(self, mock_task): class BatchDownloadAssetImagesTaskTests (line 816) | class BatchDownloadAssetImagesTaskTests(TestCase): method setUp (line 817) | def setUp(self): method test_jobs_remaining (line 830) | def test_jobs_remaining(self, mock_task_s, mock_chord, mock_logger): method test_no_jobs_remaining (line 841) | def test_no_jobs_remaining(self, mock_logger): class DownloadAssetImageTaskTests (line 849) | class DownloadAssetImageTaskTests(TestCase): method setUp (line 850) | def setUp(self): method test_asset_not_found (line 855) | def test_asset_not_found(self, mock_logger): method test_download_job_not_found (line 861) | def test_download_job_not_found(self, mock_logger): method test_download_asset_image_task_success (line 869) | def test_download_asset_image_task_success(self, mock_download): method test_create_download_asset_image_job (line 877) | def test_create_download_asset_image_job(self, mock_download): method test_http_error_retries (line 890) | def test_http_error_retries(self, mock_download): FILE: importer/tests/test_tasks_collections.py class MockResponse (line 17) | class MockResponse: method __init__ (line 18) | def __init__(self, original_format="item"): method json (line 21) | def json(self): class MockCache (line 36) | class MockCache(BaseCache): method __init__ (line 37) | def __init__(self, host, *args, **kwargs): method get (line 41) | def get(self, key, default=None, version=None): class GetCollectionItemsTests (line 52) | class GetCollectionItemsTests(TestCase): method test_cache_miss (line 61) | def test_cache_miss(self, mock_get): method test_cache_hit (line 76) | def test_cache_hit(self): method test_ignored_format (line 90) | def test_ignored_format(self, mock_get): method test_multiple_items (line 106) | def test_multiple_items(self): method test_no_results (line 129) | def test_no_results(self): method test_get_info_exception (line 149) | def test_get_info_exception(self): class ImportCollectionTests (line 182) | class ImportCollectionTests(CreateTestUsers, TestCase): method setUp (line 183) | def setUp(self): method test_import_collection (line 188) | def test_import_collection(self, mock_get, mock_normalize): method test_import_collection_enqueues_item_tasks (line 200) | def test_import_collection_enqueues_item_tasks( class CollectionURLNormalizationTests (line 223) | class CollectionURLNormalizationTests(TestCase): method test_basic_normalization (line 224) | def test_basic_normalization(self): method test_extra_querystring_parameters (line 232) | def test_extra_querystring_parameters(self): method test_conflicting_querystring_parameters (line 240) | def test_conflicting_querystring_parameters(self): FILE: importer/tests/test_tasks_core.py class FetchAllUrlsTests (line 9) | class FetchAllUrlsTests(TestCase): method test_fetch_all_urls (line 11) | def test_fetch_all_urls(self, mock_map): FILE: importer/tests/test_tasks_decorators.py class TaskDecoratorTests (line 12) | class TaskDecoratorTests(TestCase): method test_update_task_status (line 13) | def test_update_task_status(self): method test_update_task_status_retry_path_sets_last_started_and_task_id (line 89) | def test_update_task_status_retry_path_sets_last_started_and_task_id(s... method test_update_task_status_sets_image_failure_reason (line 122) | def test_update_task_status_sets_image_failure_reason(self): FILE: importer/tests/test_tasks_images.py class RedownloadImageTaskTests (line 26) | class RedownloadImageTaskTests(TestCase): method test_redownload_image_task (line 28) | def test_redownload_image_task(self, mock_download): class BatchVerifyAssetImagesTaskCallbackTests (line 33) | class BatchVerifyAssetImagesTaskCallbackTests(TestCase): method setUp (line 34) | def setUp(self): method test_no_failures_detected_no_failures_in_results (line 39) | def test_no_failures_detected_no_failures_in_results(self, mock_task): method test_no_failures_detected_some_failures_in_results (line 47) | def test_no_failures_detected_some_failures_in_results(self, mock_task): method test_failures_already_detected (line 61) | def test_failures_already_detected(self, mock_task): class BatchVerifyAssetImagesTaskTests (line 69) | class BatchVerifyAssetImagesTaskTests(TestCase): method setUp (line 70) | def setUp(self): method test_no_jobs_remaining_with_failures (line 80) | def test_no_jobs_remaining_with_failures(self, mock_batch_download, mo... method test_no_jobs_remaining_no_failures (line 93) | def test_no_jobs_remaining_no_failures(self, mock_logger): method test_jobs_remaining (line 104) | def test_jobs_remaining(self, mock_task_s, mock_chord): class VerifyAssetImageTaskTests (line 112) | class VerifyAssetImageTaskTests(TestCase): method setUp (line 113) | def setUp(self): method test_asset_not_found (line 118) | def test_asset_not_found(self, mock_logger): method test_verify_job_not_found (line 124) | def test_verify_job_not_found(self, mock_logger): method test_verify_asset_image_task_success (line 132) | def test_verify_asset_image_task_success(self, mock_verify): method test_verify_asset_image_task_failure (line 142) | def test_verify_asset_image_task_failure(self, mock_verify): method test_create_verify_asset_image_job (line 152) | def test_create_verify_asset_image_job(self, mock_verify): method test_http_error_retries (line 165) | def test_http_error_retries(self, mock_verify): class CreateDownloadAssetImageJobTests (line 172) | class CreateDownloadAssetImageJobTests(TestCase): method setUp (line 173) | def setUp(self): method test_create_new_job (line 177) | def test_create_new_job(self): method test_existing_uncompleted_job_not_duplicated (line 185) | def test_existing_uncompleted_job_not_duplicated(self): method test_create_new_job_if_previous_failed (line 193) | def test_create_new_job_if_previous_failed(self): class VerifyAssetImageTests (line 207) | class VerifyAssetImageTests(TestCase): method setUp (line 208) | def setUp(self): method test_no_storage_image (line 216) | def test_no_storage_image(self, mock_create_job, mock_logger): method test_storage_image_missing (line 231) | def test_storage_image_missing(self, mock_exists, mock_create_job, moc... method test_storage_image_invalid (line 247) | def test_storage_image_invalid( method test_storage_image_verify_fail (line 264) | def test_storage_image_verify_fail( method test_storage_image_verification_success (line 286) | def test_storage_image_verification_success( class BatchDownloadAssetImagesTaskCallbackTests (line 303) | class BatchDownloadAssetImagesTaskCallbackTests(TestCase): method setUp (line 304) | def setUp(self): method test_callback_triggers_next_batch (line 309) | def test_callback_triggers_next_batch(self, mock_task): method test_callback_with_no_results (line 319) | def test_callback_with_no_results(self, mock_task): method test_callback_with_all_successful_results (line 329) | def test_callback_with_all_successful_results(self, mock_task): class BatchDownloadAssetImagesTaskTests (line 339) | class BatchDownloadAssetImagesTaskTests(TestCase): method setUp (line 340) | def setUp(self): method test_jobs_remaining (line 353) | def test_jobs_remaining(self, mock_task_s, mock_chord, mock_logger): method test_no_jobs_remaining (line 364) | def test_no_jobs_remaining(self, mock_logger): class DownloadAssetImageTaskTests (line 372) | class DownloadAssetImageTaskTests(TestCase): method setUp (line 373) | def setUp(self): method test_asset_not_found (line 378) | def test_asset_not_found(self, mock_logger): method test_download_job_not_found (line 384) | def test_download_job_not_found(self, mock_logger): method test_download_asset_image_task_success (line 392) | def test_download_asset_image_task_success(self, mock_download): method test_create_download_asset_image_job (line 400) | def test_create_download_asset_image_job(self, mock_download): method test_http_error_retries (line 413) | def test_http_error_retries(self, mock_download): FILE: importer/tests/test_tasks_items.py class ImportItemCountFromUrlTests (line 35) | class ImportItemCountFromUrlTests(TestCase): method mocked_requests_get (line 36) | def mocked_requests_get(*args, **kwargs): method test_import_item_count_from_url (line 59) | def test_import_item_count_from_url(self, mock_get): method test_unhandled_exception_importing (line 65) | def test_unhandled_exception_importing(self): class ImportItemsIntoProjectFromUrlTests (line 84) | class ImportItemsIntoProjectFromUrlTests(CreateTestUsers, TestCase): method setUp (line 85) | def setUp(self): method test_no_match (line 90) | def test_no_match(self, mock_task): method test_item (line 98) | def test_item(self, mock_task): method test_other_url_type (line 106) | def test_other_url_type(self, mock_task): class GetItemIdFromItemURLTests (line 117) | class GetItemIdFromItemURLTests(TestCase): method test_get_item_id_from_item_url_with_slash (line 118) | def test_get_item_id_from_item_url_with_slash(self): method test_get_item_id_from_item_url_without_slash (line 126) | def test_get_item_id_from_item_url_without_slash(self): class GetItemInfoFromResultTests (line 135) | class GetItemInfoFromResultTests(TestCase): method test_no_image_url (line 136) | def test_no_image_url(self): method test_no_match (line 146) | def test_no_match(self): method test_match (line 157) | def test_match(self): method test_ignored_format (line 170) | def test_ignored_format(self): class CreateItemImportTaskTests (line 188) | class CreateItemImportTaskTests(TestCase): method setUp (line 189) | def setUp(self): method test_create_item_import_task_http_error (line 204) | def test_create_item_import_task_http_error(self, get_mock): method test_create_item_import_task_new_item (line 211) | def test_create_item_import_task_new_item(self, get_mock): method test_create_item_import_task_existing_item_missing_assets (line 224) | def test_create_item_import_task_existing_item_missing_assets(self, ge... method test_create_item_import_task_existing_item_no_missing_assets (line 252) | def test_create_item_import_task_existing_item_no_missing_assets(self,... method test_create_item_import_task_existing_item_redownload (line 286) | def test_create_item_import_task_existing_item_redownload(self, get_mo... method test_create_item_import_task_full_clean_exception_updates_status_and_reraises (line 310) | def test_create_item_import_task_full_clean_exception_updates_status_a... method test_create_item_import_task_save_exception_updates_status_and_reraises (line 339) | def test_create_item_import_task_save_exception_updates_status_and_rer... class ItemImportTests (line 391) | class ItemImportTests(TestCase): method setUp (line 392) | def setUp(self): method test_import_item_task (line 397) | def test_import_item_task(self): method test_import_item (line 404) | def test_import_item(self): method test_populate_item_from_data (line 446) | def test_populate_item_from_data(self): method test_populate_item_from_data_handles_exception_and_returns_none (line 461) | def test_populate_item_from_data_handles_exception_and_returns_none(se... class DownloadItemThumbnailTests (line 487) | class DownloadItemThumbnailTests(TestCase): class FakeResponse (line 488) | class FakeResponse: method __init__ (line 491) | def __init__(self, content, content_type="image/png", on_iter=None): method __enter__ (line 497) | def __enter__(self): method __exit__ (line 500) | def __exit__(self, exc_type, exc, tb): method raise_for_status (line 503) | def raise_for_status(self): method iter_content (line 506) | def iter_content(self, chunk_size=64 * 1024): method setUp (line 512) | def setUp(self): method tearDown (line 517) | def tearDown(self): method make_image_bytes (line 521) | def make_image_bytes(self, fmt="PNG", size=(2, 2), color=(1, 2, 3)): method test_skip_when_already_present_and_not_force (line 527) | def test_skip_when_already_present_and_not_force(self): method test_success_with_content_type_extension (line 539) | def test_success_with_content_type_extension(self): method test_fallback_extension_via_pillow_sniff_when_guess_is_bin (line 555) | def test_fallback_extension_via_pillow_sniff_when_guess_is_bin(self): method test_invalid_image_raises_value_error (line 573) | def test_invalid_image_raises_value_error(self): method test_requests_exception_propagates (line 585) | def test_requests_exception_propagates(self): method test_race_present_after_download_skips_final_save (line 594) | def test_race_present_after_download_skips_final_save(self): method test_force_overwrite_path_runs_and_sets_thumbnail (line 616) | def test_force_overwrite_path_runs_and_sets_thumbnail(self): method test_stream_with_empty_chunk_is_skipped (line 633) | def test_stream_with_empty_chunk_is_skipped(self): method test_guess_extension_uses_url_path_extension_lowercases (line 668) | def test_guess_extension_uses_url_path_extension_lowercases(self): method test_guess_extension_returns_bin_when_no_ext_and_no_content_type (line 674) | def test_guess_extension_returns_bin_when_no_ext_and_no_content_type(s... method test_header_guess_none_uses_url_extension (line 681) | def test_header_guess_none_uses_url_extension(self, _guess): class GetAssetUrlsFromItemResourcesTests (line 695) | class GetAssetUrlsFromItemResourcesTests(TestCase): method test_empty_resources (line 696) | def test_empty_resources(self): method test_missing_item_resource_url_key (line 701) | def test_missing_item_resource_url_key(self): method test_files_key_missing (line 722) | def test_files_key_missing(self): method test_picks_largest_jpeg_when_present (line 728) | def test_picks_largest_jpeg_when_present(self): method test_falls_back_to_largest_gif_when_no_jpeg (line 754) | def test_falls_back_to_largest_gif_when_no_jpeg(self): method test_variants_missing_required_keys_are_ignored (line 787) | def test_variants_missing_required_keys_are_ignored(self): method test_no_candidates_or_backups_skips_appending (line 809) | def test_no_candidates_or_backups_skips_appending(self): FILE: importer/tests/test_utils.py class CreateVerifyAssetImageJobBatchTests (line 12) | class CreateVerifyAssetImageJobBatchTests(TestCase): method setUp (line 13) | def setUp(self): method test_create_jobs_single_batch (line 23) | def test_create_jobs_single_batch(self, mock_task): method test_create_jobs_multiple_batches (line 38) | def test_create_jobs_multiple_batches(self, mock_task): method test_no_assets_provided (line 55) | def test_no_assets_provided(self, mock_task): class ExcelUtilsTests (line 68) | class ExcelUtilsTests(TestCase): class _Cell (line 69) | class _Cell: method __init__ (line 70) | def __init__(self, data_type, value): class _Worksheet (line 74) | class _Worksheet: method __init__ (line 75) | def __init__(self, rows): method rows (line 80) | def rows(self): class _Workbook (line 83) | class _Workbook: method __init__ (line 84) | def __init__(self, worksheets): method test_slurp_excel_single_worksheet_single_row (line 88) | def test_slurp_excel_single_worksheet_single_row(self, load_mock): method test_slurp_excel_multiple_worksheets_multiple_rows (line 107) | def test_slurp_excel_multiple_worksheets_multiple_rows(self, load_mock): method test_clean_cell_value_trims_strings (line 140) | def test_clean_cell_value_trims_strings(self): method test_clean_cell_value_passthrough_non_strings (line 144) | def test_clean_cell_value_passthrough_non_strings(self): FILE: importer/tests/utils.py function create_import_job (line 13) | def create_import_job(*, project=None, **kwargs): function create_import_item (line 22) | def create_import_item(item=None, project=None, import_job=None, **kwargs): function create_import_asset (line 35) | def create_import_asset( function create_verify_asset_image_job (line 65) | def create_verify_asset_image_job(asset=None, batch=None, **kwargs): function create_download_asset_image_job (line 76) | def create_download_asset_image_job(asset=None, batch=None, **kwargs): FILE: importer/utils/excel.py function slurp_excel (line 7) | def slurp_excel(filename: str) -> list[dict[str, Any]]: function clean_cell_value (line 39) | def clean_cell_value(cell: Cell) -> Any: FILE: importer/utils/verify_images.py function create_verify_asset_image_job_batch (line 11) | def create_verify_asset_image_job_batch( FILE: locustfile.py function _on_locust_init (line 58) | def _on_locust_init(environment, **_): function _on_quitting (line 85) | def _on_quitting(environment, **_): function _trigger_global_abort (line 103) | def _trigger_global_abort( function _is_local (line 156) | def _is_local(path_or_url: str, base: str) -> bool: class _ResourceParser (line 167) | class _ResourceParser(HTMLParser): method __init__ (line 170) | def __init__(self, base_url: str): method handle_starttag (line 175) | def handle_starttag(self, tag, attrs): class _AssetPageParser (line 188) | class _AssetPageParser(HTMLParser): method __init__ (line 194) | def __init__(self, base_url: str): method handle_starttag (line 204) | def handle_starttag(self, tag, attrs): method handle_endtag (line 232) | def handle_endtag(self, tag): function _random_text (line 237) | def _random_text(min_len=10, max_len=200) -> str: class BaseBrowsingUser (line 247) | class BaseBrowsingUser(HttpUser): method _fatal_dump_and_quit (line 267) | def _fatal_dump_and_quit(self, page_url: str, html: str) -> None: method _after_request_ajax (line 291) | def _after_request_ajax(self): method _get (line 296) | def _get(self, path_or_url: str, *, page: bool = True, **kwargs): method _post (line 302) | def _post(self, path_or_url: str, **kwargs): method _load_homepage_and_resources (line 305) | def _load_homepage_and_resources(self, *, name_suffix: str = ""): method _parse_asset_page_and_reserve (line 321) | def _parse_asset_page_and_reserve(self, target_path: str) -> None: method _ensure_csrf (line 388) | def _ensure_csrf(self, target_path: str | None) -> str | None: method _follow_next (line 407) | def _follow_next(self, redirect_path: str, label: str) -> str | None: method _post_then_get_same_page (line 452) | def _post_then_get_same_page( method _review_decision (line 476) | def _review_decision(self, target_path: str, decision: str) -> None: method browse_and_submit (line 493) | def browse_and_submit(self): class AnonUser (line 567) | class AnonUser(BaseBrowsingUser): method on_start (line 570) | def on_start(self): class AuthUser (line 574) | class AuthUser(BaseBrowsingUser): method _pick_fixture_user (line 581) | def _pick_fixture_user(self): method _login_once (line 588) | def _login_once(self, login_url: str, referer: str) -> bool: method on_start (line 624) | def on_start(self): FILE: prometheus_metrics/apps.py class PrometheusMetricsConfig (line 4) | class PrometheusMetricsConfig(AppConfig): FILE: prometheus_metrics/middleware.py class PrometheusBeforeMiddleware (line 18) | class PrometheusBeforeMiddleware(MiddlewareMixin): method process_request (line 19) | def process_request(self, request): method process_response (line 22) | def process_response(self, request, response): FILE: prometheus_metrics/models.py function MetricsModelMixin (line 14) | def MetricsModelMixin(name): FILE: prometheus_metrics/views.py class MetricsView (line 6) | class MetricsView(View): method get (line 7) | def get(self, request, *args, **kwargs): FILE: tools/readme_symbol_check.py function collect_defined_symbols (line 27) | def collect_defined_symbols(py_path: Path) -> List[str]: function read_readme_text (line 40) | def read_readme_text(readme_path: Path) -> str: function check_readme (line 44) | def check_readme(readme_path: Path) -> int: function load_readmes_from_config (line 63) | def load_readmes_from_config() -> List[Path]: function main (line 90) | def main() -> None: