all: man
-test-tags-config: test-tags-config.1.xml
- xmllint --xinclude --nowarning --noent $< | $(XP) $(OPTIONS) $(XSL) -
-
simadb_cli: simadb_cli.1.xml
xmllint --xinclude --nowarning --noent $< | $(XP) $(OPTIONS) $(XSL) -
mpd_sima.cfg_html:
xmllint --xinclude --nowarning --noent mpd_sima.cfg.5.xml | $(XP) $(HXSL) - > ./mpd_sima.cfg.5.html
-man: test-tags-config simadb_cli mpd_sima mpd_sima.cfg
+man: simadb_cli mpd_sima mpd_sima.cfg
html: simadb_cli_html mpd_sima_html mpd_sima.cfg_html
.\" Title: mpd-sima
.\" Author: kaliko <kaliko@azylum.org>
.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
-.\" Date: 04/19/2021
+.\" Date: 04/22/2021
.\" Manual: mpd-sima 0.17.0 User Manual
.\" Source: mpd-sima
.\" Language: English
.\"
-.TH "MPD\-SIMA" "1" "04/19/2021" "mpd-sima" "mpd-sima 0.17.0 User Manual"
+.TH "MPD\-SIMA" "1" "04/22/2021" "mpd-sima" "mpd-sima 0.17.0 User Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.HP \w'\fBmpd\-sima\fR\ 'u
\fBmpd\-sima\fR [\fB\-\-daemon\fR] [\fB\-\-config=\fR\fIconf_file\fR] [\fB\-\-var\-dir=\fR\fIvar_directory\fR] [\fB\-\-pid=\fR\fIpid_file\fR] [\fB\-\-log=\fR\fIlog_file\fR] [\fB\-\-log\-level=\fR\fIlog_level\fR] [\fB\-\-host=\fR\fImpd_host\fR] [\fB\-\-mpd_port=\fR\fImpd_port\fR]
.HP \w'\fBmpd\-sima\fR\ 'u
-\fBmpd\-sima\fR \-\-create\-db [\fB\-\-var\-dir=\fR\fIvar_directory\fR]
+\fBmpd\-sima\fR {{\fB\-h\fR\ |\ \fB\-\-help\fR}\ \fB\-\-version\fR}
.HP \w'\fBmpd\-sima\fR\ 'u
-\fBmpd\-sima\fR \-\-generate\-config [\fB\&...\fR]
+\fBmpd\-sima\fR config\-test [\fB\-\-config=\fR\fIconf_file\fR]
.HP \w'\fBmpd\-sima\fR\ 'u
-\fBmpd\-sima\fR {{\fB\-h\fR\ |\ \fB\-\-help\fR}\ \fB\-\-version\fR}
+\fBmpd\-sima\fR create\-db [\fB\-\-var\-dir=\fR\fIvar_directory\fR]
+.HP \w'\fBmpd\-sima\fR\ 'u
+\fBmpd\-sima\fR generate\-config [\fB\&...\fR]
.SH "DESCRIPTION"
.PP
This manual page documents briefly the
\fB$XDG_DATA_HOME/mpd_sima/\fR\&. Concerning
\fB$XDG_DATA_HOME\fR
see also
-the section called \(lqFILES\(rq
-.RE
-.PP
-\fB\-\-generate\-config\fR
-.RS 4
-Generate a sample configuration file according to the current configuration\&. You can put other options with this one to get them in the generated configuration\&.
-.RE
-.PP
-\fB\-\-create\-db\fR
-.RS 4
-Create the database and exit\&. Uses folder specified with
-\fB\-\-var\-dir\fR
-or default directory\&.
-.br
-Default is to use
-\fB$XDG_DATA_HOME/mpd_sima/\fR\&. Concerning
-\fB$XDG_DATA_HOME\fR
-see also
-the section called \(lqFILES\(rq
+the section called \(lqFILES\(rq\&.
.RE
.PP
\fB\-S \fR\fB\fImpd_host\fR\fR, \fB\-\-host=\fR\fB\fImpd_host\fR\fR
See also
the section called \(lqENVIRONMENT\(rq
.RE
+.PP
+\fBconfig\-test\fR
+.RS 4
+Test configuration file and exit\&. Uses the configuration file specified with
+\fB\-\-config\fR
+or default location\&.
+.br
+Default is to use
+\fB$XDG_CONFIG_HOME/mpd_sima/mpd_sima\&.cfg\fR
+(see
+the section called \(lqFILES\(rq
+for more)\&.
+.sp
+config\-test tests MPD connection and Tags plugin configuration\&.
+.RE
+.PP
+\fBcreate\-db\fR
+.RS 4
+Create the database and exit\&. Uses folder specified with
+\fB\-\-var\-dir\fR
+or default directory\&.
+.br
+Default is to use
+\fB$XDG_DATA_HOME/mpd_sima/\fR
+(see
+the section called \(lqFILES\(rq
+for more)\&.
+.RE
+.PP
+\fBgenerate\-config\fR
+.RS 4
+Generate a sample configuration file according to the current CLI options and env\&. var\&.\&. The configuration is written on stdout\&.
+.RE
.SH "FILES"
.PP
${XDG_CONFIG_HOME}/mpd_sima/mpd_sima\&.cfg
.PP
DEFAULTS
.RS 4
-Default is to look for MPD server at localhost:6600 (or MPD_HOST/MPD_PORT env\&. var\&. if set)\&.
+Default is to look for MPD server at localhost:6600 (or MPD_HOST/MPD_PORT env\&. var\&. if set)\&. The default plugins will use Last\&.fm to find similar tracks to queue and fallback to random if nothing if found\&.
.sp
The get the defaults as detected by mpd\-sima on your system you can run mpd\-sima to print the config:
.sp
-\fBmpd\-sima \-\-generate\-config\fR
+\fBmpd\-sima generate\-config\fR
.RE
.PP
For details about mpd_sima\&.cfg refer to the manual
<arg choice="opt"><option>--host=</option><replaceable class="option">mpd_host</replaceable></arg>
<arg choice="opt"><option>--mpd_port=</option><replaceable class="option">mpd_port</replaceable></arg>
</cmdsynopsis>
- <cmdsynopsis>
- <command>&dhpackage;</command>
- <arg choice="plain">--create-db</arg>
- <arg choice="opt"><option>--var-dir=</option><replaceable class="option">var_directory</replaceable></arg>
- </cmdsynopsis>
- <cmdsynopsis>
- <command>&dhpackage;</command>
- <arg choice="plain">--generate-config</arg>
- <arg choice="opt"><option>…</option></arg>
- </cmdsynopsis>
<cmdsynopsis>
<command>&dhpackage;</command>
<!-- Normally the help and version options make the programs stop
</arg>
</group>
</cmdsynopsis>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+ <arg choice="plain">config-test</arg>
+ <arg choice="opt"><option>--config=</option><replaceable class="option">conf_file</replaceable></arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+ <arg choice="plain">create-db</arg>
+ <arg choice="opt"><option>--var-dir=</option><replaceable class="option">var_directory</replaceable></arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>&dhpackage;</command>
+ <arg choice="plain">generate-config</arg>
+ <arg choice="opt"><option>…</option></arg>
+ </cmdsynopsis>
</refsynopsisdiv>
<refsect1 id="description">
<title>DESCRIPTION</title>
<varlistentry> <!-- var-dir -->
<term><option>--var-dir=<replaceable class="parameter">var_directory</replaceable></option></term>
<listitem>
- <para>Use the specific path <replaceable>var_directory</replaceable> to look for (or create) var files (ie. database) instead of looking at the default user data location.<sbr />Default is to look in <envar>$XDG_DATA_HOME/mpd_sima/</envar>. Concerning <envar>$XDG_DATA_HOME</envar> see also <xref linkend="files"/></para>
- </listitem>
- </varlistentry>
- <varlistentry> <!-- generate-config -->
- <term><option>--generate-config</option></term>
- <listitem>
- <para>Generate a sample configuration file according to the current configuration. You can put other options with this one to get them in the generated configuration.</para>
- </listitem>
- </varlistentry>
- <varlistentry> <!-- create-db -->
- <term><option>--create-db</option></term>
- <listitem>
- <para>Create the database and exit. Uses folder specified with <option>--var-dir</option> or default directory.<sbr />Default is to use <envar>$XDG_DATA_HOME/mpd_sima/</envar>. Concerning <envar>$XDG_DATA_HOME</envar> see also <xref linkend="files"/></para>
+ <para>Use the specific path <replaceable>var_directory</replaceable> to look for (or create) var files (ie. database) instead of looking at the default user data location.<sbr />Default is to look in <envar>$XDG_DATA_HOME/mpd_sima/</envar>. Concerning <envar>$XDG_DATA_HOME</envar> see also <xref linkend="files"/>.</para>
</listitem>
</varlistentry>
<varlistentry><!-- host -->
<para>See also <xref linkend="environment"/></para>
</listitem>
</varlistentry>
+ <varlistentry> <!-- config-test -->
+ <term><option>config-test</option></term>
+ <listitem>
+ <para>Test configuration file and exit. Uses the configuration file specified with <option>--config</option> or default location.<sbr />Default is to use <envar>$XDG_CONFIG_HOME/mpd_sima/mpd_sima.cfg</envar> (see <xref linkend="files"/> for more).</para>
+ <para>config-test tests MPD connection and Tags plugin configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <!-- create-db -->
+ <term><option>create-db</option></term>
+ <listitem>
+ <para>Create the database and exit. Uses folder specified with <option>--var-dir</option> or default directory.<sbr />Default is to use <envar>$XDG_DATA_HOME/mpd_sima/</envar> (see <xref linkend="files"/> for more).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <!-- generate-config -->
+ <term><option>generate-config</option></term>
+ <listitem>
+ <para>Generate a sample configuration file according to the current CLI options and env. var.. The configuration is written on stdout.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<xi:include href="files.xml" />
<varlistentry>
<term>DEFAULTS</term>
<listitem>
- <para>Default is to look for MPD server at localhost:6600 (or MPD_HOST/MPD_PORT env. var. if set).</para>
+ <para>Default is to look for MPD server at localhost:6600 (or MPD_HOST/MPD_PORT env. var. if set). The default plugins will use Last.fm to find similar tracks to queue and fallback to random if nothing if found.</para>
<para>The get the defaults as detected by &dhpackage; on your system you can run &dhpackage; to print the config:</para>
- <para><command>&dhpackage; --generate-config</command></para>
+ <para><command>&dhpackage; generate-config</command></para>
</listitem>
</varlistentry>
</variablelist>
+++ /dev/null
-'\" t
-.\" Title: test-tags-config
-.\" Author: kaliko <kaliko@azylum.org>
-.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
-.\" Date: 01/09/2021
-.\" Manual: mpd-sima 0.16.1 User Manual
-.\" Source: mpd-sima
-.\" Language: English
-.\"
-.TH "TEST\-TAGS\-CONFIG" "1" "01/09/2021" "mpd-sima" "mpd-sima 0.16.1 User Manual"
-.\" -----------------------------------------------------------------
-.\" * Define some portability stuff
-.\" -----------------------------------------------------------------
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\" http://bugs.debian.org/507673
-.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el .ds Aq '
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
-test-tags-config \- controls tags plugin configuration\&.
-.SH "SYNOPSIS"
-.HP \w'\fBtest\-tags\-config\fR\ 'u
-\fBtest\-tags\-config\fR {\fBconfig_file\fR}
-.SH "DESCRIPTION"
-.PP
-This manual page documents briefly the
-\fBtest\-tags\-config\fR
-commands\&.
-.PP
-\fBtest\-tags\-config\fR
-will load
-\fIconfig_file\fR
-passed as argument and look for tags plugin configuration to query MPD with it\&. There is no attempt to auto\-discover configuration file, positional argument is required\&.
-.br
-
-See also environment variables special case for MPD host and port in
-the section called \(lqENVIRONMENT\(rq\&.
-.SH "FILES"
-.PP
-${XDG_CONFIG_HOME}/mpd_sima/mpd_sima\&.cfg
-.RS 4
-Configuration file\&.
-.RE
-.PP
-${XDG_DATA_HOME}/mpd_sima/sima\&.db
-.RS 4
-SQLite DB file\&.
-.RE
-.PP
-${XDG_DATA_HOME}/mpd_sima/WEB_SERVICE/
-.RS 4
-Persistent http cache\&.
-.RE
-.PP
-Usually
-\fBXDG_DATA_HOME\fR
-is set to
-${HOME}/\&.local/share
-and
-\fBXDG_CONFIG_HOME\fR
-to
-${HOME}/\&.config\&.
-.br
-You may override them using command line option
-\fB\-\-var\-dir\fR
-and
-\fB\-\-config\fR
-(cf\&.
-\fBmpd-sima\fR(1))
-.SH "ENVIRONMENT"
-.PP
-\fBMPD_HOST\fR, \fBMPD_PORT\fR
-.RS 4
-test\-tags\-config will look for
-\fBMPD_HOST\fR
-and
-\fBMPD_PORT\fR
-to override built\-in configuration (set to "localhost:6600")\&.
-.sp
-test\-tags\-config expects
-\fBMPD_HOST\fR
-syntax as documented in mpc manual, cf\&.
-\fBmpc\fR(1)\&.
-
-.br
-To use a password, provide a value of the form "password@host"\&.
-.RE
-.PP
-\fBHTTP_PROXY\fR, \fBHTTPS_PROXY\fR
-.RS 4
-test\-tags\-config honors
-\fBHTTP_PROXY\fR
-environment variables\&.
-.RE
-.SH "FEEDBACK/BUGS"
-.PP
-The maintainer would be more than happy to ear from you, don\*(Aqt hesitate to send feedback,
-\m[blue]\fB\%https://kaliko.me/contact/\fR\m[]\&.
-.PP
-XMPP
-users are welcome to join the dedicated chat room at
-\m[blue]\fBkaliko\&.me@conf\&.azylum\&.org\fR\m[]\&.
-.SH "SEE ALSO"
-.PP
-\fBmpc\fR(1),
-\fBmpd\fR(1)
-.PP
-/usr/share/doc/mpd\-sima/
-.SH "AUTHOR"
-.PP
-\fBkaliko\fR <\&kaliko@azylum\&.org\&>
-.RS 4
-Wrote this man page and is currently leading MPD_sima project\&.
-.RE
-.SH "COPYRIGHT"
-.br
-Copyright \(co 2009-2021 kaliko
-.br
-.PP
-This manual page was written for the Debian system (and may be used by others)\&.
-.PP
-Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 published by the Free Software Foundation\&.
-.PP
-On Debian systems, the complete text of the GNU General Public License can be found in
-/usr/share/common\-licenses/GPL\&.
-.sp
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
-
-`xsltproc -''-nonet \
- -''-param man.charmap.use.subset "0" \
- -''-param make.year.ranges "1" \
- -''-param make.single.year.ranges "1" \
- /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
- manpage.xml'
-
-A manual page <package>.<section> will be generated. You may view the
-manual page with: nroff -man <package>.<section> | less'. A typical entry
-in a Makefile or Makefile.am is:
-
-DB2MAN = /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl
-XP = xsltproc -''-nonet -''-param man.charmap.use.subset "0"
-
-manpage.1: manpage.xml
- $(XP) $(DB2MAN) $<
-
-The xsltproc binary is found in the xsltproc package. The XSL files are in
-docbook-xsl. A description of the parameters you can use can be found in the
-docbook-xsl-doc-* packages. Please remember that if you create the nroff
-version in one of the debian/rules file targets (such as build), you will need
-to include xsltproc and docbook-xsl in your Build-Depends control field.
-Alternatively use the xmlto command/package. That will also automatically
-pull in xsltproc and docbook-xsl.
-
-Notes for using docbook2x: docbook2x-man does not automatically create the
-AUTHOR(S) and COPYRIGHT sections. In this case, please add them manually as
-<refsect1> ... </refsect1>.
-
-To disable the automatic creation of the AUTHOR(S) and COPYRIGHT sections
-read /usr/share/doc/docbook-xsl/doc/manpages/authors.html. This file can be
-found in the docbook-xsl-doc-html package.
-
-Validation can be done using: `xmllint -''-noout -''-valid manpage.xml`
-
-General documentation about man-pages and man-page-formatting:
-man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
-
--->
-<!DOCTYPE refentry [
-
- <!ENTITY dhsection "1">
- <!ENTITY dhpackage "mpd-sima">
- <!ENTITY dhutils "test-tags-config">
-
-]>
-
-<refentry xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude" version="5.0">
- <xi:include href="info.xml" />
- <refmeta>
- <refentrytitle>&dhutils;</refentrytitle>
- <manvolnum>&dhsection;</manvolnum>
- </refmeta>
- <refnamediv>
- <refname>&dhutils;</refname>
- <refpurpose>controls tags plugin configuration.</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhutils;</command>
- <arg choice="req"><option>config_file</option></arg>
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1 id="description">
- <title>DESCRIPTION</title>
- <para>This manual page documents briefly the
- <command>&dhutils;</command> commands.</para>
- <para>
- <command>&dhutils;</command>
- will load <varname>config_file</varname> passed as argument and look for tags plugin configuration to query MPD with it. There is no attempt to auto-discover configuration file, positional argument is required.<sbr />
- See also environment variables special case for MPD host and port in <xref linkend="environment"/>.
- </para>
- </refsect1>
- <xi:include href="files.xml" />
- <refsect1 id="environment">
- <title>ENVIRONMENT</title>
- <variablelist>
- <varlistentry>
- <term><envar>MPD_HOST</envar>, <envar>MPD_PORT</envar></term>
- <listitem>
- <para>&dhutils; will look for <envar>MPD_HOST</envar> and
- <envar>MPD_PORT</envar> to override built-in configuration
- (set to "localhost:6600").</para>
- <para>&dhutils; expects <envar>MPD_HOST</envar> syntax as documented in mpc manual,
- cf. <citerefentry><refentrytitle>mpc</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
- <sbr/>To use a password, provide a value of the form "password@host".
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><envar>HTTP_PROXY</envar>, <envar>HTTPS_PROXY</envar></term>
- <listitem>
- <para>&dhutils; honors <envar>HTTP_PROXY</envar> environment variables.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
- <xi:include href="feedback.xml" />
- <xi:include href="seealso.xml" />
-</refentry>
* Fixed "artist with quotes not found" (closes #41)
* Fixed bad pid in Uniq core plugin (closes #32)
* Use duration instead of time in Track objects (closes #37)
+ * Move "test-tags-config" as positional argument "config-test"
+ * Move "--create-db" as positional argument "create-db"
+ * Add commands as positional arguments:
+ config-test, create-db, generate-config
-- kaliko <kaliko@azylum.org> UNRELEASED
from sima.info import __doc__ as DESCRIPTION, __email__ as EMAIL
data_files = [
- ('share/man/man1', ['data/man/mpd-sima.1', 'data/man/simadb_cli.1', 'data/man/test-tags-config.1']),
- ('share/man/man5', ['data/man/mpd_sima.cfg.5',]),
+ ('share/man/man1', ['data/man/mpd-sima.1', 'data/man/simadb_cli.1']),
+ ('share/man/man5', ['data/man/mpd_sima.cfg.5']),
('share/doc/mpd-sima/examples/', glob.glob('doc/examples/*')),
('share/doc/mpd-sima/', [fi for fi in listdir('doc') if isfile(fi)]),
]
entry_points={
'console_scripts': [
'mpd-sima = sima.launch:main',
- 'test-tags-config = sima.utils.testtags:main'
]
},
test_suite="tests",
# -*- coding: utf-8 -*-
-# Copyright (c) 2013, 2014, 2015, 2020 kaliko <kaliko@azylum.org>
+# Copyright (c) 2013, 2014, 2015, 2020,2021 kaliko <kaliko@azylum.org>
#
# This file is part of sima
#
"""starts application
"""
# loads configuration
- config = ConfMan(sopt.options).config
+ cfg_mgmt = ConfMan(sopt.options)
+ config = cfg_mgmt.config
# set logger
logger = logging.getLogger('sima')
logfile = config.get('log', 'logfile', fallback=None)
verbosity = config.get('log', 'verbosity')
set_logger(verbosity, logfile)
logger.debug('Command line say: %s', sopt.options)
+
+ if sopt.options.get('command'):
+ cmd = sopt.options.get('command')
+ if cmd == "generate-config":
+ config.write(sys.stdout, space_around_delimiters=True)
+ sys.exit(0)
+ logger.info('Running "%s" and exit' % cmd)
+ if cmd == "config-test":
+ logger.info('Config location: "%s"', cfg_mgmt.conf_file)
+ from .utils.configtest import config_test
+ config_test(config)
+ sys.exit(0)
+ if cmd == "create-db":
+ db_file = config.get('sima', 'db_file')
+ if not isfile(db_file):
+ logger.info('Creating database in "%s"', db_file)
+ open(db_file, 'a').close()
+ SimaDB(db_path=db_file).create_db()
+ if sopt.options.get('create_db', None):
+ logger.info('Done, bye...')
+ else:
+ logger.info('Database already there, not overwriting %s', db_file)
+ sys.exit(0)
+
+ # TODO: To remove eventually in next major realese v0.18
# Create Database
db_file = config.get('sima', 'db_file')
if (sopt.options.get('create_db', None)
SimaDB(db_path=db_file).create_db()
if sopt.options.get('create_db', None):
logger.info('Done, bye...')
- sys.exit(0)
+ sys.exit(0)
+ # TODO: To remove eventually in next major realese v0.18
if sopt.options.get('generate_config'):
config.write(sys.stdout, space_around_delimiters=True)
sys.exit(0)
--- /dev/null
+# coding: utf-8
+
+import sys
+
+from logging import getLogger
+
+from ..mpdclient import MPD
+from ..mpdclient import MPDError, PlayerError
+
+from ..plugins.internal.tags import forge_filter, control_config
+
+log = getLogger('sima')
+
+
+def tags_config_test(cli, config):
+ tags_cfg = config['tags']
+ if not control_config(tags_cfg):
+ return
+ filt = forge_filter(tags_cfg)
+ log.info('Trying tags and filter config:')
+ log.info('%s', filt)
+ try:
+ # Use window to limit reponse size
+ res = cli.find(filt, 'window', (0, 300))
+ except MPDError as err:
+ cli.disconnect()
+ print('filter error: %s' % err, file=sys.stderr)
+ sys.exit(1)
+ artists = list({trk.albumartist for trk in res if trk.albumartist})
+ if not artists:
+ log.info('Tags config correct but got nothing from MPD\'s library')
+ return
+ log.info('Got results, here are some of the artists found:')
+ log.info('%s', ' / '.join(artists[:6]))
+
+
+def config_test(config):
+ cli = MPD(config)
+ log.info('Trying to connect MPD: %s:%s',
+ config.get('MPD', 'host'),
+ config.get('MPD', 'port'))
+ try:
+ cli.connect()
+ except PlayerError as err:
+ print(err, file=sys.stderr)
+ sys.exit(1)
+ tags_config_test(cli, config)
+
+
+# VIM MODLINE
+# vim: ai ts=4 sw=4 sts=4 expandtab fileencoding=utf8
# -*- coding: utf-8 -*-
-# Copyright (c) 2009-2015 kaliko <kaliko@azylum.org>
+# Copyright (c) 2009-2015, 2021 kaliko <kaliko@azylum.org>
#
# This file is part of sima
#
#
#
-from argparse import (ArgumentParser, SUPPRESS)
+from argparse import ArgumentParser, RawDescriptionHelpFormatter, SUPPRESS
from .utils import Wfile, Rfile, Wdir
DESCRIPTION = """
MPD_sima automagicaly queue new tracks in MPD playlist.
-Command line options override their equivalent in configuration file."""
+
+Command line options override their equivalent in configuration file.
+If a positional arguments is provided MPD_sima execute the command and returns.
+Commands available:
+{}
+"""
def clean_dict(to_clean):
if not to_clean.get(k):
to_clean.pop(k)
-
+# COMMANDS LIST
+CMDS = {'config-test': 'Test configuration (MPD connection and Tags plugin only)',
+ 'create-db': 'Create the database',
+ 'generate-config': 'Generate a configuration file to stdout',
+ }
# OPTIONS LIST
# pop out 'sw' value before creating Parser object.
# PAY ATTENTION:
# name it is meant to override.
OPTS = [
{
- 'sw':['-l', '--log'],
+ 'sw': ['-l', '--log'],
'type': str,
'dest': 'logfile',
'action': Wfile,
'help': 'file to log message to, default is stdout/stderr'},
{
- 'sw':['-v', '--log-level'],
+ 'sw': ['-v', '--log-level'],
'type': str,
'dest': 'verbosity',
'choices': ['debug', 'info', 'warning', 'error'],
'dest': 'port',
'help': 'Port MPD in listening on'},
{
- 'sw':['-c', '--config'],
+ 'sw': ['-c', '--config'],
'dest': 'conf_file',
'action': Rfile,
'help': 'Configuration file to load'},
- {
- 'sw':['--generate-config'],
+ { # TODO: To remove eventually in next major realese v0.18
+ 'sw': ['--generate-config'],
'dest': 'generate_config',
'action': 'store_true',
- 'help': 'Generate a sample configuration file to stdout according to the current\
- configuration. You can put other options with this one to get them in\
- the generated configuration.'},
+ 'help': SUPPRESS},
{
- 'sw':['--var-dir', '--var_dir'],
+ 'sw': ['--var-dir', '--var_dir'],
'dest': 'var_dir',
'action': Wdir,
'help': 'Directory to store var content (ie. database, cache)'},
- {
+ { # TODO: To remove eventually in next major realese v0.18
'sw': ['--create-db'],
'action': 'store_true',
'dest': 'create_db',
- 'help': '''Create database and exit, use destination
- specified in --var-dir or standard location.'''},
- {
- 'sw':['--queue-mode', '-q'],
- 'dest': 'queue_mode',
- 'choices': ['track', 'top', 'album'],
- #'help': 'Queue mode in [track, top, album]',
- 'help': SUPPRESS, },
- {
- 'sw':['--purge-history'],
- 'action': 'store_true',
- 'dest': 'do_purge_history',
'help': SUPPRESS},
+ {
+ 'sw': ['command'],
+ 'nargs': '?',
+ 'choices': CMDS.keys(),
+ 'help': 'Command to run (cf. description or unix manual for more)'},
]
"""
Declare options in ArgumentParser object.
"""
- self.parser = ArgumentParser(description=DESCRIPTION,
+ cmds = '\n'.join([f' * {k}: {v}' for k, v in CMDS.items()])
+ self.parser = ArgumentParser(description=DESCRIPTION.format(cmds),
prog=self.info.get('prog'),
epilog='Happy Listening',
- )
+ formatter_class=RawDescriptionHelpFormatter,
+ )
self.parser.add_argument('--version', action='version',
version='%(prog)s {version}'.format(**self.info))
# Add all options declare in OPTS
+++ /dev/null
-# coding: utf-8
-# Copyright (c) 2020 kaliko <kaliko@azylum.org>
-#
-# This file is part of sima
-#
-# sima is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# sima is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with sima. If not, see <http://www.gnu.org/licenses/>.
-#
-#
-"""Testing Tags plugin config
-"""
-
-import argparse
-import os.path
-import sys
-
-from configparser import ConfigParser
-
-import musicpd
-
-from ..plugins.internal.tags import forge_filter
-
-
-def is_valid_file(parser, arg):
- if not os.path.exists(arg) or not os.path.isfile(arg):
- parser.error('The file "%s" does not exist!' % arg)
- return arg
-
-
-def main():
- parser = argparse.ArgumentParser(description='Tests Tags plugin config')
- parser.add_argument('config', nargs=1,
- type=lambda x: is_valid_file(parser, x))
- pargs = parser.parse_args(sys.argv[1:])
- conf = ConfigParser()
- conf.read(pargs.config)
- if not conf['tags']:
- print('Nothing in "tags" section', file=sys.stderr)
- sys.exit(1)
- tags_cfg = conf['tags']
- filt = forge_filter(tags_cfg)
- print(f'Filter forged: "{filt}"')
- host = conf['MPD'].get('host', None)
- port = conf['MPD'].get('port', None)
- cli = musicpd.MPDClient()
- try:
- cli.connect(host=host, port=port)
- except musicpd.ConnectionError as err:
- print(err, file=sys.stderr)
- sys.exit(1)
- try:
- res = cli.find(filt)
- except musicpd.CommandError as err:
- cli.disconnect()
- print(err, file=sys.stderr)
- sys.exit(1)
- print({trk.get('artist', 'ukn') for trk in res})
-
-
-# Script starts here
-if __name__ == '__main__':
- main()
-
-# VIM MODLINE
-# vim: ai ts=4 sw=4 sts=4 expandtab fileencoding=utf8