SYMBOL INDEX (2534 symbols across 230 files) FILE: bookmarks/admin.py class TaskPaginator (line 29) | class TaskPaginator(Paginator): method __init__ (line 30) | def __init__(self): method count (line 35) | def count(self): method page (line 38) | def page(self, number): method enqueued_items (line 48) | def enqueued_items(self, limit, offset): function background_task_view (line 62) | def background_task_view(request): class LinkdingAdminSite (line 77) | class LinkdingAdminSite(AdminSite): method get_urls (line 81) | def get_urls(self): method get_app_list (line 88) | def get_app_list(self, request, app_label=None): class AdminBookmark (line 108) | class AdminBookmark(admin.ModelAdmin): method get_actions (line 133) | def get_actions(self, request): method delete_selected_bookmarks (line 141) | def delete_selected_bookmarks(self, request, queryset: QuerySet): method archive_selected_bookmarks (line 156) | def archive_selected_bookmarks(self, request, queryset: QuerySet): method unarchive_selected_bookmarks (line 171) | def unarchive_selected_bookmarks(self, request, queryset: QuerySet): method mark_as_read (line 186) | def mark_as_read(self, request, queryset: QuerySet): method mark_as_unread (line 200) | def mark_as_unread(self, request, queryset: QuerySet): class AdminBookmarkAsset (line 215) | class AdminBookmarkAsset(admin.ModelAdmin): method custom_display_name (line 217) | def custom_display_name(self, obj): class AdminTag (line 228) | class AdminTag(admin.ModelAdmin): method get_queryset (line 235) | def get_queryset(self, request): method bookmarks_count (line 240) | def bookmarks_count(self, obj): method delete_unused_tags (line 245) | def delete_unused_tags(self, request, queryset: QuerySet): class AdminBookmarkBundle (line 272) | class AdminBookmarkBundle(admin.ModelAdmin): class AdminUserProfileInline (line 289) | class AdminUserProfileInline(admin.StackedInline): class AdminCustomUser (line 297) | class AdminCustomUser(UserAdmin): method get_inline_instances (line 300) | def get_inline_instances(self, request, obj=None): class AdminToast (line 306) | class AdminToast(admin.ModelAdmin): class AdminFeedToken (line 312) | class AdminFeedToken(admin.ModelAdmin): class ApiTokenAdminForm (line 318) | class ApiTokenAdminForm(forms.ModelForm): class Meta (line 319) | class Meta: class AdminApiToken (line 324) | class AdminApiToken(admin.ModelAdmin): FILE: bookmarks/api/auth.py class LinkdingTokenAuthentication (line 8) | class LinkdingTokenAuthentication(TokenAuthentication): method authenticate (line 17) | def authenticate(self, request): FILE: bookmarks/api/routes.py class BookmarkViewSet (line 36) | class BookmarkViewSet( method get_permissions (line 47) | def get_permissions(self): method get_queryset (line 58) | def get_queryset(self): method get_serializer_context (line 76) | def get_serializer_context(self): method archived (line 87) | def archived(self, request: HttpRequest): method shared (line 91) | def shared(self, request: HttpRequest): method archive (line 95) | def archive(self, request: HttpRequest, pk): method unarchive (line 101) | def unarchive(self, request: HttpRequest, pk): method check (line 107) | def check(self, request: HttpRequest): method singlefile (line 139) | def singlefile(self, request: HttpRequest): class BookmarkAssetViewSet (line 171) | class BookmarkAssetViewSet( method get_queryset (line 180) | def get_queryset(self): method get_serializer_context (line 188) | def get_serializer_context(self): method download (line 192) | def download(self, request: HttpRequest, bookmark_id, pk): method upload (line 217) | def upload(self, request: HttpRequest, bookmark_id): method perform_destroy (line 245) | def perform_destroy(self, instance): class TagViewSet (line 249) | class TagViewSet( method get_queryset (line 258) | def get_queryset(self): method get_serializer_context (line 262) | def get_serializer_context(self): class UserViewSet (line 266) | class UserViewSet(viewsets.GenericViewSet): method profile (line 268) | def profile(self, request: HttpRequest): class BookmarkBundleViewSet (line 272) | class BookmarkBundleViewSet( method get_queryset (line 283) | def get_queryset(self): method get_serializer_context (line 287) | def get_serializer_context(self): method perform_destroy (line 290) | def perform_destroy(self, instance): FILE: bookmarks/api/serializers.py class TagListField (line 20) | class TagListField(serializers.ListField): class BookmarkListSerializer (line 24) | class BookmarkListSerializer(ListSerializer): method to_representation (line 25) | def to_representation(self, data): class EmtpyField (line 32) | class EmtpyField(serializers.ReadOnlyField): method to_representation (line 33) | def to_representation(self, value): class BookmarkBundleSerializer (line 37) | class BookmarkBundleSerializer(serializers.ModelSerializer): class Meta (line 38) | class Meta: method create (line 59) | def create(self, validated_data): class BookmarkSerializer (line 65) | class BookmarkSerializer(serializers.ModelSerializer): class Meta (line 66) | class Meta: method get_favicon_url (line 109) | def get_favicon_url(self, obj: Bookmark): method get_preview_image_url (line 117) | def get_preview_image_url(self, obj: Bookmark): method get_web_archive_snapshot_url (line 125) | def get_web_archive_snapshot_url(self, obj: Bookmark): method create (line 131) | def create(self, validated_data): method update (line 152) | def update(self, instance: Bookmark, validated_data): method validate (line 162) | def validate(self, attrs): class BookmarkAssetSerializer (line 181) | class BookmarkAssetSerializer(serializers.ModelSerializer): class Meta (line 182) | class Meta: class TagSerializer (line 196) | class TagSerializer(serializers.ModelSerializer): class Meta (line 197) | class Meta: method create (line 202) | def create(self, validated_data): class UserProfileSerializer (line 206) | class UserProfileSerializer(serializers.ModelSerializer): class Meta (line 207) | class Meta: FILE: bookmarks/apps.py class BookmarksConfig (line 4) | class BookmarksConfig(AppConfig): method ready (line 7) | def ready(self): FILE: bookmarks/context_processors.py function toasts (line 5) | def toasts(request): function app_version (line 20) | def app_version(request): FILE: bookmarks/feeds.py class FeedContext (line 15) | class FeedContext: function sanitize (line 21) | def sanitize(text: str): class BaseBookmarksFeed (line 31) | class BaseBookmarksFeed(Feed): method get_object (line 32) | def get_object(self, request, feed_key: str | None): method get_query_set (line 48) | def get_query_set(self, feed_token: FeedToken, search: BookmarkSearch): method items (line 51) | def items(self, context: FeedContext): method item_title (line 57) | def item_title(self, item: Bookmark): method item_description (line 60) | def item_description(self, item: Bookmark): method item_link (line 63) | def item_link(self, item: Bookmark): method item_pubdate (line 66) | def item_pubdate(self, item: Bookmark): method item_categories (line 69) | def item_categories(self, item: Bookmark): class AllBookmarksFeed (line 73) | class AllBookmarksFeed(BaseBookmarksFeed): method get_query_set (line 77) | def get_query_set(self, feed_token: FeedToken, search: BookmarkSearch): method link (line 80) | def link(self, context: FeedContext): class UnreadBookmarksFeed (line 84) | class UnreadBookmarksFeed(BaseBookmarksFeed): method get_query_set (line 88) | def get_query_set(self, feed_token: FeedToken, search: BookmarkSearch): method link (line 93) | def link(self, context: FeedContext): class SharedBookmarksFeed (line 97) | class SharedBookmarksFeed(BaseBookmarksFeed): method get_query_set (line 101) | def get_query_set(self, feed_token: FeedToken, search: BookmarkSearch): method link (line 106) | def link(self, context: FeedContext): class PublicSharedBookmarksFeed (line 110) | class PublicSharedBookmarksFeed(BaseBookmarksFeed): method get_object (line 114) | def get_object(self, request): method get_query_set (line 117) | def get_query_set(self, feed_token: FeedToken, search: BookmarkSearch): method link (line 120) | def link(self, context: FeedContext): FILE: bookmarks/forms.py class BookmarkForm (line 31) | class BookmarkForm(forms.ModelForm): class Meta (line 44) | class Meta: method __init__ (line 57) | def __init__(self, request: HttpRequest, instance: Bookmark = None): method is_auto_close (line 80) | def is_auto_close(self): method has_notes (line 86) | def has_notes(self): method save (line 91) | def save(self, commit=False): method clean_url (line 99) | def clean_url(self): function convert_tag_string (line 118) | def convert_tag_string(tag_string: str): class TagForm (line 124) | class TagForm(forms.ModelForm): class Meta (line 127) | class Meta: method __init__ (line 131) | def __init__(self, user, *args, **kwargs): method clean_name (line 135) | def clean_name(self): method save (line 149) | def save(self, commit=True): class TagMergeForm (line 161) | class TagMergeForm(forms.Form): method __init__ (line 165) | def __init__(self, user, *args, **kwargs): method clean_target_tag (line 169) | def clean_target_tag(self): method clean_merge_tags (line 189) | def clean_merge_tags(self): class BookmarkBundleForm (line 215) | class BookmarkBundleForm(forms.ModelForm): class Meta (line 232) | class Meta: method __init__ (line 244) | def __init__(self, *args, **kwargs): class BookmarkSearchForm (line 248) | class BookmarkSearchForm(forms.Form): method __init__ (line 275) | def __init__( class UserProfileForm (line 306) | class UserProfileForm(forms.ModelForm): class Meta (line 307) | class Meta: class GlobalSettingsForm (line 371) | class GlobalSettingsForm(forms.ModelForm): class Meta (line 372) | class Meta: method __init__ (line 381) | def __init__(self, *args, **kwargs): FILE: bookmarks/frontend/api.js class Api (line 1) | class Api { method constructor (line 2) | constructor(baseUrl) { method listBookmarks (line 6) | listBookmarks(search, options = { limit: 100, offset: 0, path: "" }) { method getTags (line 22) | getTags(options = { limit: 100, offset: 0 }) { FILE: bookmarks/frontend/components/bookmark-page.js class BookmarkPage (line 3) | class BookmarkPage extends HeadlessElement { method init (line 4) | init() { method disconnectedCallback (line 17) | disconnectedCallback() { method update (line 21) | update() { method updateTooltips (line 29) | updateTooltips(items) { method updateNotesToggles (line 42) | updateNotesToggles(items, oldItems) { method onToggleNotes (line 58) | onToggleNotes(event) { method updateBulkEdit (line 64) | updateBulkEdit() { method onToggleBulkEdit (line 110) | onToggleBulkEdit() { method onBulkActionChange (line 114) | onBulkActionChange() { method onToggleAll (line 118) | onToggleAll() { method onToggleBookmark (line 127) | onToggleBookmark() { method updateSelectAcross (line 136) | updateSelectAcross(allChecked) { method updateExecuteButton (line 145) | updateExecuteButton() { FILE: bookmarks/frontend/components/clear-button.js class ClearButton (line 3) | class ClearButton extends HeadlessElement { method init (line 4) | init() { method update (line 19) | update() { method clear (line 23) | clear() { FILE: bookmarks/frontend/components/confirm-dropdown.js function nextConfirmId (line 7) | function nextConfirmId() { function removeAll (line 11) | function removeAll() { class ConfirmDropdown (line 44) | class ConfirmDropdown extends LitElement { method constructor (line 45) | constructor() { method createRenderRoot (line 50) | createRenderRoot() { method firstUpdated (line 54) | firstUpdated(props) { method render (line 69) | render() { method confirm (line 90) | confirm() { method close (line 95) | close() { FILE: bookmarks/frontend/components/details-modal.js class DetailsModal (line 4) | class DetailsModal extends Modal { method doClose (line 5) | doClose() { FILE: bookmarks/frontend/components/dev-tool.js class DevTool (line 3) | class DevTool extends LitElement { method constructor (line 116) | constructor() { method connectedCallback (line 123) | connectedCallback() { method disconnectedCallback (line 130) | disconnectedCallback() { method _onOutsideClick (line 135) | _onOutsideClick(e) { method _toggle (line 142) | _toggle() { method _handleChange (line 151) | _handleChange(key, value) { method _renderField (line 160) | _renderField(field) { method _submitForm (line 200) | async _submitForm() { method render (line 228) | render() { FILE: bookmarks/frontend/components/dropdown.js class Dropdown (line 3) | class Dropdown extends HeadlessElement { method constructor (line 4) | constructor() { method init (line 13) | init() { method disconnectedCallback (line 25) | disconnectedCallback() { method open (line 29) | open() { method close (line 36) | close() { method onClick (line 43) | onClick() { method onOutsideClick (line 51) | onOutsideClick(event) { method onEscape (line 57) | onEscape(event) { method onFocusOut (line 65) | onFocusOut(event) { FILE: bookmarks/frontend/components/filter-drawer.js class FilterDrawerTrigger (line 6) | class FilterDrawerTrigger extends HeadlessElement { method init (line 7) | init() { method onClick (line 12) | onClick() { class FilterDrawer (line 20) | class FilterDrawer extends Modal { method connectedCallback (line 21) | connectedCallback() { method disconnectedCallback (line 71) | disconnectedCallback() { method mapHeading (line 77) | mapHeading(container, from, to) { method teleport (line 86) | teleport() { method teleportBack (line 93) | teleportBack() { method doClose (line 100) | doClose() { FILE: bookmarks/frontend/components/form.js class Form (line 3) | class Form extends HeadlessElement { method constructor (line 4) | constructor() { method init (line 10) | init() { method disconnectedCallback (line 23) | disconnectedCallback() { method onChange (line 29) | onChange(event) { method onKeyDown (line 35) | onKeyDown(event) { method initFormReset (line 48) | initFormReset() { method resetForm (line 59) | resetForm() { FILE: bookmarks/frontend/components/modal.js class Modal (line 4) | class Modal extends HeadlessElement { method init (line 5) | init() { method disconnectedCallback (line 20) | disconnectedCallback() { method setupScrollLock (line 25) | setupScrollLock() { method removeScrollLock (line 29) | removeScrollLock() { method onKeyDown (line 33) | onKeyDown(event) { method onClose (line 50) | onClose(event) { method doClose (line 64) | doClose() { FILE: bookmarks/frontend/components/search-autocomplete.js class SearchAutocomplete (line 14) | class SearchAutocomplete extends TurboLitElement { method constructor (line 30) | constructor() { method firstUpdated (line 52) | firstUpdated() { method disconnectedCallback (line 67) | disconnectedCallback() { method handleFocus (line 72) | handleFocus() { method handleBlur (line 76) | handleBlur() { method handleInput (line 81) | handleInput(e) { method handleKeyDown (line 86) | handleKeyDown(e) { method open (line 118) | open() { method close (line 123) | close() { method hasSuggestions (line 130) | hasSuggestions() { method loadSuggestions (line 134) | async loadSuggestions() { method updateSuggestions (line 208) | updateSuggestions(recentSearches, bookmarks, tagSuggestions) { method completeSuggestion (line 220) | completeSuggestion(suggestion) { method updateSelection (line 240) | updateSelection(dir) { method renderSuggestions (line 258) | renderSuggestions(suggestions, title) { method render (line 285) | render() { FILE: bookmarks/frontend/components/tag-autocomplete.js class TagAutocomplete (line 7) | class TagAutocomplete extends TurboLitElement { method constructor (line 22) | constructor() { method firstUpdated (line 38) | firstUpdated() { method disconnectedCallback (line 49) | disconnectedCallback() { method handleFocus (line 54) | handleFocus() { method handleBlur (line 58) | handleBlur() { method handleInput (line 63) | async handleInput(e) { method handleKeyDown (line 82) | handleKeyDown(e) { method open (line 102) | open() { method close (line 108) | close() { method complete (line 115) | complete(suggestion) { method updateSelection (line 128) | updateSelection(dir) { method render (line 149) | render() { FILE: bookmarks/frontend/components/upload-button.js class UploadButton (line 3) | class UploadButton extends HeadlessElement { method init (line 4) | init() { method onClick (line 15) | onClick(event) { method onChange (line 20) | onChange() { FILE: bookmarks/frontend/utils/element.js class HeadlessElement (line 12) | class HeadlessElement extends HTMLElement { method connectedCallback (line 13) | connectedCallback() { method init (line 27) | init() { class TurboLitElement (line 53) | class TurboLitElement extends LitElement { method constructor (line 54) | constructor() { method createRenderRoot (line 59) | createRenderRoot() { method connectedCallback (line 63) | connectedCallback() { method disconnectedCallback (line 68) | disconnectedCallback() { method __prepareForCache (line 73) | __prepareForCache() { FILE: bookmarks/frontend/utils/focus.js function isKeyboardActive (line 19) | function isKeyboardActive() { class FocusTrapController (line 23) | class FocusTrapController { method constructor (line 24) | constructor(element) { method destroy (line 39) | destroy() { method onKeyDown (line 43) | onKeyDown(event) { function setAfterPageLoadFocusTarget (line 64) | function setAfterPageLoadFocusTarget(...targets) { function programmaticFocus (line 68) | function programmaticFocus(element) { FILE: bookmarks/frontend/utils/input.js function debounce (line 1) | function debounce(callback, delay = 250) { function clampText (line 12) | function clampText(text, maxChars = 30) { function getCurrentWordBounds (line 18) | function getCurrentWordBounds(input) { function getCurrentWord (line 33) | function getCurrentWord(input) { FILE: bookmarks/frontend/utils/position-controller.js class PositionController (line 10) | class PositionController { method constructor (line 11) | constructor(options) { method enable (line 21) | enable() { method disable (line 29) | disable() { method updatePosition (line 36) | updatePosition() { FILE: bookmarks/frontend/utils/search-history.js constant SEARCH_HISTORY_KEY (line 1) | const SEARCH_HISTORY_KEY = "searchHistory"; constant MAX_ENTRIES (line 2) | const MAX_ENTRIES = 30; class SearchHistory (line 4) | class SearchHistory { method getHistory (line 5) | getHistory() { method pushCurrent (line 14) | pushCurrent() { method push (line 25) | push(search) { method getRecentSearches (line 42) | getRecentSearches(query, max) { FILE: bookmarks/frontend/utils/tag-cache.js class TagCache (line 3) | class TagCache { method constructor (line 4) | constructor(api) { method getTags (line 13) | getTags() { FILE: bookmarks/management/commands/backup.py class Command (line 7) | class Command(BaseCommand): method add_arguments (line 10) | def add_arguments(self, parser): method handle (line 13) | def handle(self, *args, **options): FILE: bookmarks/management/commands/create_initial_superuser.py class Command (line 10) | class Command(BaseCommand): method handle (line 13) | def handle(self, *args, **options): FILE: bookmarks/management/commands/enable_wal.py class Command (line 10) | class Command(BaseCommand): method handle (line 13) | def handle(self, *args, **options): FILE: bookmarks/management/commands/ensure_superuser.py class Command (line 5) | class Command(BaseCommand): method add_arguments (line 8) | def add_arguments(self, parser): method handle (line 13) | def handle(self, *args, **options): FILE: bookmarks/management/commands/full_backup.py class Command (line 9) | class Command(BaseCommand): method add_arguments (line 12) | def add_arguments(self, parser): method handle (line 15) | def handle(self, *args, **options): method backup_database (line 66) | def backup_database(self, backup_db_file): FILE: bookmarks/management/commands/generate_secret_key.py class Command (line 10) | class Command(BaseCommand): method handle (line 13) | def handle(self, *args, **options): FILE: bookmarks/management/commands/import_netscape.py class Command (line 7) | class Command(BaseCommand): method add_arguments (line 10) | def add_arguments(self, parser): method handle (line 16) | def handle(self, *args, **kwargs): FILE: bookmarks/management/commands/migrate_tasks.py class Command (line 9) | class Command(BaseCommand): method handle (line 12) | def handle(self, *args, **options): FILE: bookmarks/middlewares.py class CustomRemoteUserMiddleware (line 7) | class CustomRemoteUserMiddleware(RemoteUserMiddleware): class LinkdingMiddleware (line 17) | class LinkdingMiddleware: method __init__ (line 18) | def __init__(self, get_response): method __call__ (line 21) | def __call__(self, request): FILE: bookmarks/migrations/0001_initial.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0002_auto_20190629_2303.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0003_auto_20200913_0656.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0004_auto_20200926_1028.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0005_auto_20210103_1212.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0006_bookmark_is_archived.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0007_userprofile.py function forwards (line 8) | def forwards(apps, schema_editor): function reverse (line 20) | def reverse(apps, schema_editor): class Migration (line 24) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0008_userprofile_bookmark_date_display.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0009_bookmark_web_archive_snapshot_url.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0010_userprofile_bookmark_link_target.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0011_userprofile_web_archive_integration.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0012_toast.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0013_web_archive_optin_toast.py function forwards (line 11) | def forwards(apps, schema_editor): function reverse (line 21) | def reverse(apps, schema_editor): class Migration (line 25) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0014_alter_bookmark_unread.py function forwards (line 6) | def forwards(apps, schema_editor): function reverse (line 11) | def reverse(apps, schema_editor): class Migration (line 15) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0015_feedtoken.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0016_bookmark_shared.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0017_userprofile_enable_sharing.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0018_bookmark_favicon_file.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0019_userprofile_enable_favicons.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0020_userprofile_tag_search.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0021_userprofile_display_url.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0022_bookmark_notes.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0023_userprofile_permanent_notes.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0024_userprofile_enable_public_sharing.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0025_userprofile_search_preferences.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0026_userprofile_custom_css.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0027_userprofile_bookmark_description_display_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0028_userprofile_display_archive_bookmark_action_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0029_bookmark_list_actions_toast.py function forwards (line 11) | def forwards(apps, schema_editor): function reverse (line 21) | def reverse(apps, schema_editor): class Migration (line 25) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0030_bookmarkasset.py class Migration (line 7) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0031_userprofile_enable_automatic_html_snapshots.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0032_html_snapshots_hint_toast.py function forwards (line 11) | def forwards(apps, schema_editor): function reverse (line 21) | def reverse(apps, schema_editor): class Migration (line 25) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0033_userprofile_default_mark_unread.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0034_bookmark_preview_image_file_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0035_userprofile_tag_grouping.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0036_userprofile_auto_tagging_rules.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0037_globalsettings.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0038_globalsettings_guest_profile_user.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0039_globalsettings_enable_link_prefetch.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0040_userprofile_items_per_page_and_more.py class Migration (line 7) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0041_merge_metadata.py function forwards (line 10) | def forwards(apps, schema_editor): function reverse (line 24) | def reverse(apps, schema_editor): class Migration (line 28) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0042_userprofile_custom_css_hash.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0043_userprofile_collapse_side_panel.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0044_bookmark_latest_snapshot.py function forwards (line 8) | def forwards(apps, schema_editor): function reverse (line 23) | def reverse(apps, schema_editor): class Migration (line 27) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0045_userprofile_hide_bundles_bookmarkbundle.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0046_add_url_normalized_field.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0047_populate_url_normalized_field.py function populate_url_normalized (line 8) | def populate_url_normalized(apps, schema_editor): function reverse_populate_url_normalized (line 23) | def reverse_populate_url_normalized(apps, schema_editor): class Migration (line 28) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0048_userprofile_default_mark_shared.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0049_userprofile_legacy_search.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0050_new_search_toast.py function forwards (line 11) | def forwards(apps, schema_editor): function reverse (line 21) | def reverse(apps, schema_editor): class Migration (line 25) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0051_fix_normalized_url.py function fix_url_normalized (line 8) | def fix_url_normalized(apps, schema_editor): function reverse_fix_url_normalized (line 20) | def reverse_fix_url_normalized(apps, schema_editor): class Migration (line 24) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0052_apitoken.py class Migration (line 8) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0053_migrate_api_tokens.py function migrate_tokens_forward (line 5) | def migrate_tokens_forward(apps, schema_editor): function migrate_tokens_reverse (line 18) | def migrate_tokens_reverse(apps, schema_editor): class Migration (line 23) | class Migration(migrations.Migration): FILE: bookmarks/migrations/0054_bookmarkbundle_filter_shared_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: bookmarks/models.py class Tag (line 21) | class Tag(models.Model): method __str__ (line 26) | def __str__(self): function sanitize_tag_name (line 30) | def sanitize_tag_name(tag_name: str): function parse_tag_string (line 36) | def parse_tag_string(tag_string: str, delimiter: str = ","): function build_tag_string (line 49) | def build_tag_string(tag_names: list[str], delimiter: str = ","): class Bookmark (line 53) | class Bookmark(models.Model): method resolved_title (line 83) | def resolved_title(self): method resolved_description (line 90) | def resolved_description(self): method tag_names (line 94) | def tag_names(self): method save (line 98) | def save(self, *args, **kwargs): method __str__ (line 102) | def __str__(self): method query_existing (line 106) | def query_existing(owner: User, url: str) -> models.QuerySet: function bookmark_deleted (line 117) | def bookmark_deleted(sender, instance, **kwargs): class BookmarkAsset (line 129) | class BookmarkAsset(models.Model): method download_name (line 151) | def download_name(self): method save (line 158) | def save(self, *args, **kwargs): method __str__ (line 168) | def __str__(self): function bookmark_asset_deleted (line 173) | def bookmark_asset_deleted(sender, instance, **kwargs): class BookmarkBundle (line 183) | class BookmarkBundle(models.Model): method __str__ (line 220) | def __str__(self): class BookmarkSearch (line 224) | class BookmarkSearch: method __init__ (line 260) | def __init__( method is_modified (line 287) | def is_modified(self, param): method modified_params (line 292) | def modified_params(self): method modified_preferences (line 296) | def modified_preferences(self): method has_modifications (line 304) | def has_modifications(self): method has_modified_preferences (line 308) | def has_modified_preferences(self): method query_params (line 312) | def query_params(self): method preferences_dict (line 323) | def preferences_dict(self): method from_request (line 329) | def from_request(request: any, query_dict: QueryDict, preferences: dic... class UserProfile (line 346) | class UserProfile(models.Model): method save (line 462) | def save(self, *args, **kwargs): function create_user_profile (line 473) | def create_user_profile(sender, instance, created, **kwargs): function save_user_profile (line 479) | def save_user_profile(sender, instance, **kwargs): class Toast (line 483) | class Toast(models.Model): class FeedToken (line 490) | class FeedToken(models.Model): method save (line 503) | def save(self, *args, **kwargs): method generate_key (line 509) | def generate_key(cls): method __str__ (line 512) | def __str__(self): class ApiToken (line 516) | class ApiToken(models.Model): method save (line 526) | def save(self, *args, **kwargs): method generate_key (line 532) | def generate_key(cls): method __str__ (line 535) | def __str__(self): class GlobalSettings (line 539) | class GlobalSettings(models.Model): method get (line 559) | def get(cls): method save (line 566) | def save(self, *args, **kwargs): FILE: bookmarks/queries.py function query_bookmarks (line 33) | def query_bookmarks( function query_archived_bookmarks (line 41) | def query_archived_bookmarks( function query_shared_bookmarks (line 47) | def query_shared_bookmarks( function _convert_ast_to_q_object (line 60) | def _convert_ast_to_q_object(ast_node: SearchExpression, profile: UserPr... function _filter_search_query (line 122) | def _filter_search_query( function _filter_search_query_legacy (line 139) | def _filter_search_query_legacy( function _filter_bundle (line 176) | def _filter_bundle(query_set: QuerySet, bundle: BookmarkBundle) -> Query... function _base_bookmarks_query (line 227) | def _base_bookmarks_query( function query_bookmark_tags (line 308) | def query_bookmark_tags( function query_archived_bookmark_tags (line 318) | def query_archived_bookmark_tags( function query_shared_bookmark_tags (line 328) | def query_shared_bookmark_tags( function query_shared_bookmark_users (line 341) | def query_shared_bookmark_users( function get_user_tags (line 351) | def get_user_tags(user: User): function get_tags_for_query (line 355) | def get_tags_for_query(user: User, profile: UserProfile, query: str) -> ... function get_shared_tags_for_query (line 368) | def get_shared_tags_for_query( function parse_query_string (line 394) | def parse_query_string(query_string): FILE: bookmarks/services/assets.py class PdfTooLargeError (line 24) | class PdfTooLargeError(Exception): function create_snapshot_asset (line 28) | def create_snapshot_asset(bookmark: Bookmark) -> BookmarkAsset: function create_snapshot (line 40) | def create_snapshot(asset: BookmarkAsset): function _create_html_snapshot (line 55) | def _create_html_snapshot(asset: BookmarkAsset): function _create_pdf_snapshot (line 88) | def _create_pdf_snapshot(asset: BookmarkAsset): function upload_snapshot (line 145) | def upload_snapshot(bookmark: Bookmark, html: bytes): function upload_asset (line 170) | def upload_asset(bookmark: Bookmark, upload_file: UploadedFile): function remove_asset (line 221) | def remove_asset(asset: BookmarkAsset): function _generate_asset_filename (line 243) | def _generate_asset_filename( FILE: bookmarks/services/auto_tagging.py function get_tags (line 7) | def get_tags(script: str, url: str): function _path_matches (line 59) | def _path_matches(expected_path: str, actual_path: str) -> bool: function _domains_matches (line 63) | def _domains_matches(expected_domain: str, actual_domain: str) -> bool: function _qs_matches (line 70) | def _qs_matches(expected_qs: str, actual_qs: str) -> bool: function _fragment_matches (line 84) | def _fragment_matches(expected_fragment: str, actual_fragment: str) -> b... FILE: bookmarks/services/bookmarks.py function create_bookmark (line 12) | def create_bookmark( function update_bookmark (line 55) | def update_bookmark(bookmark: Bookmark, tag_string, current_user: User): function enhance_with_website_metadata (line 76) | def enhance_with_website_metadata(bookmark: Bookmark): function archive_bookmark (line 87) | def archive_bookmark(bookmark: Bookmark): function archive_bookmarks (line 94) | def archive_bookmarks(bookmark_ids: [int | str], current_user: User): function unarchive_bookmark (line 102) | def unarchive_bookmark(bookmark: Bookmark): function unarchive_bookmarks (line 109) | def unarchive_bookmarks(bookmark_ids: [int | str], current_user: User): function delete_bookmarks (line 117) | def delete_bookmarks(bookmark_ids: [int | str], current_user: User): function tag_bookmarks (line 123) | def tag_bookmarks(bookmark_ids: [int | str], tag_string: str, current_us... function untag_bookmarks (line 146) | def untag_bookmarks(bookmark_ids: [int | str], tag_string: str, current_... function mark_bookmarks_as_read (line 166) | def mark_bookmarks_as_read(bookmark_ids: [int | str], current_user: User): function mark_bookmarks_as_unread (line 174) | def mark_bookmarks_as_unread(bookmark_ids: [int | str], current_user: Us... function share_bookmarks (line 182) | def share_bookmarks(bookmark_ids: [int | str], current_user: User): function unshare_bookmarks (line 190) | def unshare_bookmarks(bookmark_ids: [int | str], current_user: User): function refresh_bookmarks_metadata (line 198) | def refresh_bookmarks_metadata(bookmark_ids: [int | str], current_user: ... function create_html_snapshots (line 209) | def create_html_snapshots(bookmark_ids: list[int | str], current_user: U... function _merge_bookmark_data (line 218) | def _merge_bookmark_data(from_bookmark: Bookmark, to_bookmark: Bookmark): function _update_bookmark_tags (line 226) | def _update_bookmark_tags(bookmark: Bookmark, tag_string: str, user: User): function _sanitize_id_list (line 247) | def _sanitize_id_list(bookmark_ids: [int | str]) -> [int]: FILE: bookmarks/services/bundles.py function create_bundle (line 6) | def create_bundle(bundle: BookmarkBundle, current_user: User): function move_bundle (line 17) | def move_bundle(bundle_to_move: BookmarkBundle, new_order: int): function delete_bundle (line 31) | def delete_bundle(bundle: BookmarkBundle): FILE: bookmarks/services/exporter.py function export_netscape_html (line 8) | def export_netscape_html(bookmarks: list[Bookmark]): function append_header (line 18) | def append_header(doc: BookmarkDocument): function append_list_start (line 25) | def append_list_start(doc: BookmarkDocument): function append_bookmark (line 29) | def append_bookmark(doc: BookmarkDocument, bookmark: Bookmark): function append_list_end (line 52) | def append_list_end(doc: BookmarkDocument): FILE: bookmarks/services/favicon_loader.py function _ensure_favicon_folder (line 21) | def _ensure_favicon_folder(): function _url_to_filename (line 25) | def _url_to_filename(url: str) -> str: function _get_url_parameters (line 29) | def _get_url_parameters(url: str) -> dict: function _get_favicon_path (line 39) | def _get_favicon_path(favicon_file: str) -> Path: function _check_existing_favicon (line 43) | def _check_existing_favicon(favicon_name: str): function _is_stale (line 54) | def _is_stale(path: Path) -> bool: function load_favicon (line 60) | def load_favicon(url: str) -> str: FILE: bookmarks/services/importer.py class ImportResult (line 16) | class ImportResult: class ImportOptions (line 23) | class ImportOptions: class TagCache (line 27) | class TagCache: method __init__ (line 28) | def __init__(self, user: User): method get (line 36) | def get(self, tag_name: str): method get_all (line 43) | def get_all(self, tag_names: list[str]): method put (line 54) | def put(self, tag: Tag): function import_netscape_html (line 58) | def import_netscape_html( function _create_missing_tags (line 95) | def _create_missing_tags(netscape_bookmarks: list[NetscapeBookmark], use... function _get_batches (line 118) | def _get_batches(items: list, batch_size: int): function _import_batch (line 132) | def _import_batch( function _copy_bookmark_data (line 236) | def _copy_bookmark_data( FILE: bookmarks/services/monolith.py class MonolithError (line 9) | class MonolithError(Exception): function create_snapshot (line 16) | def create_snapshot(url: str, filepath: str): FILE: bookmarks/services/parser.py class NetscapeBookmark (line 9) | class NetscapeBookmark: class BookmarkParser (line 22) | class BookmarkParser(HTMLParser): method __init__ (line 23) | def __init__(self): method handle_starttag (line 39) | def handle_starttag(self, tag: str, attrs: list): method handle_endtag (line 45) | def handle_endtag(self, tag: str): method handle_data (line 51) | def handle_data(self, data): method handle_end_dl (line 56) | def handle_end_dl(self): method handle_start_dt (line 59) | def handle_start_dt(self, attrs: dict[str, str]): method handle_start_a (line 62) | def handle_start_a(self, attrs: dict[str, str]): method handle_a_data (line 83) | def handle_a_data(self, data): method handle_dd_data (line 86) | def handle_dd_data(self, data): method add_bookmark (line 92) | def add_bookmark(self): function parse (line 110) | def parse(html: str) -> list[NetscapeBookmark]: FILE: bookmarks/services/preview_image_loader.py function _ensure_preview_folder (line 15) | def _ensure_preview_folder(): function _url_to_filename (line 19) | def _url_to_filename(preview_image: str) -> str: function _get_image_path (line 23) | def _get_image_path(preview_image_file: str) -> Path: function load_preview_image (line 27) | def load_preview_image(url: str) -> str | None: FILE: bookmarks/services/search_query_parser.py class TokenType (line 7) | class TokenType(Enum): class Token (line 20) | class Token: class SearchQueryTokenizer (line 26) | class SearchQueryTokenizer: method __init__ (line 27) | def __init__(self, query: str): method advance (line 32) | def advance(self): method skip_whitespace (line 40) | def skip_whitespace(self): method read_term (line 45) | def read_term(self) -> str: method read_quoted_string (line 59) | def read_quoted_string(self, quote_char: str) -> str: method read_tag (line 96) | def read_tag(self) -> str: method read_special_keyword (line 111) | def read_special_keyword(self) -> str: method tokenize (line 126) | def tokenize(self) -> list[Token]: class SearchExpression (line 179) | class SearchExpression: class TermExpression (line 184) | class TermExpression(SearchExpression): class TagExpression (line 189) | class TagExpression(SearchExpression): class SpecialKeywordExpression (line 194) | class SpecialKeywordExpression(SearchExpression): class AndExpression (line 199) | class AndExpression(SearchExpression): class OrExpression (line 205) | class OrExpression(SearchExpression): class NotExpression (line 211) | class NotExpression(SearchExpression): class SearchQueryParseError (line 215) | class SearchQueryParseError(Exception): method __init__ (line 216) | def __init__(self, message: str, position: int): class SearchQueryParser (line 222) | class SearchQueryParser: method __init__ (line 223) | def __init__(self, tokens: list[Token]): method advance (line 228) | def advance(self): method consume (line 234) | def consume(self, expected_type: TokenType) -> Token: method parse (line 246) | def parse(self) -> SearchExpression | None: method parse_or_expression (line 263) | def parse_or_expression(self) -> SearchExpression: method parse_and_expression (line 274) | def parse_and_expression(self) -> SearchExpression: method parse_not_expression (line 294) | def parse_not_expression(self) -> SearchExpression: method parse_primary_expression (line 303) | def parse_primary_expression(self) -> SearchExpression: function parse_search_query (line 329) | def parse_search_query(query: str) -> SearchExpression | None: function _needs_parentheses (line 339) | def _needs_parentheses(expr: SearchExpression, parent_type: type) -> bool: function _is_simple_expression (line 348) | def _is_simple_expression(expr: SearchExpression) -> bool: function _expression_to_string (line 353) | def _expression_to_string(expr: SearchExpression, parent_type: type = No... function expression_to_string (line 413) | def expression_to_string(expr: SearchExpression | None) -> str: function _strip_tag_from_expression (line 419) | def _strip_tag_from_expression( function strip_tag_from_query (line 488) | def strip_tag_from_query( function _extract_tag_names_from_expression (line 511) | def _extract_tag_names_from_expression( function extract_tag_names_from_query (line 545) | def extract_tag_names_from_query( FILE: bookmarks/services/singlefile.py class SingleFileError (line 10) | class SingleFileError(Exception): function create_snapshot (line 17) | def create_snapshot(url: str, filepath: str): FILE: bookmarks/services/tags.py function get_or_create_tags (line 13) | def get_or_create_tags(tag_names: list[str], user: User): function get_or_create_tag (line 18) | def get_or_create_tag(name: str, user: User): FILE: bookmarks/services/tasks.py function task (line 28) | def task(retries=5, retry_delay=15, retry_backoff=4): function is_web_archive_integration_active (line 50) | def is_web_archive_integration_active(user: User) -> bool: function create_web_archive_snapshot (line 60) | def create_web_archive_snapshot(user: User, bookmark: Bookmark, force_up... function _create_snapshot (line 65) | def _create_snapshot(bookmark: Bookmark): function _create_web_archive_snapshot_task (line 77) | def _create_web_archive_snapshot_task(bookmark_id: int, force_update: bo... function _load_web_archive_snapshot_task (line 103) | def _load_web_archive_snapshot_task(bookmark_id: int): function _schedule_bookmarks_without_snapshots_task (line 110) | def _schedule_bookmarks_without_snapshots_task(user_id: int): function is_favicon_feature_active (line 116) | def is_favicon_feature_active(user: User) -> bool: function is_preview_feature_active (line 122) | def is_preview_feature_active(user: User) -> bool: function load_favicon (line 128) | def load_favicon(user: User, bookmark: Bookmark): function _load_favicon_task (line 134) | def _load_favicon_task(bookmark_id: int): function schedule_bookmarks_without_favicons (line 152) | def schedule_bookmarks_without_favicons(user: User): function _schedule_bookmarks_without_favicons_task (line 158) | def _schedule_bookmarks_without_favicons_task(user_id: int): function schedule_refresh_favicons (line 168) | def schedule_refresh_favicons(user: User): function _schedule_refresh_favicons_task (line 174) | def _schedule_refresh_favicons_task(user_id: int): function load_preview_image (line 183) | def load_preview_image(user: User, bookmark: Bookmark): function _load_preview_image_task (line 189) | def _load_preview_image_task(bookmark_id: int): function schedule_bookmarks_without_previews (line 207) | def schedule_bookmarks_without_previews(user: User): function _schedule_bookmarks_without_previews_task (line 213) | def _schedule_bookmarks_without_previews_task(user_id: int): function refresh_metadata (line 228) | def refresh_metadata(bookmark: Bookmark): function _refresh_metadata_task (line 234) | def _refresh_metadata_task(bookmark_id: int): function is_html_snapshot_feature_active (line 253) | def is_html_snapshot_feature_active() -> bool: function create_html_snapshot (line 257) | def create_html_snapshot(bookmark: Bookmark): function create_html_snapshots (line 265) | def create_html_snapshots(bookmark_list: list[Bookmark]): function _schedule_html_snapshots_task (line 284) | def _schedule_html_snapshots_task(): function _create_html_snapshot_task (line 294) | def _create_html_snapshot_task(asset_id: int): function create_missing_html_snapshots (line 315) | def create_missing_html_snapshots(user: User) -> int: FILE: bookmarks/services/wayback.py function generate_fallback_webarchive_url (line 6) | def generate_fallback_webarchive_url( FILE: bookmarks/services/website_loader.py class WebsiteMetadata (line 15) | class WebsiteMetadata: method to_dict (line 21) | def to_dict(self): function load_website_metadata (line 30) | def load_website_metadata(url: str, ignore_cache: bool = False): function _load_website_metadata_cached (line 39) | def _load_website_metadata_cached(url: str): function _load_website_metadata (line 43) | def _load_website_metadata(url: str): function load_page (line 96) | def load_page(url: str): function fake_request_headers (line 134) | def fake_request_headers(): function detect_content_type (line 144) | def detect_content_type(url: str, timeout: int = 10) -> str | None: function is_pdf_content_type (line 176) | def is_pdf_content_type(content_type: str | None) -> bool: FILE: bookmarks/signals.py function extend_sqlite (line 7) | def extend_sqlite(connection=None, **kwargs): FILE: bookmarks/static/live-reload.js constant RELOAD_URL (line 1) | const RELOAD_URL = "/live_reload"; function connect (line 6) | function connect() { FILE: bookmarks/static/vendor/Readability.js function Readability (line 27) | function Readability(doc, options) { function toAbsoluteURI (line 368) | function toAbsoluteURI(uri) { function wordCount (line 477) | function wordCount(str) { FILE: bookmarks/templatetags/bookmarks.py function bookmark_search (line 12) | def bookmark_search(context, search: BookmarkSearch, mode: str = ""): FILE: bookmarks/templatetags/pagination.py function pagination (line 13) | def pagination(context, page: Page): function get_visible_page_numbers (line 59) | def get_visible_page_numbers(current_page_number: int, num_pages: int) -... function _generate_link (line 98) | def _generate_link(base_url: str, query_params: QueryDict, page_number: ... FILE: bookmarks/templatetags/shared.py function update_query_string (line 18) | def update_query_string(context, **kwargs): function replace_query_param (line 29) | def replace_query_param(context, **kwargs): function first_char (line 41) | def first_char(text): function remaining_chars (line 46) | def remaining_chars(text, index): function humanize_absolute_date (line 51) | def humanize_absolute_date(value): function humanize_relative_date (line 58) | def humanize_relative_date(value): function model_to_dict_filter (line 65) | def model_to_dict_filter(value): function htmlmin (line 71) | def htmlmin(parser, token): class HtmlMinNode (line 77) | class HtmlMinNode(template.Node): method __init__ (line 78) | def __init__(self, nodelist): method render (line 81) | def render(self, context): function schemeless_urls_to_https (line 89) | def schemeless_urls_to_https(attrs, _new): function render_markdown (line 106) | def render_markdown(context, markdown_text): function append_attr (line 122) | def append_attr(widget, attr, value): function formlabel (line 131) | def formlabel(field, label_text): function formfield (line 138) | def formfield(field, **kwargs): function formhelp (line 166) | def formhelp(parser, token): class FormHelpNode (line 178) | class FormHelpNode(template.Node): method __init__ (line 179) | def __init__(self, nodelist, field_var): method render (line 183) | def render(self, context): FILE: bookmarks/tests/helpers.py class BookmarkFactoryMixin (line 28) | class BookmarkFactoryMixin: method setup_temp_assets_dir (line 31) | def setup_temp_assets_dir(self): method cleanup_temp_assets_dir (line 37) | def cleanup_temp_assets_dir(self): method get_or_create_test_user (line 41) | def get_or_create_test_user(self): method setup_superuser (line 49) | def setup_superuser(self): method setup_bookmark (line 54) | def setup_bookmark( method setup_numbered_bookmarks (line 105) | def setup_numbered_bookmarks( method get_numbered_bookmark (line 171) | def get_numbered_bookmark(self, title: str): method setup_bundle (line 174) | def setup_bundle( method setup_asset (line 205) | def setup_asset( method setup_asset_file (line 237) | def setup_asset_file(self, asset: BookmarkAsset, file_content: str = "... method read_asset_file (line 246) | def read_asset_file(self, asset: BookmarkAsset): method get_asset_filesize (line 256) | def get_asset_filesize(self, asset: BookmarkAsset): method has_asset_file (line 260) | def has_asset_file(self, asset: BookmarkAsset): method setup_tag (line 264) | def setup_tag(self, user: User = None, name: str = ""): method setup_user (line 273) | def setup_user( method setup_api_token (line 287) | def setup_api_token(self, user: User = None, name: str = ""): method get_tags_from_bookmarks (line 296) | def get_tags_from_bookmarks(self, bookmarks: list[Bookmark]): method get_random_string (line 302) | def get_random_string(self, length: int = 32): class HtmlTestMixin (line 306) | class HtmlTestMixin: method make_soup (line 307) | def make_soup(self, html: str): class BookmarkListTestMixin (line 311) | class BookmarkListTestMixin(TestCase, HtmlTestMixin): method assertVisibleBookmarks (line 312) | def assertVisibleBookmarks( method assertInvisibleBookmarks (line 330) | def assertInvisibleBookmarks( class TagCloudTestMixin (line 342) | class TagCloudTestMixin(TestCase, HtmlTestMixin): method assertVisibleTags (line 343) | def assertVisibleTags(self, response, tags: list[Tag]): method assertInvisibleTags (line 356) | def assertInvisibleTags(self, response, tags: list[Tag]): method assertSelectedTags (line 365) | def assertSelectedTags(self, response, tags: list[Tag]): class LinkdingApiTestCase (line 380) | class LinkdingApiTestCase(APITestCase): method authenticate (line 381) | def authenticate(self): method get (line 387) | def get(self, url, expected_status_code=status.HTTP_200_OK): method post (line 392) | def post(self, url, data=None, expected_status_code=status.HTTP_200_OK): method put (line 397) | def put(self, url, data=None, expected_status_code=status.HTTP_200_OK): method patch (line 402) | def patch(self, url, data=None, expected_status_code=status.HTTP_200_OK): method delete (line 407) | def delete(self, url, expected_status_code=status.HTTP_200_OK): class BookmarkHtmlTag (line 413) | class BookmarkHtmlTag: method __init__ (line 414) | def __init__( class ImportTestMixin (line 435) | class ImportTestMixin: method render_tag (line 436) | def render_tag(self, tag: BookmarkHtmlTag): method render_html (line 450) | def render_html(self, tags: list[BookmarkHtmlTag] = None, tags_html: s... function random_sentence (line 489) | def random_sentence(num_words: int = None, including_word: str = ""): function disable_logging (line 500) | def disable_logging(f): function collapse_whitespace (line 511) | def collapse_whitespace(text: str): FILE: bookmarks/tests/test_app_options.py class AppOptionsTestCase (line 8) | class AppOptionsTestCase(TestCase): method setUp (line 9) | def setUp(self) -> None: method test_empty_csrf_trusted_origins (line 12) | def test_empty_csrf_trusted_origins(self): method test_single_csrf_trusted_origin (line 20) | def test_single_csrf_trusted_origin(self): method test_multiple_csrf_trusted_origin (line 34) | def test_multiple_csrf_trusted_origin(self): FILE: bookmarks/tests/test_assets_service.py class AssetServiceTestCase (line 17) | class AssetServiceTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 18) | def setUp(self) -> None: method tearDown (line 49) | def tearDown(self) -> None: method get_saved_snapshot_file (line 54) | def get_saved_snapshot_file(self): method create_mock_pdf_response (line 60) | def create_mock_pdf_response(self, content=None, content_length=None): method test_create_snapshot_asset (line 74) | def test_create_snapshot_asset(self): method test_create_snapshot (line 89) | def test_create_snapshot(self): method test_create_snapshot_failure (line 134) | def test_create_snapshot_failure(self): method test_create_snapshot_truncates_asset_file_name (line 149) | def test_create_snapshot_truncates_asset_file_name(self): method test_create_pdf_snapshot (line 164) | def test_create_pdf_snapshot(self): method test_create_snapshot_falls_back_to_singlefile_when_detection_fails (line 203) | def test_create_snapshot_falls_back_to_singlefile_when_detection_fails... method test_create_pdf_snapshot_fails_when_content_length_exceeds_limit (line 218) | def test_create_pdf_snapshot_fails_when_content_length_exceeds_limit(s... method test_create_pdf_snapshot_fails_when_download_exceeds_limit (line 238) | def test_create_pdf_snapshot_fails_when_download_exceeds_limit(self): method test_create_pdf_snapshot_failure (line 258) | def test_create_pdf_snapshot_failure(self): method test_upload_snapshot (line 277) | def test_upload_snapshot(self): method test_upload_snapshot_failure (line 310) | def test_upload_snapshot_failure(self): method test_upload_snapshot_truncates_asset_file_name (line 323) | def test_upload_snapshot_truncates_asset_file_name(self): method test_upload_asset (line 337) | def test_upload_asset(self): method test_upload_gzip_asset (line 374) | def test_upload_gzip_asset(self): method test_upload_asset_truncates_asset_file_name (line 411) | def test_upload_asset_truncates_asset_file_name(self): method test_upload_asset_failure (line 430) | def test_upload_asset_failure(self): method test_create_snapshot_updates_bookmark_latest_snapshot (line 444) | def test_create_snapshot_updates_bookmark_latest_snapshot(self): method test_upload_snapshot_updates_bookmark_latest_snapshot (line 462) | def test_upload_snapshot_updates_bookmark_latest_snapshot(self): method test_create_snapshot_failure_does_not_update_latest_snapshot (line 476) | def test_create_snapshot_failure_does_not_update_latest_snapshot(self): method test_upload_snapshot_failure_does_not_update_latest_snapshot (line 500) | def test_upload_snapshot_failure_does_not_update_latest_snapshot(self): method test_remove_latest_snapshot_updates_bookmark (line 519) | def test_remove_latest_snapshot_updates_bookmark(self): method test_remove_non_latest_snapshot_does_not_affect_bookmark (line 579) | def test_remove_non_latest_snapshot_does_not_affect_bookmark(self): method test_remove_asset (line 617) | def test_remove_asset(self): FILE: bookmarks/tests/test_auth_api.py class AuthApiTestCase (line 7) | class AuthApiTestCase(LinkdingApiTestCase, BookmarkFactoryMixin): method authenticate (line 8) | def authenticate(self, keyword): method test_auth_with_token_keyword (line 12) | def test_auth_with_token_keyword(self): method test_auth_with_bearer_keyword (line 18) | def test_auth_with_bearer_keyword(self): method test_auth_with_unknown_keyword (line 24) | def test_auth_with_unknown_keyword(self): FILE: bookmarks/tests/test_auth_proxy_support.py class AuthProxySupportTest (line 10) | class AuthProxySupportTest(TestCase): method test_auth_proxy_authentication (line 19) | def test_auth_proxy_authentication(self): method test_auth_proxy_with_custom_header (line 37) | def test_auth_proxy_with_custom_header(self): method test_auth_proxy_is_disabled_by_default (line 51) | def test_auth_proxy_is_disabled_by_default(self): FILE: bookmarks/tests/test_auto_tagging.py class AutoTaggingTestCase (line 6) | class AutoTaggingTestCase(TestCase): method test_auto_tag_by_domain (line 7) | def test_auto_tag_by_domain(self): method test_auto_tag_by_domain_handles_invalid_urls (line 18) | def test_auto_tag_by_domain_handles_invalid_urls(self): method test_auto_tag_by_domain_works_with_port (line 32) | def test_auto_tag_by_domain_works_with_port(self): method test_auto_tag_by_domain_ignores_case (line 43) | def test_auto_tag_by_domain_ignores_case(self): method test_auto_tag_by_domain_should_add_all_tags (line 53) | def test_auto_tag_by_domain_should_add_all_tags(self): method test_auto_tag_by_domain_work_with_idn_domains (line 63) | def test_auto_tag_by_domain_work_with_idn_domains(self): method test_auto_tag_by_domain_and_path (line 82) | def test_auto_tag_by_domain_and_path(self): method test_auto_tag_by_domain_and_path_ignores_case (line 94) | def test_auto_tag_by_domain_and_path_ignores_case(self): method test_auto_tag_by_domain_and_path_matches_path_ltr (line 104) | def test_auto_tag_by_domain_and_path_matches_path_ltr(self): method test_auto_tag_by_domain_ignores_domain_in_path (line 116) | def test_auto_tag_by_domain_ignores_domain_in_path(self): method test_auto_tag_by_domain_includes_subdomains (line 126) | def test_auto_tag_by_domain_includes_subdomains(self): method test_auto_tag_by_domain_matches_domain_rtl (line 138) | def test_auto_tag_by_domain_matches_domain_rtl(self): method test_auto_tag_by_domain_ignores_schema (line 148) | def test_auto_tag_by_domain_ignores_schema(self): method test_auto_tag_by_domain_ignores_lines_with_no_tags (line 159) | def test_auto_tag_by_domain_ignores_lines_with_no_tags(self): method test_auto_tag_by_domain_path_and_qs (line 169) | def test_auto_tag_by_domain_path_and_qs(self): method test_auto_tag_by_domain_path_and_qs_with_empty_value (line 185) | def test_auto_tag_by_domain_path_and_qs_with_empty_value(self): method test_auto_tag_by_domain_path_and_qs_works_with_encoded_url (line 196) | def test_auto_tag_by_domain_path_and_qs_works_with_encoded_url(self): method test_auto_tag_with_url_fragment (line 207) | def test_auto_tag_with_url_fragment(self): method test_auto_tag_with_url_fragment_partial_match (line 218) | def test_auto_tag_with_url_fragment_partial_match(self): method test_auto_tag_with_url_fragment_ignores_case (line 228) | def test_auto_tag_with_url_fragment_ignores_case(self): method test_auto_tag_with_url_fragment_and_comment (line 238) | def test_auto_tag_with_url_fragment_and_comment(self): FILE: bookmarks/tests/test_bookmark_action_view.py class BookmarkActionViewTestCase (line 19) | class BookmarkActionViewTestCase( method setUp (line 22) | def setUp(self) -> None: method assertBookmarksAreUnmodified (line 26) | def assertBookmarksAreUnmodified(self, bookmarks: [Bookmark]): method test_archive_should_archive_bookmark (line 35) | def test_archive_should_archive_bookmark(self): method test_can_only_archive_own_bookmarks (line 49) | def test_can_only_archive_own_bookmarks(self): method test_unarchive_should_unarchive_bookmark (line 67) | def test_unarchive_should_unarchive_bookmark(self): method test_unarchive_can_only_archive_own_bookmarks (line 80) | def test_unarchive_can_only_archive_own_bookmarks(self): method test_delete_should_delete_bookmark (line 97) | def test_delete_should_delete_bookmark(self): method test_delete_can_only_delete_own_bookmarks (line 109) | def test_delete_can_only_delete_own_bookmarks(self): method test_mark_as_read (line 124) | def test_mark_as_read(self): method test_unshare_should_unshare_bookmark (line 137) | def test_unshare_should_unshare_bookmark(self): method test_can_only_unshare_own_bookmarks (line 151) | def test_can_only_unshare_own_bookmarks(self): method test_create_html_snapshot (line 170) | def test_create_html_snapshot(self): method test_can_only_create_html_snapshot_for_own_bookmarks (line 184) | def test_can_only_create_html_snapshot_for_own_bookmarks(self): method test_upload_asset (line 197) | def test_upload_asset(self): method test_can_only_upload_asset_for_own_bookmarks (line 217) | def test_can_only_upload_asset_for_own_bookmarks(self): method test_upload_asset_disabled (line 233) | def test_upload_asset_disabled(self): method test_upload_asset_without_file (line 244) | def test_upload_asset_without_file(self): method test_remove_asset (line 253) | def test_remove_asset(self): method test_can_only_remove_own_asset (line 263) | def test_can_only_remove_own_asset(self): method test_update_state (line 274) | def test_update_state(self): method test_can_only_update_own_bookmark_state (line 293) | def test_can_only_update_own_bookmark_state(self): method test_bulk_archive (line 313) | def test_bulk_archive(self): method test_can_only_bulk_archive_own_bookmarks (line 335) | def test_can_only_bulk_archive_own_bookmarks(self): method test_bulk_unarchive (line 360) | def test_bulk_unarchive(self): method test_can_only_bulk_unarchive_own_bookmarks (line 382) | def test_can_only_bulk_unarchive_own_bookmarks(self): method test_bulk_delete (line 407) | def test_bulk_delete(self): method test_can_only_bulk_delete_own_bookmarks (line 429) | def test_can_only_bulk_delete_own_bookmarks(self): method test_bulk_tag (line 454) | def test_bulk_tag(self): method test_can_only_bulk_tag_own_bookmarks (line 483) | def test_can_only_bulk_tag_own_bookmarks(self): method test_bulk_untag (line 515) | def test_bulk_untag(self): method test_can_only_bulk_untag_own_bookmarks (line 544) | def test_can_only_bulk_untag_own_bookmarks(self): method test_bulk_mark_as_read (line 576) | def test_bulk_mark_as_read(self): method test_can_only_bulk_mark_as_read_own_bookmarks (line 598) | def test_can_only_bulk_mark_as_read_own_bookmarks(self): method test_bulk_mark_as_unread (line 623) | def test_bulk_mark_as_unread(self): method test_can_only_bulk_mark_as_unread_own_bookmarks (line 645) | def test_can_only_bulk_mark_as_unread_own_bookmarks(self): method test_bulk_share (line 670) | def test_bulk_share(self): method test_can_only_bulk_share_own_bookmarks (line 692) | def test_can_only_bulk_share_own_bookmarks(self): method test_bulk_unshare (line 717) | def test_bulk_unshare(self): method test_can_only_bulk_unshare_own_bookmarks (line 739) | def test_can_only_bulk_unshare_own_bookmarks(self): method test_bulk_select_across (line 764) | def test_bulk_select_across(self): method test_bulk_select_across_ignores_page (line 782) | def test_bulk_select_across_ignores_page(self): method setup_bulk_edit_scope_test_data (line 796) | def setup_bulk_edit_scope_test_data(self): method test_index_action_bulk_select_across_only_affects_active_bookmarks (line 807) | def test_index_action_bulk_select_across_only_affects_active_bookmarks... method test_index_action_bulk_select_across_respects_query (line 828) | def test_index_action_bulk_select_across_respects_query(self): method test_index_action_bulk_select_across_respects_bundle (line 846) | def test_index_action_bulk_select_across_respects_bundle(self): method test_archived_action_bulk_select_across_only_affects_archived_bookmarks (line 866) | def test_archived_action_bulk_select_across_only_affects_archived_book... method test_archived_action_bulk_select_across_respects_query (line 893) | def test_archived_action_bulk_select_across_respects_query(self): method test_archived_action_bulk_select_across_respects_bundle (line 911) | def test_archived_action_bulk_select_across_respects_bundle(self): method test_shared_action_bulk_select_across_not_supported (line 931) | def test_shared_action_bulk_select_across_not_supported(self): method test_handles_empty_bookmark_id (line 944) | def test_handles_empty_bookmark_id(self): method test_empty_action_does_not_modify_bookmarks (line 970) | def test_empty_action_does_not_modify_bookmarks(self): method test_index_action_redirects_to_index_with_query_params (line 988) | def test_index_action_redirects_to_index_with_query_params(self): method test_archived_action_redirects_to_archived_with_query_params (line 995) | def test_archived_action_redirects_to_archived_with_query_params(self): method test_shared_action_redirects_to_shared_with_query_params (line 1002) | def test_shared_action_redirects_to_shared_with_query_params(self): method bookmark_update_fixture (line 1009) | def bookmark_update_fixture(self): method assertBookmarkUpdateResponse (line 1021) | def assertBookmarkUpdateResponse(self, response: HttpResponse): method test_index_action_with_turbo_returns_bookmark_update (line 1051) | def test_index_action_with_turbo_returns_bookmark_update(self): method test_archived_action_with_turbo_returns_bookmark_update (line 1069) | def test_archived_action_with_turbo_returns_bookmark_update(self): method test_shared_action_with_turbo_returns_bookmark_update (line 1087) | def test_shared_action_with_turbo_returns_bookmark_update(self): FILE: bookmarks/tests/test_bookmark_archived_view.py class BookmarkArchivedViewTestCase (line 15) | class BookmarkArchivedViewTestCase( method setUp (line 18) | def setUp(self) -> None: method assertEditLink (line 22) | def assertEditLink(self, response, url): method assertBulkActionForm (line 31) | def assertBulkActionForm(self, response, url: str): method test_should_list_archived_and_user_owned_bookmarks (line 37) | def test_should_list_archived_and_user_owned_bookmarks(self): method test_should_list_bookmarks_matching_query (line 52) | def test_should_list_bookmarks_matching_query(self): method test_should_list_bookmarks_matching_bundle (line 65) | def test_should_list_bookmarks_matching_bundle(self): method test_should_list_tags_for_archived_and_user_owned_bookmarks (line 82) | def test_should_list_tags_for_archived_and_user_owned_bookmarks(self): method test_should_list_tags_for_bookmarks_matching_query (line 106) | def test_should_list_tags_for_bookmarks_matching_query(self): method test_should_list_tags_for_bookmarks_matching_bundle (line 122) | def test_should_list_tags_for_bookmarks_matching_bundle(self): method test_should_list_bookmarks_and_tags_for_search_preferences (line 142) | def test_should_list_bookmarks_and_tags_for_search_preferences(self): method test_should_display_selected_tags_from_query (line 175) | def test_should_display_selected_tags_from_query(self): method test_should_not_display_search_terms_from_query_as_selected_tags_in_strict_mode (line 192) | def test_should_not_display_search_terms_from_query_as_selected_tags_i... method test_should_display_search_terms_from_query_as_selected_tags_in_lax_mode (line 211) | def test_should_display_search_terms_from_query_as_selected_tags_in_la... method test_should_open_bookmarks_in_new_page_by_default (line 231) | def test_should_open_bookmarks_in_new_page_by_default(self): method test_should_open_bookmarks_in_same_page_if_specified_in_user_profile (line 238) | def test_should_open_bookmarks_in_same_page_if_specified_in_user_profi... method test_edit_link_return_url_respects_search_options (line 249) | def test_edit_link_return_url_respects_search_options(self): method test_bulk_edit_respects_search_options (line 277) | def test_bulk_edit_respects_search_options(self): method test_allowed_bulk_actions (line 301) | def test_allowed_bulk_actions(self): method test_allowed_bulk_actions_with_html_snapshot_enabled (line 322) | def test_allowed_bulk_actions_with_html_snapshot_enabled(self): method test_allowed_bulk_actions_with_sharing_enabled (line 343) | def test_allowed_bulk_actions_with_sharing_enabled(self): method test_allowed_bulk_actions_with_sharing_and_html_snapshot_enabled (line 370) | def test_allowed_bulk_actions_with_sharing_and_html_snapshot_enabled(s... method test_apply_search_preferences (line 397) | def test_apply_search_preferences(self): method test_save_search_preferences (line 448) | def test_save_search_preferences(self): method test_url_encode_bookmark_actions_url (line 544) | def test_url_encode_bookmark_actions_url(self): method test_encode_search_params (line 556) | def test_encode_search_params(self): method test_turbo_frame_details_modal_renders_details_modal_update (line 584) | def test_turbo_frame_details_modal_renders_details_modal_update(self): method test_does_not_include_rss_feed (line 596) | def test_does_not_include_rss_feed(self): method test_hide_bundles_when_enabled_in_profile (line 603) | def test_hide_bundles_when_enabled_in_profile(self): FILE: bookmarks/tests/test_bookmark_archived_view_performance.py class BookmarkArchivedViewPerformanceTestCase (line 11) | class BookmarkArchivedViewPerformanceTestCase( method setUp (line 14) | def setUp(self) -> None: method get_connection (line 18) | def get_connection(self): method test_should_not_increase_number_of_queries_per_bookmark (line 21) | def test_should_not_increase_number_of_queries_per_bookmark(self): FILE: bookmarks/tests/test_bookmark_asset_view.py class BookmarkAssetViewTestCase (line 11) | class BookmarkAssetViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 12) | def setUp(self) -> None: method setup_asset_file (line 17) | def setup_asset_file(self, filename): method setup_asset_with_file (line 22) | def setup_asset_with_file(self, bookmark): method setup_asset_with_uploaded_file (line 30) | def setup_asset_with_uploaded_file(self, bookmark, content_type="image... method view_access_test (line 42) | def view_access_test(self, view_name: str): method view_access_guest_user_test (line 82) | def view_access_guest_user_test(self, view_name: str): method test_view_access (line 132) | def test_view_access(self): method test_view_access_guest_user (line 135) | def test_view_access_guest_user(self): method test_reader_view_access (line 138) | def test_reader_view_access(self): method test_reader_view_access_guest_user (line 141) | def test_reader_view_access_guest_user(self): method test_snapshot_download_headers (line 144) | def test_snapshot_download_headers(self): method test_uploaded_file_download_headers (line 156) | def test_uploaded_file_download_headers(self): method test_uploaded_video_download_headers (line 168) | def test_uploaded_video_download_headers(self): FILE: bookmarks/tests/test_bookmark_assets.py class BookmarkAssetsTestCase (line 11) | class BookmarkAssetsTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 12) | def setUp(self): method setup_asset_file (line 15) | def setup_asset_file(self, filename): method setup_asset_with_file (line 20) | def setup_asset_with_file(self, bookmark): method test_delete_bookmark_deletes_asset_file (line 26) | def test_delete_bookmark_deletes_asset_file(self): method test_bulk_delete_bookmarks_deletes_asset_files (line 38) | def test_bulk_delete_bookmarks_deletes_asset_files(self): method test_save_updates_file_size (line 69) | def test_save_updates_file_size(self): method test_download_name_for_html_snapshot (line 84) | def test_download_name_for_html_snapshot(self): method test_download_name_for_pdf_snapshot (line 94) | def test_download_name_for_pdf_snapshot(self): method test_download_name_for_upload (line 104) | def test_download_name_for_upload(self): FILE: bookmarks/tests/test_bookmark_assets_api.py class BookmarkAssetsApiTestCase (line 12) | class BookmarkAssetsApiTestCase(LinkdingApiTestCase, BookmarkFactoryMixin): method setUp (line 13) | def setUp(self): method assertAsset (line 16) | def assertAsset(self, asset: BookmarkAsset, data: dict): method test_asset_list (line 28) | def test_asset_list(self): method test_asset_list_only_returns_assets_for_own_bookmarks (line 63) | def test_asset_list_only_returns_assets_for_own_bookmarks(self): method test_asset_list_requires_authentication (line 75) | def test_asset_list_requires_authentication(self): method test_asset_detail (line 82) | def test_asset_detail(self): method test_asset_detail_only_returns_asset_for_own_bookmarks (line 103) | def test_asset_detail_only_returns_asset_for_own_bookmarks(self): method test_asset_detail_requires_authentication (line 116) | def test_asset_detail_requires_authentication(self): method test_asset_download_with_snapshot_asset (line 125) | def test_asset_download_with_snapshot_asset(self): method test_asset_download_with_uploaded_asset (line 161) | def test_asset_download_with_uploaded_asset(self): method test_asset_download_with_missing_file (line 189) | def test_asset_download_with_missing_file(self): method test_asset_download_only_returns_asset_for_own_bookmarks (line 207) | def test_asset_download_only_returns_asset_for_own_bookmarks(self): method test_asset_download_requires_authentication (line 220) | def test_asset_download_requires_authentication(self): method create_upload_body (line 229) | def create_upload_body(self): method test_upload_asset (line 237) | def test_upload_asset(self): method test_upload_asset_with_missing_file (line 262) | def test_upload_asset_with_missing_file(self): method test_upload_asset_only_works_for_own_bookmarks (line 273) | def test_upload_asset_only_works_for_own_bookmarks(self): method test_upload_asset_requires_authentication (line 285) | def test_upload_asset_requires_authentication(self): method test_upload_asset_disabled (line 295) | def test_upload_asset_disabled(self): method test_delete_asset (line 304) | def test_delete_asset(self): method test_delete_asset_only_works_for_own_bookmarks (line 320) | def test_delete_asset_only_works_for_own_bookmarks(self): method test_delete_asset_requires_authentication (line 333) | def test_delete_asset_requires_authentication(self): FILE: bookmarks/tests/test_bookmark_details_modal.py class BookmarkDetailsModalTestCase (line 12) | class BookmarkDetailsModalTestCase(TestCase, BookmarkFactoryMixin, HtmlT... method setUp (line 13) | def setUp(self): method get_details_form (line 17) | def get_details_form(self, soup, bookmark): method get_index_details_modal (line 23) | def get_index_details_modal(self, bookmark): method get_shared_details_modal (line 29) | def get_shared_details_modal(self, bookmark): method has_details_modal (line 35) | def has_details_modal(self, response): method find_section_content (line 39) | def find_section_content(self, soup, section_name): method get_section_content (line 44) | def get_section_content(self, soup, section_name): method find_weblink (line 49) | def find_weblink(self, soup, url): method count_weblinks (line 52) | def count_weblinks(self, soup): method find_asset (line 55) | def find_asset(self, soup, asset): method test_access (line 58) | def test_access(self): method test_access_with_sharing (line 91) | def test_access_with_sharing(self): method test_displays_title (line 131) | def test_displays_title(self): method test_website_link (line 148) | def test_website_link(self): method test_reader_mode_link (line 183) | def test_reader_mode_link(self): method test_internet_archive_link_with_snapshot_url (line 225) | def test_internet_archive_link_with_snapshot_url(self): method test_internet_archive_link_with_fallback_url (line 264) | def test_internet_archive_link_with_fallback_url(self): method test_weblinks_respect_target_setting (line 277) | def test_weblinks_respect_target_setting(self): method test_preview_image (line 313) | def test_preview_image(self): method test_status (line 343) | def test_status(self): method test_status_visibility (line 404) | def test_status_visibility(self): method test_date_added (line 427) | def test_date_added(self): method test_tags (line 436) | def test_tags(self): method test_description (line 456) | def test_description(self): method test_notes (line 471) | def test_notes(self): method test_edit_link (line 486) | def test_edit_link(self): method test_delete_button (line 496) | def test_delete_button(self): method test_actions_visibility (line 510) | def test_actions_visibility(self): method test_asset_list_visibility (line 552) | def test_asset_list_visibility(self): method test_asset_list (line 570) | def test_asset_list(self): method test_asset_list_actions_visibility (line 598) | def test_asset_list_actions_visibility(self): method test_asset_list_actions_visibility_without_snapshots_enabled (line 645) | def test_asset_list_actions_visibility_without_snapshots_enabled(self): method test_asset_list_actions_visibility_with_uploads_disabled (line 657) | def test_asset_list_actions_visibility_with_uploads_disabled(self): method test_asset_without_file (line 668) | def test_asset_without_file(self): method test_asset_status (line 680) | def test_asset_status(self): method test_asset_file_size (line 695) | def test_asset_file_size(self): method test_asset_actions_visibility (line 715) | def test_asset_actions_visibility(self): method test_create_snapshot_is_disabled_when_having_pending_asset (line 770) | def test_create_snapshot_is_disabled_when_having_pending_asset(self): FILE: bookmarks/tests/test_bookmark_edit_view.py class BookmarkEditViewTestCase (line 9) | class BookmarkEditViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 10) | def setUp(self) -> None: method create_form_data (line 14) | def create_form_data(self, overrides=None): method test_should_render_successfully (line 28) | def test_should_render_successfully(self): method test_should_edit_bookmark (line 35) | def test_should_edit_bookmark(self): method test_should_return_422_with_invalid_form (line 57) | def test_should_return_422_with_invalid_form(self): method test_should_edit_unread_state (line 65) | def test_should_edit_unread_state(self): method test_should_edit_shared_state (line 82) | def test_should_edit_shared_state(self): method test_should_prefill_bookmark_form_fields (line 99) | def test_should_prefill_bookmark_form_fields(self): method test_should_prevent_duplicate_urls (line 157) | def test_should_prevent_duplicate_urls(self): method test_should_prevent_duplicate_normalized_urls (line 191) | def test_should_prevent_duplicate_normalized_urls(self): method test_should_redirect_to_return_url (line 210) | def test_should_redirect_to_return_url(self): method test_should_redirect_to_bookmark_index_by_default (line 223) | def test_should_redirect_to_bookmark_index_by_default(self): method test_should_not_redirect_to_external_url (line 233) | def test_should_not_redirect_to_external_url(self): method test_can_only_edit_own_bookmarks (line 254) | def test_can_only_edit_own_bookmarks(self): method test_should_respect_share_profile_setting (line 268) | def test_should_respect_share_profile_setting(self): method test_should_hide_notes_if_there_are_no_notes (line 309) | def test_should_hide_notes_if_there_are_no_notes(self): method test_should_show_notes_if_there_are_notes (line 317) | def test_should_show_notes_if_there_are_notes(self): FILE: bookmarks/tests/test_bookmark_index_view.py class BookmarkIndexViewTestCase (line 15) | class BookmarkIndexViewTestCase( method setUp (line 18) | def setUp(self) -> None: method assertEditLink (line 22) | def assertEditLink(self, response, url): method assertBulkActionForm (line 31) | def assertBulkActionForm(self, response, url: str): method assertVisibleBundles (line 37) | def assertVisibleBundles(self, soup, bundles): method test_should_list_unarchived_and_user_owned_bookmarks (line 52) | def test_should_list_unarchived_and_user_owned_bookmarks(self): method test_should_list_bookmarks_matching_query (line 67) | def test_should_list_bookmarks_matching_query(self): method test_should_list_bookmarks_matching_bundle (line 76) | def test_should_list_bookmarks_matching_bundle(self): method test_should_list_tags_for_unarchived_and_user_owned_bookmarks (line 89) | def test_should_list_tags_for_unarchived_and_user_owned_bookmarks(self): method test_should_list_tags_for_bookmarks_matching_query (line 111) | def test_should_list_tags_for_bookmarks_matching_query(self): method test_should_list_tags_for_bookmarks_matching_bundle (line 127) | def test_should_list_tags_for_bookmarks_matching_bundle(self): method test_should_list_bookmarks_and_tags_for_search_preferences (line 147) | def test_should_list_bookmarks_and_tags_for_search_preferences(self): method test_should_display_selected_tags_from_query (line 170) | def test_should_display_selected_tags_from_query(self): method test_should_not_display_search_terms_from_query_as_selected_tags_in_strict_mode (line 187) | def test_should_not_display_search_terms_from_query_as_selected_tags_i... method test_should_display_search_terms_from_query_as_selected_tags_in_lax_mode (line 206) | def test_should_display_search_terms_from_query_as_selected_tags_in_la... method test_should_open_bookmarks_in_new_page_by_default (line 226) | def test_should_open_bookmarks_in_new_page_by_default(self): method test_should_open_bookmarks_in_same_page_if_specified_in_user_profile (line 233) | def test_should_open_bookmarks_in_same_page_if_specified_in_user_profi... method test_edit_link_return_url_respects_search_options (line 244) | def test_edit_link_return_url_respects_search_options(self): method test_bulk_edit_respects_search_options (line 272) | def test_bulk_edit_respects_search_options(self): method test_allowed_bulk_actions (line 296) | def test_allowed_bulk_actions(self): method test_allowed_bulk_actions_with_html_snapshot_enabled (line 317) | def test_allowed_bulk_actions_with_html_snapshot_enabled(self): method test_allowed_bulk_actions_with_sharing_enabled (line 338) | def test_allowed_bulk_actions_with_sharing_enabled(self): method test_allowed_bulk_actions_with_sharing_and_html_snapshot_enabled (line 365) | def test_allowed_bulk_actions_with_sharing_and_html_snapshot_enabled(s... method test_apply_search_preferences (line 392) | def test_apply_search_preferences(self): method test_save_search_preferences (line 441) | def test_save_search_preferences(self): method test_url_encode_bookmark_actions_url (line 537) | def test_url_encode_bookmark_actions_url(self): method test_encode_search_params (line 549) | def test_encode_search_params(self): method test_turbo_frame_details_modal_renders_details_modal_update (line 577) | def test_turbo_frame_details_modal_renders_details_modal_update(self): method test_does_not_include_rss_feed (line 589) | def test_does_not_include_rss_feed(self): method test_list_bundles (line 596) | def test_list_bundles(self): method test_list_bundles_only_shows_user_owned_bundles (line 606) | def test_list_bundles_only_shows_user_owned_bundles(self): method test_hide_bundles_when_enabled_in_profile (line 619) | def test_hide_bundles_when_enabled_in_profile(self): FILE: bookmarks/tests/test_bookmark_index_view_performance.py class BookmarkIndexViewPerformanceTestCase (line 11) | class BookmarkIndexViewPerformanceTestCase( method setUp (line 14) | def setUp(self) -> None: method get_connection (line 18) | def get_connection(self): method test_should_not_increase_number_of_queries_per_bookmark (line 21) | def test_should_not_increase_number_of_queries_per_bookmark(self): FILE: bookmarks/tests/test_bookmark_new_view.py class BookmarkNewViewTestCase (line 8) | class BookmarkNewViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 9) | def setUp(self) -> None: method create_form_data (line 13) | def create_form_data(self, overrides=None): method test_should_create_new_bookmark (line 28) | def test_should_create_new_bookmark(self): method test_should_return_422_with_invalid_form (line 48) | def test_should_return_422_with_invalid_form(self): method test_should_create_new_unread_bookmark (line 53) | def test_should_create_new_unread_bookmark(self): method test_should_create_new_shared_bookmark (line 63) | def test_should_create_new_shared_bookmark(self): method test_should_prefill_url_from_url_parameter (line 73) | def test_should_prefill_url_from_url_parameter(self): method test_should_prefill_title_from_url_parameter (line 86) | def test_should_prefill_title_from_url_parameter(self): method test_should_prefill_description_from_url_parameter (line 99) | def test_should_prefill_description_from_url_parameter(self): method test_should_prefill_tags_from_url_parameter (line 112) | def test_should_prefill_tags_from_url_parameter(self): method test_should_prefill_notes_from_url_parameter (line 127) | def test_should_prefill_notes_from_url_parameter(self): method test_should_enable_auto_close_when_specified_in_url_parameter (line 150) | def test_should_enable_auto_close_when_specified_in_url_parameter(self): method test_should_not_enable_auto_close_when_not_specified_in_url_parameter (line 159) | def test_should_not_enable_auto_close_when_not_specified_in_url_parame... method test_should_redirect_to_index_view (line 168) | def test_should_redirect_to_index_view(self): method test_should_not_redirect_to_external_url (line 175) | def test_should_not_redirect_to_external_url(self): method test_auto_close_should_redirect_to_close_view (line 185) | def test_auto_close_should_redirect_to_close_view(self): method test_should_respect_share_profile_setting (line 192) | def test_should_respect_share_profile_setting(self): method test_should_show_respective_share_hint (line 227) | def test_should_show_respective_share_hint(self): method test_should_hide_notes_if_there_are_no_notes (line 256) | def test_should_hide_notes_if_there_are_no_notes(self): method test_should_not_check_unread_by_default (line 264) | def test_should_not_check_unread_by_default(self): method test_should_check_unread_when_configured_in_profile (line 273) | def test_should_check_unread_when_configured_in_profile(self): method test_should_not_check_shared_by_default (line 285) | def test_should_not_check_shared_by_default(self): method test_should_check_shared_when_configured_in_profile (line 297) | def test_should_check_shared_when_configured_in_profile(self): FILE: bookmarks/tests/test_bookmark_previews.py class BookmarkPreviewsTestCase (line 12) | class BookmarkPreviewsTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 13) | def setUp(self): method tearDown (line 18) | def tearDown(self): method setup_preview_file (line 22) | def setup_preview_file(self, filename): method setup_bookmark_with_preview (line 27) | def setup_bookmark_with_preview(self): method assertPreviewImageExists (line 34) | def assertPreviewImageExists(self, bookmark): method assertPreviewImageDoesNotExist (line 41) | def assertPreviewImageDoesNotExist(self, bookmark): method test_delete_bookmark_deletes_preview_image (line 48) | def test_delete_bookmark_deletes_preview_image(self): method test_bulk_delete_bookmarks_deletes_preview_images (line 55) | def test_bulk_delete_bookmarks_deletes_preview_images(self): FILE: bookmarks/tests/test_bookmark_search_form.py class BookmarkSearchFormTest (line 8) | class BookmarkSearchFormTest(TestCase, BookmarkFactoryMixin): method test_initial_values (line 9) | def test_initial_values(self): method test_user_options (line 38) | def test_user_options(self): method test_hidden_fields (line 57) | def test_hidden_fields(self): FILE: bookmarks/tests/test_bookmark_search_model.py class MockRequest (line 8) | class MockRequest: method __init__ (line 9) | def __init__(self, user): class BookmarkSearchModelTest (line 13) | class BookmarkSearchModelTest(TestCase, BookmarkFactoryMixin): method test_from_request (line 14) | def test_from_request(self): method test_from_request_ignores_invalid_bundle_param (line 80) | def test_from_request_ignores_invalid_bundle_param(self): method test_query_params (line 96) | def test_query_params(self): method test_modified_params (line 177) | def test_modified_params(self): method test_has_modifications (line 249) | def test_has_modifications(self): method test_preferences_dict (line 266) | def test_preferences_dict(self): FILE: bookmarks/tests/test_bookmark_search_tag.py class BookmarkSearchTagTest (line 9) | class BookmarkSearchTagTest(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method render_template (line 10) | def render_template(self, url: str, mode: str = ""): method assertHiddenInput (line 29) | def assertHiddenInput(self, form: BeautifulSoup, name: str, value: str... method assertNoHiddenInput (line 36) | def assertNoHiddenInput(self, form: BeautifulSoup, name: str): method assertSearchInput (line 40) | def assertSearchInput(self, form: BeautifulSoup, name: str, value: str... method assertSelect (line 47) | def assertSelect(self, form: BeautifulSoup, name: str, value: str = No... method assertRadioGroup (line 59) | def assertRadioGroup(self, form: BeautifulSoup, name: str, value: str ... method assertNoRadioGroup (line 70) | def assertNoRadioGroup(self, form: BeautifulSoup, name: str): method assertUnmodifiedLabel (line 74) | def assertUnmodifiedLabel(self, html: str, text: str): method assertModifiedLabel (line 79) | def assertModifiedLabel(self, html: str, text: str): method test_search_form_inputs (line 84) | def test_search_form_inputs(self): method test_preferences_form_inputs (line 111) | def test_preferences_form_inputs(self): method test_preferences_form_inputs_shared_mode (line 152) | def test_preferences_form_inputs_shared_mode(self): method test_modified_indicator (line 185) | def test_modified_indicator(self): method test_modified_labels (line 210) | def test_modified_labels(self): FILE: bookmarks/tests/test_bookmark_shared_view.py class BookmarkSharedViewTestCase (line 15) | class BookmarkSharedViewTestCase( method authenticate (line 18) | def authenticate(self) -> None: method assertBookmarkCount (line 22) | def assertBookmarkCount( method assertVisibleUserOptions (line 31) | def assertVisibleUserOptions(self, response, users: list[User]): method assertEditLink (line 47) | def assertEditLink(self, response, url): method test_should_list_shared_bookmarks_from_all_users_that_have_sharing_enabled (line 56) | def test_should_list_shared_bookmarks_from_all_users_that_have_sharing... method test_should_list_shared_bookmarks_from_selected_user (line 82) | def test_should_list_shared_bookmarks_from_selected_user(self): method test_should_list_bookmarks_matching_query (line 102) | def test_should_list_bookmarks_matching_query(self): method test_should_list_bookmarks_matching_bundle (line 116) | def test_should_list_bookmarks_matching_bundle(self): method test_should_list_only_publicly_shared_bookmarks_without_login (line 134) | def test_should_list_only_publicly_shared_bookmarks_without_login(self): method test_should_list_tags_for_shared_bookmarks_from_all_users_that_have_sharing_enabled (line 150) | def test_should_list_tags_for_shared_bookmarks_from_all_users_that_hav... method test_should_list_tags_for_shared_bookmarks_from_selected_user (line 184) | def test_should_list_tags_for_shared_bookmarks_from_selected_user(self): method test_should_list_tags_for_bookmarks_matching_query (line 207) | def test_should_list_tags_for_bookmarks_matching_query(self): method test_should_list_tags_for_bookmarks_matching_bundle (line 244) | def test_should_list_tags_for_bookmarks_matching_bundle(self): method test_should_list_only_tags_for_publicly_shared_bookmarks_without_login (line 283) | def test_should_list_only_tags_for_publicly_shared_bookmarks_without_l... method test_should_list_users_with_shared_bookmarks_if_sharing_is_enabled (line 307) | def test_should_list_users_with_shared_bookmarks_if_sharing_is_enabled... method test_should_list_only_users_with_publicly_shared_bookmarks_without_login (line 322) | def test_should_list_only_users_with_publicly_shared_bookmarks_without... method test_should_list_bookmarks_and_tags_for_search_preferences (line 342) | def test_should_list_bookmarks_and_tags_for_search_preferences(self): method test_should_open_bookmarks_in_new_page_by_default (line 380) | def test_should_open_bookmarks_in_new_page_by_default(self): method test_should_open_bookmarks_in_same_page_if_specified_in_user_profile (line 395) | def test_should_open_bookmarks_in_same_page_if_specified_in_user_profi... method test_edit_link_return_url_respects_search_options (line 412) | def test_edit_link_return_url_respects_search_options(self): method test_apply_search_preferences (line 453) | def test_apply_search_preferences(self): method test_save_search_preferences (line 502) | def test_save_search_preferences(self): method test_url_encode_bookmark_actions_url (line 599) | def test_url_encode_bookmark_actions_url(self): method test_encode_search_params (line 611) | def test_encode_search_params(self): method test_turbo_frame_details_modal_renders_details_modal_update (line 643) | def test_turbo_frame_details_modal_renders_details_modal_update(self): method test_includes_public_shared_rss_feed (line 655) | def test_includes_public_shared_rss_feed(self): method test_tag_menu_visible_for_authenticated_user (line 663) | def test_tag_menu_visible_for_authenticated_user(self): method test_tag_menu_not_visible_for_unauthenticated_user (line 673) | def test_tag_menu_not_visible_for_unauthenticated_user(self): FILE: bookmarks/tests/test_bookmark_shared_view_performance.py class BookmarkSharedViewPerformanceTestCase (line 11) | class BookmarkSharedViewPerformanceTestCase( method setUp (line 14) | def setUp(self) -> None: method get_connection (line 18) | def get_connection(self): method test_should_not_increase_number_of_queries_per_bookmark (line 21) | def test_should_not_increase_number_of_queries_per_bookmark(self): FILE: bookmarks/tests/test_bookmark_validation.py class BookmarkValidationTestCase (line 32) | class BookmarkValidationTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 33) | def setUp(self) -> None: method test_bookmark_model_should_not_allow_missing_url (line 36) | def test_bookmark_model_should_not_allow_missing_url(self): method test_bookmark_model_should_not_allow_empty_url (line 46) | def test_bookmark_model_should_not_allow_empty_url(self): method test_bookmark_model_should_validate_url_if_not_disabled_in_settings (line 58) | def test_bookmark_model_should_validate_url_if_not_disabled_in_setting... method test_bookmark_model_should_not_validate_url_if_disabled_in_settings (line 62) | def test_bookmark_model_should_not_validate_url_if_disabled_in_setting... method test_bookmark_form_should_validate_required_fields (line 65) | def test_bookmark_form_should_validate_required_fields(self): method test_bookmark_form_should_validate_url_if_not_disabled_in_settings (line 80) | def test_bookmark_form_should_validate_url_if_not_disabled_in_settings... method test_bookmark_form_should_not_validate_url_if_disabled_in_settings (line 84) | def test_bookmark_form_should_not_validate_url_if_disabled_in_settings... method _run_bookmark_model_url_validity_checks (line 87) | def _run_bookmark_model_url_validity_checks(self, cases): method _run_bookmark_form_url_validity_checks (line 106) | def _run_bookmark_form_url_validity_checks(self, cases): FILE: bookmarks/tests/test_bookmarks_api.py class BookmarksApiTestCase (line 23) | class BookmarksApiTestCase(LinkdingApiTestCase, BookmarkFactoryMixin): method setUp (line 24) | def setUp(self): method tearDown (line 32) | def tearDown(self): method authenticate (line 35) | def authenticate(self): method assertBookmarkListEqual (line 39) | def assertBookmarkListEqual(self, data_list, bookmarks): method test_list_bookmarks (line 83) | def test_list_bookmarks(self): method test_list_bookmarks_with_more_details (line 92) | def test_list_bookmarks_with_more_details(self): method test_list_bookmarks_returns_none_for_website_title_and_description (line 107) | def test_list_bookmarks_returns_none_for_website_title_and_description... method test_list_bookmarks_does_not_return_archived_bookmarks (line 120) | def test_list_bookmarks_does_not_return_archived_bookmarks(self): method test_list_bookmarks_should_filter_by_query (line 130) | def test_list_bookmarks_should_filter_by_query(self): method test_list_bookmarks_should_filter_by_bundle (line 142) | def test_list_bookmarks_should_filter_by_bundle(self): method test_list_bookmarks_filter_unread (line 155) | def test_list_bookmarks_filter_unread(self): method test_list_bookmarks_filter_shared (line 182) | def test_list_bookmarks_filter_shared(self): method test_list_bookmarks_should_respect_sort (line 209) | def test_list_bookmarks_should_respect_sort(self): method test_list_archived_bookmarks_does_not_return_unarchived_bookmarks (line 220) | def test_list_archived_bookmarks_does_not_return_unarchived_bookmarks(... method test_list_archived_bookmarks_with_more_details (line 231) | def test_list_archived_bookmarks_with_more_details(self): method test_list_archived_bookmarks_should_filter_by_query (line 248) | def test_list_archived_bookmarks_should_filter_by_query(self): method test_list_archived_bookmarks_should_filter_by_bundle (line 262) | def test_list_archived_bookmarks_should_filter_by_bundle(self): method test_list_archived_bookmarks_should_respect_sort (line 277) | def test_list_archived_bookmarks_should_respect_sort(self): method test_list_shared_bookmarks (line 288) | def test_list_shared_bookmarks(self): method test_list_shared_bookmarks_with_more_details (line 312) | def test_list_shared_bookmarks_with_more_details(self): method test_list_only_publicly_shared_bookmarks_when_not_logged_in (line 332) | def test_list_only_publicly_shared_bookmarks_when_not_logged_in(self): method test_list_shared_bookmarks_should_filter_by_query_and_user (line 349) | def test_list_shared_bookmarks_should_filter_by_query_and_user(self): method test_list_shared_bookmarks_should_respect_sort (line 405) | def test_list_shared_bookmarks_should_respect_sort(self): method test_create_bookmark (line 417) | def test_create_bookmark(self): method test_create_bookmark_enhances_with_metadata_by_default (line 443) | def test_create_bookmark_enhances_with_metadata_by_default(self): method test_create_bookmark_does_not_enhance_with_metadata_if_scraping_is_disabled (line 459) | def test_create_bookmark_does_not_enhance_with_metadata_if_scraping_is... method test_create_bookmark_creates_html_snapshot_by_default (line 481) | def test_create_bookmark_creates_html_snapshot_by_default(self): method test_create_bookmark_does_not_create_html_snapshot_if_disabled (line 496) | def test_create_bookmark_does_not_create_html_snapshot_if_disabled(self): method test_create_bookmark_with_same_url_updates_existing_bookmark (line 515) | def test_create_bookmark_with_same_url_updates_existing_bookmark(self): method test_create_bookmark_replaces_whitespace_in_tag_names (line 544) | def test_create_bookmark_replaces_whitespace_in_tag_names(self): method test_create_bookmark_minimal_payload (line 558) | def test_create_bookmark_minimal_payload(self): method test_create_archived_bookmark (line 578) | def test_create_archived_bookmark(self): method test_create_bookmark_is_not_archived_by_default (line 598) | def test_create_bookmark_is_not_archived_by_default(self): method test_create_unread_bookmark (line 606) | def test_create_unread_bookmark(self): method test_create_bookmark_is_not_unread_by_default (line 614) | def test_create_bookmark_is_not_unread_by_default(self): method test_create_shared_bookmark (line 622) | def test_create_shared_bookmark(self): method test_create_bookmark_is_not_shared_by_default (line 630) | def test_create_bookmark_is_not_shared_by_default(self): method test_create_bookmark_should_add_tags_from_auto_tagging (line 638) | def test_create_bookmark_should_add_tags_from_auto_tagging(self): method test_create_bookmark_should_set_default_dates (line 652) | def test_create_bookmark_should_set_default_dates(self): method test_create_bookmark_with_date_added (line 665) | def test_create_bookmark_with_date_added(self): method test_create_bookmark_with_date_modified (line 674) | def test_create_bookmark_with_date_modified(self): method test_get_bookmark (line 683) | def test_get_bookmark(self): method test_get_bookmark_with_more_details (line 691) | def test_get_bookmark_with_more_details(self): method test_get_bookmark_returns_fallback_webarchive_url (line 703) | def test_get_bookmark_returns_fallback_webarchive_url(self): method test_update_bookmark (line 718) | def test_update_bookmark(self): method test_update_bookmark_ignores_readonly_fields (line 728) | def test_update_bookmark_ignores_readonly_fields(self): method test_update_bookmark_fails_without_required_fields (line 750) | def test_update_bookmark_fails_without_required_fields(self): method test_update_bookmark_with_minimal_payload_does_not_modify_bookmark (line 758) | def test_update_bookmark_with_minimal_payload_does_not_modify_bookmark... method test_update_bookmark_unread_flag (line 777) | def test_update_bookmark_unread_flag(self): method test_update_bookmark_shared_flag (line 787) | def test_update_bookmark_shared_flag(self): method test_update_bookmark_adds_tags_from_auto_tagging (line 797) | def test_update_bookmark_adds_tags_from_auto_tagging(self): method test_update_bookmark_should_prevent_duplicate_urls (line 813) | def test_update_bookmark_should_prevent_duplicate_urls(self): method test_patch_bookmark (line 836) | def test_patch_bookmark(self): method test_patch_ignores_readonly_fields (line 895) | def test_patch_ignores_readonly_fields(self): method test_patch_with_empty_payload_does_not_modify_bookmark (line 915) | def test_patch_with_empty_payload_does_not_modify_bookmark(self): method test_patch_bookmark_adds_tags_from_auto_tagging (line 933) | def test_patch_bookmark_adds_tags_from_auto_tagging(self): method test_delete_bookmark (line 949) | def test_delete_bookmark(self): method test_archive (line 957) | def test_archive(self): method test_unarchive (line 966) | def test_unarchive(self): method test_check_returns_no_bookmark_if_url_is_not_bookmarked (line 975) | def test_check_returns_no_bookmark_if_url_is_not_bookmarked(self): method test_check_returns_scraped_metadata_if_url_is_not_bookmarked (line 987) | def test_check_returns_scraped_metadata_if_url_is_not_bookmarked(self): method test_check_returns_bookmark_if_url_is_bookmarked (line 1014) | def test_check_returns_bookmark_if_url_is_bookmarked(self): method test_check_returns_scraped_metadata_if_url_is_bookmarked (line 1044) | def test_check_returns_scraped_metadata_if_url_is_bookmarked(self): method test_check_returns_bookmark_using_normalized_url (line 1075) | def test_check_returns_bookmark_using_normalized_url(self): method test_check_returns_no_auto_tags_if_none_configured (line 1098) | def test_check_returns_no_auto_tags_if_none_configured(self): method test_check_returns_matching_auto_tags (line 1110) | def test_check_returns_matching_auto_tags(self): method test_check_ignore_cache (line 1126) | def test_check_ignore_cache(self): method test_can_only_access_own_bookmarks (line 1163) | def test_can_only_access_own_bookmarks(self): method assertUserProfile (line 1240) | def assertUserProfile(self, response: Response, profile: UserProfile): method test_user_profile (line 1264) | def test_user_profile(self): method create_singlefile_upload_body (line 1297) | def create_singlefile_upload_body(self): method test_singlefile_upload (line 1305) | def test_singlefile_upload(self): method test_singlefile_creates_bookmark_if_not_exists (line 1321) | def test_singlefile_creates_bookmark_if_not_exists(self): method test_singlefile_updates_own_bookmark_if_exists (line 1341) | def test_singlefile_updates_own_bookmark_if_exists(self): method test_singlefile_creates_bookmark_without_creating_snapshot (line 1358) | def test_singlefile_creates_bookmark_without_creating_snapshot(self): method test_singlefile_upload_missing_parameters (line 1375) | def test_singlefile_upload_missing_parameters(self): method test_singlefile_upload_disabled (line 1404) | def test_singlefile_upload_disabled(self): FILE: bookmarks/tests/test_bookmarks_api_performance.py class BookmarksApiPerformanceTestCase (line 11) | class BookmarksApiPerformanceTestCase(LinkdingApiTestCase, BookmarkFacto... method setUp (line 12) | def setUp(self) -> None: method get_connection (line 19) | def get_connection(self): method test_list_bookmarks_max_queries (line 22) | def test_list_bookmarks_max_queries(self): method test_list_archived_bookmarks_max_queries (line 40) | def test_list_archived_bookmarks_max_queries(self): method test_list_shared_bookmarks_max_queries (line 58) | def test_list_shared_bookmarks_max_queries(self): FILE: bookmarks/tests/test_bookmarks_api_permissions.py class BookmarksApiPermissionsTestCase (line 9) | class BookmarksApiPermissionsTestCase(LinkdingApiTestCase, BookmarkFacto... method authenticate (line 10) | def authenticate(self) -> None: method test_list_bookmarks_requires_authentication (line 14) | def test_list_bookmarks_requires_authentication(self): method test_list_archived_bookmarks_requires_authentication (line 25) | def test_list_archived_bookmarks_requires_authentication(self): method test_list_shared_bookmarks_does_not_require_authentication (line 37) | def test_list_shared_bookmarks_does_not_require_authentication(self): method test_create_bookmark_requires_authentication (line 49) | def test_create_bookmark_requires_authentication(self): method test_get_bookmark_requires_authentication (line 66) | def test_get_bookmark_requires_authentication(self): method test_update_bookmark_requires_authentication (line 75) | def test_update_bookmark_requires_authentication(self): method test_update_bookmark_only_updates_own_bookmarks (line 85) | def test_update_bookmark_only_updates_own_bookmarks(self): method test_patch_bookmark_requires_authentication (line 95) | def test_patch_bookmark_requires_authentication(self): method test_patch_bookmark_only_updates_own_bookmarks (line 105) | def test_patch_bookmark_only_updates_own_bookmarks(self): method test_delete_bookmark_requires_authentication (line 115) | def test_delete_bookmark_requires_authentication(self): method test_archive_requires_authentication (line 124) | def test_archive_requires_authentication(self): method test_unarchive_requires_authentication (line 133) | def test_unarchive_requires_authentication(self): method test_check_requires_authentication (line 142) | def test_check_requires_authentication(self): method test_user_profile_requires_authentication (line 153) | def test_user_profile_requires_authentication(self): method test_singlefile_upload_requires_authentication (line 161) | def test_singlefile_upload_requires_authentication(self): FILE: bookmarks/tests/test_bookmarks_list_template.py class BookmarkListTemplateTest (line 17) | class BookmarkListTemplateTest(TestCase, BookmarkFactoryMixin, HtmlTestM... method assertBookmarksLink (line 18) | def assertBookmarksLink( method assertWebArchiveLink (line 38) | def assertWebArchiveLink( method assertViewLink (line 51) | def assertViewLink(self, html: str, bookmark: Bookmark, base_url=None): method assertNoViewLink (line 54) | def assertNoViewLink(self, html: str, bookmark: Bookmark, base_url=None): method assertViewLinkCount (line 57) | def assertViewLinkCount( method assertEditLinkCount (line 75) | def assertEditLinkCount(self, html: str, bookmark: Bookmark, count=1): method assertArchiveLinkCount (line 85) | def assertArchiveLinkCount(self, html: str, bookmark: Bookmark, count=1): method assertDeleteLinkCount (line 95) | def assertDeleteLinkCount(self, html: str, bookmark: Bookmark, count=1): method assertBookmarkActions (line 105) | def assertBookmarkActions(self, html: str, bookmark: Bookmark): method assertNoBookmarkActions (line 108) | def assertNoBookmarkActions(self, html: str, bookmark: Bookmark): method assertBookmarkActionsCount (line 111) | def assertBookmarkActionsCount(self, html: str, bookmark: Bookmark, co... method assertShareInfo (line 116) | def assertShareInfo(self, html: str, bookmark: Bookmark): method assertNoShareInfo (line 119) | def assertNoShareInfo(self, html: str, bookmark: Bookmark): method assertShareInfoCount (line 122) | def assertShareInfoCount(self, html: str, bookmark: Bookmark, count=1): method assertFaviconVisible (line 134) | def assertFaviconVisible(self, html: str, bookmark: Bookmark): method assertFaviconHidden (line 137) | def assertFaviconHidden(self, html: str, bookmark: Bookmark): method assertFavicon (line 140) | def assertFavicon(self, html: str, bookmark: Bookmark, visible=True): method assertPreviewImageVisible (line 153) | def assertPreviewImageVisible(self, html: str, bookmark: Bookmark): method assertPreviewImageHidden (line 156) | def assertPreviewImageHidden(self, html: str, bookmark: Bookmark): method assertPreviewImage (line 159) | def assertPreviewImage(self, html: str, bookmark: Bookmark, visible=Tr... method assertPreviewImagePlaceholder (line 171) | def assertPreviewImagePlaceholder(self, html: str): method assertBookmarkURLCount (line 176) | def assertBookmarkURLCount( method assertBookmarkURLVisible (line 192) | def assertBookmarkURLVisible(self, html: str, bookmark: Bookmark): method assertBookmarkURLHidden (line 195) | def assertBookmarkURLHidden( method assertNotes (line 200) | def assertNotes(self, html: str, notes_html: str, count=1): method assertNotesToggle (line 213) | def assertNotesToggle(self, html: str, count=1): method assertUnshareButton (line 227) | def assertUnshareButton(self, html: str, bookmark: Bookmark, count=1): method assertMarkAsReadButton (line 243) | def assertMarkAsReadButton(self, html: str, bookmark: Bookmark, count=1): method render_template (line 259) | def render_template( method setup_date_format_test (line 283) | def setup_date_format_test( method inline_bookmark_description_test (line 295) | def inline_bookmark_description_test(self, bookmark): method test_inline_bookmark_description (line 344) | def test_inline_bookmark_description(self): method separate_bookmark_description_test (line 374) | def separate_bookmark_description_test(self, bookmark): method test_separate_bookmark_description (line 413) | def test_separate_bookmark_description(self): method test_bookmark_description_max_lines (line 443) | def test_bookmark_description_max_lines(self): method test_bookmark_tag_ordering (line 461) | def test_bookmark_tag_ordering(self): method test_bookmark_tag_query_string (line 477) | def test_bookmark_tag_query_string(self): method test_should_render_web_archive_link_with_absolute_date_setting (line 498) | def test_should_render_web_archive_link_with_absolute_date_setting(self): method test_should_render_web_archive_link_with_relative_date_setting (line 510) | def test_should_render_web_archive_link_with_relative_date_setting(self): method test_should_render_generated_web_archive_link_without_saved_snapshot_url (line 519) | def test_should_render_generated_web_archive_link_without_saved_snapsh... method test_bookmark_link_target_should_be_blank_by_default (line 538) | def test_bookmark_link_target_should_be_blank_by_default(self): method test_bookmark_link_target_should_respect_user_profile (line 544) | def test_bookmark_link_target_should_respect_user_profile(self): method test_web_archive_link_target_should_be_blank_by_default (line 554) | def test_web_archive_link_target_should_be_blank_by_default(self): method test_web_archive_link_target_should_respect_user_profile (line 566) | def test_web_archive_link_target_should_respect_user_profile(self): method test_should_render_latest_snapshot_link_if_one_exists (line 582) | def test_should_render_latest_snapshot_link_if_one_exists(self): method test_should_reflect_unread_state_as_css_class (line 607) | def test_should_reflect_unread_state_as_css_class(self): method test_should_reflect_shared_state_as_css_class (line 616) | def test_should_reflect_shared_state_as_css_class(self): method test_should_reflect_both_unread_and_shared_state_as_css_class (line 629) | def test_should_reflect_both_unread_and_shared_state_as_css_class(self): method test_show_bookmark_actions_for_owned_bookmarks (line 642) | def test_show_bookmark_actions_for_owned_bookmarks(self): method test_hide_view_link (line 650) | def test_hide_view_link(self): method test_hide_edit_link (line 662) | def test_hide_edit_link(self): method test_hide_archive_link (line 674) | def test_hide_archive_link(self): method test_hide_remove_link (line 686) | def test_hide_remove_link(self): method test_show_share_info_for_non_owned_bookmarks (line 698) | def test_show_share_info_for_non_owned_bookmarks(self): method test_share_info_user_link_keeps_query_params (line 714) | def test_share_info_user_link_keeps_query_params(self): method test_preview_image_should_be_visible_when_preview_images_enabled (line 735) | def test_preview_image_should_be_visible_when_preview_images_enabled(s... method test_preview_image_should_be_hidden_when_preview_images_disabled (line 745) | def test_preview_image_should_be_hidden_when_preview_images_disabled(s... method test_preview_image_shows_placeholder_when_there_is_no_preview_image (line 755) | def test_preview_image_shows_placeholder_when_there_is_no_preview_imag... method test_favicon_should_be_visible_when_favicons_enabled (line 765) | def test_favicon_should_be_visible_when_favicons_enabled(self): method test_favicon_should_be_hidden_when_there_is_no_icon (line 775) | def test_favicon_should_be_hidden_when_there_is_no_icon(self): method test_favicon_should_be_hidden_when_favicons_disabled (line 785) | def test_favicon_should_be_hidden_when_favicons_disabled(self): method test_bookmark_url_should_be_hidden_by_default (line 795) | def test_bookmark_url_should_be_hidden_by_default(self): method test_show_bookmark_url_when_enabled (line 804) | def test_show_bookmark_url_when_enabled(self): method test_hide_bookmark_url_when_disabled (line 814) | def test_hide_bookmark_url_when_disabled(self): method test_show_mark_as_read_when_unread (line 824) | def test_show_mark_as_read_when_unread(self): method test_hide_mark_as_read_when_read (line 830) | def test_hide_mark_as_read_when_read(self): method test_hide_mark_as_read_for_non_owned_bookmarks (line 836) | def test_hide_mark_as_read_for_non_owned_bookmarks(self): method test_show_unshare_button_when_shared (line 845) | def test_show_unshare_button_when_shared(self): method test_hide_unshare_button_when_not_shared (line 855) | def test_hide_unshare_button_when_not_shared(self): method test_hide_unshare_button_when_sharing_is_disabled (line 865) | def test_hide_unshare_button_when_sharing_is_disabled(self): method test_hide_unshare_for_non_owned_bookmarks (line 875) | def test_hide_unshare_for_non_owned_bookmarks(self): method test_without_notes (line 884) | def test_without_notes(self): method test_with_notes (line 891) | def test_with_notes(self): method test_note_renders_markdown (line 898) | def test_note_renders_markdown(self): method test_note_renders_markdown_with_linkify (line 907) | def test_note_renders_markdown_with_linkify(self): method test_note_linkify_converts_schemeless_urls_to_https (line 922) | def test_note_linkify_converts_schemeless_urls_to_https(self): method test_note_cleans_html (line 958) | def test_note_cleans_html(self): method test_notes_are_hidden_initially_by_default (line 971) | def test_notes_are_hidden_initially_by_default(self): method test_notes_are_hidden_initially_with_permanent_notes_disabled (line 979) | def test_notes_are_hidden_initially_with_permanent_notes_disabled(self): method test_notes_are_visible_initially_with_permanent_notes_enabled (line 991) | def test_notes_are_visible_initially_with_permanent_notes_enabled(self): method test_toggle_notes_is_visible_by_default (line 1003) | def test_toggle_notes_is_visible_by_default(self): method test_toggle_notes_is_visible_with_permanent_notes_disabled (line 1009) | def test_toggle_notes_is_visible_with_permanent_notes_disabled(self): method test_toggle_notes_is_hidden_with_permanent_notes_enabled (line 1019) | def test_toggle_notes_is_hidden_with_permanent_notes_enabled(self): method test_with_anonymous_user (line 1029) | def test_with_anonymous_user(self): method test_empty_state (line 1066) | def test_empty_state(self): method test_empty_state_with_valid_query_no_results (line 1073) | def test_empty_state_with_valid_query_no_results(self): method test_empty_state_with_invalid_query (line 1081) | def test_empty_state_with_invalid_query(self): method test_empty_state_with_legacy_search (line 1088) | def test_empty_state_with_legacy_search(self): method test_pagination_is_not_sticky_by_default (line 1101) | def test_pagination_is_not_sticky_by_default(self): method test_pagination_is_sticky_when_enabled_in_profile (line 1107) | def test_pagination_is_sticky_when_enabled_in_profile(self): method test_items_per_page_is_30_by_default (line 1116) | def test_items_per_page_is_30_by_default(self): method test_items_per_page_is_configurable (line 1124) | def test_items_per_page_is_configurable(self): method test_no_actions_rendered_when_is_preview (line 1135) | def test_no_actions_rendered_when_is_preview(self): FILE: bookmarks/tests/test_bookmarks_model.py class BookmarkTestCase (line 6) | class BookmarkTestCase(TestCase): method test_bookmark_resolved_title (line 7) | def test_bookmark_resolved_title(self): FILE: bookmarks/tests/test_bookmarks_service.py class BookmarkServiceTestCase (line 30) | class BookmarkServiceTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 31) | def setUp(self) -> None: method tearDown (line 45) | def tearDown(self): method test_create_should_not_update_website_metadata (line 49) | def test_create_should_not_update_website_metadata(self): method test_create_should_update_existing_bookmark_with_same_url (line 70) | def test_create_should_update_existing_bookmark_with_same_url(self): method test_create_should_update_existing_bookmark_with_normalized_url (line 97) | def test_create_should_update_existing_bookmark_with_normalized_url( method test_create_should_update_existing_bookmark_when_normalized_url_is_empty (line 116) | def test_create_should_update_existing_bookmark_when_normalized_url_is... method test_create_should_update_first_existing_bookmark_for_multiple_duplicates (line 136) | def test_create_should_update_first_existing_bookmark_for_multiple_dup... method test_create_should_populate_url_normalized_field (line 157) | def test_create_should_populate_url_normalized_field(self): method test_create_should_create_web_archive_snapshot (line 173) | def test_create_should_create_web_archive_snapshot(self): method test_create_should_load_favicon (line 184) | def test_create_should_load_favicon(self): method test_create_should_load_html_snapshot (line 191) | def test_create_should_load_html_snapshot(self): method test_create_should_not_load_html_snapshot_when_disabled (line 198) | def test_create_should_not_load_html_snapshot_when_disabled(self): method test_create_should_not_load_html_snapshot_when_setting_is_disabled (line 207) | def test_create_should_not_load_html_snapshot_when_setting_is_disabled... method test_create_should_add_tags_from_auto_tagging (line 218) | def test_create_should_add_tags_from_auto_tagging(self): method test_create_should_set_default_dates (line 230) | def test_create_should_set_default_dates(self): method test_create_should_use_provided_date_added (line 242) | def test_create_should_use_provided_date_added(self): method test_create_should_use_provided_date_modified (line 250) | def test_create_should_use_provided_date_modified(self): method test_create_should_use_provided_dates (line 258) | def test_create_should_use_provided_dates(self): method test_update_should_create_web_archive_snapshot_if_url_did_change (line 272) | def test_update_should_create_web_archive_snapshot_if_url_did_change(s... method test_update_should_not_create_web_archive_snapshot_if_url_did_not_change (line 284) | def test_update_should_not_create_web_archive_snapshot_if_url_did_not_... method test_update_should_not_update_website_metadata (line 294) | def test_update_should_not_update_website_metadata(self): method test_update_should_not_update_website_metadata_if_url_did_change (line 306) | def test_update_should_not_update_website_metadata_if_url_did_change(s... method test_update_should_update_favicon (line 318) | def test_update_should_update_favicon(self): method test_update_should_not_create_html_snapshot (line 326) | def test_update_should_not_create_html_snapshot(self): method test_update_should_add_tags_from_auto_tagging (line 334) | def test_update_should_add_tags_from_auto_tagging(self): method test_archive_bookmark (line 346) | def test_archive_bookmark(self): method test_unarchive_bookmark (line 363) | def test_unarchive_bookmark(self): method test_archive_bookmarks (line 379) | def test_archive_bookmarks(self): method test_archive_bookmarks_should_only_archive_specified_bookmarks (line 392) | def test_archive_bookmarks_should_only_archive_specified_bookmarks(self): method test_archive_bookmarks_should_only_archive_user_owned_bookmarks (line 403) | def test_archive_bookmarks_should_only_archive_user_owned_bookmarks(se... method test_archive_bookmarks_should_accept_mix_of_int_and_string_ids (line 418) | def test_archive_bookmarks_should_accept_mix_of_int_and_string_ids(self): method test_unarchive_bookmarks (line 432) | def test_unarchive_bookmarks(self): method test_unarchive_bookmarks_should_only_unarchive_specified_bookmarks (line 445) | def test_unarchive_bookmarks_should_only_unarchive_specified_bookmarks... method test_unarchive_bookmarks_should_only_unarchive_user_owned_bookmarks (line 458) | def test_unarchive_bookmarks_should_only_unarchive_user_owned_bookmark... method test_unarchive_bookmarks_should_accept_mix_of_int_and_string_ids (line 473) | def test_unarchive_bookmarks_should_accept_mix_of_int_and_string_ids(s... method test_delete_bookmarks (line 487) | def test_delete_bookmarks(self): method test_delete_bookmarks_should_only_delete_specified_bookmarks (line 500) | def test_delete_bookmarks_should_only_delete_specified_bookmarks(self): method test_delete_bookmarks_should_only_delete_user_owned_bookmarks (line 511) | def test_delete_bookmarks_should_only_delete_user_owned_bookmarks(self): method test_delete_bookmarks_should_accept_mix_of_int_and_string_ids (line 528) | def test_delete_bookmarks_should_accept_mix_of_int_and_string_ids(self): method test_tag_bookmarks (line 541) | def test_tag_bookmarks(self): method test_tag_bookmarks_should_create_tags (line 562) | def test_tag_bookmarks_should_create_tags(self): method test_tag_bookmarks_should_handle_existing_relationships (line 589) | def test_tag_bookmarks_should_handle_existing_relationships(self): method test_tag_bookmarks_should_only_tag_specified_bookmarks (line 614) | def test_tag_bookmarks_should_only_tag_specified_bookmarks(self): method test_tag_bookmarks_should_only_tag_user_owned_bookmarks (line 635) | def test_tag_bookmarks_should_only_tag_user_owned_bookmarks(self): method test_tag_bookmarks_should_accept_mix_of_int_and_string_ids (line 657) | def test_tag_bookmarks_should_accept_mix_of_int_and_string_ids(self): method test_untag_bookmarks (line 674) | def test_untag_bookmarks(self): method test_untag_bookmarks_should_only_tag_specified_bookmarks (line 695) | def test_untag_bookmarks_should_only_tag_specified_bookmarks(self): method test_untag_bookmarks_should_only_tag_user_owned_bookmarks (line 716) | def test_untag_bookmarks_should_only_tag_user_owned_bookmarks(self): method test_untag_bookmarks_should_accept_mix_of_int_and_string_ids (line 738) | def test_untag_bookmarks_should_accept_mix_of_int_and_string_ids(self): method test_mark_bookmarks_as_read (line 755) | def test_mark_bookmarks_as_read(self): method test_mark_bookmarks_as_read_should_only_update_specified_bookmarks (line 768) | def test_mark_bookmarks_as_read_should_only_update_specified_bookmarks... method test_mark_bookmarks_as_read_should_only_update_user_owned_bookmarks (line 781) | def test_mark_bookmarks_as_read_should_only_update_user_owned_bookmark... method test_mark_bookmarks_as_read_should_accept_mix_of_int_and_string_ids (line 796) | def test_mark_bookmarks_as_read_should_accept_mix_of_int_and_string_id... method test_mark_bookmarks_as_unread (line 810) | def test_mark_bookmarks_as_unread(self): method test_mark_bookmarks_as_unread_should_only_update_specified_bookmarks (line 823) | def test_mark_bookmarks_as_unread_should_only_update_specified_bookmar... method test_mark_bookmarks_as_unread_should_only_update_user_owned_bookmarks (line 836) | def test_mark_bookmarks_as_unread_should_only_update_user_owned_bookma... method test_mark_bookmarks_as_unread_should_accept_mix_of_int_and_string_ids (line 851) | def test_mark_bookmarks_as_unread_should_accept_mix_of_int_and_string_... method test_share_bookmarks (line 865) | def test_share_bookmarks(self): method test_share_bookmarks_should_only_update_specified_bookmarks (line 878) | def test_share_bookmarks_should_only_update_specified_bookmarks(self): method test_share_bookmarks_should_only_update_user_owned_bookmarks (line 889) | def test_share_bookmarks_should_only_update_user_owned_bookmarks(self): method test_share_bookmarks_should_accept_mix_of_int_and_string_ids (line 904) | def test_share_bookmarks_should_accept_mix_of_int_and_string_ids(self): method test_unshare_bookmarks (line 918) | def test_unshare_bookmarks(self): method test_unshare_bookmarks_should_only_update_specified_bookmarks (line 931) | def test_unshare_bookmarks_should_only_update_specified_bookmarks(self): method test_unshare_bookmarks_should_only_update_user_owned_bookmarks (line 942) | def test_unshare_bookmarks_should_only_update_user_owned_bookmarks(self): method test_unshare_bookmarks_should_accept_mix_of_int_and_string_ids (line 957) | def test_unshare_bookmarks_should_accept_mix_of_int_and_string_ids(self): method test_enhance_with_website_metadata (line 971) | def test_enhance_with_website_metadata(self): method test_refresh_bookmarks_metadata (line 1029) | def test_refresh_bookmarks_metadata(self): method test_refresh_bookmarks_metadata_should_only_refresh_specified_bookmarks (line 1041) | def test_refresh_bookmarks_metadata_should_only_refresh_specified_book... method test_refresh_bookmarks_metadata_should_only_refresh_user_owned_bookmarks (line 1061) | def test_refresh_bookmarks_metadata_should_only_refresh_user_owned_boo... method test_refresh_bookmarks_metadata_should_accept_mix_of_int_and_string_ids (line 1083) | def test_refresh_bookmarks_metadata_should_accept_mix_of_int_and_strin... method test_create_html_snapshots (line 1096) | def test_create_html_snapshots(self): method test_create_html_snapshots_should_only_create_for_specified_bookmarks (line 1114) | def test_create_html_snapshots_should_only_create_for_specified_bookma... method test_create_html_snapshots_should_only_create_for_user_owned_bookmarks (line 1130) | def test_create_html_snapshots_should_only_create_for_user_owned_bookm... method test_create_html_snapshots_should_accept_mix_of_int_and_string_ids (line 1148) | def test_create_html_snapshots_should_accept_mix_of_int_and_string_ids... FILE: bookmarks/tests/test_bookmarks_tasks.py function create_wayback_machine_save_api_mock (line 15) | def create_wayback_machine_save_api_mock( class BookmarkTasksTestCase (line 27) | class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 28) | def setUp(self): method tearDown (line 68) | def tearDown(self): method executed_count (line 76) | def executed_count(self): method test_create_web_archive_snapshot_should_update_snapshot_url (line 79) | def test_create_web_archive_snapshot_should_update_snapshot_url(self): method test_create_web_archive_snapshot_should_handle_missing_bookmark_id (line 94) | def test_create_web_archive_snapshot_should_handle_missing_bookmark_id... method test_create_web_archive_snapshot_should_skip_if_snapshot_exists (line 100) | def test_create_web_archive_snapshot_should_skip_if_snapshot_exists(se... method test_create_web_archive_snapshot_should_force_update_snapshot (line 110) | def test_create_web_archive_snapshot_should_force_update_snapshot(self): method test_create_web_archive_snapshot_should_not_save_stale_bookmark_data (line 121) | def test_create_web_archive_snapshot_should_not_save_stale_bookmark_da... method test_create_web_archive_snapshot_should_not_run_when_background_tasks_are_disabled (line 144) | def test_create_web_archive_snapshot_should_not_run_when_background_ta... method test_create_web_archive_snapshot_should_not_run_when_web_archive_integration_is_disabled (line 154) | def test_create_web_archive_snapshot_should_not_run_when_web_archive_i... method test_load_favicon_should_create_favicon_file (line 169) | def test_load_favicon_should_create_favicon_file(self): method test_load_favicon_should_update_favicon_file (line 178) | def test_load_favicon_should_update_favicon_file(self): method test_load_favicon_should_handle_missing_bookmark (line 189) | def test_load_favicon_should_handle_missing_bookmark(self): method test_load_favicon_should_not_save_stale_bookmark_data (line 194) | def test_load_favicon_should_not_save_stale_bookmark_data(self): method test_load_favicon_should_not_run_when_background_tasks_are_disabled (line 213) | def test_load_favicon_should_not_run_when_background_tasks_are_disable... method test_load_favicon_should_not_run_when_favicon_feature_is_disabled (line 219) | def test_load_favicon_should_not_run_when_favicon_feature_is_disabled(... method test_schedule_bookmarks_without_favicons_should_load_favicon_for_all_bookmarks_without_favicon (line 228) | def test_schedule_bookmarks_without_favicons_should_load_favicon_for_a... method test_schedule_bookmarks_without_favicons_should_only_update_user_owned_bookmarks (line 244) | def test_schedule_bookmarks_without_favicons_should_only_update_user_o... method test_schedule_bookmarks_without_favicons_should_not_run_when_background_tasks_are_disabled (line 263) | def test_schedule_bookmarks_without_favicons_should_not_run_when_backg... method test_schedule_bookmarks_without_favicons_should_not_run_when_favicon_feature_is_disabled (line 271) | def test_schedule_bookmarks_without_favicons_should_not_run_when_favic... method test_schedule_refresh_favicons_should_update_favicon_for_all_bookmarks (line 282) | def test_schedule_refresh_favicons_should_update_favicon_for_all_bookm... method test_schedule_refresh_favicons_should_only_update_user_owned_bookmarks (line 296) | def test_schedule_refresh_favicons_should_only_update_user_owned_bookm... method test_schedule_refresh_favicons_should_not_run_when_background_tasks_are_disabled (line 313) | def test_schedule_refresh_favicons_should_not_run_when_background_task... method test_schedule_refresh_favicons_should_not_run_when_refresh_is_disabled (line 322) | def test_schedule_refresh_favicons_should_not_run_when_refresh_is_disa... method test_schedule_refresh_favicons_should_not_run_when_favicon_feature_is_disabled (line 328) | def test_schedule_refresh_favicons_should_not_run_when_favicon_feature... method test_load_preview_image_should_create_preview_image_file (line 339) | def test_load_preview_image_should_create_preview_image_file(self): method test_load_preview_image_should_update_preview_image_file (line 348) | def test_load_preview_image_should_update_preview_image_file(self): method test_load_preview_image_should_set_blank_when_none_is_returned (line 361) | def test_load_preview_image_should_set_blank_when_none_is_returned(self): method test_load_preview_image_should_handle_missing_bookmark (line 374) | def test_load_preview_image_should_handle_missing_bookmark(self): method test_load_preview_image_should_not_save_stale_bookmark_data (line 379) | def test_load_preview_image_should_not_save_stale_bookmark_data(self): method test_load_preview_image_should_not_run_when_background_tasks_are_disabled (line 398) | def test_load_preview_image_should_not_run_when_background_tasks_are_d... method test_load_preview_image_should_not_run_when_preview_image_feature_is_disabled (line 404) | def test_load_preview_image_should_not_run_when_preview_image_feature_... method test_schedule_bookmarks_without_previews_should_load_preview_for_all_bookmarks_without_preview (line 415) | def test_schedule_bookmarks_without_previews_should_load_preview_for_a... method test_schedule_bookmarks_without_previews_should_only_update_user_owned_bookmarks (line 431) | def test_schedule_bookmarks_without_previews_should_only_update_user_o... method test_schedule_bookmarks_without_previews_should_not_run_when_background_tasks_are_disabled (line 450) | def test_schedule_bookmarks_without_previews_should_not_run_when_backg... method test_schedule_bookmarks_without_previews_should_not_run_when_preview_feature_is_disabled (line 458) | def test_schedule_bookmarks_without_previews_should_not_run_when_previ... method test_create_html_snapshot_should_create_pending_asset (line 470) | def test_create_html_snapshot_should_create_pending_asset(self): method test_schedule_html_snapshots_should_create_snapshots (line 492) | def test_schedule_html_snapshots_should_create_snapshots(self): method test_create_html_snapshot_should_handle_missing_asset (line 510) | def test_create_html_snapshot_should_handle_missing_asset(self): method test_create_html_snapshot_should_not_create_asset_when_single_file_is_disabled (line 516) | def test_create_html_snapshot_should_not_create_asset_when_single_file... method test_create_html_snapshot_should_not_create_asset_when_background_tasks_are_disabled (line 525) | def test_create_html_snapshot_should_not_create_asset_when_background_... method test_create_missing_html_snapshots (line 534) | def test_create_missing_html_snapshots(self): method test_create_missing_html_snapshots_respects_current_user (line 604) | def test_create_missing_html_snapshots_respects_current_user(self): method test_refresh_metadata_task_not_called_when_background_tasks_disabled (line 620) | def test_refresh_metadata_task_not_called_when_background_tasks_disabl... method test_refresh_metadata_task_called_when_background_tasks_enabled (line 629) | def test_refresh_metadata_task_called_when_background_tasks_enabled(se... method test_refresh_metadata_task_should_handle_missing_bookmark (line 637) | def test_refresh_metadata_task_should_handle_missing_bookmark(self): method test_refresh_metadata_updates_title_description (line 645) | def test_refresh_metadata_updates_title_description(self): FILE: bookmarks/tests/test_bundles_api.py class BundlesApiTestCase (line 8) | class BundlesApiTestCase(LinkdingApiTestCase, BookmarkFactoryMixin): method assertBundle (line 9) | def assertBundle(self, bundle: BookmarkBundle, data: dict): method test_bundle_list (line 27) | def test_bundle_list(self): method test_bundle_list_only_returns_own_bundles (line 44) | def test_bundle_list_only_returns_own_bundles(self): method test_bundle_list_requires_authentication (line 63) | def test_bundle_list_requires_authentication(self): method test_bundle_detail (line 67) | def test_bundle_detail(self): method test_bundle_detail_only_returns_own_bundles (line 86) | def test_bundle_detail_only_returns_own_bundles(self): method test_bundle_detail_requires_authentication (line 95) | def test_bundle_detail_requires_authentication(self): method test_create_bundle (line 100) | def test_create_bundle(self): method test_create_bundle_auto_increments_order (line 131) | def test_create_bundle_auto_increments_order(self): method test_create_bundle_with_custom_order (line 146) | def test_create_bundle_with_custom_order(self): method test_create_bundle_requires_name (line 159) | def test_create_bundle_requires_name(self): method test_create_bundle_fields_can_be_empty (line 167) | def test_create_bundle_fields_can_be_empty(self): method test_create_bundle_requires_authentication (line 190) | def test_create_bundle_requires_authentication(self): method test_update_bundle_put (line 196) | def test_update_bundle_put(self): method test_update_bundle_patch (line 232) | def test_update_bundle_patch(self): method test_update_bundle_only_allows_own_bundles (line 256) | def test_update_bundle_only_allows_own_bundles(self): method test_update_bundle_requires_authentication (line 267) | def test_update_bundle_requires_authentication(self): method test_delete_bundle (line 274) | def test_delete_bundle(self): method test_delete_bundle_updates_order (line 284) | def test_delete_bundle_updates_order(self): method test_delete_bundle_only_allows_own_bundles (line 302) | def test_delete_bundle_only_allows_own_bundles(self): method test_delete_bundle_requires_authentication (line 313) | def test_delete_bundle_requires_authentication(self): method test_bundles_ordered_by_order_field (line 320) | def test_bundles_ordered_by_order_field(self): FILE: bookmarks/tests/test_bundles_edit_view.py class BundleEditViewTestCase (line 8) | class BundleEditViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 9) | def setUp(self) -> None: method create_form_data (line 13) | def create_form_data(self, overrides=None): method test_should_edit_bundle (line 27) | def test_should_edit_bundle(self): method test_should_render_edit_form_with_prefilled_fields (line 47) | def test_should_render_edit_form_with_prefilled_fields(self): method test_should_return_422_with_invalid_form (line 129) | def test_should_return_422_with_invalid_form(self): method test_should_not_allow_editing_other_users_bundles (line 146) | def test_should_not_allow_editing_other_users_bundles(self): method test_should_show_correct_preview (line 161) | def test_should_show_correct_preview(self): method test_should_show_correct_preview_after_posting_invalid_data (line 174) | def test_should_show_correct_preview_after_posting_invalid_data(self): FILE: bookmarks/tests/test_bundles_index_view.py class BundleIndexViewTestCase (line 9) | class BundleIndexViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 10) | def setUp(self) -> None: method test_render_bundle_list (line 14) | def test_render_bundle_list(self): method test_renders_user_owned_bundles_only (line 46) | def test_renders_user_owned_bundles_only(self): method test_empty_state (line 60) | def test_empty_state(self): method test_add_new_button (line 72) | def test_add_new_button(self): method test_remove_bundle (line 83) | def test_remove_bundle(self): method test_remove_bundle_updates_order (line 96) | def test_remove_bundle_updates_order(self): method test_remove_other_user_bundle (line 108) | def test_remove_other_user_bundle(self): method assertBundleOrder (line 120) | def assertBundleOrder(self, expected_bundles, user=None): method move_bundle (line 129) | def move_bundle(self, bundle: BookmarkBundle, position: int): method test_move_bundle (line 135) | def test_move_bundle(self): method test_move_bundle_response (line 152) | def test_move_bundle_response(self): method test_can_only_move_user_owned_bundles (line 161) | def test_can_only_move_user_owned_bundles(self): method test_move_bundle_only_affects_own_bundles (line 169) | def test_move_bundle_only_affects_own_bundles(self): method test_remove_non_existing_bundle (line 185) | def test_remove_non_existing_bundle(self): method test_post_without_action (line 195) | def test_post_without_action(self): FILE: bookmarks/tests/test_bundles_new_view.py class BundleNewViewTestCase (line 10) | class BundleNewViewTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method setUp (line 11) | def setUp(self) -> None: method create_form_data (line 15) | def create_form_data(self, overrides=None): method test_should_create_new_bundle (line 29) | def test_should_create_new_bundle(self): method test_should_increment_order_for_subsequent_bundles (line 48) | def test_should_increment_order_for_subsequent_bundles(self): method test_incrementing_order_ignores_other_user_bookmark (line 70) | def test_incrementing_order_ignores_other_user_bookmark(self): method test_should_return_422_with_invalid_form (line 79) | def test_should_return_422_with_invalid_form(self): method test_should_prefill_form_from_search_query_parameters (line 84) | def test_should_prefill_form_from_search_query_parameters(self): method test_should_ignore_special_search_commands (line 96) | def test_should_ignore_special_search_commands(self): method test_should_not_prefill_when_no_query_parameter (line 108) | def test_should_not_prefill_when_no_query_parameter(self): method test_should_not_prefill_when_editing_existing_bundle (line 118) | def test_should_not_prefill_when_editing_existing_bundle(self): method test_should_show_correct_preview_with_prefilled_values (line 138) | def test_should_show_correct_preview_with_prefilled_values(self): FILE: bookmarks/tests/test_bundles_preview_view.py class BundlePreviewViewTestCase (line 8) | class BundlePreviewViewTestCase(TestCase, BookmarkFactoryMixin, HtmlTest... method setUp (line 9) | def setUp(self) -> None: method test_preview_empty_bundle (line 13) | def test_preview_empty_bundle(self): method test_preview_with_search_terms (line 25) | def test_preview_with_search_terms(self): method test_preview_no_matching_bookmarks (line 40) | def test_preview_no_matching_bookmarks(self): method test_preview_renders_bookmark (line 51) | def test_preview_renders_bookmark(self): method test_preview_renders_bookmark_in_preview_mode (line 68) | def test_preview_renders_bookmark_in_preview_mode(self): method test_preview_ignores_archived_bookmarks (line 84) | def test_preview_ignores_archived_bookmarks(self): method test_preview_with_filter_unread (line 97) | def test_preview_with_filter_unread(self): method test_preview_with_filter_shared (line 128) | def test_preview_with_filter_shared(self): method test_preview_requires_authentication (line 159) | def test_preview_requires_authentication(self): method test_preview_only_shows_user_bookmarks (line 168) | def test_preview_only_shows_user_bookmarks(self): FILE: bookmarks/tests/test_context_path.py class MockUrlConf (line 7) | class MockUrlConf: method __init__ (line 8) | def __init__(self, module): class ContextPathTestCase (line 12) | class ContextPathTestCase(TestCase): method setUp (line 13) | def setUp(self): method tearDown (line 17) | def tearDown(self): method test_route_with_context_path (line 21) | def test_route_with_context_path(self): method test_route_without_context_path (line 41) | def test_route_without_context_path(self): FILE: bookmarks/tests/test_create_initial_superuser_command.py class TestCreateInitialSuperuserCommand (line 10) | class TestCreateInitialSuperuserCommand(TestCase): method test_create_with_password (line 15) | def test_create_with_password(self): method test_create_without_password (line 26) | def test_create_without_password(self): method test_create_without_options (line 35) | def test_create_without_options(self): method test_create_multiple_times (line 44) | def test_create_multiple_times(self): FILE: bookmarks/tests/test_custom_css_view.py class CustomCssViewTestCase (line 7) | class CustomCssViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 8) | def setUp(self) -> None: method test_with_empty_css (line 12) | def test_with_empty_css(self): method test_with_custom_css (line 19) | def test_with_custom_css(self): FILE: bookmarks/tests/test_exporter.py class ExporterTestCase (line 9) | class ExporterTestCase(TestCase, BookmarkFactoryMixin): method test_export_bookmarks (line 10) | def test_export_bookmarks(self): method test_escape_html (line 94) | def test_escape_html(self): method test_handle_empty_values (line 109) | def test_handle_empty_values(self): FILE: bookmarks/tests/test_exporter_performance.py class ExporterPerformanceTestCase (line 10) | class ExporterPerformanceTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 11) | def setUp(self) -> None: method get_connection (line 15) | def get_connection(self): method test_export_max_queries (line 18) | def test_export_max_queries(self): FILE: bookmarks/tests/test_favicon_loader.py class MockStreamingResponse (line 16) | class MockStreamingResponse: method __init__ (line 17) | def __init__(self, data=mock_icon_data, content_type="image/png"): method iter_content (line 21) | def iter_content(self, **kwargs): method __enter__ (line 24) | def __enter__(self): method __exit__ (line 27) | def __exit__(self, exc_type, exc_value, traceback): class FaviconLoaderTestCase (line 31) | class FaviconLoaderTestCase(TestCase): method setUp (line 32) | def setUp(self) -> None: method tearDown (line 39) | def tearDown(self) -> None: method create_mock_response (line 43) | def create_mock_response(self, icon_data=mock_icon_data, content_type=... method clear_favicon_folder (line 48) | def clear_favicon_folder(self): method get_icon_path (line 53) | def get_icon_path(self, filename): method icon_exists (line 56) | def icon_exists(self, filename): method get_icon_data (line 59) | def get_icon_data(self, filename): method count_icons (line 62) | def count_icons(self): method test_load_favicon (line 66) | def test_load_favicon(self): method test_load_favicon_creates_folder_if_not_exists (line 79) | def test_load_favicon_creates_folder_if_not_exists(self): method test_load_favicon_creates_single_icon_for_same_base_url (line 92) | def test_load_favicon_creates_single_icon_for_same_base_url(self): method test_load_favicon_creates_multiple_icons_for_different_base_url (line 102) | def test_load_favicon_creates_multiple_icons_for_different_base_url(se... method test_load_favicon_caches_icons (line 114) | def test_load_favicon_caches_icons(self): method test_load_favicon_updates_stale_icon (line 127) | def test_load_favicon_updates_stale_icon(self): method test_custom_provider_with_url_param (line 158) | def test_custom_provider_with_url_param(self): method test_custom_provider_with_domain_param (line 168) | def test_custom_provider_with_domain_param(self): method test_guess_file_extension (line 177) | def test_guess_file_extension(self): FILE: bookmarks/tests/test_feeds.py function rfc2822_date (line 15) | def rfc2822_date(date): class FeedsTestCase (line 21) | class FeedsTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 22) | def setUp(self) -> None: method assertFeedItems (line 27) | def assertFeedItems(self, response, bookmarks): method test_all_returns_404_for_unknown_feed_token (line 54) | def test_all_returns_404_for_unknown_feed_token(self): method test_all_metadata (line 59) | def test_all_metadata(self): method test_all_returns_all_unarchived_bookmarks (line 71) | def test_all_returns_all_unarchived_bookmarks(self): method test_all_returns_only_user_owned_bookmarks (line 85) | def test_all_returns_only_user_owned_bookmarks(self): method test_unread_returns_404_for_unknown_feed_token (line 98) | def test_unread_returns_404_for_unknown_feed_token(self): method test_unread_metadata (line 103) | def test_unread_metadata(self): method test_unread_returns_unread_and_unarchived_bookmarks (line 115) | def test_unread_returns_unread_and_unarchived_bookmarks(self): method test_unread_returns_only_user_owned_bookmarks (line 135) | def test_unread_returns_only_user_owned_bookmarks(self): method test_shared_returns_404_for_unknown_feed_token (line 150) | def test_shared_returns_404_for_unknown_feed_token(self): method test_shared_metadata (line 155) | def test_shared_metadata(self): method test_shared_returns_shared_bookmarks_only (line 167) | def test_shared_returns_shared_bookmarks_only(self): method test_public_shared_does_not_require_auth (line 187) | def test_public_shared_does_not_require_auth(self): method test_public_shared_metadata (line 192) | def test_public_shared_metadata(self): method test_public_shared_returns_publicly_shared_bookmarks_only (line 206) | def test_public_shared_returns_publicly_shared_bookmarks_only(self): method test_with_query (line 227) | def test_with_query(self): method test_unread_parameter (line 258) | def test_unread_parameter(self): method test_shared_parameter (line 285) | def test_shared_parameter(self): method test_with_tags (line 312) | def test_with_tags(self): method test_with_limit (line 325) | def test_with_limit(self): method test_strip_control_characters (line 351) | def test_strip_control_characters(self): method test_sanitize_with_none_text (line 363) | def test_sanitize_with_none_text(self): method test_with_bundle (line 366) | def test_with_bundle(self): method test_with_bundle_not_owned_by_user (line 385) | def test_with_bundle_not_owned_by_user(self): method test_with_invalid_bundle_id (line 397) | def test_with_invalid_bundle_id(self): method test_with_non_numeric_bundle_id (line 405) | def test_with_non_numeric_bundle_id(self): FILE: bookmarks/tests/test_feeds_performance.py class FeedsPerformanceTestCase (line 11) | class FeedsPerformanceTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 12) | def setUp(self) -> None: method get_connection (line 20) | def get_connection(self): method test_all_max_queries (line 23) | def test_all_max_queries(self): FILE: bookmarks/tests/test_health_view.py class HealthViewTestCase (line 9) | class HealthViewTestCase(TestCase): method test_health_healthy (line 10) | def test_health_healthy(self): method test_health_unhealhty (line 19) | def test_health_unhealhty(self): FILE: bookmarks/tests/test_importer.py class ImporterTestCase (line 18) | class ImporterTestCase(TestCase, BookmarkFactoryMixin, ImportTestMixin): method assertBookmarksImported (line 19) | def assertBookmarksImported(self, html_tags: list[BookmarkHtmlTag]): method test_import (line 42) | def test_import(self): method test_synchronize (line 90) | def test_synchronize(self): method test_import_with_some_invalid_bookmarks (line 210) | def test_import_with_some_invalid_bookmarks(self): method test_import_invalid_bookmark_does_not_associate_tags (line 231) | def test_import_invalid_bookmark_does_not_associate_tags(self): method test_import_tags (line 246) | def test_import_tags(self): method test_create_missing_tags (line 257) | def test_create_missing_tags(self): method test_create_missing_tags_does_not_duplicate_tags (line 272) | def test_create_missing_tags_does_not_duplicate_tags(self): method test_should_append_tags_to_bookmark_when_reimporting_with_different_tags (line 283) | def test_should_append_tags_to_bookmark_when_reimporting_with_differen... method test_use_current_date_when_no_add_date (line 298) | def test_use_current_date_when_no_add_date(self): method test_use_add_date_when_no_last_modified (line 314) | def test_use_add_date_when_no_last_modified(self): method test_keep_title_if_imported_bookmark_has_empty_title (line 327) | def test_keep_title_if_imported_bookmark_has_empty_title(self): method test_keep_description_if_imported_bookmark_has_empty_description (line 339) | def test_keep_description_if_imported_bookmark_has_empty_description(s... method test_replace_whitespace_in_tag_names (line 353) | def test_replace_whitespace_in_tag_names(self): method test_ignore_long_tag_names (line 367) | def test_ignore_long_tag_names(self): method test_validate_empty_or_missing_bookmark_url (line 394) | def test_validate_empty_or_missing_bookmark_url(self): method test_generate_normalized_url (line 410) | def test_generate_normalized_url(self): method test_private_flag (line 425) | def test_private_flag(self): method test_archived_state (line 458) | def test_archived_state(self): method test_notes (line 481) | def test_notes(self): method test_schedule_favicon_loading (line 521) | def test_schedule_favicon_loading(self): method test_schedule_preview_loading (line 532) | def test_schedule_preview_loading(self): FILE: bookmarks/tests/test_layout.py class LayoutTestCase (line 8) | class LayoutTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method setUp (line 9) | def setUp(self) -> None: method test_nav_menu_should_respect_share_profile_setting (line 13) | def test_nav_menu_should_respect_share_profile_setting(self): method test_metadata_should_respect_prefetch_links_setting (line 54) | def test_metadata_should_respect_prefetch_links_setting(self): method test_does_not_link_custom_css_when_empty (line 80) | def test_does_not_link_custom_css_when_empty(self): method test_does_link_custom_css_when_not_empty (line 88) | def test_does_link_custom_css_when_not_empty(self): method test_custom_css_link_href (line 100) | def test_custom_css_link_href(self): FILE: bookmarks/tests/test_linkding_middleware.py class LinkdingMiddlewareTestCase (line 9) | class LinkdingMiddlewareTestCase(TestCase, BookmarkFactoryMixin): method test_unauthenticated_user_should_use_standard_profile_by_default (line 10) | def test_unauthenticated_user_should_use_standard_profile_by_default(s... method test_unauthenticated_user_should_use_custom_configured_profile (line 15) | def test_unauthenticated_user_should_use_custom_configured_profile(self): method test_authenticated_user_should_use_own_profile (line 29) | def test_authenticated_user_should_use_own_profile(self): FILE: bookmarks/tests/test_login_view.py class LoginViewTestCase (line 12) | class LoginViewTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method test_failed_login_should_return_401 (line 13) | def test_failed_login_should_return_401(self): method test_successful_login_should_redirect (line 17) | def test_successful_login_should_redirect(self): method test_should_not_show_oidc_login_by_default (line 25) | def test_should_not_show_oidc_login_by_default(self): method test_should_show_oidc_login_when_enabled (line 34) | def test_should_show_oidc_login_when_enabled(self): method test_should_show_login_form_by_default (line 45) | def test_should_show_login_form_by_default(self): method test_should_hide_login_form_when_disabled (line 60) | def test_should_hide_login_form_when_disabled(self): method test_should_only_show_oidc_login_when_login_disabled_and_oidc_enabled (line 75) | def test_should_only_show_oidc_login_when_login_disabled_and_oidc_enab... FILE: bookmarks/tests/test_metadata_view.py class MetadataViewTestCase (line 4) | class MetadataViewTestCase(TestCase): method test_default_manifest (line 5) | def test_default_manifest(self): method test_manifest_respects_context_path (line 102) | def test_manifest_respects_context_path(self): FILE: bookmarks/tests/test_monolith_service.py class MonolithServiceTestCase (line 11) | class MonolithServiceTestCase(TestCase): method tearDown (line 16) | def tearDown(self): method create_test_file (line 22) | def create_test_file(self, *args, **kwargs): method test_create_snapshot (line 26) | def test_create_snapshot(self): method test_create_snapshot_failure (line 39) | def test_create_snapshot_failure(self): FILE: bookmarks/tests/test_oidc_support.py class OidcSupportTest (line 10) | class OidcSupportTest(TestCase): method test_should_not_add_oidc_urls_by_default (line 11) | def test_should_not_add_oidc_urls_by_default(self): method test_should_add_oidc_urls_when_enabled (line 22) | def test_should_add_oidc_urls_when_enabled(self): method test_should_not_add_oidc_authentication_backend_by_default (line 32) | def test_should_not_add_oidc_authentication_backend_by_default(self): method test_should_add_oidc_authentication_backend_when_enabled (line 41) | def test_should_add_oidc_authentication_backend_when_enabled(self): method test_default_settings (line 55) | def test_default_settings(self): method test_username_should_use_email_by_default (line 67) | def test_username_should_use_email_by_default(self): method test_username_should_use_custom_claim (line 82) | def test_username_should_use_custom_claim(self): method test_username_should_fallback_to_email_for_non_existing_claim (line 97) | def test_username_should_fallback_to_email_for_non_existing_claim(self): method test_username_should_fallback_to_email_for_empty_claim (line 112) | def test_username_should_fallback_to_email_for_empty_claim(self): method test_username_should_be_normalized (line 127) | def test_username_should_be_normalized(self): FILE: bookmarks/tests/test_opensearch_view.py class OpenSearchViewTestCase (line 5) | class OpenSearchViewTestCase(TestCase): method test_opensearch_configuration (line 6) | def test_opensearch_configuration(self): FILE: bookmarks/tests/test_pagination_tag.py class PaginationTagTest (line 8) | class PaginationTagTest(TestCase, BookmarkFactoryMixin): method render_template (line 9) | def render_template( method assertPrevLinkDisabled (line 32) | def assertPrevLinkDisabled(self, html: str): method assertPrevLink (line 42) | def assertPrevLink( method assertNextLinkDisabled (line 55) | def assertNextLinkDisabled(self, html: str): method assertNextLink (line 65) | def assertNextLink( method assertPageLink (line 78) | def assertPageLink( method assertTruncationIndicators (line 99) | def assertTruncationIndicators(self, html: str, count: int): method test_previous_disabled_on_page_1 (line 110) | def test_previous_disabled_on_page_1(self): method test_previous_enabled_after_page_1 (line 114) | def test_previous_enabled_after_page_1(self): method test_next_disabled_on_last_page (line 119) | def test_next_disabled_on_last_page(self): method test_next_enabled_before_last_page (line 123) | def test_next_enabled_before_last_page(self): method test_truncate_pages_start (line 128) | def test_truncate_pages_start(self): method test_truncate_pages_middle (line 142) | def test_truncate_pages_middle(self): method test_truncate_pages_near_end (line 156) | def test_truncate_pages_near_end(self): method test_respects_search_parameters (line 170) | def test_respects_search_parameters(self): method test_removes_details_parameter (line 197) | def test_removes_details_parameter(self): method test_respects_pagination_frame (line 206) | def test_respects_pagination_frame(self): FILE: bookmarks/tests/test_parser.py class ParserTestCase (line 8) | class ParserTestCase(TestCase, ImportTestMixin): method assertTagsEqual (line 9) | def assertTagsEqual( method test_parse_bookmarks (line 24) | def test_parse_bookmarks(self): method test_no_bookmarks (line 63) | def test_no_bookmarks(self): method test_reset_properties_after_adding_bookmark (line 69) | def test_reset_properties_after_adding_bookmark(self): method test_empty_title (line 93) | def test_empty_title(self): method test_with_closing_description_tag (line 113) | def test_with_closing_description_tag(self): method test_description_tag_before_anchor_tag (line 142) | def test_description_tag_before_anchor_tag(self): method test_with_folders (line 171) | def test_with_folders(self): method test_private_flag (line 207) | def test_private_flag(self): method test_notes (line 238) | def test_notes(self): method test_unescape_content (line 308) | def test_unescape_content(self): method test_unescape_href_attribute (line 325) | def test_unescape_href_attribute(self): FILE: bookmarks/tests/test_password_change_view.py class PasswordChangeViewTestCase (line 8) | class PasswordChangeViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 9) | def setUp(self) -> None: method test_change_password (line 15) | def test_change_password(self): method test_change_password_done (line 26) | def test_change_password_done(self): method test_should_return_error_for_invalid_old_password (line 37) | def test_should_return_error_for_invalid_old_password(self): method test_should_return_error_for_mismatching_new_password (line 49) | def test_should_return_error_for_mismatching_new_password(self): FILE: bookmarks/tests/test_preview_image_loader.py class MockStreamingResponse (line 15) | class MockStreamingResponse: method __init__ (line 16) | def __init__( method iter_content (line 31) | def iter_content(self, **kwargs): method __enter__ (line 34) | def __enter__(self): method __exit__ (line 37) | def __exit__(self, exc_type, exc_value, traceback): class PreviewImageLoaderTestCase (line 41) | class PreviewImageLoaderTestCase(TestCase): method setUp (line 42) | def setUp(self) -> None: method tearDown (line 56) | def tearDown(self) -> None: method create_mock_response (line 61) | def create_mock_response( method get_image_path (line 77) | def get_image_path(self, filename): method assertImageExists (line 80) | def assertImageExists(self, filename, data): method assertNoImageExists (line 84) | def assertNoImageExists(self): method test_load_preview_image (line 87) | def test_load_preview_image(self): method test_load_preview_image_returns_none_if_no_preview_image_detected (line 96) | def test_load_preview_image_returns_none_if_no_preview_image_detected(... method test_load_preview_image_returns_none_for_invalid_status_code (line 106) | def test_load_preview_image_returns_none_for_invalid_status_code(self): method test_load_preview_image_returns_none_if_content_length_exceeds_limit (line 120) | def test_load_preview_image_returns_none_if_content_length_exceeds_lim... method test_load_preview_image_returns_none_for_invalid_content_type (line 143) | def test_load_preview_image_returns_none_for_invalid_content_type(self): method test_load_preview_image_returns_none_if_download_exceeds_content_length (line 170) | def test_load_preview_image_returns_none_if_download_exceeds_content_l... method test_load_preview_image_creates_folder_if_not_exists (line 179) | def test_load_preview_image_creates_folder_if_not_exists(self): method test_guess_file_extension (line 192) | def test_guess_file_extension(self): FILE: bookmarks/tests/test_queries.py class QueriesBasicTestCase (line 14) | class QueriesBasicTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 15) | def setUp(self): method setup_bookmark_search_data (line 18) | def setup_bookmark_search_data(self) -> None: method setup_tag_search_data (line 74) | def setup_tag_search_data(self): method assertQueryResult (line 156) | def assertQueryResult(self, query: QuerySet, item_lists: list[list]): method test_query_bookmarks_should_return_all_for_empty_query (line 165) | def test_query_bookmarks_should_return_all_for_empty_query(self): method test_query_bookmarks_should_search_single_term (line 183) | def test_query_bookmarks_should_search_single_term(self): method test_query_bookmarks_should_search_multiple_terms (line 198) | def test_query_bookmarks_should_search_multiple_terms(self): method test_query_bookmarks_should_search_single_tag (line 207) | def test_query_bookmarks_should_search_single_tag(self): method test_query_bookmarks_should_search_multiple_tags (line 219) | def test_query_bookmarks_should_search_multiple_tags(self): method test_query_bookmarks_should_search_multiple_tags_ignoring_casing (line 228) | def test_query_bookmarks_should_search_multiple_tags_ignoring_casing(s... method test_query_bookmarks_should_search_terms_and_tags_combined (line 237) | def test_query_bookmarks_should_search_terms_and_tags_combined(self): method test_query_bookmarks_in_strict_mode_should_not_search_tags_as_terms (line 246) | def test_query_bookmarks_in_strict_mode_should_not_search_tags_as_term... method test_query_bookmarks_in_lax_mode_should_search_tags_as_terms (line 257) | def test_query_bookmarks_in_lax_mode_should_search_tags_as_terms(self): method test_query_bookmarks_should_return_no_matches (line 306) | def test_query_bookmarks_should_return_no_matches(self): method test_query_bookmarks_should_not_return_archived_bookmarks (line 347) | def test_query_bookmarks_should_not_return_archived_bookmarks(self): method test_query_archived_bookmarks_should_not_return_unarchived_bookmarks (line 358) | def test_query_archived_bookmarks_should_not_return_unarchived_bookmar... method test_query_bookmarks_should_only_return_user_owned_bookmarks (line 371) | def test_query_bookmarks_should_only_return_user_owned_bookmarks(self): method test_query_archived_bookmarks_should_only_return_user_owned_bookmarks (line 386) | def test_query_archived_bookmarks_should_only_return_user_owned_bookma... method test_query_bookmarks_untagged_should_return_untagged_bookmarks_only (line 403) | def test_query_bookmarks_untagged_should_return_untagged_bookmarks_onl... method test_query_bookmarks_untagged_should_be_combinable_with_search_terms (line 414) | def test_query_bookmarks_untagged_should_be_combinable_with_search_ter... method test_query_bookmarks_untagged_should_not_be_combinable_with_tags (line 425) | def test_query_bookmarks_untagged_should_not_be_combinable_with_tags(s... method test_query_archived_bookmarks_untagged_should_return_untagged_bookmarks_only (line 436) | def test_query_archived_bookmarks_untagged_should_return_untagged_book... method test_query_archived_bookmarks_untagged_should_be_combinable_with_search_terms (line 449) | def test_query_archived_bookmarks_untagged_should_be_combinable_with_s... method test_query_archived_bookmarks_untagged_should_not_be_combinable_with_tags (line 462) | def test_query_archived_bookmarks_untagged_should_not_be_combinable_wi... method test_query_bookmarks_unread_should_return_unread_bookmarks_only (line 473) | def test_query_bookmarks_unread_should_return_unread_bookmarks_only(se... method test_query_archived_bookmarks_unread_should_return_unread_bookmarks_only (line 507) | def test_query_archived_bookmarks_unread_should_return_unread_bookmark... method test_query_bookmarks_filter_shared (line 541) | def test_query_bookmarks_filter_shared(self): method test_query_bookmark_tags_should_return_all_tags_for_empty_query (line 560) | def test_query_bookmark_tags_should_return_all_tags_for_empty_query(se... method test_query_bookmark_tags_should_search_single_term (line 580) | def test_query_bookmark_tags_should_search_single_term(self): method test_query_bookmark_tags_should_search_multiple_terms (line 596) | def test_query_bookmark_tags_should_search_multiple_terms(self): method test_query_bookmark_tags_should_search_single_tag (line 610) | def test_query_bookmark_tags_should_search_single_tag(self): method test_query_bookmark_tags_should_search_multiple_tags (line 626) | def test_query_bookmark_tags_should_search_multiple_tags(self): method test_query_bookmark_tags_should_search_multiple_tags_ignoring_casing (line 640) | def test_query_bookmark_tags_should_search_multiple_tags_ignoring_casi... method test_query_bookmark_tags_should_search_term_and_tag_combined (line 654) | def test_query_bookmark_tags_should_search_term_and_tag_combined(self): method test_query_bookmark_tags_in_strict_mode_should_not_search_tags_as_terms (line 668) | def test_query_bookmark_tags_in_strict_mode_should_not_search_tags_as_... method test_query_bookmark_tags_in_lax_mode_should_search_tags_as_terms (line 681) | def test_query_bookmark_tags_in_lax_mode_should_search_tags_as_terms(s... method test_query_bookmark_tags_should_return_no_matches (line 730) | def test_query_bookmark_tags_should_return_no_matches(self): method test_query_bookmark_tags_should_return_tags_for_unarchived_bookmarks_only (line 771) | def test_query_bookmark_tags_should_return_tags_for_unarchived_bookmar... method test_query_bookmark_tags_should_return_distinct_tags (line 784) | def test_query_bookmark_tags_should_return_distinct_tags(self): method test_query_archived_bookmark_tags_should_return_tags_for_archived_bookmarks_only (line 796) | def test_query_archived_bookmark_tags_should_return_tags_for_archived_... method test_query_archived_bookmark_tags_should_return_distinct_tags (line 811) | def test_query_archived_bookmark_tags_should_return_distinct_tags(self): method test_query_bookmark_tags_should_only_return_user_owned_tags (line 823) | def test_query_bookmark_tags_should_only_return_user_owned_tags(self): method test_query_archived_bookmark_tags_should_only_return_user_owned_tags (line 840) | def test_query_archived_bookmark_tags_should_only_return_user_owned_ta... method test_query_bookmark_tags_untagged_should_never_return_any_tags (line 863) | def test_query_bookmark_tags_untagged_should_never_return_any_tags(self): method test_query_archived_bookmark_tags_untagged_should_never_return_any_tags (line 885) | def test_query_archived_bookmark_tags_untagged_should_never_return_any... method test_query_bookmark_tags_filter_unread (line 907) | def test_query_bookmark_tags_filter_unread(self): method test_query_bookmark_tags_filter_shared (line 943) | def test_query_bookmark_tags_filter_shared(self): method test_query_shared_bookmarks (line 966) | def test_query_shared_bookmarks(self): method test_query_publicly_shared_bookmarks (line 1002) | def test_query_publicly_shared_bookmarks(self): method test_query_shared_bookmark_tags (line 1014) | def test_query_shared_bookmark_tags(self): method test_query_publicly_shared_bookmark_tags (line 1041) | def test_query_publicly_shared_bookmark_tags(self): method test_query_shared_bookmark_users (line 1057) | def test_query_shared_bookmark_users(self): method test_query_publicly_shared_bookmark_users (line 1093) | def test_query_publicly_shared_bookmark_users(self): method test_sorty_by_date_added_asc (line 1105) | def test_sorty_by_date_added_asc(self): method test_sorty_by_date_added_desc (line 1136) | def test_sorty_by_date_added_desc(self): method setup_title_sort_data (line 1167) | def setup_title_sort_data(self): method test_sort_by_title_asc (line 1189) | def test_sort_by_title_asc(self): method test_sort_by_title_desc (line 1202) | def test_sort_by_title_desc(self): method test_query_bookmarks_filter_modified_since (line 1217) | def test_query_bookmarks_filter_modified_since(self): method test_query_bookmarks_filter_added_since (line 1257) | def test_query_bookmarks_filter_added_since(self): method test_query_bookmarks_with_bundle_search_terms (line 1293) | def test_query_bookmarks_with_bundle_search_terms(self): method test_query_bookmarks_with_search_and_bundle_search_terms (line 1313) | def test_query_bookmarks_with_search_and_bundle_search_terms(self): method test_query_bookmarks_with_bundle_any_tags (line 1331) | def test_query_bookmarks_with_bundle_any_tags(self): method test_query_bookmarks_with_search_tags_and_bundle_any_tags (line 1353) | def test_query_bookmarks_with_search_tags_and_bundle_any_tags(self): method test_query_bookmarks_with_bundle_all_tags (line 1385) | def test_query_bookmarks_with_bundle_all_tags(self): method test_query_bookmarks_with_search_tags_and_bundle_all_tags (line 1406) | def test_query_bookmarks_with_search_tags_and_bundle_all_tags(self): method test_query_bookmarks_with_bundle_excluded_tags (line 1434) | def test_query_bookmarks_with_bundle_excluded_tags(self): method test_query_bookmarks_with_bundle_combined_tags (line 1462) | def test_query_bookmarks_with_bundle_combined_tags(self): method test_query_bookmarks_with_bundle_filter_unread (line 1504) | def test_query_bookmarks_with_bundle_filter_unread(self): method test_query_bookmarks_with_bundle_filter_shared (line 1535) | def test_query_bookmarks_with_bundle_filter_shared(self): method test_query_bookmarks_with_bundle_unread_shared_filters_combined (line 1566) | def test_query_bookmarks_with_bundle_unread_shared_filters_combined(se... method test_query_archived_bookmarks_with_bundle (line 1587) | def test_query_archived_bookmarks_with_bundle(self): method test_query_shared_bookmarks_with_bundle (line 1612) | def test_query_shared_bookmarks_with_bundle(self): class QueriesLegacySearchTestCase (line 1643) | class QueriesLegacySearchTestCase(QueriesBasicTestCase): method setUp (line 1644) | def setUp(self): class QueriesAdvancedSearchTestCase (line 1650) | class QueriesAdvancedSearchTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 1651) | def setUp(self): method test_explicit_and_operator (line 1677) | def test_explicit_and_operator(self): method test_or_operator (line 1682) | def test_or_operator(self): method test_not_operator (line 1690) | def test_not_operator(self): method test_implicit_and_between_terms (line 1695) | def test_implicit_and_between_terms(self): method test_implicit_and_between_tags (line 1704) | def test_implicit_and_between_tags(self): method test_nested_and_expression (line 1709) | def test_nested_and_expression(self): method test_mixed_terms_and_tags_with_operators (line 1722) | def test_mixed_terms_and_tags_with_operators(self): method test_parentheses (line 1733) | def test_parentheses(self): method test_complex_query_with_all_operators (line 1752) | def test_complex_query_with_all_operators(self): method test_quoted_strings_with_operators (line 1765) | def test_quoted_strings_with_operators(self): method test_implicit_and_with_quoted_strings (line 1777) | def test_implicit_and_with_quoted_strings(self): method test_empty_query (line 1782) | def test_empty_query(self): method test_unparseable_query_returns_no_results (line 1795) | def test_unparseable_query_returns_no_results(self): class GetTagsForQueryTestCase (line 1802) | class GetTagsForQueryTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 1803) | def setUp(self): method test_returns_tags_matching_query (line 1807) | def test_returns_tags_matching_query(self): method test_case_insensitive_matching (line 1817) | def test_case_insensitive_matching(self): method test_lax_mode_includes_terms (line 1829) | def test_lax_mode_includes_terms(self): method test_strict_mode_excludes_terms (line 1841) | def test_strict_mode_excludes_terms(self): method test_only_returns_user_tags (line 1850) | def test_only_returns_user_tags(self): method test_empty_query_returns_no_tags (line 1864) | def test_empty_query_returns_no_tags(self): method test_query_with_no_tags_returns_empty (line 1870) | def test_query_with_no_tags_returns_empty(self): method test_nonexistent_tag_returns_empty (line 1876) | def test_nonexistent_tag_returns_empty(self): class GetSharedTagsForQueryTestCase (line 1883) | class GetSharedTagsForQueryTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 1884) | def setUp(self): method test_returns_tags_from_shared_bookmarks (line 1890) | def test_returns_tags_from_shared_bookmarks(self): method test_excludes_tags_from_non_shared_bookmarks (line 1900) | def test_excludes_tags_from_non_shared_bookmarks(self): method test_respects_sharing_enabled_setting (line 1910) | def test_respects_sharing_enabled_setting(self): method test_public_only_flag (line 1923) | def test_public_only_flag(self): method test_filters_by_user (line 1943) | def test_filters_by_user(self): FILE: bookmarks/tests/test_root_view.py class RootViewTestCase (line 8) | class RootViewTestCase(TestCase, BookmarkFactoryMixin): method test_unauthenticated_user_redirect_to_login_by_default (line 9) | def test_unauthenticated_user_redirect_to_login_by_default(self): method test_unauthenticated_redirect_to_shared_bookmarks_if_configured_in_global_settings (line 13) | def test_unauthenticated_redirect_to_shared_bookmarks_if_configured_in... method test_authenticated_user_always_redirected_to_bookmarks (line 23) | def test_authenticated_user_always_redirected_to_bookmarks(self): FILE: bookmarks/tests/test_search_query_parser.py function _term (line 22) | def _term(term: str) -> TermExpression: function _tag (line 26) | def _tag(tag: str) -> TagExpression: function _and (line 30) | def _and(left: SearchExpression, right: SearchExpression) -> AndExpression: function _or (line 34) | def _or(left: SearchExpression, right: SearchExpression) -> OrExpression: function _not (line 38) | def _not(operand: SearchExpression) -> NotExpression: function _keyword (line 42) | def _keyword(keyword: str) -> SpecialKeywordExpression: class SearchQueryTokenizerTest (line 46) | class SearchQueryTokenizerTest(TestCase): method test_empty_query (line 47) | def test_empty_query(self): method test_whitespace_only_query (line 53) | def test_whitespace_only_query(self): method test_single_term (line 59) | def test_single_term(self): method test_multiple_terms (line 67) | def test_multiple_terms(self): method test_hyphenated_term (line 79) | def test_hyphenated_term(self): method test_and_operator (line 87) | def test_and_operator(self): method test_or_operator (line 99) | def test_or_operator(self): method test_not_operator (line 111) | def test_not_operator(self): method test_case_insensitive_operators (line 123) | def test_case_insensitive_operators(self): method test_parentheses (line 133) | def test_parentheses(self): method test_operator_as_part_of_term (line 149) | def test_operator_as_part_of_term(self): method test_extra_whitespace (line 160) | def test_extra_whitespace(self): method test_quoted_strings (line 171) | def test_quoted_strings(self): method test_quoted_strings_with_operators (line 188) | def test_quoted_strings_with_operators(self): method test_escaped_quotes (line 199) | def test_escaped_quotes(self): method test_unclosed_quotes (line 216) | def test_unclosed_quotes(self): method test_tags (line 225) | def test_tags(self): method test_tags_with_operators (line 242) | def test_tags_with_operators(self): method test_tags_mixed_with_terms (line 253) | def test_tags_mixed_with_terms(self): method test_empty_tag (line 267) | def test_empty_tag(self): method test_special_keywords (line 291) | def test_special_keywords(self): method test_special_keywords_with_operators (line 306) | def test_special_keywords_with_operators(self): method test_special_keywords_mixed_with_terms_and_tags (line 317) | def test_special_keywords_mixed_with_terms_and_tags(self): method test_empty_special_keyword (line 331) | def test_empty_special_keyword(self): class SearchQueryParserTest (line 345) | class SearchQueryParserTest(TestCase): method test_empty_query (line 348) | def test_empty_query(self): method test_whitespace_only_query (line 352) | def test_whitespace_only_query(self): method test_single_term (line 356) | def test_single_term(self): method test_and_expression (line 361) | def test_and_expression(self): method test_or_expression (line 366) | def test_or_expression(self): method test_not_expression (line 371) | def test_not_expression(self): method test_operator_precedence_and_over_or (line 376) | def test_operator_precedence_and_over_or(self): method test_operator_precedence_not_over_and (line 382) | def test_operator_precedence_not_over_and(self): method test_multiple_and_operators (line 388) | def test_multiple_and_operators(self): method test_multiple_or_operators (line 394) | def test_multiple_or_operators(self): method test_multiple_not_operators (line 400) | def test_multiple_not_operators(self): method test_parentheses_basic (line 405) | def test_parentheses_basic(self): method test_parentheses_change_precedence (line 410) | def test_parentheses_change_precedence(self): method test_nested_parentheses (line 416) | def test_nested_parentheses(self): method test_complex_expression (line 421) | def test_complex_expression(self): method test_hyphenated_terms (line 432) | def test_hyphenated_terms(self): method test_case_insensitive_operators (line 437) | def test_case_insensitive_operators(self): method test_case_insensitive_operators_with_explicit_operators (line 450) | def test_case_insensitive_operators_with_explicit_operators(self): method test_single_character_terms (line 459) | def test_single_character_terms(self): method test_numeric_terms (line 464) | def test_numeric_terms(self): method test_special_characters_in_terms (line 469) | def test_special_characters_in_terms(self): method test_url_terms (line 474) | def test_url_terms(self): method test_url_with_operators (line 479) | def test_url_with_operators(self): method test_quoted_strings (line 484) | def test_quoted_strings(self): method test_quoted_strings_with_operators (line 495) | def test_quoted_strings_with_operators(self): method test_multiple_quoted_strings (line 511) | def test_multiple_quoted_strings(self): method test_quoted_strings_with_parentheses (line 516) | def test_quoted_strings_with_parentheses(self): method test_escaped_quotes_in_terms (line 523) | def test_escaped_quotes_in_terms(self): method test_tags (line 528) | def test_tags(self): method test_tags_with_operators (line 539) | def test_tags_with_operators(self): method test_tags_mixed_with_terms (line 555) | def test_tags_mixed_with_terms(self): method test_tags_with_quoted_strings (line 560) | def test_tags_with_quoted_strings(self): method test_tags_with_parentheses (line 565) | def test_tags_with_parentheses(self): method test_empty_tags_ignored (line 570) | def test_empty_tags_ignored(self): method test_special_keywords (line 581) | def test_special_keywords(self): method test_special_keywords_with_operators (line 590) | def test_special_keywords_with_operators(self): method test_special_keywords_mixed_with_terms_and_tags (line 606) | def test_special_keywords_mixed_with_terms_and_tags(self): method test_special_keywords_with_quoted_strings (line 611) | def test_special_keywords_with_quoted_strings(self): method test_special_keywords_with_parentheses (line 616) | def test_special_keywords_with_parentheses(self): method test_special_keywords_within_quoted_string (line 623) | def test_special_keywords_within_quoted_string(self): method test_implicit_and_basic (line 628) | def test_implicit_and_basic(self): method test_implicit_and_with_tags (line 639) | def test_implicit_and_with_tags(self): method test_implicit_and_with_quoted_strings (line 655) | def test_implicit_and_with_quoted_strings(self): method test_implicit_and_with_explicit_operators (line 666) | def test_implicit_and_with_explicit_operators(self): method test_implicit_and_with_not (line 680) | def test_implicit_and_with_not(self): method test_implicit_and_with_parentheses (line 693) | def test_implicit_and_with_parentheses(self): method test_complex_precedence_with_implicit_and (line 709) | def test_complex_precedence_with_implicit_and(self): method test_operator_words_as_substrings (line 732) | def test_operator_words_as_substrings(self): method test_complex_queries (line 738) | def test_complex_queries(self): class SearchQueryParserErrorTest (line 813) | class SearchQueryParserErrorTest(TestCase): method test_unmatched_left_parenthesis (line 814) | def test_unmatched_left_parenthesis(self): method test_unmatched_right_parenthesis (line 819) | def test_unmatched_right_parenthesis(self): method test_empty_parentheses (line 824) | def test_empty_parentheses(self): method test_operator_without_operand (line 829) | def test_operator_without_operand(self): method test_trailing_operator (line 834) | def test_trailing_operator(self): method test_consecutive_operators (line 839) | def test_consecutive_operators(self): method test_not_without_operand (line 844) | def test_not_without_operand(self): class ExpressionToStringTest (line 850) | class ExpressionToStringTest(TestCase): method test_simple_term (line 851) | def test_simple_term(self): method test_simple_tag (line 855) | def test_simple_tag(self): method test_simple_keyword (line 859) | def test_simple_keyword(self): method test_term_with_spaces (line 863) | def test_term_with_spaces(self): method test_term_with_quotes (line 867) | def test_term_with_quotes(self): method test_and_expression_implicit (line 871) | def test_and_expression_implicit(self): method test_and_expression_with_tags (line 875) | def test_and_expression_with_tags(self): method test_and_expression_complex (line 879) | def test_and_expression_complex(self): method test_or_expression (line 883) | def test_or_expression(self): method test_or_expression_with_and (line 887) | def test_or_expression_with_and(self): method test_not_expression (line 891) | def test_not_expression(self): method test_not_with_tag (line 895) | def test_not_with_tag(self): method test_not_with_and (line 899) | def test_not_with_and(self): method test_complex_nested_expression (line 903) | def test_complex_nested_expression(self): method test_implicit_and_chain (line 911) | def test_implicit_and_chain(self): method test_none_expression (line 915) | def test_none_expression(self): method test_round_trip (line 918) | def test_round_trip(self): class StripTagFromQueryTest (line 939) | class StripTagFromQueryTest(TestCase): method test_single_tag (line 940) | def test_single_tag(self): method test_tag_with_and (line 944) | def test_tag_with_and(self): method test_tag_with_and_not (line 948) | def test_tag_with_and_not(self): method test_implicit_and_with_term_and_tags (line 952) | def test_implicit_and_with_term_and_tags(self): method test_tag_in_or_expression (line 956) | def test_tag_in_or_expression(self): method test_complex_or_with_and (line 960) | def test_complex_or_with_and(self): method test_case_insensitive (line 966) | def test_case_insensitive(self): method test_tag_not_present (line 970) | def test_tag_not_present(self): method test_multiple_same_tags (line 974) | def test_multiple_same_tags(self): method test_nested_parentheses (line 978) | def test_nested_parentheses(self): method test_not_expression_with_tag (line 982) | def test_not_expression_with_tag(self): method test_only_not_tag (line 986) | def test_only_not_tag(self): method test_complex_query (line 990) | def test_complex_query(self): method test_empty_query (line 996) | def test_empty_query(self): method test_whitespace_only (line 1000) | def test_whitespace_only(self): method test_special_keywords_preserved (line 1004) | def test_special_keywords_preserved(self): method test_quoted_terms_preserved (line 1008) | def test_quoted_terms_preserved(self): method test_all_tags_in_and_chain (line 1012) | def test_all_tags_in_and_chain(self): method test_tag_similar_name (line 1016) | def test_tag_similar_name(self): method test_invalid_query_returns_original (line 1021) | def test_invalid_query_returns_original(self): method test_implicit_and_in_output (line 1026) | def test_implicit_and_in_output(self): method test_nested_or_simplify_parenthesis (line 1030) | def test_nested_or_simplify_parenthesis(self): method test_nested_or_preserve_parenthesis (line 1036) | def test_nested_or_preserve_parenthesis(self): method test_left_side_removed (line 1042) | def test_left_side_removed(self): method test_right_side_removed (line 1046) | def test_right_side_removed(self): class StripTagFromQueryLaxSearchTest (line 1051) | class StripTagFromQueryLaxSearchTest(TestCase): method setUp (line 1052) | def setUp(self): method test_lax_search_removes_matching_term (line 1060) | def test_lax_search_removes_matching_term(self): method test_lax_search_removes_term_case_insensitive (line 1064) | def test_lax_search_removes_term_case_insensitive(self): method test_lax_search_multiple_terms (line 1071) | def test_lax_search_multiple_terms(self): method test_lax_search_preserves_non_matching_terms (line 1075) | def test_lax_search_preserves_non_matching_terms(self): method test_lax_search_removes_both_tag_and_term (line 1079) | def test_lax_search_removes_both_tag_and_term(self): method test_lax_search_mixed_tag_and_term (line 1083) | def test_lax_search_mixed_tag_and_term(self): method test_lax_search_term_in_or_expression (line 1089) | def test_lax_search_term_in_or_expression(self): method test_lax_search_term_in_not_expression (line 1095) | def test_lax_search_term_in_not_expression(self): method test_lax_search_only_not_term (line 1101) | def test_lax_search_only_not_term(self): method test_lax_search_complex_query (line 1105) | def test_lax_search_complex_query(self): method test_lax_search_quoted_term_with_same_name (line 1111) | def test_lax_search_quoted_term_with_same_name(self): method test_lax_search_partial_match_not_removed (line 1115) | def test_lax_search_partial_match_not_removed(self): method test_lax_search_multiple_occurrences (line 1119) | def test_lax_search_multiple_occurrences(self): method test_lax_search_nested_expressions (line 1125) | def test_lax_search_nested_expressions(self): method test_strict_search_preserves_terms (line 1131) | def test_strict_search_preserves_terms(self): method test_strict_search_preserves_terms_with_tags (line 1135) | def test_strict_search_preserves_terms_with_tags(self): method test_no_profile_defaults_to_strict (line 1139) | def test_no_profile_defaults_to_strict(self): class ExtractTagNamesFromQueryTest (line 1144) | class ExtractTagNamesFromQueryTest(TestCase): method test_empty_query (line 1145) | def test_empty_query(self): method test_whitespace_query (line 1149) | def test_whitespace_query(self): method test_single_tag (line 1153) | def test_single_tag(self): method test_multiple_tags (line 1157) | def test_multiple_tags(self): method test_tags_with_or (line 1161) | def test_tags_with_or(self): method test_tags_with_not (line 1165) | def test_tags_with_not(self): method test_tags_in_complex_query (line 1169) | def test_tags_in_complex_query(self): method test_duplicate_tags (line 1175) | def test_duplicate_tags(self): method test_case_insensitive_deduplication (line 1179) | def test_case_insensitive_deduplication(self): method test_mixed_tags_and_terms (line 1183) | def test_mixed_tags_and_terms(self): method test_only_terms_no_tags (line 1187) | def test_only_terms_no_tags(self): method test_special_keywords_not_extracted (line 1191) | def test_special_keywords_not_extracted(self): method test_tags_in_nested_parentheses (line 1195) | def test_tags_in_nested_parentheses(self): method test_invalid_query_returns_empty (line 1199) | def test_invalid_query_returns_empty(self): method test_tags_with_hyphens (line 1203) | def test_tags_with_hyphens(self): class ExtractTagNamesFromQueryLaxSearchTest (line 1208) | class ExtractTagNamesFromQueryLaxSearchTest(TestCase): method setUp (line 1209) | def setUp(self): method test_lax_search_extracts_terms (line 1217) | def test_lax_search_extracts_terms(self): method test_lax_search_mixed_tags_and_terms (line 1221) | def test_lax_search_mixed_tags_and_terms(self): method test_lax_search_deduplicates_tags_and_terms (line 1227) | def test_lax_search_deduplicates_tags_and_terms(self): method test_lax_search_case_insensitive_dedup (line 1231) | def test_lax_search_case_insensitive_dedup(self): method test_lax_search_terms_in_or_expression (line 1235) | def test_lax_search_terms_in_or_expression(self): method test_lax_search_terms_in_not_expression (line 1241) | def test_lax_search_terms_in_not_expression(self): method test_lax_search_quoted_terms (line 1247) | def test_lax_search_quoted_terms(self): method test_lax_search_complex_query (line 1253) | def test_lax_search_complex_query(self): method test_lax_search_special_keywords_not_extracted (line 1259) | def test_lax_search_special_keywords_not_extracted(self): method test_strict_search_ignores_terms (line 1265) | def test_strict_search_ignores_terms(self): method test_strict_search_only_tags (line 1269) | def test_strict_search_only_tags(self): method test_no_profile_defaults_to_strict (line 1275) | def test_no_profile_defaults_to_strict(self): FILE: bookmarks/tests/test_settings_export_view.py class SettingsExportViewTestCase (line 11) | class SettingsExportViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 12) | def setUp(self) -> None: method assertFormErrorHint (line 16) | def assertFormErrorHint(self, response, text: str): method test_should_export_successfully (line 20) | def test_should_export_successfully(self): method test_should_only_export_user_bookmarks (line 36) | def test_should_only_export_user_bookmarks(self): method test_should_check_authentication (line 59) | def test_should_check_authentication(self): method test_should_show_hint_when_export_raises_error (line 67) | def test_should_show_hint_when_export_raises_error(self): method test_filename_includes_date_and_time (line 79) | def test_filename_includes_date_and_time(self): FILE: bookmarks/tests/test_settings_general_view.py class SettingsGeneralViewTestCase (line 16) | class SettingsGeneralViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 17) | def setUp(self) -> None: method create_profile_form_data (line 21) | def create_profile_form_data(self, overrides=None): method assertSuccessMessage (line 56) | def assertSuccessMessage(self, html, message: str, count=1): method assertErrorMessage (line 65) | def assertErrorMessage(self, html, message: str, count=1): method test_should_render_successfully (line 74) | def test_should_render_successfully(self): method test_should_check_authentication (line 79) | def test_should_check_authentication(self): method test_update_profile (line 95) | def test_update_profile(self): method test_update_profile_with_invalid_form_returns_422 (line 214) | def test_update_profile_with_invalid_form_returns_422(self): method test_update_profile_should_not_be_called_without_respective_form_action (line 220) | def test_update_profile_should_not_be_called_without_respective_form_a... method test_update_profile_updates_custom_css_hash (line 235) | def test_update_profile_updates_custom_css_hash(self): method test_enable_favicons_should_schedule_icon_update (line 260) | def test_enable_favicons_should_schedule_icon_update(self): method test_refresh_favicons (line 292) | def test_refresh_favicons(self): method test_refresh_favicons_should_not_be_called_without_respective_form_action (line 309) | def test_refresh_favicons_should_not_be_called_without_respective_form... method test_refresh_favicons_should_be_visible_when_favicons_enabled_in_profile (line 322) | def test_refresh_favicons_should_be_visible_when_favicons_enabled_in_p... method test_refresh_favicons_should_not_be_visible_when_favicons_disabled_in_profile (line 338) | def test_refresh_favicons_should_not_be_visible_when_favicons_disabled... method test_refresh_favicons_should_not_be_visible_when_disabled (line 357) | def test_refresh_favicons_should_not_be_visible_when_disabled(self): method test_enable_preview_image_should_schedule_preview_update (line 373) | def test_enable_preview_image_should_schedule_preview_update(self): method test_automatic_html_snapshots_should_be_hidden_when_snapshots_not_supported (line 405) | def test_automatic_html_snapshots_should_be_hidden_when_snapshots_not_... method test_automatic_html_snapshots_should_be_visible_when_snapshots_supported (line 422) | def test_automatic_html_snapshots_should_be_visible_when_snapshots_sup... method test_about_shows_version_info (line 438) | def test_about_shows_version_info(self): method test_get_version_info_just_displays_latest_when_versions_are_equal (line 452) | def test_get_version_info_just_displays_latest_when_versions_are_equal... method test_get_version_info_shows_latest_version_when_versions_are_not_equal (line 460) | def test_get_version_info_shows_latest_version_when_versions_are_not_e... method test_get_version_info_silently_ignores_request_errors (line 468) | def test_get_version_info_silently_ignores_request_errors(self): method test_get_version_info_handles_invalid_response (line 473) | def test_get_version_info_handles_invalid_response(self): method test_create_missing_html_snapshots (line 485) | def test_create_missing_html_snapshots(self): method test_create_missing_html_snapshots_no_missing_snapshots (line 505) | def test_create_missing_html_snapshots_no_missing_snapshots(self): method test_create_missing_html_snapshots_should_not_be_called_without_respective_form_action (line 522) | def test_create_missing_html_snapshots_should_not_be_called_without_re... method test_update_global_settings (line 541) | def test_update_global_settings(self): method test_update_global_settings_should_not_be_called_without_respective_form_action (line 579) | def test_update_global_settings_should_not_be_called_without_respectiv... method test_update_global_settings_checks_for_superuser (line 596) | def test_update_global_settings_checks_for_superuser(self): method test_global_settings_only_visible_for_superuser (line 604) | def test_global_settings_only_visible_for_superuser(self): FILE: bookmarks/tests/test_settings_import_view.py class SettingsImportViewTestCase (line 8) | class SettingsImportViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 9) | def setUp(self) -> None: method assertSuccessMessage (line 13) | def assertSuccessMessage(self, response, message: str): method assertNoSuccessMessage (line 21) | def assertNoSuccessMessage(self, response): method assertErrorMessage (line 24) | def assertErrorMessage(self, response, message: str): method assertNoErrorMessage (line 32) | def assertNoErrorMessage(self, response): method test_should_import_successfully (line 35) | def test_should_import_successfully(self): method test_should_check_authentication (line 51) | def test_should_check_authentication(self): method test_should_show_hint_if_there_is_no_file (line 59) | def test_should_show_hint_if_there_is_no_file(self): method test_should_show_hint_if_import_raises_exception (line 67) | def test_should_show_hint_if_import_raises_exception(self): method test_should_show_respective_hints_if_not_all_bookmarks_were_imported_successfully (line 84) | def test_should_show_respective_hints_if_not_all_bookmarks_were_import... method test_should_respect_map_private_flag_option (line 105) | def test_should_respect_map_private_flag_option(self): FILE: bookmarks/tests/test_settings_integrations_view.py class SettingsIntegrationsViewTestCase (line 8) | class SettingsIntegrationsViewTestCase(TestCase, BookmarkFactoryMixin, H... method setUp (line 9) | def setUp(self) -> None: method test_should_render_successfully (line 13) | def test_should_render_successfully(self): method test_should_check_authentication (line 18) | def test_should_check_authentication(self): method test_create_api_token (line 29) | def test_create_api_token(self): method test_create_api_token_with_empty_name (line 41) | def test_create_api_token_with_empty_name(self): method test_create_api_token_shows_key_once (line 51) | def test_create_api_token_shows_key_once(self): method test_delete_api_token (line 66) | def test_delete_api_token(self): method test_delete_api_token_wrong_user (line 77) | def test_delete_api_token_wrong_user(self): method test_list_api_tokens (line 89) | def test_list_api_tokens(self): method test_should_generate_feed_token_if_not_exists (line 113) | def test_should_generate_feed_token_if_not_exists(self): method test_should_not_generate_feed_token_if_exists (line 122) | def test_should_not_generate_feed_token_if_exists(self): method test_should_display_feed_urls (line 130) | def test_should_display_feed_urls(self): FILE: bookmarks/tests/test_singlefile_service.py class SingleFileServiceTestCase (line 11) | class SingleFileServiceTestCase(TestCase): method setUp (line 12) | def setUp(self): method tearDown (line 15) | def tearDown(self): method create_test_file (line 19) | def create_test_file(self, *args, **kwargs): method test_create_snapshot_failure (line 22) | def test_create_snapshot_failure(self): method test_create_snapshot_empty_options (line 37) | def test_create_snapshot_empty_options(self): method test_create_snapshot_custom_options (line 59) | def test_create_snapshot_custom_options(self): method test_create_snapshot_default_timeout_setting (line 83) | def test_create_snapshot_default_timeout_setting(self): method test_create_snapshot_custom_timeout_setting (line 94) | def test_create_snapshot_custom_timeout_setting(self): FILE: bookmarks/tests/test_tag_cloud_template.py class TagCloudTemplateTest (line 12) | class TagCloudTemplateTest(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method render_template (line 13) | def render_template( method assertTagGroups (line 33) | def assertTagGroups( method assertNumSelectedTags (line 66) | def assertNumSelectedTags(self, rendered_template: str, count: int): method test_cjk_using_single_group (line 71) | def test_cjk_using_single_group(self): method test_group_alphabetically (line 124) | def test_group_alphabetically(self): method test_group_when_grouping_disabled (line 161) | def test_group_when_grouping_disabled(self): method test_no_duplicate_tag_names (line 199) | def test_no_duplicate_tag_names(self): method test_tag_url_respects_search_options (line 221) | def test_tag_url_respects_search_options(self): method test_tag_url_removes_page_number_and_details_id (line 236) | def test_tag_url_removes_page_number_and_details_id(self): method test_tag_url_wraps_or_expression_in_parenthesis (line 253) | def test_tag_url_wraps_or_expression_in_parenthesis(self): method test_selected_tags (line 268) | def test_selected_tags(self): method test_selected_tags_complex_queries (line 299) | def test_selected_tags_complex_queries(self): method test_selected_tags_with_lax_tag_search (line 356) | def test_selected_tags_with_lax_tag_search(self): method test_selected_tags_ignore_casing_when_removing_query_part (line 393) | def test_selected_tags_ignore_casing_when_removing_query_part(self): method test_no_duplicate_selected_tags (line 411) | def test_no_duplicate_selected_tags(self): method test_selected_tag_url_keeps_other_query_terms (line 435) | def test_selected_tag_url_keeps_other_query_terms(self): method test_selected_tag_url_respects_search_options (line 451) | def test_selected_tag_url_respects_search_options(self): method test_selected_tag_url_removes_page_number_and_details_id (line 469) | def test_selected_tag_url_removes_page_number_and_details_id(self): method test_selected_tags_are_excluded_from_groups (line 487) | def test_selected_tags_are_excluded_from_groups(self): method test_with_anonymous_user (line 507) | def test_with_anonymous_user(self): FILE: bookmarks/tests/test_tags_edit_view.py class TagsEditViewTestCase (line 7) | class TagsEditViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 8) | def setUp(self) -> None: method test_update_tag (line 12) | def test_update_tag(self): method test_allow_case_changes (line 24) | def test_allow_case_changes(self): method test_can_only_edit_own_tags (line 32) | def test_can_only_edit_own_tags(self): method test_show_error_for_empty_name (line 44) | def test_show_error_for_empty_name(self): method test_show_error_for_duplicate_name (line 55) | def test_show_error_for_duplicate_name(self): method test_show_error_for_duplicate_name_different_casing (line 67) | def test_show_error_for_duplicate_name_different_casing(self): method test_no_error_for_duplicate_name_different_user (line 79) | def test_no_error_for_duplicate_name_different_user(self): method test_update_tag_preserves_query_parameters (line 93) | def test_update_tag_preserves_query_parameters(self): FILE: bookmarks/tests/test_tags_index_view.py class TagsIndexViewTestCase (line 8) | class TagsIndexViewTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method setUp (line 9) | def setUp(self) -> None: method get_rows (line 13) | def get_rows(self, response): method find_row (line 18) | def find_row(self, rows, tag): method assertRows (line 24) | def assertRows(self, response, tags): method assertOrderedRows (line 31) | def assertOrderedRows(self, response, tags): method test_list_tags (line 42) | def test_list_tags(self): method test_show_user_owned_tags (line 52) | def test_show_user_owned_tags(self): method test_search_tags (line 66) | def test_search_tags(self): method test_filter_unused_tags (line 76) | def test_filter_unused_tags(self): method test_rows_have_links_to_filtered_bookmarks (line 88) | def test_rows_have_links_to_filtered_bookmarks(self): method test_shows_tag_total (line 109) | def test_shows_tag_total(self): method test_pagination (line 133) | def test_pagination(self): method test_delete_action (line 146) | def test_delete_action(self): method test_tag_delete_action_preserves_query_parameters (line 156) | def test_tag_delete_action_preserves_query_parameters(self): method test_tag_delete_action_only_deletes_own_tags (line 167) | def test_tag_delete_action_only_deletes_own_tags(self): method test_sort_by_name_ascending (line 177) | def test_sort_by_name_ascending(self): method test_sort_by_name_descending (line 186) | def test_sort_by_name_descending(self): method test_sort_by_bookmark_count_ascending (line 195) | def test_sort_by_bookmark_count_ascending(self): method test_sort_by_bookmark_count_descending (line 209) | def test_sort_by_bookmark_count_descending(self): method test_default_sort_is_name_ascending (line 223) | def test_default_sort_is_name_ascending(self): method test_sort_select_has_correct_options_and_selection (line 232) | def test_sort_select_has_correct_options_and_selection(self): FILE: bookmarks/tests/test_tags_merge_view.py class TagsMergeViewTestCase (line 10) | class TagsMergeViewTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method setUp (line 11) | def setUp(self) -> None: method get_text (line 15) | def get_text(self, element): method get_form_group (line 20) | def get_form_group(self, response, input_name): method get_autocomplete (line 32) | def get_autocomplete(self, response, input_name): method test_merge_tags (line 36) | def test_merge_tags(self): method test_merge_tags_complex (line 60) | def test_merge_tags_complex(self): method test_can_only_merge_own_tags (line 111) | def test_can_only_merge_own_tags(self): method test_validate_missing_target_tag (line 129) | def test_validate_missing_target_tag(self): method test_validate_missing_merge_tags (line 144) | def test_validate_missing_merge_tags(self): method test_validate_nonexistent_target_tag (line 158) | def test_validate_nonexistent_target_tag(self): method test_validate_nonexistent_merge_tag (line 171) | def test_validate_nonexistent_merge_tag(self): method test_validate_multiple_target_tags (line 185) | def test_validate_multiple_target_tags(self): method test_validate_target_tag_in_merge_list (line 200) | def test_validate_target_tag_in_merge_list(self): method test_merge_shows_success_message (line 215) | def test_merge_shows_success_message(self): FILE: bookmarks/tests/test_tags_model.py class TagTestCase (line 6) | class TagTestCase(TestCase): method test_parse_tag_string_returns_list_of_tag_names (line 7) | def test_parse_tag_string_returns_list_of_tag_names(self): method test_parse_tag_string_respects_separator (line 12) | def test_parse_tag_string_respects_separator(self): method test_parse_tag_string_orders_tag_names_alphabetically (line 17) | def test_parse_tag_string_orders_tag_names_alphabetically(self): method test_parse_tag_string_handles_whitespace (line 25) | def test_parse_tag_string_handles_whitespace(self): method test_parse_tag_string_handles_invalid_input (line 31) | def test_parse_tag_string_handles_invalid_input(self): method test_parse_tag_string_deduplicates_tag_names (line 35) | def test_parse_tag_string_deduplicates_tag_names(self): method test_parse_tag_string_handles_duplicate_separators (line 38) | def test_parse_tag_string_handles_duplicate_separators(self): method test_parse_tag_string_handles_duplicate_separators_with_spaces (line 43) | def test_parse_tag_string_handles_duplicate_separators_with_spaces(self): method test_parse_tag_string_replaces_whitespace_within_names (line 48) | def test_parse_tag_string_replaces_whitespace_within_names(self): FILE: bookmarks/tests/test_tags_new_view.py class TagsNewViewTestCase (line 8) | class TagsNewViewTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 9) | def setUp(self) -> None: method test_create_tag (line 13) | def test_create_tag(self): method test_show_error_for_empty_name (line 20) | def test_show_error_for_empty_name(self): method test_show_error_for_duplicate_name (line 26) | def test_show_error_for_duplicate_name(self): method test_show_error_for_duplicate_name_different_casing (line 36) | def test_show_error_for_duplicate_name_different_casing(self): method test_no_error_for_duplicate_name_different_user (line 46) | def test_no_error_for_duplicate_name_different_user(self): method test_create_shows_success_message (line 63) | def test_create_shows_success_message(self): FILE: bookmarks/tests/test_tags_service.py class TagServiceTestCase (line 11) | class TagServiceTestCase(TestCase, BookmarkFactoryMixin): method setUp (line 12) | def setUp(self) -> None: method test_get_or_create_tag_should_create_new_tag (line 15) | def test_get_or_create_tag_should_create_new_tag(self): method test_get_or_create_tag_should_return_existing_tag (line 27) | def test_get_or_create_tag_should_return_existing_tag(self): method test_get_or_create_tag_should_ignore_casing_when_looking_for_existing_tag (line 36) | def test_get_or_create_tag_should_ignore_casing_when_looking_for_exist... method test_get_or_create_tag_should_handle_legacy_dbs_with_existing_duplicates (line 45) | def test_get_or_create_tag_should_handle_legacy_dbs_with_existing_dupl... method test_get_or_create_tags_should_return_tags (line 54) | def test_get_or_create_tags_should_return_tags(self): method test_get_or_create_tags_should_deduplicate_tags (line 63) | def test_get_or_create_tags_should_deduplicate_tags(self): FILE: bookmarks/tests/test_toasts_view.py class ToastsViewTestCase (line 14) | class ToastsViewTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin): method setUp (line 15) | def setUp(self) -> None: method create_toast (line 19) | def create_toast( method test_should_render_unacknowledged_toasts (line 33) | def test_should_render_unacknowledged_toasts(self): method test_should_not_render_acknowledged_toasts (line 45) | def test_should_not_render_acknowledged_toasts(self): method test_should_not_render_toasts_of_other_users (line 57) | def test_should_not_render_toasts_of_other_users(self): method test_form_tag (line 73) | def test_form_tag(self): method test_toast_content (line 83) | def test_toast_content(self): method test_acknowledge_toast (line 97) | def test_acknowledge_toast(self): method test_acknowledge_toast_should_redirect_to_return_url (line 110) | def test_acknowledge_toast_should_redirect_to_return_url(self): method test_acknowledge_toast_should_redirect_to_index_by_default (line 125) | def test_acknowledge_toast_should_redirect_to_index_by_default(self): method test_acknowledge_toast_should_not_acknowledge_other_users_toast (line 138) | def test_acknowledge_toast_should_not_acknowledge_other_users_toast(se... FILE: bookmarks/tests/test_user_profile_model.py class UserProfileTestCase (line 7) | class UserProfileTestCase(TestCase): method test_create_user_should_init_profile (line 8) | def test_create_user_should_init_profile(self): method test_bookmark_sharing_is_disabled_by_default (line 13) | def test_bookmark_sharing_is_disabled_by_default(self): FILE: bookmarks/tests/test_user_select_tag.py class UserSelectTagTest (line 9) | class UserSelectTagTest(TestCase, BookmarkFactoryMixin): method render_template (line 10) | def render_template(self, url: str): method assertUserOption (line 27) | def assertUserOption(self, html: str, user: User, selected: bool = Fal... method assertHiddenInput (line 37) | def assertHiddenInput(self, html: str, name: str, value: str = None): method assertNoHiddenInput (line 44) | def assertNoHiddenInput(self, html: str, name: str): method test_empty_option (line 49) | def test_empty_option(self): method test_render_user_options (line 62) | def test_render_user_options(self): method test_preselect_user_option (line 77) | def test_preselect_user_option(self): method test_hidden_inputs (line 90) | def test_hidden_inputs(self): FILE: bookmarks/tests/test_utils.py class UtilsTestCase (line 14) | class UtilsTestCase(TestCase): method test_humanize_absolute_date (line 15) | def test_humanize_absolute_date(self): method test_humanize_absolute_date_should_use_current_date_as_default (line 52) | def test_humanize_absolute_date_should_use_current_date_as_default(self): method test_humanize_relative_date (line 64) | def test_humanize_relative_date(self): method test_humanize_relative_date_should_use_current_date_as_default (line 131) | def test_humanize_relative_date_should_use_current_date_as_default(self): method verify_timestamp (line 143) | def verify_timestamp(self, date, factor=1): method test_parse_timestamp_fails_for_invalid_timestamps (line 148) | def test_parse_timestamp_fails_for_invalid_timestamps(self): method test_parse_timestamp_parses_millisecond_timestamps (line 152) | def test_parse_timestamp_parses_millisecond_timestamps(self): method test_parse_timestamp_parses_microsecond_timestamps (line 156) | def test_parse_timestamp_parses_microsecond_timestamps(self): method test_parse_timestamp_parses_nanosecond_timestamps (line 160) | def test_parse_timestamp_parses_nanosecond_timestamps(self): method test_parse_timestamp_fails_for_out_of_range_timestamp (line 164) | def test_parse_timestamp_fails_for_out_of_range_timestamp(self): method test_normalize_url_trailing_slash_handling (line 170) | def test_normalize_url_trailing_slash_handling(self): method test_normalize_url_query_parameters (line 189) | def test_normalize_url_query_parameters(self): method test_normalize_url_case_sensitivity (line 206) | def test_normalize_url_case_sensitivity(self): method test_normalize_url_special_characters_and_encoding (line 224) | def test_normalize_url_special_characters_and_encoding(self): method test_normalize_url_various_protocols (line 243) | def test_normalize_url_various_protocols(self): method test_normalize_url_port_handling (line 256) | def test_normalize_url_port_handling(self): method test_normalize_url_authentication_handling (line 269) | def test_normalize_url_authentication_handling(self): method test_normalize_url_fragment_handling (line 281) | def test_normalize_url_fragment_handling(self): method test_normalize_url_edge_cases (line 299) | def test_normalize_url_edge_cases(self): method test_normalize_url_internationalized_domain_names (line 313) | def test_normalize_url_internationalized_domain_names(self): method test_normalize_url_complex_query_parameters (line 327) | def test_normalize_url_complex_query_parameters(self): FILE: bookmarks/tests/test_website_loader.py class MockStreamingResponse (line 8) | class MockStreamingResponse: method __init__ (line 9) | def __init__(self, num_chunks, chunk_size, insert_head_after_chunk=None): method iter_content (line 18) | def iter_content(self, **kwargs): method __enter__ (line 21) | def __enter__(self): method __exit__ (line 24) | def __exit__(self, exc_type, exc_value, traceback): class WebsiteLoaderTestCase (line 28) | class WebsiteLoaderTestCase(TestCase): method setUp (line 29) | def setUp(self): method render_html_document (line 33) | def render_html_document( method test_load_page_returns_content (line 61) | def test_load_page_returns_content(self): method test_load_page_limits_large_documents (line 71) | def test_load_page_limits_large_documents(self): method test_load_page_stops_reading_at_end_of_head (line 82) | def test_load_page_stops_reading_at_end_of_head(self): method test_load_page_removes_bytes_after_end_of_head (line 93) | def test_load_page_removes_bytes_after_end_of_head(self): method test_load_website_metadata (line 105) | def test_load_website_metadata(self): method test_load_website_metadata_trims_title_and_description (line 117) | def test_load_website_metadata_trims_title_and_description(self): method test_load_website_metadata_using_og_description (line 128) | def test_load_website_metadata_using_og_description(self): method test_load_website_metadata_using_og_image (line 139) | def test_load_website_metadata_using_og_image(self): method test_load_website_metadata_gets_absolute_og_image_path_when_path_starts_with_dots (line 149) | def test_load_website_metadata_gets_absolute_og_image_path_when_path_s... method test_load_website_metadata_gets_absolute_og_image_path_when_path_starts_with_slash (line 163) | def test_load_website_metadata_gets_absolute_og_image_path_when_path_s... method test_load_website_metadata_prefers_description_over_og_description (line 177) | def test_load_website_metadata_prefers_description_over_og_description... method test_website_metadata_ignore_cache (line 188) | def test_website_metadata_ignore_cache(self): class ContentTypeDetectionTestCase (line 206) | class ContentTypeDetectionTestCase(TestCase): method test_detect_content_type_returns_content_type_from_head_request (line 207) | def test_detect_content_type_returns_content_type_from_head_request(se... method test_detect_content_type_strips_charset (line 219) | def test_detect_content_type_strips_charset(self): method test_detect_content_type_returns_lowercase (line 230) | def test_detect_content_type_returns_lowercase(self): method test_detect_content_type_falls_back_to_get_when_head_fails (line 241) | def test_detect_content_type_falls_back_to_get_when_head_fails(self): method test_detect_content_type_returns_none_when_both_head_and_get_fail (line 263) | def test_detect_content_type_returns_none_when_both_head_and_get_fail(... method test_detect_content_type_returns_none_for_non_200_status (line 277) | def test_detect_content_type_returns_none_for_non_200_status(self): method test_is_pdf_content_type (line 296) | def test_is_pdf_content_type(self): FILE: bookmarks/tests_e2e/e2e_test_a11y_navigation_focus.py class A11yNavigationFocusTest (line 7) | class A11yNavigationFocusTest(LinkdingE2ETestCase): method test_initial_page_load_focus (line 8) | def test_initial_page_load_focus(self): method test_page_navigation_focus (line 30) | def test_page_navigation_focus(self): method reset_focus (line 68) | def reset_focus(self): FILE: bookmarks/tests_e2e/e2e_test_bookmark_details_modal.py class BookmarkDetailsModalE2ETestCase (line 9) | class BookmarkDetailsModalE2ETestCase(LinkdingE2ETestCase): method test_show_details (line 10) | def test_show_details(self): method test_close_details (line 19) | def test_close_details(self): method test_toggle_archived (line 40) | def test_toggle_archived(self): method test_toggle_unread (line 62) | def test_toggle_unread(self): method test_toggle_shared (line 82) | def test_toggle_shared(self): method test_edit_return_url (line 106) | def test_edit_return_url(self): method test_delete (line 123) | def test_delete(self): method test_create_snapshot_remove_snapshot (line 145) | def test_create_snapshot_remove_snapshot(self): FILE: bookmarks/tests_e2e/e2e_test_bookmark_item.py class BookmarkItemE2ETestCase (line 9) | class BookmarkItemE2ETestCase(LinkdingE2ETestCase): method test_toggle_notes_should_show_hide_notes (line 11) | def test_toggle_notes_should_show_hide_notes(self): FILE: bookmarks/tests_e2e/e2e_test_bookmark_page_bulk_edit.py class BookmarkPageBulkEditE2ETestCase (line 8) | class BookmarkPageBulkEditE2ETestCase(LinkdingE2ETestCase): method setup_test_data (line 9) | def setup_test_data(self): method test_active_bookmarks_bulk_select_across (line 36) | def test_active_bookmarks_bulk_select_across(self): method test_archived_bookmarks_bulk_select_across (line 73) | def test_archived_bookmarks_bulk_select_across(self): method test_active_bookmarks_bulk_select_across_respects_query (line 110) | def test_active_bookmarks_bulk_select_across_respects_query(self): method test_archived_bookmarks_bulk_select_across_respects_query (line 147) | def test_archived_bookmarks_bulk_select_across_respects_query(self): method test_select_all_toggles_all_checkboxes (line 184) | def test_select_all_toggles_all_checkboxes(self): method test_select_all_shows_select_across (line 207) | def test_select_all_shows_select_across(self): method test_select_across_is_unchecked_when_toggling_all (line 223) | def test_select_across_is_unchecked_when_toggling_all(self): method test_select_across_is_unchecked_when_toggling_bookmark (line 244) | def test_select_across_is_unchecked_when_toggling_bookmark(self): method test_execute_resets_all_checkboxes (line 265) | def test_execute_resets_all_checkboxes(self): method test_update_select_across_bookmark_count (line 296) | def test_update_select_across_bookmark_count(self): method test_execute_button_is_disabled_when_no_bookmarks_selected (line 323) | def test_execute_button_is_disabled_when_no_bookmarks_selected(self): FILE: bookmarks/tests_e2e/e2e_test_bookmark_page_partial_updates.py class BookmarkPagePartialUpdatesE2ETestCase (line 7) | class BookmarkPagePartialUpdatesE2ETestCase(LinkdingE2ETestCase): method setup_fixture (line 8) | def setup_fixture(self): method assertVisibleBookmarks (line 24) | def assertVisibleBookmarks(self, titles: list[str]): method assertVisibleTags (line 32) | def assertVisibleTags(self, titles: list[str]): method test_partial_update_respects_query (line 40) | def test_partial_update_respects_query(self): method test_partial_update_respects_sort (line 52) | def test_partial_update_respects_sort(self): method test_partial_update_respects_page (line 66) | def test_partial_update_respects_page(self): method test_multiple_partial_updates (line 82) | def test_multiple_partial_updates(self): method test_active_bookmarks_partial_update_on_archive (line 101) | def test_active_bookmarks_partial_update_on_archive(self): method test_active_bookmarks_partial_update_on_delete (line 112) | def test_active_bookmarks_partial_update_on_delete(self): method test_active_bookmarks_partial_update_on_mark_as_read (line 124) | def test_active_bookmarks_partial_update_on_mark_as_read(self): method test_active_bookmarks_partial_update_on_unshare (line 139) | def test_active_bookmarks_partial_update_on_unshare(self): method test_active_bookmarks_partial_update_on_bulk_archive (line 154) | def test_active_bookmarks_partial_update_on_bulk_archive(self): method test_active_bookmarks_partial_update_on_bulk_delete (line 169) | def test_active_bookmarks_partial_update_on_bulk_delete(self): method test_archived_bookmarks_partial_update_on_unarchive (line 184) | def test_archived_bookmarks_partial_update_on_unarchive(self): method test_archived_bookmarks_partial_update_on_delete (line 195) | def test_archived_bookmarks_partial_update_on_delete(self): method test_archived_bookmarks_partial_update_on_bulk_unarchive (line 207) | def test_archived_bookmarks_partial_update_on_bulk_unarchive(self): method test_archived_bookmarks_partial_update_on_bulk_delete (line 224) | def test_archived_bookmarks_partial_update_on_bulk_delete(self): method test_shared_bookmarks_partial_update_on_unarchive (line 241) | def test_shared_bookmarks_partial_update_on_unarchive(self): method test_shared_bookmarks_partial_update_on_delete (line 265) | def test_shared_bookmarks_partial_update_on_delete(self): FILE: bookmarks/tests_e2e/e2e_test_bundle_preview.py class BookmarkItemE2ETestCase (line 7) | class BookmarkItemE2ETestCase(LinkdingE2ETestCase): method test_update_preview_on_filter_changes (line 8) | def test_update_preview_on_filter_changes(self): method assertVisibleBookmarks (line 45) | def assertVisibleBookmarks(self, bookmarks): FILE: bookmarks/tests_e2e/e2e_test_collapse_side_panel.py class CollapseSidePanelE2ETestCase (line 7) | class CollapseSidePanelE2ETestCase(LinkdingE2ETestCase): method setUp (line 8) | def setUp(self) -> None: method assertSidePanelIsVisible (line 11) | def assertSidePanelIsVisible(self): method assertSidePanelIsHidden (line 17) | def assertSidePanelIsHidden(self): method test_side_panel_should_be_visible_by_default (line 23) | def test_side_panel_should_be_visible_by_default(self): method test_side_panel_should_be_hidden_when_collapsed (line 33) | def test_side_panel_should_be_hidden_when_collapsed(self): FILE: bookmarks/tests_e2e/e2e_test_dropdown.py class DropdownE2ETestCase (line 7) | class DropdownE2ETestCase(LinkdingE2ETestCase): method locate_dropdown (line 8) | def locate_dropdown(self): method locate_dropdown_toggle (line 14) | def locate_dropdown_toggle(self): method locate_dropdown_menu (line 17) | def locate_dropdown_menu(self): method test_click_toggle_opens_and_closes_dropdown (line 20) | def test_click_toggle_opens_and_closes_dropdown(self): method test_outside_click_closes_dropdown (line 34) | def test_outside_click_closes_dropdown(self): method test_escape_closes_dropdown_and_restores_focus (line 48) | def test_escape_closes_dropdown_and_restores_focus(self): method test_focus_out_closes_dropdown (line 67) | def test_focus_out_closes_dropdown(self): method test_aria_expanded_attribute (line 83) | def test_aria_expanded_attribute(self): method test_can_click_menu_item (line 106) | def test_can_click_menu_item(self): FILE: bookmarks/tests_e2e/e2e_test_edit_bookmark_form.py class BookmarkFormE2ETestCase (line 17) | class BookmarkFormE2ETestCase(LinkdingE2ETestCase): method setUp (line 18) | def setUp(self) -> None: method tearDown (line 25) | def tearDown(self) -> None: method test_should_not_check_for_existing_bookmark (line 29) | def test_should_not_check_for_existing_bookmark(self): method test_should_not_prefill_title_and_description (line 37) | def test_should_not_prefill_title_and_description(self): method test_enter_url_should_not_prefill_title_and_description (line 50) | def test_enter_url_should_not_prefill_title_and_description(self): method test_refresh_button_should_be_visible_when_editing (line 63) | def test_refresh_button_should_be_visible_when_editing(self): FILE: bookmarks/tests_e2e/e2e_test_filter_drawer.py class FilterDrawerE2ETestCase (line 7) | class FilterDrawerE2ETestCase(LinkdingE2ETestCase): method test_show_modal_close_modal (line 8) | def test_show_modal_close_modal(self): method test_select_tag (line 38) | def test_select_tag(self): FILE: bookmarks/tests_e2e/e2e_test_global_shortcuts.py class GlobalShortcutsE2ETestCase (line 7) | class GlobalShortcutsE2ETestCase(LinkdingE2ETestCase): method test_focus_search (line 8) | def test_focus_search(self): method test_add_bookmark (line 17) | def test_add_bookmark(self): FILE: bookmarks/tests_e2e/e2e_test_new_bookmark_form.py class BookmarkFormE2ETestCase (line 19) | class BookmarkFormE2ETestCase(LinkdingE2ETestCase): method setUp (line 20) | def setUp(self) -> None: method tearDown (line 27) | def tearDown(self) -> None: method test_enter_url_prefills_title_and_description (line 31) | def test_enter_url_prefills_title_and_description(self): method test_enter_url_does_not_overwrite_modified_title_and_description (line 43) | def test_enter_url_does_not_overwrite_modified_title_and_description(s... method test_with_initial_url_prefills_title_and_description (line 57) | def test_with_initial_url_prefills_title_and_description(self): method test_with_initial_url_title_description_does_not_overwrite_title_and_description (line 74) | def test_with_initial_url_title_description_does_not_overwrite_title_a... method test_create_should_check_for_existing_bookmark (line 92) | def test_create_should_check_for_existing_bookmark(self): method test_enter_url_of_existing_bookmark_should_show_notes (line 129) | def test_enter_url_of_existing_bookmark_should_show_notes(self): method test_create_should_preview_auto_tags (line 142) | def test_create_should_preview_auto_tags(self): method test_clear_buttons_only_shown_when_fields_have_content (line 163) | def test_clear_buttons_only_shown_when_fields_have_content(self): method test_refresh_button_only_shown_for_existing_bookmarks (line 193) | def test_refresh_button_only_shown_for_existing_bookmarks(self): method test_refresh_from_website_button_updates_title_and_description (line 220) | def test_refresh_from_website_button_updates_title_and_description(self): method test_refresh_from_website_button_does_not_modify_fields_if_metadata_is_same (line 261) | def test_refresh_from_website_button_does_not_modify_fields_if_metadat... method test_ctrl_enter_submits_form_from_description (line 303) | def test_ctrl_enter_submits_form_from_description(self): FILE: bookmarks/tests_e2e/e2e_test_settings_general.py class SettingsGeneralE2ETestCase (line 8) | class SettingsGeneralE2ETestCase(LinkdingE2ETestCase): method test_should_only_enable_public_sharing_if_sharing_is_enabled (line 9) | def test_should_only_enable_public_sharing_if_sharing_is_enabled(self): method test_should_not_show_bookmark_description_max_lines_when_display_inline (line 56) | def test_should_not_show_bookmark_description_max_lines_when_display_i... method test_should_show_bookmark_description_max_lines_when_display_separate (line 68) | def test_should_show_bookmark_description_max_lines_when_display_separ... method test_should_update_bookmark_description_max_lines_when_changing_display (line 80) | def test_should_update_bookmark_description_max_lines_when_changing_di... FILE: bookmarks/tests_e2e/e2e_test_settings_integrations.py class SettingsIntegrationsE2ETestCase (line 7) | class SettingsIntegrationsE2ETestCase(LinkdingE2ETestCase): method test_create_api_token (line 8) | def test_create_api_token(self): method test_delete_api_token (line 49) | def test_delete_api_token(self): FILE: bookmarks/tests_e2e/e2e_test_tag_management.py class TagManagementE2ETestCase (line 8) | class TagManagementE2ETestCase(LinkdingE2ETestCase): method locate_tag_modal (line 9) | def locate_tag_modal(self): method locate_merge_modal (line 14) | def locate_merge_modal(self): method locate_tag_row (line 19) | def locate_tag_row(self, name: str): method verify_success_message (line 22) | def verify_success_message(self, text: str): method test_create_tag (line 27) | def test_create_tag(self): method test_create_tag_validation_error (line 59) | def test_create_tag_validation_error(self): method test_edit_tag (line 92) | def test_edit_tag(self): method test_edit_tag_validation_error (line 124) | def test_edit_tag_validation_error(self): method test_edit_tag_preserves_query_and_scroll_position (line 157) | def test_edit_tag_preserves_query_and_scroll_position(self): method test_delete_tag_preserves_query_and_scroll_position (line 202) | def test_delete_tag_preserves_query_and_scroll_position(self): method test_merge_tags (line 240) | def test_merge_tags(self): method test_merge_tags_validation_error (line 291) | def test_merge_tags_validation_error(self): method test_search_updates_url_query_params (line 338) | def test_search_updates_url_query_params(self): FILE: bookmarks/tests_e2e/helpers.py class LinkdingE2ETestCase (line 14) | class LinkdingE2ETestCase(LiveServerTestCase, BookmarkFactoryMixin): method setUp (line 15) | def setUp(self) -> None: method tearDown (line 23) | def tearDown(self) -> None: method _test_has_failed (line 32) | def _test_has_failed(self) -> bool: method _ensure_playwright (line 49) | def _ensure_playwright(self): method _capture_screenshot (line 54) | def _capture_screenshot(self): method setup_browser (line 60) | def setup_browser(self) -> BrowserContext: method open (line 75) | def open(self, url: str) -> Page: method on_page_error (line 84) | def on_page_error(self, error): method on_load (line 89) | def on_load(self): method assertReloads (line 92) | def assertReloads(self, count: int): method resetReloads (line 95) | def resetReloads(self): method locate_bookmark_list (line 98) | def locate_bookmark_list(self): method locate_bookmark (line 101) | def locate_bookmark(self, title: str): method count_bookmarks (line 105) | def count_bookmarks(self): method locate_details_modal (line 109) | def locate_details_modal(self): method open_details_modal (line 112) | def open_details_modal(self, bookmark): method locate_bulk_edit_bar (line 121) | def locate_bulk_edit_bar(self): method locate_bulk_edit_select_all (line 124) | def locate_bulk_edit_select_all(self): method locate_bulk_edit_select_across (line 127) | def locate_bulk_edit_select_across(self): method locate_bulk_edit_toggle (line 130) | def locate_bulk_edit_toggle(self): method select_bulk_action (line 133) | def select_bulk_action(self, value: str): method navigate_menu (line 140) | def navigate_menu(self, main_menu_item: str, sub_menu_item: str | None... method locate_confirm_dialog (line 149) | def locate_confirm_dialog(self): FILE: bookmarks/type_defs.py class HttpRequest (line 11) | class HttpRequest(http.HttpRequest): FILE: bookmarks/utils.py function unique (line 21) | def unique(elements, key): class DateDelta (line 37) | class DateDelta: function _calculate_date_delta (line 43) | def _calculate_date_delta( function humanize_absolute_date (line 63) | def humanize_absolute_date( function humanize_relative_date (line 83) | def humanize_relative_date( function parse_timestamp (line 106) | def parse_timestamp(value: str): function get_safe_return_url (line 143) | def get_safe_return_url(return_url: str, fallback_url: str): function redirect_with_query (line 150) | def redirect_with_query(request, redirect_url): function generate_username (line 158) | def generate_username(email, claims): function normalize_url (line 170) | def normalize_url(url: str) -> str: FILE: bookmarks/validators.py class BookmarkURLValidator (line 5) | class BookmarkURLValidator(validators.URLValidator): method __call__ (line 11) | def __call__(self, value): FILE: bookmarks/views/access.py function bookmark_read (line 7) | def bookmark_read(request: HttpRequest, bookmark_id: int | str): function bookmark_write (line 28) | def bookmark_write(request: HttpRequest, bookmark_id: int | str): function bundle_read (line 35) | def bundle_read(request: HttpRequest, bundle_id: int | str): function bundle_write (line 39) | def bundle_write(request: HttpRequest, bundle_id: int | str): function asset_read (line 46) | def asset_read(request: HttpRequest, asset_id: int | str): function asset_write (line 56) | def asset_write(request: HttpRequest, asset_id: int | str): function toast_write (line 63) | def toast_write(request: HttpRequest, toast_id: int | str): function api_token_write (line 70) | def api_token_write(request: HttpRequest, token_id: int | str): FILE: bookmarks/views/assets.py function _get_asset_content (line 14) | def _get_asset_content(asset): function view (line 30) | def view(request, asset_id: int): function read (line 45) | def read(request, asset_id: int): FILE: bookmarks/views/auth.py class LinkdingLoginView (line 7) | class LinkdingLoginView(auth_views.LoginView): method get_form (line 13) | def get_form(self, form_class=None): method get_context_data (line 18) | def get_context_data(self, **kwargs): method form_invalid (line 25) | def form_invalid(self, form): class LinkdingPasswordChangeView (line 36) | class LinkdingPasswordChangeView(auth_views.PasswordChangeView): method get_form (line 37) | def get_form(self, form_class=None): method form_invalid (line 42) | def form_invalid(self, form): FILE: bookmarks/views/bookmarks.py function index (line 43) | def index(request: HttpRequest): function index_update (line 69) | def index_update(request: HttpRequest): function archived (line 82) | def archived(request: HttpRequest): function archived_update (line 108) | def archived_update(request: HttpRequest): function shared (line 120) | def shared(request: HttpRequest): function shared_update (line 146) | def shared_update(request: HttpRequest): function render_bookmarks_view (line 158) | def render_bookmarks_view(request: HttpRequest, context): function render_bookmarks_update (line 172) | def render_bookmarks_update(request, bookmark_list, tag_cloud, details): function search_action (line 196) | def search_action(request: HttpRequest): function convert_tag_string (line 215) | def convert_tag_string(tag_string: str): function new (line 222) | def new(request: HttpRequest): function edit (line 238) | def edit(request: HttpRequest, bookmark_id: int): function remove (line 255) | def remove(request: HttpRequest, bookmark_id: int | str): function archive (line 260) | def archive(request: HttpRequest, bookmark_id: int | str): function unarchive (line 265) | def unarchive(request: HttpRequest, bookmark_id: int | str): function unshare (line 270) | def unshare(request: HttpRequest, bookmark_id: int | str): function mark_as_read (line 276) | def mark_as_read(request: HttpRequest, bookmark_id: int | str): function create_html_snapshot (line 282) | def create_html_snapshot(request: HttpRequest, bookmark_id: int | str): function upload_asset (line 287) | def upload_asset(request: HttpRequest, bookmark_id: int | str): function remove_asset (line 299) | def remove_asset(request: HttpRequest, asset_id: int | str): function update_state (line 304) | def update_state(request: HttpRequest, bookmark_id: int | str): function index_action (line 313) | def index_action(request: HttpRequest): function archived_action (line 330) | def archived_action(request: HttpRequest): function shared_action (line 347) | def shared_action(request: HttpRequest): function handle_action (line 361) | def handle_action(request: HttpRequest, query: QuerySet[Bookmark] = None): function close (line 426) | def close(request: HttpRequest): FILE: bookmarks/views/bundles.py function index (line 16) | def index(request: HttpRequest): function action (line 23) | def action(request: HttpRequest): function _handle_edit (line 40) | def _handle_edit(request: HttpRequest, template: str, bundle: BookmarkBu... function new (line 79) | def new(request: HttpRequest): function edit (line 84) | def edit(request: HttpRequest, bundle_id: int): function preview (line 91) | def preview(request: HttpRequest): function _get_bookmark_list_preview (line 97) | def _get_bookmark_list_preview( FILE: bookmarks/views/contexts.py class RequestContext (line 34) | class RequestContext: method __init__ (line 38) | def __init__(self, request: HttpRequest): method get_url (line 55) | def get_url(self, view_url: str, add: dict = None, remove: dict = None... method index (line 65) | def index(self, add: dict = None, remove: dict = None) -> str: method action (line 68) | def action(self, add: dict = None, remove: dict = None) -> str: method details (line 71) | def details(self, bookmark_id: int) -> str: method get_bookmark_query_set (line 74) | def get_bookmark_query_set(self, search: BookmarkSearch): method get_tag_query_set (line 77) | def get_tag_query_set(self, search: BookmarkSearch): class ActiveBookmarksContext (line 81) | class ActiveBookmarksContext(RequestContext): method get_bookmark_query_set (line 85) | def get_bookmark_query_set(self, search: BookmarkSearch): method get_tag_query_set (line 90) | def get_tag_query_set(self, search: BookmarkSearch): class ArchivedBookmarksContext (line 96) | class ArchivedBookmarksContext(RequestContext): method get_bookmark_query_set (line 100) | def get_bookmark_query_set(self, search: BookmarkSearch): method get_tag_query_set (line 105) | def get_tag_query_set(self, search: BookmarkSearch): class SharedBookmarksContext (line 111) | class SharedBookmarksContext(RequestContext): method get_bookmark_query_set (line 115) | def get_bookmark_query_set(self, search: BookmarkSearch): method get_tag_query_set (line 122) | def get_tag_query_set(self, search: BookmarkSearch): class BookmarkItem (line 130) | class BookmarkItem: method __init__ (line 131) | def __init__( class BookmarkListContext (line 196) | class BookmarkListContext: method __init__ (line 199) | def __init__(self, request: HttpRequest, search: BookmarkSearch) -> None: method generate_return_url (line 244) | def generate_return_url(search: BookmarkSearch, base_url: str, page: i... method generate_action_url (line 253) | def generate_action_url( class ActiveBookmarkListContext (line 267) | class ActiveBookmarkListContext(BookmarkListContext): class ArchivedBookmarkListContext (line 275) | class ArchivedBookmarkListContext(BookmarkListContext): class SharedBookmarkListContext (line 283) | class SharedBookmarkListContext(BookmarkListContext): class AddTagItem (line 291) | class AddTagItem: method __init__ (line 292) | def __init__(self, context: RequestContext, tag: Tag): method _generate_query_string (line 313) | def _generate_query_string(context: RequestContext, tag: Tag) -> str: method _generate_query_string_legacy (line 328) | def _generate_query_string_legacy(context: RequestContext, tag: Tag) -... class RemoveTagItem (line 340) | class RemoveTagItem: method __init__ (line 341) | def __init__(self, context: RequestContext, tag: Tag): method _generate_query_string (line 351) | def _generate_query_string(context: RequestContext, tag: Tag) -> str: method _generate_query_string_legacy (line 364) | def _generate_query_string_legacy(context: RequestContext, tag: Tag) -... class TagGroup (line 396) | class TagGroup: method __init__ (line 397) | def __init__( method __repr__ (line 405) | def __repr__(self): method add_tag (line 408) | def add_tag(self, tag: Tag): method create_tag_groups (line 412) | def create_tag_groups(context: RequestContext, mode: str, tags: set[Ta... method _create_tag_groups_alphabetical (line 421) | def _create_tag_groups_alphabetical(context: RequestContext, tags: set... method _create_tag_groups_disabled (line 448) | def _create_tag_groups_disabled(context: RequestContext, tags: set[Tag]): class TagCloudContext (line 460) | class TagCloudContext: method __init__ (line 463) | def __init__(self, request: HttpRequest, search: BookmarkSearch) -> None: method get_selected_tags (line 492) | def get_selected_tags(self): method get_selected_tags_legacy (line 495) | def get_selected_tags_legacy(self, tags: list[Tag]): class ActiveTagCloudContext (line 505) | class ActiveTagCloudContext(TagCloudContext): method get_selected_tags (line 508) | def get_selected_tags(self): class ArchivedTagCloudContext (line 516) | class ArchivedTagCloudContext(TagCloudContext): method get_selected_tags (line 519) | def get_selected_tags(self): class SharedTagCloudContext (line 527) | class SharedTagCloudContext(TagCloudContext): method get_selected_tags (line 530) | def get_selected_tags(self): class BookmarkAssetItem (line 540) | class BookmarkAssetItem: method __init__ (line 541) | def __init__(self, asset: BookmarkAsset): class BookmarkDetailsContext (line 567) | class BookmarkDetailsContext: method __init__ (line 570) | def __init__(self, request: HttpRequest, bookmark: Bookmark): class ActiveBookmarkDetailsContext (line 616) | class ActiveBookmarkDetailsContext(BookmarkDetailsContext): class ArchivedBookmarkDetailsContext (line 620) | class ArchivedBookmarkDetailsContext(BookmarkDetailsContext): class SharedBookmarkDetailsContext (line 624) | class SharedBookmarkDetailsContext(BookmarkDetailsContext): function get_details_context (line 628) | def get_details_context( class BundlesContext (line 645) | class BundlesContext: method __init__ (line 646) | def __init__(self, request: HttpRequest) -> None: class UserListContext (line 665) | class UserListContext: method __init__ (line 666) | def __init__(self, request: HttpRequest, search: BookmarkSearch) -> None: FILE: bookmarks/views/custom_css.py function custom_css (line 6) | def custom_css(request): FILE: bookmarks/views/health.py function health (line 7) | def health(request): FILE: bookmarks/views/manifest.py function manifest (line 5) | def manifest(request): FILE: bookmarks/views/opensearch.py function opensearch (line 5) | def opensearch(request): FILE: bookmarks/views/reload.py function _event_stream (line 20) | def _event_stream(): function live_reload (line 41) | def live_reload(request): function handle_auto_reload (line 48) | def handle_auto_reload(sender, **kwargs): function handle_file_changed (line 54) | def handle_file_changed(sender, file_path, **kwargs): FILE: bookmarks/views/root.py function root (line 7) | def root(request): FILE: bookmarks/views/settings.py function general (line 32) | def general(request: HttpRequest, status=200, context_overrides=None): function update (line 69) | def update(request: HttpRequest): function update_profile (line 101) | def update_profile(request: HttpRequest): function update_global_settings (line 127) | def update_global_settings(request): function get_version_info (line 140) | def get_version_info(ttl_hash=None): function get_ttl_hash (line 162) | def get_ttl_hash(seconds=3600): function integrations (line 168) | def integrations(request): function create_api_token (line 203) | def create_api_token(request): function delete_api_token (line 227) | def delete_api_token(request): function bookmark_import (line 243) | def bookmark_import(request: HttpRequest): function bookmark_export (line 278) | def bookmark_export(request: HttpRequest): function _find_message_with_tag (line 304) | def _find_message_with_tag(messages, tag): FILE: bookmarks/views/tags.py function tags_index (line 18) | def tags_index(request: HttpRequest): function tag_new (line 65) | def tag_new(request: HttpRequest): function tag_edit (line 89) | def tag_edit(request: HttpRequest, tag_id: int): function tag_merge (line 113) | def tag_merge(request: HttpRequest): FILE: bookmarks/views/toasts.py function acknowledge (line 10) | def acknowledge(request): FILE: bookmarks/views/turbo.py function accept (line 5) | def accept(request: HttpRequest): function is_frame (line 12) | def is_frame(request: HttpRequest, frame: str) -> bool: function frame (line 16) | def frame(request: HttpRequest, template_name: str, context: dict) -> Ht... function update (line 29) | def update( function replace (line 42) | def replace( function stream (line 55) | def stream(*streams: str) -> HttpResponse: FILE: bookmarks/widgets.py class FormErrorList (line 7) | class FormErrorList(ErrorList): class FormInput (line 11) | class FormInput(forms.TextInput): method __init__ (line 12) | def __init__(self, attrs=None): class FormNumberInput (line 19) | class FormNumberInput(forms.NumberInput): method __init__ (line 20) | def __init__(self, attrs=None): class FormSelect (line 27) | class FormSelect(forms.Select): method __init__ (line 28) | def __init__(self, attrs=None): class FormTextarea (line 35) | class FormTextarea(forms.Textarea): method __init__ (line 36) | def __init__(self, attrs=None): class FormCheckbox (line 43) | class FormCheckbox(forms.CheckboxInput): method __init__ (line 44) | def __init__(self, attrs=None): method render (line 48) | def render(self, name, value, attrs=None, renderer=None): class TagAutocomplete (line 63) | class TagAutocomplete(forms.TextInput): method __init__ (line 64) | def __init__(self, attrs=None): method render (line 67) | def render(self, name, value, attrs=None, renderer=None): FILE: manage.py function main (line 7) | def main(): FILE: rollup.config.mjs method load (line 9) | load(id) { FILE: scripts/generate-changelog.py function load_releases_page (line 7) | def load_releases_page(page): function load_all_releases (line 12) | def load_all_releases(): function render_release_section (line 26) | def render_release_section(release): function generate_change_log (line 38) | def generate_change_log():