Hi,

I ran in to the situation of wanting `to_python` and `to_url` be decorated 
with `@classmethod` to avoid having to declare an additional (kind of 
no-op) class with those 2 methods.

Given that I have a couple of custom python data structures that can be 
encoded into path params, it would be slightly more cleaner if my custom 
class(es) would be the ones declaring `def to_python` and `def to_url` to 
comply with the path converter interface. Rather than having some 
additional `class <MyType>Converter`.

Below follows an invented example, where I pretend to have some product 
slug composed of a slugged name and integer code. Imagine seeing something 
like “white-socks-123456789” in a URL.

```
class Slug:
    regex = r".+"

    def __init__(self, slugged_name, sku):
        self.slugged_name = slugged_name
        self.sku = sku

    @classmethod
    def to_python(cls, value):
        name, _, sku = value.rpartition("-")
        if not name:
            raise ValueError("invalid name segment")

        try:
            sku = int(sku)
        except ValueError as exc:
            raise ValueError("sku needs to be a number") from exc

        return cls(name, sku)

    @classmethod
    def to_url(cls, slug):
        return f"{slug.slugged_name}-{slug.sku}"


register_converter(Slug, "my-slug")
```

Could changing the converter interface be something to consider?
At least I couldn’t see any obvious problems with expecting these 2 methods 
as `@classmethod` (or even `@staticmethod`?) instead. But I could very well 
be missing something.

Thanks!
Petter

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/a43092e4-34a1-403a-beef-a2c4cac710ebn%40googlegroups.com.
  • Cha... Petter friberg
    • ... 'Adam Johnson' via Django developers (Contributions to Django itself)
      • ... Petter friberg

Reply via email to