Skip to content

VSCode extension fails to find errors #2538

@morganwahl

Description

@morganwahl

Describe the Bug

  • Fedora 43 Asahi Remix on MacBook M2 Pro
  • VSCodium install with flatpak com.vscodium.codium version 1.107.18627
  • extension meta.pyrefly version 0.54.0

After working around #2537 by specifying a path to a pyrefly executable installed manually from pip (pyrefly.lspPath), the extension seems able to start the language server, but it doesn't show any errors for a file with known problems.

Running pyrefly check <file path> with the same file reports 22 errors, so it seems to be an issue the extension.

I enabled the language server debugging output in the extension settings (pyrefly.trace.server). Full server output is below.

Sandbox Link

No response

(Only applicable for extension issues) IDE Information

Extension output:

starting generic LSP server
 INFO Reading messages
 INFO File /home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py opened, prepare to validate open files.
 INFO Ran task on sourcedb_queue heavy task queue. Queue time: 0.00, task time: 0.00
 INFO Published 0 diagnostics for file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py
 INFO Validated open files and committed transaction.
 INFO Cleared 1 dropped configs from config cache
 INFO Language server processed event `DidOpenTextDocument` in 0.15s (0.00s waiting)
 INFO Language server processed event `LspResponse` in 0.00s (0.14s waiting)
 INFO Client configuration applied to workspace: Some(Url { scheme: "file", cannot_be_a_base: false, username: "", password: None, host: None, port: None, path: "/home/morgan/Development/dev2", query: None, fragment: None })
 INFO Client configuration applied to workspace: None
 INFO Language server processed event `LspResponse` in 0.00s (0.14s waiting)
 INFO Invalidated config, prepare to recheck open files.
 INFO Ran task on recheck_queue heavy task queue. Queue time: 0.00, task time: 0.00
 INFO Populating all files in the config (Marker("/home/morgan/Development/dev2/pyproject.toml")).
 INFO Published 0 diagnostics for file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py
 INFO Validated open files and committed transaction.
 INFO Language server processed event `RecheckFinished` in 0.00s (0.00s waiting)
 INFO Language server processed event `LspResponse` in 0.00s (0.00s waiting)
 INFO Language server processed event `LspResponse` in 0.00s (0.00s waiting)
 INFO Language server processed event `LspResponse` in 0.00s (0.00s waiting)
 INFO Prepare to check 5358 files.
 INFO Populated all files in the project path, prepare to recheck open files.
 INFO Ran task on recheck_queue heavy task queue. Queue time: 0.00, task time: 1.03
 INFO Populating up to 2000 files in the workspace ("/home/morgan/Development/dev2").
 INFO Published 0 diagnostics for file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py
 INFO Validated open files and committed transaction.
 INFO Language server processed event `RecheckFinished` in 0.00s (0.00s waiting)
 INFO Language server processed event `LspResponse` in 0.00s (0.00s waiting)
 INFO Prepare to check 1998 files.
 INFO Populated all files in the workspace, prepare to recheck open files.
 INFO Ran task on recheck_queue heavy task queue. Queue time: 1.04, task time: 0.07
 INFO Published 0 diagnostics for file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py
 INFO Validated open files and committed transaction.
 INFO Language server processed event `RecheckFinished` in 0.00s (0.00s waiting)
 INFO Language server processed event `LspResponse` in 0.00s (0.00s waiting)

server output:

