Testing repo for implementing CI+CD
audible-cli is a command line interface for the Audible package. Both are written in Python language.
- TODO
audible-cli needs at least Python 3.8.
The preferred way to install this package is by using pipx:
pipx install audible-cli
You can install Audible Cli via pip from PyPI too:
$ pip install audible-cli
If Python>=3.7
is not available on the machine, standalone binaries can be found
below or on the releases page
(including beta releases). At this moment Windows, Linux and macOS are supported.
-
Linux
-
macOS
-
Windows
The code of onfile binaries is extracted on every execution. This can result in a long start time, especially on Windows machines. Using the one-dir binaries is the preferred way in that cases.
A standalone binary can be created this way:
git clone https://github.com/mkb79/audible-cli.git
cd audible-cli
poetry install
# one-file output
poetry run pyinstaller --clean audible-filemode.spec
# one-dir output
poetry run pyinstaller --clean audible-dirmode.spec
A config file and an auth file must be created first before using the
audible
command. The easiest way is by using the interactive
audible-quickstart
or audible quickstart
command.
The quickstart command verifies that there is no config file already present. So this command can only be run once.
To add another Audible account these steps have to be followed:
- add a new auth file:
audible manage auth-file add
- add a new profile:
audible manage profile add
One auth file per Audible account is sufficient. A profile connects an existing auth file with a specific Audible marketplace.
To add another marketplace to an existing auth file the command
audible manage profile add
must be used.
Tab completion can be provided for commands, options and choice values. Bash, Zsh and Fish are supported. More information can be found here.
This package simulate an iOS Audible device to interact with the non publicly Audible API. The information and credentials for each simulated device is stored in an (optionally encrypted) auth file. Devices, created this way, can be used for every available Audible marketplace. For this reason, one auth file per Audible account is sufficient. A profile connects an existing auth file with a specific Audible marketplace.
audible-cli use an app dir where it searches for all necessary files. It will use a folder depending on the operating system.
OS | Path |
---|---|
Windows | C:\Users\<user>\AppData\Local\audible |
Unix | ~/.audible |
Mac OS X | ~/.audible |
A custom app dir can be specified with the AUDIBLE_CONFIG_DIR
environment variable.
The config data are stored in the config file named config.toml
using the
toml language.
It has a main section named APP
and sections for each profile
named profile.<profile_name>
audible-cli make use of profiles. Each profile contains at least the name of the corresponding auth file and the country code for the audible marketplace. For using multiple marketplaces, a profile for each marketplace file must be created. In that case, the auth file entry can be the same.
In the main section of the config file, a primary profile is defined.
This profile is used, if no other is specified. Another profile can be
selected with audible -P PROFILE_NAME
.
Like the config file, auth files are stored in the app dir.
For password protected auth files the password can be provided with
audible -p PASSWORD
. If the password is missed, a "hidden" input field will
appear.
Each multi-word option in the config file have to be separated by an underline.
The APP section supports the following options:
- primary_profile: The profile to use, if no other is specified
- filename_mode: When using the
download
command, a filename mode can be specified here. If not present, "ascii" will be used as default. To override these option, you can provide a mode with thefilename-mode
option of the download command.
- auth_file: The auth file for this profile
- country_code: The marketplace for this profile
- filename_mode: See APP section above. Will override the option in APP section.
Call audible -h
to show the help and a list of all available subcommands.
You can show the help for each subcommand like so: audible <subcommand> -h
.
If a subcommand has another subcommands, you can do it the same way.
Currently, there the following build-in subcommands:
activation-bytes
api
download
library
export
list
manage
auth-file
add
remove
config
edit
profile
add
list
remove
quickstart
wishlist
export
list
add
remove
There are 6 different verbosity levels:
- debug
- info
- warning
- error
- critical
By default, the verbosity level is set to info
. You can provide another
level like so: audible -v <level> <subcommand> ...
.
If you use the download
subcommand with the --all
flag there will be a
huge output. Best practise is to set the verbosity level to error
with
audible -v error download --all ...
.
If the AUDIBLE_PLUGIN_DIR
environment variable is set, it uses the value
as location for the plugin dir. Otherwise, it will use a the plugins
subdir
of the app dir. Read above how Audible-cli searches the app dir.
You can provide own subcommands and execute them with audible SUBCOMMAND
.
All plugin commands must be placed in the plugin folder. Every subcommand must
have his own file. Every file have to be named cmd_{SUBCOMMAND}.py
.
Each subcommand file must have a function called cli
as entrypoint.
This function has to be decorated with @click.group(name="GROUP_NAME")
or
@click.command(name="GROUP_NAME")
.
Relative imports in the command files doesn't work. So you have to work with
absolute imports. Please take care about this. If you have any issues with
absolute imports please add your plugin path to the PYTHONPATH
variable or
add this lines of code to the beginning of your command script:
import sys
import pathlib
sys.path.insert(0, str(pathlib.Path(__file__).parent))
Examples can be found here.
If the plugin command imports a package which is not provided by this package
it is recommended to install audible-cli
with pipx
and inject the additional
package with pipx inject audible_cli {PACKAGE}
.
If you want to develop a complete plugin package for audible-cli
you can
do this on an easy way. You only need to register your sub-commands or
subgroups to an entry-point in your setup.py that is loaded by the core
package.
Example for a setup.py
from setuptools import setup
setup(
name="your-script",
version="0.1",
py_modules=["your_script"],
install_requires=[
"click",
"audible_cli"
],
entry_points="""
[audible.cli_plugins]
cool_subcommand=your_script.cli:cool_subcommand
another_subcommand=your_script.cli:another_subcommand
""",
)
Commands will be added in the following order:
- plugin dir commands
- plugin packages commands
- build-in commands
If a command is added, all further commands with the same name will be ignored. This enables you to "replace" build-in commands very easy.
If you want to add information about your add-on please open a PR or a new issue!
Contributions are very welcome. To learn more, see the Contributor Guide.
Distributed under the terms of the AGPL-3.0, Audible Cli is free and open source software.
If you encounter any problems, please file an issue along with a detailed description.
Thanks a lot JetBrains for supporting me with a free license This project was generated from @cjolowicz's Hypermodern Python Cookiecutter template.