dpo_reader.cli

CLI entrypoint for DPO Reader.

Functions

export_audio([url, output, engine, ...])

Export a Discourse thread to audio file (no auto-play).

get_backend(engine)

Get TTS backend instance.

get_base_url(url)

Extract base URL from thread URL.

info([url, max_posts])

Show information about a Discourse thread without generating audio.

listen([url, output, engine, max_posts, ...])

Convert a Discourse thread to audio and play it.

parse_post_number_from_url(url)

Extract post number from Discourse URL if present.

post_link(base_url, topic_id, post_number[, ...])

Create Rich markup for a clickable post link.

preview([url, posts])

Preview the first few posts of a thread.

title_link(url, title)

Create Rich markup for a clickable title link.

user_link(base_url, username[, display])

Create Rich markup for a clickable user link.

Classes

Engine

TTS engine choices.

dpo_reader.cli.get_base_url(url)[source]

Extract base URL from thread URL.

Parameters:

url (str)

Return type:

str

dpo_reader.cli.parse_post_number_from_url(url)[source]

Extract post number from Discourse URL if present.

URLs like /t/topic-slug/12345/17 have post number 17. URLs like /t/topic-slug/12345 have no post number.

Parameters:

url (str)

Return type:

int | None

Create Rich markup for a clickable user link.

Parameters:
  • base_url (str)

  • username (str)

  • display (str | None)

Return type:

str

Create Rich markup for a clickable post link.

Parameters:
  • base_url (str)

  • topic_id (int)

  • post_number (int)

  • display (str | None)

Return type:

str

Create Rich markup for a clickable title link.

Parameters:
Return type:

str

class dpo_reader.cli.Engine[source]

Bases: str, Enum

TTS engine choices.

bark = 'bark'
openai = 'openai'
piper = 'piper'
__new__(value)
dpo_reader.cli.get_backend(engine)[source]

Get TTS backend instance.

Parameters:

engine (Engine)

dpo_reader.cli.listen(url=<typer.models.ArgumentInfo object>, output=<typer.models.OptionInfo object>, engine=<typer.models.OptionInfo object>, max_posts=<typer.models.OptionInfo object>, no_attribution=<typer.models.OptionInfo object>, cache_dir=<typer.models.OptionInfo object>, pause=<typer.models.OptionInfo object>, no_play=<typer.models.OptionInfo object>, ui=<typer.models.OptionInfo object>, file=<typer.models.OptionInfo object>, start_post=<typer.models.OptionInfo object>)[source]

Convert a Discourse thread to audio and play it.

Parameters:
Return type:

None

dpo_reader.cli.export_audio(url=<typer.models.ArgumentInfo object>, output=<typer.models.OptionInfo object>, engine=<typer.models.OptionInfo object>, max_posts=<typer.models.OptionInfo object>, no_attribution=<typer.models.OptionInfo object>, cache_dir=<typer.models.OptionInfo object>, pause=<typer.models.OptionInfo object>)[source]

Export a Discourse thread to audio file (no auto-play).

Parameters:
Return type:

None

dpo_reader.cli.info(url=<typer.models.ArgumentInfo object>, max_posts=<typer.models.OptionInfo object>)[source]

Show information about a Discourse thread without generating audio.

Parameters:
  • url (str)

  • max_posts (int | None)

Return type:

None

dpo_reader.cli.preview(url=<typer.models.ArgumentInfo object>, posts=<typer.models.OptionInfo object>)[source]

Preview the first few posts of a thread.

Parameters:
Return type:

None