[Trace - 4:51:03 PM] Sending request 'initialize - (0)'.
Params: {
    "processId": 892,
    "clientInfo": {
        "name": "VSCodium",
        "version": "1.107.1"
    },
    "locale": "en",
    "rootPath": "/home/morgan/Development/dev2",
    "rootUri": "file:///home/morgan/Development/dev2",
    "capabilities": {
        "workspace": {
            "applyEdit": true,
            "workspaceEdit": {
                "documentChanges": true,
                "resourceOperations": [
                    "create",
                    "rename",
                    "delete"
                ],
                "failureHandling": "textOnlyTransactional",
                "normalizesLineEndings": true,
                "changeAnnotationSupport": {
                    "groupsOnLabel": true
                }
            },
            "configuration": true,
            "didChangeWatchedFiles": {
                "dynamicRegistration": true,
                "relativePatternSupport": true
            },
            "symbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                },
                "tagSupport": {
                    "valueSet": [
                        1
                    ]
                },
                "resolveSupport": {
                    "properties": [
                        "location.range"
                    ]
                }
            },
            "codeLens": {
                "refreshSupport": true
            },
            "executeCommand": {
                "dynamicRegistration": true
            },
            "didChangeConfiguration": {
                "dynamicRegistration": true
            },
            "workspaceFolders": true,
            "foldingRange": {
                "refreshSupport": true
            },
            "semanticTokens": {
                "refreshSupport": true
            },
            "fileOperations": {
                "dynamicRegistration": true,
                "didCreate": true,
                "didRename": true,
                "didDelete": true,
                "willCreate": true,
                "willRename": true,
                "willDelete": true
            },
            "inlineValue": {
                "refreshSupport": true
            },
            "inlayHint": {
                "refreshSupport": true
            },
            "diagnostics": {
                "refreshSupport": true
            }
        },
        "textDocument": {
            "publishDiagnostics": {
                "relatedInformation": true,
                "versionSupport": false,
                "tagSupport": {
                    "valueSet": [
                        1,
                        2
                    ]
                },
                "codeDescriptionSupport": true,
                "dataSupport": true
            },
            "synchronization": {
                "dynamicRegistration": true,
                "willSave": true,
                "willSaveWaitUntil": true,
                "didSave": true
            },
            "completion": {
                "dynamicRegistration": true,
                "contextSupport": true,
                "completionItem": {
                    "snippetSupport": true,
                    "commitCharactersSupport": true,
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "deprecatedSupport": true,
                    "preselectSupport": true,
                    "tagSupport": {
                        "valueSet": [
                            1
                        ]
                    },
                    "insertReplaceSupport": true,
                    "resolveSupport": {
                        "properties": [
                            "documentation",
                            "detail",
                            "additionalTextEdits"
                        ]
                    },
                    "insertTextModeSupport": {
                        "valueSet": [
                            1,
                            2
                        ]
                    },
                    "labelDetailsSupport": true
                },
                "insertTextMode": 2,
                "completionItemKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25
                    ]
                },
                "completionList": {
                    "itemDefaults": [
                        "commitCharacters",
                        "editRange",
                        "insertTextFormat",
                        "insertTextMode",
                        "data"
                    ]
                }
            },
            "hover": {
                "dynamicRegistration": true,
                "contentFormat": [
                    "markdown",
                    "plaintext"
                ]
            },
            "signatureHelp": {
                "dynamicRegistration": true,
                "signatureInformation": {
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "parameterInformation": {
                        "labelOffsetSupport": true
                    },
                    "activeParameterSupport": true
                },
                "contextSupport": true
            },
            "definition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "references": {
                "dynamicRegistration": true
            },
            "documentHighlight": {
                "dynamicRegistration": true
            },
            "documentSymbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                },
                "hierarchicalDocumentSymbolSupport": true,
                "tagSupport": {
                    "valueSet": [
                        1
                    ]
                },
                "labelSupport": true
            },
            "codeAction": {
                "dynamicRegistration": true,
                "isPreferredSupport": true,
                "disabledSupport": true,
                "dataSupport": true,
                "resolveSupport": {
                    "properties": [
                        "edit"
                    ]
                },
                "codeActionLiteralSupport": {
                    "codeActionKind": {
                        "valueSet": [
                            "",
                            "quickfix",
                            "refactor",
                            "refactor.extract",
                            "refactor.inline",
                            "refactor.rewrite",
                            "source",
                            "source.organizeImports"
                        ]
                    }
                },
                "honorsChangeAnnotations": true
            },
            "codeLens": {
                "dynamicRegistration": true
            },
            "formatting": {
                "dynamicRegistration": true
            },
            "rangeFormatting": {
                "dynamicRegistration": true,
                "rangesSupport": true
            },
            "onTypeFormatting": {
                "dynamicRegistration": true
            },
            "rename": {
                "dynamicRegistration": true,
                "prepareSupport": true,
                "prepareSupportDefaultBehavior": 1,
                "honorsChangeAnnotations": true
            },
            "documentLink": {
                "dynamicRegistration": true,
                "tooltipSupport": true
            },
            "typeDefinition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "implementation": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "colorProvider": {
                "dynamicRegistration": true
            },
            "foldingRange": {
                "dynamicRegistration": true,
                "rangeLimit": 5000,
                "lineFoldingOnly": true,
                "foldingRangeKind": {
                    "valueSet": [
                        "comment",
                        "imports",
                        "region"
                    ]
                },
                "foldingRange": {
                    "collapsedText": false
                }
            },
            "declaration": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "selectionRange": {
                "dynamicRegistration": true
            },
            "callHierarchy": {
                "dynamicRegistration": true
            },
            "semanticTokens": {
                "dynamicRegistration": true,
                "tokenTypes": [
                    "namespace",
                    "type",
                    "class",
                    "enum",
                    "interface",
                    "struct",
                    "typeParameter",
                    "parameter",
                    "variable",
                    "property",
                    "enumMember",
                    "event",
                    "function",
                    "method",
                    "macro",
                    "keyword",
                    "modifier",
                    "comment",
                    "string",
                    "number",
                    "regexp",
                    "operator",
                    "decorator"
                ],
                "tokenModifiers": [
                    "declaration",
                    "definition",
                    "readonly",
                    "static",
                    "deprecated",
                    "abstract",
                    "async",
                    "modification",
                    "documentation",
                    "defaultLibrary"
                ],
                "formats": [
                    "relative"
                ],
                "requests": {
                    "range": true,
                    "full": {
                        "delta": true
                    }
                },
                "multilineTokenSupport": false,
                "overlappingTokenSupport": false,
                "serverCancelSupport": true,
                "augmentsSyntaxTokens": true
            },
            "linkedEditingRange": {
                "dynamicRegistration": true
            },
            "typeHierarchy": {
                "dynamicRegistration": true
            },
            "inlineValue": {
                "dynamicRegistration": true
            },
            "inlayHint": {
                "dynamicRegistration": true,
                "resolveSupport": {
                    "properties": [
                        "tooltip",
                        "textEdits",
                        "label.tooltip",
                        "label.location",
                        "label.command"
                    ]
                }
            },
            "diagnostic": {
                "dynamicRegistration": true,
                "relatedDocumentSupport": false
            }
        },
        "window": {
            "showMessage": {
                "messageActionItem": {
                    "additionalPropertiesSupport": true
                }
            },
            "showDocument": {
                "support": true
            },
            "workDoneProgress": true
        },
        "general": {
            "staleRequestSupport": {
                "cancel": true,
                "retryOnContentModified": [
                    "textDocument/semanticTokens/full",
                    "textDocument/semanticTokens/range",
                    "textDocument/semanticTokens/full/delta"
                ]
            },
            "regularExpressions": {
                "engine": "ECMAScript",
                "version": "ES2020"
            },
            "markdown": {
                "parser": "marked",
                "version": "1.1.0"
            },
            "positionEncodings": [
                "utf-16"
            ]
        },
        "notebookDocument": {
            "synchronization": {
                "dynamicRegistration": true,
                "executionSummarySupport": true
            }
        }
    },
    "initializationOptions": {
        "lspPath": "/home/morgan/.virtualenvs/dev2/bin/pyrefly",
        "lspArguments": [
            "lsp"
        ],
        "trace": {
            "server": "verbose"
        },
        "commentFoldingRanges": false
    },
    "trace": "verbose",
    "workspaceFolders": [
        {
            "uri": "file:///home/morgan/Development/dev2",
            "name": "dev2"
        }
    ]
}


