Skip to content

HTTPMethodView subclass to support generics #2938

@elenlee

Description

@elenlee

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

For Python3.12 generic classes the following is ok:

class Foo0: ...
class Foo1[T](Foo0): ...
class Foo2(Foo1[int]): ...

But for HTTPMethodView subclass there is an error:

from sanic.views import HTTPMethodView

class Bar1[T](HTTPMethodView): ...
class Bar2(Bar1[int]): ...
    class Bar2(Bar1[int]): ...
               ~~~~^^^^^
  File "/usr/local/lib/python3.12/typing.py", line 374, in inner
    return _caches[func](*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/typing.py", line 1055, in _generic_class_getitem
    for param in cls.__parameters__:
                 ^^^^^^^^^^^^^^^^^^
AttributeError: type object 'Bar1' has no attribute '__parameters__'

Code snippet

No response

Expected Behavior

No error expected

How do you run Sanic?

As a script (app.run or Sanic.serve)

Operating System

Linux

Sanic Version

Sanic 23.12.1; Routing 23.12.0

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions