Skip to content

Code Examples

Base62 Encoder

The encoder converts sequential IDs to short, URL-safe strings:

from url_shortener.domain import Base62Encoder

encoder = Base62Encoder()

# Encode integers to short codes
encoder.encode(1)      # "1"
encoder.encode(62)     # "10"
encoder.encode(1000)   # "g8"

# Decode back to integers
encoder.decode("g8")   # 1000

Storage Backends

In-Memory Storage (default, fast, non-persistent):

from url_shortener.domain import Base62Encoder
from url_shortener.infrastructure import InMemoryStorage

encoder = Base62Encoder()
storage = InMemoryStorage(encoder)

# Create short code
short_code = await storage.create_short_code("https://example.com")

# Retrieve original URL
url = await storage.get_full_url(short_code)

SQLite Storage (persistent):

from url_shortener.domain import Base62Encoder
from url_shortener.infrastructure import SQLiteStorage

encoder = Base62Encoder()
storage = SQLiteStorage(encoder, db_path="./urls.db")

# Same interface as InMemoryStorage
short_code = await storage.create_short_code("https://example.com")

Using the Factory

The recommended way to create a configured shortener:

from url_shortener.domain import Base62Encoder
from url_shortener.infrastructure.config import Config
from url_shortener.infrastructure.factory import create_shortener

config = Config.from_env()
encoder = Base62Encoder()
shortener = create_shortener(config, encoder)

# Use the shortener
short_code = await shortener.create_short_code("https://example.com")
original = await shortener.get_full_url(short_code)