[Trace - 4:51:03 PM] Received response 'initialize - (0)' in 4ms.
Result: {
    "capabilities": {
        "callHierarchyProvider": true,
        "codeActionProvider": {
            "codeActionKinds": [
                "quickfix",
                "refactor.extract",
                "refactor.rewrite",
                "refactor.move",
                "refactor.inline",
                "source.fixAll"
            ]
        },
        "completionProvider": {
            "resolveProvider": true,
            "triggerCharacters": [
                ".",
                "'",
                "\""
            ]
        },
        "declarationProvider": true,
        "definitionProvider": true,
        "documentHighlightProvider": true,
        "documentSymbolProvider": true,
        "foldingRangeProvider": true,
        "hoverProvider": true,
        "implementationProvider": true,
        "inlayHintProvider": true,
        "notebookDocumentSync": {
            "notebookSelector": [
                {
                    "cells": [
                        {
                            "language": "python"
                        }
                    ]
                }
            ]
        },
        "positionEncoding": "utf-16",
        "referencesProvider": true,
        "renameProvider": {
            "prepareProvider": true
        },
        "semanticTokensProvider": {
            "full": true,
            "legend": {
                "tokenModifiers": [
                    "declaration",
                    "definition",
                    "readonly",
                    "static",
                    "deprecated",
                    "abstract",
                    "async",
                    "modification",
                    "documentation",
                    "defaultLibrary",
                    "selfParameter"
                ],
                "tokenTypes": [
                    "namespace",
                    "type",
                    "class",
                    "enum",
                    "interface",
                    "struct",
                    "typeParameter",
                    "parameter",
                    "variable",
                    "property",
                    "enumMember",
                    "event",
                    "function",
                    "method",
                    "macro",
                    "keyword",
                    "modifier",
                    "comment",
                    "string",
                    "number",
                    "regexp",
                    "operator",
                    "decorator"
                ]
            },
            "range": true
        },
        "signatureHelpProvider": {
            "triggerCharacters": [
                "(",
                ","
            ]
        },
        "textDocumentSync": 2,
        "typeDefinitionProvider": true,
        "typeHierarchyProvider": true,
        "workspace": {
            "fileOperations": {
                "willRename": {
                    "filters": [
                        {
                            "pattern": {
                                "glob": "**/*.{py,pyi}",
                                "matches": "file"
                            },
                            "scheme": "file"
                        }
                    ]
                }
            },
            "workspaceFolders": {
                "changeNotifications": true,
                "supported": true
            }
        },
        "workspaceSymbolProvider": true
    },
    "serverInfo": {
        "name": "pyrefly-lsp",
        "version": "0.54.0"
    }
}


[Trace - 4:51:03 PM] Sending notification 'initialized'.
Params: {}


