id = "pytr" name = "pytr" homepage = "https://github.com/pytr-org/pytr" description = "Use TradeRepublic in the terminal and download documents." executables = ["pytr"] [dotfiles] # The project's README documents ~/.pytr/credentials as the default login # credential file; the directory also holds the persisted web-login session. # Keep the whole per-user directory secret because both credentials and session # cookies are bearer/authentication material. # https://github.com/pytr-org/pytr#authentication # https://pypi.org/project/pytr/0.4.6/ paths = [] secret = ["~/.pytr/"] [commands] format = 1 label = "Trade Republic CLI" description = "Global verbosity plus the portfolio and dl_docs subcommands. Login credentials (phone, pin, WAF options) are left out." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "src" kind = "help" url = "https://github.com/pytr-org/pytr/blob/master/pytr/main.py" revision = "2026-10-27" evidence = """ -v, --verbosity {warning,info,debug} Set verbosity level (default: info) (default: info) """ [[commands.field]] id = "verbosity" label = "Verbosity" type = "enum" option = ["--verbosity", "-v"] choices = [{ value = "warning", label = "Warning" }, { value = "info", label = "Info" }, { value = "debug", label = "Debug" }] sources = ["src"] [[commands.group]] id = "basic" label = "Basic" fields = ["verbosity"] [[commands.subcommand]] path = ["portfolio"] label = "Show portfolio" description = "Show the current portfolio, optionally saved as CSV." [[commands.subcommand.source]] id = "src" kind = "help" url = "https://github.com/pytr-org/pytr/blob/master/pytr/main.py" revision = "2026-10-27" evidence = """ parser_portfolio.add_argument( "--include-watchlist", help="Include watchlist.", "--ignore", help="Semicolon or comma separated list of ISINs to exclude from the portfolio, e.g. --ignore US30303M1027;DE0005140008", parser_portfolio.add_argument("-o", "--output", help="Output path of CSV file", type=Path) "--sort-by-column", help="Sort results by column (default: netValue).", "--sort-ascending", help="Whether to sort in ascending order.", "--account", "--store_credentials", help="Store credentials (Phone number, pin, cookies) for next usage", """ [[commands.subcommand.field]] id = "include_watchlist" label = "Include watchlist" type = "boolean" option = ["--include-watchlist"] sources = ["src"] [[commands.subcommand.field]] id = "ignore" label = "Ignore ISINs" description = "Semicolon or comma separated ISINs to exclude." type = "string" option = ["--ignore"] sources = ["src"] [[commands.subcommand.field]] id = "output" label = "CSV output file" type = "path" option = ["--output", "-o"] path = { kind = "file", role = "output", must_exist = false } effect = "overwrite" sources = ["src"] [[commands.subcommand.field]] id = "sort_ascending" label = "Sort ascending" type = "boolean" option = ["--sort-ascending"] sources = ["src"] [[commands.subcommand.field]] id = "account" label = "Account" description = "Another account of this login: type, name or customer id." type = "string" option = ["--account"] sources = ["src"] [[commands.subcommand.field]] id = "store_credentials" label = "Store credentials" type = "boolean" option = ["--store_credentials"] sources = ["src"] [[commands.subcommand.task]] id = "show" label = "Show portfolio" fields = ["include_watchlist", "sort_ascending", "account"] required = [] [[commands.subcommand.task]] id = "csv" label = "Export to CSV" fields = ["output", "include_watchlist", "ignore", "account"] required = ["output"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["include_watchlist", "output", "sort_ascending"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["ignore", "account", "store_credentials"] [[commands.subcommand]] path = ["dl_docs"] label = "Download documents" description = "Download all PDF documents from the timeline into a folder." [[commands.subcommand.source]] id = "src" kind = "help" url = "https://github.com/pytr-org/pytr/blob/master/pytr/main.py" revision = "2026-10-27" evidence = """ parser_dl_docs.add_argument("output", help="Output directory", metavar="PATH", type=Path) "--format", help="available variables:\\tiso_date, time, title, subtitle, doc_num, id", "--last_days", help="Include data from the last N days (0 = include all days, -1 = no update)", "--days_until", help="Include data up to N days ago (0 = include all days)", "--workers", help="Number of workers for parallel downloading", parser_dl_docs.add_argument("--universal", help="Platform independent file names", action="store_true") "--dry-run", help="Create folder structure and empty placeholder files without downloading", "--account", """ [[commands.subcommand.field]] id = "output" label = "Output directory" type = "path" position = 0 path = { kind = "directory", role = "output", must_exist = false } sources = ["src"] [[commands.subcommand.field]] id = "format" label = "File name format" description = "Variables: iso_date, time, title, subtitle, doc_num, id." type = "string" option = ["--format"] sources = ["src"] [[commands.subcommand.field]] id = "last_days" label = "Last N days" description = "0 = all days, -1 = no update." type = "integer" option = ["--last_days"] sources = ["src"] [[commands.subcommand.field]] id = "days_until" label = "Until N days ago" type = "integer" option = ["--days_until"] sources = ["src"] [[commands.subcommand.field]] id = "workers" label = "Parallel workers" type = "integer" option = ["--workers"] sources = ["src"] [[commands.subcommand.field]] id = "universal" label = "Platform independent file names" type = "boolean" option = ["--universal"] sources = ["src"] [[commands.subcommand.field]] id = "dry_run" label = "Dry run" type = "boolean" option = ["--dry-run"] sources = ["src"] [[commands.subcommand.field]] id = "account" label = "Account" type = "string" option = ["--account"] sources = ["src"] [[commands.subcommand.task]] id = "download" label = "Download all documents" fields = ["output", "format", "workers", "universal", "account"] required = ["output"] [[commands.subcommand.task]] id = "recent" label = "Download recent documents" fields = ["output", "last_days", "workers"] required = ["output", "last_days"] [[commands.subcommand.task]] id = "dry" label = "Preview folder structure" set = { dry_run = [true] } fields = ["output", "dry_run"] required = ["output"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["output", "last_days", "days_until", "dry_run"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["format", "workers", "universal", "account"]