Currently, the API exposes multiple methods for creating ulid.ULID instances from other data types. However, it does not support a "catch all" call that attempts to make the determination based on type and requires the caller to do that.
Let's imagine that a user of the library has read an input value from somewhere that they have a relatively high confidence is a ULID. However, they don't know the format in which it was stored. In order to support this mechanism, the user of the library needs to write the following code:
if isinstance(value, bytes):
return ulid.from_bytes(value)
if isinstance(value, int):
return ulid.from_int(value)
if isinstance(value, str):
return ulid.from_str(value)
if isinstance(value, uuid.UUID):
return ulid.from_uuid(value)
raise ValueError('Cannot create ULID from type {}'.format(value.__class__.__name__)
This is pretty verbose, especially since we could hide this logic inside the library in a separate API call itself. It will be slightly slower that calling the correct method directly, since we have to run the if/else tree every time and don't know the "hot path", but should be helpful for this scenario.
Currently, the API exposes multiple methods for creating
ulid.ULID
instances from other data types. However, it does not support a "catch all" call that attempts to make the determination based on type and requires the caller to do that.Let's imagine that a user of the library has read an input value from somewhere that they have a relatively high confidence is a ULID. However, they don't know the format in which it was stored. In order to support this mechanism, the user of the library needs to write the following code:
This is pretty verbose, especially since we could hide this logic inside the library in a separate API call itself. It will be slightly slower that calling the correct method directly, since we have to run the if/else tree every time and don't know the "hot path", but should be helpful for this scenario.
Potential thoughts:
from_(value)
from_value(value)
from_obj(value)
from_unknown(value)
parse(value)
decode(value)
load(value)