[Trace - 4:51:03 PM] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py",
        "languageId": "python",
        "version": 3,
        "text": "import itertools\nimport operator\nfrom functools import reduce\n\nimport waffle\nfrom django.contrib.auth.decorators import login_required\nfrom django.contrib.auth.models import AnonymousUser, User\nfrom django.core.cache import cache\nfrom django.db.models import Q\nfrom django.shortcuts import render\nfrom django.utils.safestring import mark_safe\n\nfrom addgene.browse.forms import SmartPackingCourierDemoForm\nfrom addgene.browse.models import Catalog_Item, Kit_Item, Service\nfrom addgene.browse.models.catalog_item import Addgene_Status\nfrom addgene.browse.models.viral_vector_packaging_request import (\n    ViralVectorPackagingRequest,\n    ViralVectorPackagingRequestStatus,\n)\nfrom addgene.common.views import is_staff\nfrom addgene.plasmids.models import PlasmidType\nfrom lims.pricing.forms import CatalogItemPriceDemoForm\nfrom lims.pricing.pricing_group import get_prices_for_catalog_items\n\n\ndef y(a: str | None) -> None:\n    return a.upper()\n\nx: str = 1\n\n\n@login_required\ndef demo_cart_to_boxes(request):\n    # prevent circular import\n    from addgene.shopping.models.bill import Bill  # noqa: PLC0415\n\n    if waffle.switch_is_active(\"expanded_couriers_enabled\"):\n        user = request.user\n        # If the user has submitted new Courier options, we'll save those on the Cart and recreate the Bill.\n        if request.method == \"POST\":\n            smart_packing_courier_demo_form = SmartPackingCourierDemoForm(request.POST)\n\n            user.cart.courier_pk_selected_for_environment = {\n                environment: smart_packing_courier_demo_form.data[environment]\n                for environment in smart_packing_courier_demo_form.changed_data\n            }\n            user.cart.save()\n        else:\n            smart_packing_courier_demo_form = SmartPackingCourierDemoForm()\n        bill = Bill.from_cart(user)\n        smart_packing_courier_demo_form.update_courier_fields(bill)\n\n        # We need to make this not a defaultdict so it can be displayed in a template\n        for def_dict in bill.courier_cost_by_environment.values():\n            def_dict.default_factory = None\n        return render(\n            request,\n            'browse/demo_cart_to_boxes.html',\n            {\n                'boxes': sorted(bill.boxes_from_base_courier, key=lambda box: box.environment.name),\n                'smart_packing_courier_demo_form': smart_packing_courier_demo_form,\n            },\n        )\n    try:\n        viral_courier = request.user.cart.chosen_viral_courier if request.user.cart.chosen_viral_courier else None\n    except AttributeError:\n        viral_courier = None\n\n    country = request.user.account.organization.country\n    from addgene.ship.packing import PackingAlgorithmRunner  # noqa: PLC0415\n\n    packing_algorithm = PackingAlgorithmRunner(viral_courier=viral_courier, country=country)\n    boxes = packing_algorithm.make_boxes_from_cart(request.user)\n    return render(request, 'browse/demo_cart_to_boxes.html', {'boxes': boxes})\n\n\n@login_required\ndef demo_catalog_item_price(request):\n    price_by_catalog_item = {}\n    if request.method == \"POST\":\n        form = CatalogItemPriceDemoForm(request.POST)\n        form.is_valid()\n        recipient_type = form.cleaned_data['recipient_type']\n        distributor = form.cleaned_data['distributor']\n        catalog_items = form.cleaned_data['catalog_items']\n\n        try:\n            price_by_catalog_item = get_prices_for_catalog_items(catalog_items, recipient_type, distributor)\n        except Exception as exc:  # noqa: BLE001 deferring fix hackathon summer 2023\n            form.add_error(None, exc)\n\n        # For display purposes, we'll add in the quantity and summed price, to be displayed to the user.\n        for catalog_item, price in price_by_catalog_item.items():\n            quantity = catalog_items.count(catalog_item)\n            price_by_catalog_item[catalog_item] = f\"${price}\"\n            if quantity > 1:\n                price_by_catalog_item[catalog_item] += f\" * {quantity}: ${price*quantity}\"\n\n    else:\n        form = CatalogItemPriceDemoForm()\n\n    return render(\n        request,\n        'browse/demo_catalog_item_price.html',\n        {'form': form, 'prices_by_catalog_item': price_by_catalog_item},\n    )\n\n\n@is_staff\ndef demo_item_access(request):\n    template_name = 'browse/demo_item_access.dj.html'\n    if request.GET.get('bs3'):\n        template_name = 'browse/demo_item_access.epoch2.dj.html'\n    return render(request, template_name, {})\n\n\n@is_staff\ndef demo_item_access_all_combos(request, widget_type=None):  # noqa: PLR0915\n\n    def _find_test_items():\n        available = Catalog_Item.is_available_query()\n        rejected = Q(addgene_status=Addgene_Status.id_rejected)\n        discontinued = Q(addgene_status=Addgene_Status.id_discontinued)\n        industrial = Q(is_industrial=True)\n        export_control = Q(material__export_control=True)\n        fbs = Q(service__contains_bovine_serum=True)\n        virus = Q(service__is_virus=True)\n        dna = Q(service__is_dna=True)\n        bacteria_units_only = Q(material__plasmid__type=PlasmidType.id_bacterial_strain) | Q(\n            material__catalog_item__service=Service.CLASSIC_ID,\n            material__catalog_item__kit_item__kit_type__in=(\n                Kit_Item.ID_PLATE_KIT,\n                Kit_Item.ID_LARGE_PLATE_KIT,\n            ),\n        )\n        item_criteria = (\n            (\n                ('', available),\n                ('Pending', ~(available | rejected | discontinued)),\n                ('Rejected', rejected),\n                ('Discontinued', discontinued),\n            ),\n            (\n                ('', ~industrial),\n                ('Industrial', industrial),\n            ),\n            (\n                ('', ~export_control),\n                ('Export control', export_control),\n            ),\n            (\n                ('', ~bacteria_units_only),\n                ('Bacteria Units Only', bacteria_units_only),\n            ),\n            (\n                ('', ~fbs),\n                ('FBS', fbs),\n            ),\n            (\n                ('', ~virus),\n                ('Virus', virus),\n            ),\n            (\n                ('', ~dna),\n                ('DNA Item', dna),\n            ),\n        )\n        # criterion will be one element from each tuple in item_criteria\n        for criterion in itertools.product(*item_criteria):\n            # use the first part of each pair to label this combination of\n            # criterion\n            item_kind = ', '.join(c[0] for c in criterion if c[0])\n            # item must match each Q object (the second part of the pairs in\n            # item_criteria)\n            q = reduce(operator.iand, (c[1] for c in criterion))\n            try:\n                item = Catalog_Item.objects.filter(q)[0]\n                yield item_kind, item\n            except IndexError:\n                pass\n        # Handle null case special\n        yield (mark_safe('<i>NULL item</i>'), None)\n\n    def _find_test_users():\n        # Handle not-logged-in-case special\n        yield (mark_safe('<i>Not Logged In</i>'), AnonymousUser())\n\n        industrial = Q(account__organization__is_industrial=True)\n        distributor = Q(account__organization__distributor__isnull=False)\n        tto = Q(account__is_emta=True)\n        virus = Q(account__organization__country__can_order_virus=True)\n        bacteria_ok = Q(account__organization__country__bacteria_allowed=True)\n        fbs = Q(account__organization__country__bovine_serum_restricted=False)\n        unaffiliated = Q(account__organization__isnull=True)\n        active = Q(is_active=True)\n        has_account = Q(account__isnull=False)\n        us = Q(account__organization__country_id='US')\n        pr = Q(account__organization__country_id='PR')\n        international = ~(us | pr)\n        china = Q(account__organization__country_id='CN')\n        user_criteria = (\n            (\n                ('', active),\n                ('Inactive', ~active),\n            ),\n            (\n                ('', has_account),\n                ('Accountless', ~has_account),\n            ),\n            (\n                ('Unaffiliated', unaffiliated),\n                ('', ~unaffiliated),\n            ),\n            (\n                ('', ~china),\n                ('China', china),\n            ),\n            (\n                ('', ~distributor),\n                ('Distributor', distributor),\n            ),\n            (\n                ('', ~tto),\n                ('TTO', tto),\n            ),\n            (\n                ('', ~industrial),\n                ('Industrial', industrial),\n            ),\n            (\n                ('Domestic', us),\n                ('Domestic: PR', pr),\n                ('International', international),\n            ),\n            (\n                ('', bacteria_ok),\n                ('No Bacteria', ~bacteria_ok),\n            ),\n            (\n                ('', virus),\n                ('No Virus', ~virus),\n            ),\n            (\n                ('', fbs),\n                ('No FBS', ~fbs),\n            ),\n        )\n        for criterion in itertools.product(*user_criteria):\n            # use the first part of each pair to label this combination of criterion\n            user_kind = ', '.join(c[0] for c in criterion if c[0])\n            # User must match each Q object (the second part of the pairs in\n            # user_criteria)\n            q = reduce(operator.iand, (c[1] for c in criterion))\n            try:\n                user = (User.objects.filter(q))[0]\n                yield (user_kind, user)\n            except IndexError:\n                pass\n        # Handle null case special\n        yield (mark_safe('<i>NULL user</i>'), None)\n\n    widget_types = {\n        'popover': \"Popover Block\",\n        'mini-popover': \"Mini Popover\",\n        'table-cell': \"Table Cell\",\n        'price-table-cell': \"Table Cell, with Price\",\n    }\n\n    if not widget_type:\n        # default to popover if none specified\n        widget_type = 'popover'\n    vv_por = ViralVectorPackagingRequest.objects.filter(\n        status=ViralVectorPackagingRequestStatus.READY_TO_ORDER,\n    ).first()\n    vv_por_item = None\n    vv_por_user = None\n    if vv_por:\n        vv_por_item = vv_por.catalog_item\n        vv_por_user = vv_por.user\n\n    demo_item_access_items = cache.get('demo_item_access_items')\n    if not demo_item_access_items:\n        demo_item_access_items_list = list(_find_test_items())\n        # Example for Viral vector packaging request item\n        # This is needed because the add to cart button criteria for vv_por needs a viral vector packaging request for\n        # a specific user and item.\n        # Using the _find_test_items() does not guarantee that the user and catalog item will be for the same\n        # viral vector packaging request\n        if vv_por_item:\n            demo_item_access_items_list.append(('vv_por item', vv_por_item))\n        demo_item_access_items = tuple(demo_item_access_items_list)\n        cache.set('demo_item_access_items', demo_item_access_items, 60 * 60 * 24)\n\n    demo_item_access_users = cache.get('demo_item_access_users')\n    if not demo_item_access_users:\n        # Example for Viral vector packaging request user\n        # This is needed because the add to cart button criteria for vv_por needs a viral vector packaging request for\n        # a specific user and item.\n        # Using the _find_test_users() does not guarantee that the user and catalog item will be for the same\n        # viral vector packaging request\n        demo_item_access_users_list = list(_find_test_users())\n        if vv_por_user:\n            demo_item_access_users_list.append(('vv_por user', vv_por_user))\n        demo_item_access_users = tuple(demo_item_access_users_list)\n        cache.set('demo_item_access_users', demo_item_access_users, 60 * 60 * 24)\n    context = {\n        'widget_types': widget_types,\n        'active_widget_type': widget_type,\n        'widgets_to_display': [widget_type] if widget_type else widget_types,\n        # These two functions are generators just for syntactic simplicity.\n        # Consume them here to ensure they only run once.\n        'test_items': demo_item_access_items,\n        'test_users': demo_item_access_users,\n    }\n    return render(request, 'browse/demo_item_access.html', context)\n"
    }
}


