]> kaliko git repositories - mpd-sima.git/commitdiff
Add new command (closes #43)
authorkaliko <kaliko@azylum.org>
Thu, 22 Apr 2021 13:15:15 +0000 (15:15 +0200)
committerkaliko <kaliko@azylum.org>
Thu, 22 Apr 2021 13:15:15 +0000 (15:15 +0200)
Add config-test, create-db, generate-config

data/man/Makefile
data/man/mpd-sima.1
data/man/mpd_sima.1.xml
data/man/test-tags-config.1 [deleted file]
data/man/test-tags-config.1.xml [deleted file]
doc/Changelog
setup.py
sima/launch.py
sima/utils/configtest.py [new file with mode: 0644]
sima/utils/startopt.py
sima/utils/testtags.py [deleted file]

index 7871223f89277b45ed48ca7f5dc49b56bed3f830..32a68b709197c6a3635d67e04e1e4522e284968c 100644 (file)
@@ -16,9 +16,6 @@ OPTIONS=--nonet\
 
 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) -
 
@@ -37,7 +34,7 @@ simadb_cli_html:
 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
 
index 9d26e92ae74dd228814131754752c62bb76dd352..b676ecd07df3d9249f8a854c6ce67de32d0cea1d 100644 (file)
@@ -2,12 +2,12 @@
 .\"     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
 .\" -----------------------------------------------------------------
@@ -33,11 +33,13 @@ mpd-sima \- mpd\-sima will try to maintain some titles ahead in the queue follow
 .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
@@ -148,25 +150,7 @@ Default is to look in
 \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
@@ -203,6 +187,39 @@ Default is
 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
@@ -272,11 +289,11 @@ doc/examples/\&. On Debian system please look in
 .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
index 16810bddd9f6d884e0824cb0ac08054d3f442082..7d4269a29c3172d384b0ff6c151632c3c28b9145 100644 (file)
@@ -71,16 +71,6 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
       <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
@@ -95,6 +85,21 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
         </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>
@@ -192,19 +197,7 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
         <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 -->
@@ -223,6 +216,25 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
                 <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" />
@@ -266,9 +278,9 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
           <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>
diff --git a/data/man/test-tags-config.1 b/data/man/test-tags-config.1
deleted file mode 100644 (file)
index 0f5c7f6..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-'\" 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
diff --git a/data/man/test-tags-config.1.xml b/data/man/test-tags-config.1.xml
deleted file mode 100644 (file)
index a62dd24..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-<?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>
index ede813997db01924681d92610d7d9dc8b3dc2bf1..e56ec8bebf13b61f8e509c7dd46f0b7786faf19a 100644 (file)
@@ -6,6 +6,10 @@ MPD_sima v0.17.0.dev0
  * 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
 
index 6b181612629cf177a9f65842da52583be528566c..0630a789ea92fb229fd213e8dbc475896be92e2e 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -11,8 +11,8 @@ from sima.info import __version__ as VERSION, __author__ as AUTHOR
 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)]),
 ]
@@ -50,7 +50,6 @@ setup(name='MPD_sima',
       entry_points={
           'console_scripts': [
               'mpd-sima = sima.launch:main',
-              'test-tags-config = sima.utils.testtags:main'
               ]
           },
       test_suite="tests",
index 68ba4e006b6c6f299b469371e033546feaf3bf8b..a8e285efbf296205fd14d5ad7e899478d7a5eb6e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- 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
 #
@@ -79,13 +79,39 @@ def start(sopt, restart=False):
     """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)
@@ -95,8 +121,9 @@ def start(sopt, restart=False):
         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)
diff --git a/sima/utils/configtest.py b/sima/utils/configtest.py
new file mode 100644 (file)
index 0000000..b777276
--- /dev/null
@@ -0,0 +1,51 @@
+# 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
index 16ad773373be80b9447d0c3545855e1ca667d365..a1824ee8ca61b31346c83cb0c77065a291cd5b14 100644 (file)
@@ -1,6 +1,6 @@
 # -*- 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):
@@ -35,7 +40,11 @@ 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:
@@ -46,13 +55,13 @@ def clean_dict(to_clean):
 #   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'],
@@ -77,39 +86,30 @@ OPTS = [
         '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)'},
 ]
 
 
@@ -127,10 +127,12 @@ class StartOpt:
         """
         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
diff --git a/sima/utils/testtags.py b/sima/utils/testtags.py
deleted file mode 100644 (file)
index 7a7fd39..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-# 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