[Trace - 4:51:03 PM] Received request 'client/registerCapability - (1)'.
Params: {
    "registrations": [
        {
            "id": "FILEWATCHER",
            "method": "workspace/didChangeWatchedFiles",
            "registerOptions": {
                "watchers": [
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/",
                            "pattern": "**/*.py"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/",
                            "pattern": "**/*.pyi"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/",
                            "pattern": "**/*.ipynb"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/",
                            "pattern": "**/pyrefly.toml"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/",
                            "pattern": "**/pyproject.toml"
                        },
                        "kind": 7
                    }
                ]
            }
        }
    ]
}


[Trace - 4:51:03 PM] Sending response 'client/registerCapability - (1)'. Processing request took 2ms
No result returned.


[Trace - 4:51:03 PM] Received request 'workspace/configuration - (2)'.
Params: {
    "items": [
        {
            "scopeUri": "file:///home/morgan/Development/dev2",
            "section": "python"
        },
        {
            "section": "python"
        }
    ]
}


[Trace - 4:51:03 PM] Sending response 'workspace/configuration - (2)'. Processing request took 1ms
Result: [
    {
        "activeStateToolPath": "state",
        "autoComplete": {
            "extraPaths": []
        },
        "createEnvironment": {
            "contentButton": "hide",
            "trigger": "prompt"
        },
        "condaPath": "",
        "defaultInterpreterPath": "/home/morgan/.virtualenvs/dev2",
        "envFile": "${workspaceFolder}/.env",
        "useEnvironmentsExtension": false,
        "experiments": {
            "enabled": true,
            "optInto": [],
            "optOutFrom": []
        },
        "globalModuleInstallation": false,
        "languageServer": "None",
        "interpreter": {
            "infoVisibility": "onPythonRelated"
        },
        "logging": {
            "level": "error"
        },
        "missingPackage": {
            "severity": "Hint"
        },
        "locator": "js",
        "pipenvPath": "pipenv",
        "poetryPath": "poetry",
        "pixiToolPath": "pixi",
        "terminal": {
            "activateEnvInCurrentTerminal": false,
            "activateEnvironment": true,
            "executeInFileDir": false,
            "focusAfterLaunch": false,
            "launchArgs": [],
            "shellIntegration": {
                "enabled": true
            },
            "useEnvFile": false
        },
        "REPL": {
            "enableREPLSmartSend": true,
            "sendToNativeREPL": false,
            "provideVariables": true
        },
        "testing": {
            "autoTestDiscoverOnSaveEnabled": true,
            "autoTestDiscoverOnSavePattern": "**/*.py",
            "cwd": null,
            "debugPort": 3000,
            "promptToConfigure": true,
            "pytestArgs": [],
            "pytestEnabled": false,
            "pytestPath": "pytest",
            "unittestArgs": [
                "-v",
                "-s",
                ".",
                "-p",
                "*test*.py"
            ],
            "unittestEnabled": false
        },
        "venvFolders": [],
        "venvPath": "",
        "pyrefly": {
            "disableLanguageServices": false,
            "displayTypeErrors": "default",
            "disabledLanguageServices": {},
            "syncNotebooks": true,
            "streamDiagnostics": true,
            "diagnosticMode": "openFilesOnly"
        },
        "analysis": {
            "showHoverGoToLinks": true,
            "completeFunctionParens": false
        },
        "pythonPath": "/home/morgan/.virtualenvs/dev2/bin/python"
    },
    {
        "activeStateToolPath": "state",
        "autoComplete": {
            "extraPaths": []
        },
        "createEnvironment": {
            "contentButton": "hide",
            "trigger": "prompt"
        },
        "condaPath": "",
        "defaultInterpreterPath": "/home/morgan/.virtualenvs/dev2",
        "envFile": "${workspaceFolder}/.env",
        "useEnvironmentsExtension": false,
        "experiments": {
            "enabled": true,
            "optInto": [],
            "optOutFrom": []
        },
        "globalModuleInstallation": false,
        "languageServer": "None",
        "interpreter": {
            "infoVisibility": "onPythonRelated"
        },
        "logging": {
            "level": "error"
        },
        "missingPackage": {
            "severity": "Hint"
        },
        "locator": "js",
        "pipenvPath": "pipenv",
        "poetryPath": "poetry",
        "pixiToolPath": "pixi",
        "terminal": {
            "activateEnvInCurrentTerminal": false,
            "activateEnvironment": true,
            "executeInFileDir": false,
            "focusAfterLaunch": false,
            "launchArgs": [],
            "shellIntegration": {
                "enabled": true
            },
            "useEnvFile": false
        },
        "REPL": {
            "enableREPLSmartSend": true,
            "sendToNativeREPL": false,
            "provideVariables": true
        },
        "testing": {
            "autoTestDiscoverOnSaveEnabled": true,
            "autoTestDiscoverOnSavePattern": "**/*.py",
            "cwd": null,
            "debugPort": 3000,
            "promptToConfigure": true,
            "pytestArgs": [],
            "pytestEnabled": false,
            "pytestPath": "pytest",
            "unittestArgs": [
                "-v",
                "-s",
                ".",
                "-p",
                "*test*.py"
            ],
            "unittestEnabled": false
        },
        "venvFolders": [],
        "venvPath": "",
        "pyrefly": {
            "disableLanguageServices": false,
            "displayTypeErrors": "default",
            "disabledLanguageServices": {},
            "syncNotebooks": true,
            "streamDiagnostics": true,
            "diagnosticMode": "openFilesOnly"
        },
        "analysis": {
            "showHoverGoToLinks": true,
            "completeFunctionParens": false
        },
        "pythonPath": "/home/morgan/.virtualenvs/dev2/bin/python"
    }
]


[Trace - 4:51:03 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "diagnostics": [],
    "uri": "file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py",
    "version": 3
}


[Trace - 4:51:03 PM] Received request 'workspace/semanticTokens/refresh - (3)'.
[Trace - 4:51:03 PM] Sending response 'workspace/semanticTokens/refresh - (3)'. Processing request took 0ms
No result returned.


[Trace - 4:51:03 PM] Received request 'client/registerCapability - (4)'.
Params: {
    "registrations": [
        {
            "id": "FILEWATCHER",
            "method": "workspace/didChangeWatchedFiles",
            "registerOptions": {
                "watchers": [
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/src/",
                            "pattern": "**/*.py"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/src/",
                            "pattern": "**/*.pyi"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/src/",
                            "pattern": "**/*.ipynb"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/src/",
                            "pattern": "**/*.pyc"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/src/",
                            "pattern": "**/*.pyx"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///home/morgan/Development/dev2/src/",
                            "pattern": "**/*.pyd"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///app/lib/python3.13/site-packages/",
                            "pattern": "**/*.py"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///app/lib/python3.13/site-packages/",
                            "pattern": "**/*.pyi"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///app/lib/python3.13/site-packages/",
                            "pattern": "**/*.ipynb"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///app/lib/python3.13/site-packages/",
                            "pattern": "**/*.pyc"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///app/lib/python3.13/site-packages/",
                            "pattern": "**/*.pyx"
                        },
                        "kind": 7
                    },
                    {
                        "globPattern": {
                            "baseUri": "file:///app/lib/python3.13/site-packages/",
                            "pattern": "**/*.pyd"
                        },
                        "kind": 7
                    }
                ]
            }
        }
    ]
}


[Trace - 4:51:03 PM] Sending response 'client/registerCapability - (4)'. Processing request took 3ms
No result returned.


[Trace - 4:51:03 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "diagnostics": [],
    "uri": "file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py",
    "version": 3
}


[Trace - 4:51:03 PM] Received request 'workspace/semanticTokens/refresh - (5)'.
[Trace - 4:51:03 PM] Sending response 'workspace/semanticTokens/refresh - (5)'. Processing request took 0ms
No result returned.


[Trace - 4:51:04 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "diagnostics": [],
    "uri": "file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py",
    "version": 3
}


[Trace - 4:51:04 PM] Received request 'workspace/semanticTokens/refresh - (6)'.
[Trace - 4:51:04 PM] Sending response 'workspace/semanticTokens/refresh - (6)'. Processing request took 0ms
No result returned.


[Trace - 4:51:04 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "diagnostics": [],
    "uri": "file:///home/morgan/Development/dev2/src/django/addgene/browse/views/demo.py",
    "version": 3
}


[Trace - 4:51:04 PM] Received request 'workspace/semanticTokens/refresh - (7)'.
[Trace - 4:51:04 PM] Sending response 'workspace/semanticTokens/refresh - (7)'. Processing request took 0ms
No result returned.


terminal output with a manual invocation of the pyrefly executable

(dev2) sh-5.3$ pyrefly check src/django/addgene/browse/views/demo.py
ERROR Cannot find module `waffle` [missing-import]
 --> src/django/addgene/browse/views/demo.py:5:8
  |
5 | import waffle
  |        ^^^^^^
  |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `django.contrib.auth.decorators` [missing-import]
 --> src/django/addgene/browse/views/demo.py:6:1
  |
6 | from django.contrib.auth.decorators import login_required
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `django.contrib.auth.models` [missing-import]
 --> src/django/addgene/browse/views/demo.py:7:1
  |
7 | from django.contrib.auth.models import AnonymousUser, User
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `django.core.cache` [missing-import]
 --> src/django/addgene/browse/views/demo.py:8:1
  |
8 | from django.core.cache import cache
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `django.db.models` [missing-import]
 --> src/django/addgene/browse/views/demo.py:9:1
  |
9 | from django.db.models import Q
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `django.shortcuts` [missing-import]
  --> src/django/addgene/browse/views/demo.py:10:1
   |
10 | from django.shortcuts import render
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `django.utils.safestring` [missing-import]
  --> src/django/addgene/browse/views/demo.py:11:1
   |
11 | from django.utils.safestring import mark_safe
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `addgene.browse.forms` [missing-import]
  --> src/django/addgene/browse/views/demo.py:13:1
   |
13 | from addgene.browse.forms import SmartPackingCourierDemoForm
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `addgene.browse.models` [missing-import]
  --> src/django/addgene/browse/views/demo.py:14:1
   |
14 | from addgene.browse.models import Catalog_Item, Kit_Item, Service
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `addgene.browse.models.catalog_item` [missing-import]
  --> src/django/addgene/browse/views/demo.py:15:1
   |
15 | from addgene.browse.models.catalog_item import Addgene_Status
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `addgene.browse.models.viral_vector_packaging_request` [missing-import]
  --> src/django/addgene/browse/views/demo.py:16:1
   |
16 | / from addgene.browse.models.viral_vector_packaging_request import (
17 | |     ViralVectorPackagingRequest,
18 | |     ViralVectorPackagingRequestStatus,
19 | | )
   | |_^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `addgene.common.views` [missing-import]
  --> src/django/addgene/browse/views/demo.py:20:1
   |
20 | from addgene.common.views import is_staff
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `addgene.plasmids.models` [missing-import]
  --> src/django/addgene/browse/views/demo.py:21:1
   |
21 | from addgene.plasmids.models import PlasmidType
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `lims.pricing.forms` [missing-import]
  --> src/django/addgene/browse/views/demo.py:22:1
   |
22 | from lims.pricing.forms import CatalogItemPriceDemoForm
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `lims.pricing.pricing_group` [missing-import]
  --> src/django/addgene/browse/views/demo.py:23:1
   |
23 | from lims.pricing.pricing_group import get_prices_for_catalog_items
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Object of class `NoneType` has no attribute `upper` [missing-attribute]
  --> src/django/addgene/browse/views/demo.py:27:12
   |
27 |     return a.upper()
   |            ^^^^^^^
   |
ERROR `Literal[1]` is not assignable to `str` [bad-assignment]
  --> src/django/addgene/browse/views/demo.py:29:10
   |
29 | x: str = 1
   |          ^
   |
ERROR Cannot find module `addgene.shopping.models.bill` [missing-import]
  --> src/django/addgene/browse/views/demo.py:35:5
   |
35 |     from addgene.shopping.models.bill import Bill  # noqa: PLC0415
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Cannot find module `addgene.ship.packing` [missing-import]
  --> src/django/addgene/browse/views/demo.py:70:5
   |
70 |     from addgene.ship.packing import PackingAlgorithmRunner  # noqa: PLC0415
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
  Looked in these locations (from default config for project root marked by `/home/morgan/Development/dev2/pyproject.toml`):
  Import root (inferred from project layout): "/home/morgan/Development/dev2/src"
  Site package path queried from interpreter: ["/app/lib/python3.13/site-packages"]
ERROR Unary `~` is not supported on `type[Any]` [unsupported-operation]
   --> src/django/addgene/browse/views/demo.py:139:29
    |
139 |                 ('Pending', ~(available | rejected | discontinued)),
    |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
ERROR Unary `~` is not supported on `type[Any]` [unsupported-operation]
   --> src/django/addgene/browse/views/demo.py:152:22
    |
152 |                 ('', ~bacteria_units_only),
    |                      ^^^^^^^^^^^^^^^^^^^^
    |
ERROR Unary `~` is not supported on `type[Any]` [unsupported-operation]
   --> src/django/addgene/browse/views/demo.py:199:25
    |
199 |         international = ~(us | pr)
    |                         ^^^^^^^^^^
    |
 INFO 22 errors
(dev2) sh-5.3$ 

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions