GNU bug report logs - #26308
[PATCH -v2] services: dict.scm: Support more dicod configuration

Previous Next

Package: guix-patches;

Reported by: Huang Ying <huang.ying.caritas <at> gmail.com>

Date: Thu, 30 Mar 2017 11:15:02 UTC

Severity: normal

Tags: patch

Done: ludo <at> gnu.org (Ludovic Courtès)

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 26308 in the body.
You can then email your comments to 26308 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#26308; Package guix-patches. (Thu, 30 Mar 2017 11:15:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Huang Ying <huang.ying.caritas <at> gmail.com>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Thu, 30 Mar 2017 11:15:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Huang Ying <huang.ying.caritas <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: guix-devel <at> gnu.org, Huang Ying <huang.ying.caritas <at> gmail.com>,
 guix-patches <at> gnu.org
Subject: [PATCH -v2] services: dict.scm: Support more dicod configuration
Date: Thu, 30 Mar 2017 19:13:34 +0800
* gnu/services/dict.scm (<dicod-configuration>): Add handlers to configure
  handlers (module instances).
  (<dicod-handler>): Add new record type to describe handler (module instance).
  (<dicod-database>): Add more fields.
  (dicod-configuration-file): Support convert handlers and enhanced databases
  configuration to config file.

* doc/guix.text: Add description of newly added dicod configuration.
---
 doc/guix.texi         | 57 ++++++++++++++++++++++++++++++++++++++++++++++-----
 gnu/services/dict.scm | 52 ++++++++++++++++++++++++++++++++++++++--------
 2 files changed, 96 insertions(+), 13 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 57595b95e..f1a063581 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -14370,25 +14370,49 @@ This is the list of IP addresses and ports and possibly socket file
 names to listen to (@pxref{Server Settings, @code{listen} directive,,
 dico, GNU Dico Manual}).
 
+@item @code{handlers} (default: @var{'()})
+List of @code{<dicod-handler>} objects denoting handlers (module instances).
+
 @item @code{databases} (default: @var{(list %dicod-database:gcide)})
 List of @code{<dicod-database>} objects denoting dictionaries to be served.
 @end table
 @end deftp
 
-@deftp {Data Type} dicod-database
-Data type representing a dictionary database.
+@deftp {Data Type} dicod-handler
+Data type representing a dictionary handler (module instance).
 
 @table @asis
 @item @code{name}
-Name of the database, will be used in DICT commands.
+Name of the handler (module instance).
 
-@item @code{module}
-Name of the dicod module used by this database
+@item @code{module} (default: @var{#f})
+Name of the dicod module of the handler (instance).  If it is @code{#f},
+the module has the same name as the handler.
 (@pxref{Modules,,, dico, GNU Dico Manual}).
 
 @item @code{options}
 List of strings or gexps representing the arguments for the module handler
+@end table
+@end deftp
+
+@deftp {Data Type} dicod-database
+Data type representing a dictionary database.
+
+@table @asis
+@item @code{name}
+Name of the database, will be used in DICT commands.
+
+@item @code{handler}
+Name of the dicod handler (module instance) used by this database
 (@pxref{Handlers,,, dico, GNU Dico Manual}).
+
+@item @code{complex} (default: @var{#f})
+Whether the database configuration complex.  The complex configuration
+will need a corresponding @code{<dicod-handler>} object, otherwise not.
+
+@item @code{options}
+List of strings or gexps representing the arguments for the database
+(@pxref{Databases,,, dico, GNU Dico Manual}).
 @end table
 @end deftp
 
@@ -14397,6 +14421,29 @@ A @code{<dicod-database>} object serving the GNU Collaborative International
 Dictonary of English using the @code{gcide} package.
 @end defvr
 
+The following is an example @code{dicod-service} configuration.
+
+@example
+(dicod-service #:config
+ (dicod-configuration
+  (handlers
+   (list
+    (dicod-handler
+     (name "wordnet")
+     (module "dictorg")
+     (options
+      '("dbdir=/gnu/store/xxxx-wordnet")))))
+  (databases
+   (list
+    (dicod-database
+     (name "wordnet")
+     (complex #t)
+     (handler "wordnet")
+     (options
+      '("database=wn")))
+    %dicod-database:gcide))))
+@end example
+
 @subsubsection Version Control
 
 The @code{(gnu services version-control)} module provides the following services:
diff --git a/gnu/services/dict.scm b/gnu/services/dict.scm
index 303067037..596f901f3 100644
--- a/gnu/services/dict.scm
+++ b/gnu/services/dict.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong <at> gmail.com>
 ;;; Copyright © 2016 Ludovic Courtès <ludo <at> gnu.org>
+;;; Copyright © 2017 Huang Ying <huang.ying.caritas <at> gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
   #:export (dicod-service
             dicod-service-type
             dicod-configuration
+            dicod-handler
             dicod-database
             %dicod-database:gcide))
 
@@ -46,21 +48,30 @@
   (dico        dicod-configuration-dico       (default dico))
   (interfaces  dicod-configuration-interfaces     ;list of strings
                (default '("localhost")))
-  (databases   dicod-configuration-databases
-               ;; list of <dicod-database>
+  (handlers    dicod-configuration-handlers       ;list of <dicod-handler>
+               (default '()))
+  (databases   dicod-configuration-databases      ;list of <dicod-database>
                (default (list %dicod-database:gcide))))
 
+(define-record-type* <dicod-handler>
+  dicod-handler make-dicod-handler
+  dicod-handler?
+  (name        dicod-handler-name)
+  (module      dicod-handler-module          (default #f))
+  (options     dicod-handler-options         (default '())))
+
 (define-record-type* <dicod-database>
   dicod-database make-dicod-database
   dicod-database?
   (name        dicod-database-name)
-  (module      dicod-database-module)
+  (handler     dicod-database-handler)
+  (complex     dicod-database-complex        (default #f))
   (options     dicod-database-options        (default '())))
 
 (define %dicod-database:gcide
   (dicod-database
    (name "gcide")
-   (module "gcide")
+   (handler "gcide")
    (options (list #~(string-append "dbdir=" #$gcide "/share/gcide")
                   "idxdir=/var/run/dicod"))))
 
@@ -76,22 +87,47 @@
          (shell (file-append shadow "/sbin/nologin")))))
 
 (define (dicod-configuration-file config)
+  (define handler->text
+    (match-lambda
+      (($ <dicod-handler> name #f '())
+       `("
+load-module " ,name ";"))
+      (($ <dicod-handler> name #f options)
+       (handler->text (dicod-handler
+                       (name name)
+                       (module name)
+                       (options options))))
+      (($ <dicod-handler> name module options)
+       `("
+load-module " ,name " {
+   command \"" ,module (string-join (list ,@options) " " 'prefix) "\";
+}\n"))))
+
   (define database->text
     (match-lambda
-      (($ <dicod-database> name module options)
+      (($ <dicod-database> name handler #f options)
+       (append
+        (handler->text (dicod-handler
+                        (name handler)))
+        (database->text (dicod-database
+                         (name name)
+                         (handler handler)
+                         (complex #t)
+                         (options options)))))
+      (($ <dicod-database> name handler complex options)
        `("
-load-module " ,module ";
 database {
    name \"" ,name "\";
-   handler \"" ,module
+   handler \"" ,handler
    (string-join (list ,@options) " " 'prefix) "\";
 }\n"))))
 
   (define configuration->text
     (match-lambda
-      (($ <dicod-configuration> dico (interfaces ...) databases)
+      (($ <dicod-configuration> dico (interfaces ...) handlers databases)
        (append `("listen ("
                  ,(string-join interfaces ", ") ");\n")
+               (append-map handler->text handlers)
                (append-map database->text databases)))))
 
   (apply mixed-text-file "dicod.conf" (configuration->text config)))
-- 
2.12.2






Reply sent to ludo <at> gnu.org (Ludovic Courtès):
You have taken responsibility. (Fri, 31 Mar 2017 22:50:02 GMT) Full text and rfc822 format available.

Notification sent to Huang Ying <huang.ying.caritas <at> gmail.com>:
bug acknowledged by developer. (Fri, 31 Mar 2017 22:50:02 GMT) Full text and rfc822 format available.

Message #10 received at 26308-done <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: Huang Ying <huang.ying.caritas <at> gmail.com>
Cc: guix-devel <at> gnu.org, 26308-done <at> debbugs.gnu.org
Subject: Re: bug#26308: [PATCH -v2] services: dict.scm: Support more dicod
 configuration
Date: Sat, 01 Apr 2017 00:48:52 +0200
Hello,

Huang Ying <huang.ying.caritas <at> gmail.com> skribis:

> * gnu/services/dict.scm (<dicod-configuration>): Add handlers to configure
>   handlers (module instances).
>   (<dicod-handler>): Add new record type to describe handler (module instance).
>   (<dicod-database>): Add more fields.
>   (dicod-configuration-file): Support convert handlers and enhanced databases
>   configuration to config file.
>
> * doc/guix.text: Add description of newly added dicod configuration.

I’ve committed with a few adjustments to the commit log and cosmetic
changes:

  https://git.savannah.gnu.org/cgit/guix.git/commit/?id=9af7ecd9591b4eff41389291bbc586dcf09e2665

> +@example
> +(dicod-service #:config
> + (dicod-configuration
> +  (handlers
> +   (list
> +    (dicod-handler
> +     (name "wordnet")
> +     (module "dictorg")
> +     (options
> +      '("dbdir=/gnu/store/xxxx-wordnet")))))

I’ve changed this to use a real example instead of “xxx”.

>  (define-record-type* <dicod-database>
>    dicod-database make-dicod-database
>    dicod-database?
>    (name        dicod-database-name)
> -  (module      dicod-database-module)
> +  (handler     dicod-database-handler)
> +  (complex     dicod-database-complex        (default #f))

I changed that to ‘complex?’, to make it clear that it’s a Boolean.

While I was at it, I wrote a simple test for the dicod service:

  https://git.savannah.gnu.org/cgit/guix.git/commit/?id=985a8599ed742053b52ac85f753c4feb54af93cb

It uses the example handler that you gave in the doc, but I think this
handler actually does nothing because WordNet does not provide data in
the dict.org format AIUI (and its data is under “/dict” anyway.)  Is
that correct?

Do you have another example in mind that could use a dict.org-formatted
database?

Thank you!

Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#26308; Package guix-patches. (Sat, 01 Apr 2017 16:06:05 GMT) Full text and rfc822 format available.

Message #13 received at 26308-done <at> debbugs.gnu.org (full text, mbox):

From: "Huang\, Ying" <huang_ying_caritas <at> 163.com>
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: guix-devel <at> gnu.org, 26308-done <at> debbugs.gnu.org,
 Huang Ying <huang.ying.caritas <at> gmail.com>
Subject: Re: bug#26308: [PATCH -v2] services: dict.scm: Support more dicod
 configuration
Date: Sat, 01 Apr 2017 19:29:05 +0800
ludo <at> gnu.org (Ludovic Courtès) writes:

> Hello,
>
> Huang Ying <huang.ying.caritas <at> gmail.com> skribis:
>
>> * gnu/services/dict.scm (<dicod-configuration>): Add handlers to configure
>>   handlers (module instances).
>>   (<dicod-handler>): Add new record type to describe handler (module instance).
>>   (<dicod-database>): Add more fields.
>>   (dicod-configuration-file): Support convert handlers and enhanced databases
>>   configuration to config file.
>>
>> * doc/guix.text: Add description of newly added dicod configuration.
>
> I’ve committed with a few adjustments to the commit log and cosmetic
> changes:
>
>   https://git.savannah.gnu.org/cgit/guix.git/commit/?id=9af7ecd9591b4eff41389291bbc586dcf09e2665
>
>> +@example
>> +(dicod-service #:config
>> + (dicod-configuration
>> +  (handlers
>> +   (list
>> +    (dicod-handler
>> +     (name "wordnet")
>> +     (module "dictorg")
>> +     (options
>> +      '("dbdir=/gnu/store/xxxx-wordnet")))))
>
> I’ve changed this to use a real example instead of “xxx”.
>
>>  (define-record-type* <dicod-database>
>>    dicod-database make-dicod-database
>>    dicod-database?
>>    (name        dicod-database-name)
>> -  (module      dicod-database-module)
>> +  (handler     dicod-database-handler)
>> +  (complex     dicod-database-complex        (default #f))
>
> I changed that to ‘complex?’, to make it clear that it’s a Boolean.
>
> While I was at it, I wrote a simple test for the dicod service:
>
>   https://git.savannah.gnu.org/cgit/guix.git/commit/?id=985a8599ed742053b52ac85f753c4feb54af93cb
>
> It uses the example handler that you gave in the doc, but I think this
> handler actually does nothing because WordNet does not provide data in
> the dict.org format AIUI (and its data is under “/dict” anyway.)  Is
> that correct?
>
> Do you have another example in mind that could use a dict.org-formatted
> database?

There are dict.org dict for wordnet and foldoc in Debian.  Some
conversion tool is needed to convert the dict database file.

Best Regards,
Huang, Ying

> Thank you!
>
> Ludo’.





Information forwarded to guix-patches <at> gnu.org:
bug#26308; Package guix-patches. (Sat, 01 Apr 2017 22:13:01 GMT) Full text and rfc822 format available.

Message #16 received at 26308-done <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: "Huang\, Ying" <huang_ying_caritas <at> 163.com>
Cc: guix-devel <at> gnu.org, 26308-done <at> debbugs.gnu.org,
 Huang Ying <huang.ying.caritas <at> gmail.com>
Subject: Re: bug#26308: [PATCH -v2] services: dict.scm: Support more dicod
 configuration
Date: Sun, 02 Apr 2017 00:12:32 +0200
Hello,

"Huang, Ying" <huang_ying_caritas <at> 163.com> skribis:

> ludo <at> gnu.org (Ludovic Courtès) writes:

[...]

>> While I was at it, I wrote a simple test for the dicod service:
>>
>>   https://git.savannah.gnu.org/cgit/guix.git/commit/?id=985a8599ed742053b52ac85f753c4feb54af93cb
>>
>> It uses the example handler that you gave in the doc, but I think this
>> handler actually does nothing because WordNet does not provide data in
>> the dict.org format AIUI (and its data is under “/dict” anyway.)  Is
>> that correct?
>>
>> Do you have another example in mind that could use a dict.org-formatted
>> database?
>
> There are dict.org dict for wordnet and foldoc in Debian.  Some
> conversion tool is needed to convert the dict database file.

OK.  Any idea of a DICT database file that we could use as an example
and as a test?

Thanks,
Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#26308; Package guix-patches. (Mon, 03 Apr 2017 02:09:02 GMT) Full text and rfc822 format available.

Message #19 received at 26308-done <at> debbugs.gnu.org (full text, mbox):

From: huang ying <huang.ying.caritas <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: guix-devel <at> gnu.org, "Huang, Ying" <huang_ying_caritas <at> 163.com>,
 26308-done <at> debbugs.gnu.org
Subject: Re: bug#26308: [PATCH -v2] services: dict.scm: Support more dicod
 configuration
Date: Mon, 3 Apr 2017 10:08:36 +0800
On Sun, Apr 2, 2017 at 6:12 AM, Ludovic Courtès <ludo <at> gnu.org> wrote:
> Hello,
>
> "Huang, Ying" <huang_ying_caritas <at> 163.com> skribis:
>
>> ludo <at> gnu.org (Ludovic Courtès) writes:
>
> [...]
>
>>> While I was at it, I wrote a simple test for the dicod service:
>>>
>>>   https://git.savannah.gnu.org/cgit/guix.git/commit/?id=985a8599ed742053b52ac85f753c4feb54af93cb
>>>
>>> It uses the example handler that you gave in the doc, but I think this
>>> handler actually does nothing because WordNet does not provide data in
>>> the dict.org format AIUI (and its data is under “/dict” anyway.)  Is
>>> that correct?
>>>
>>> Do you have another example in mind that could use a dict.org-formatted
>>> database?
>>
>> There are dict.org dict for wordnet and foldoc in Debian.  Some
>> conversion tool is needed to convert the dict database file.
>
> OK.  Any idea of a DICT database file that we could use as an example
> and as a test?

I found there is freedict database file, for example,

https://downloads.sourceforge.net/project/freedict/English%20-%20French/0.1.4/freedict-eng-fra-0.1.4.tar.bz2?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Ffreedict%2Ffiles%2FEnglish%2520-%2520French%2F0.1.4%2Ffreedict-eng-fra-0.1.4.tar.bz2%2Fdownload&ts=1491090445&use_mirror=excellmedia

The home page is http://freedict.org/en/, the github page is
http://freedict.org/en/, according to
https://github.com/freedict/fd-dictionaries/blob/master/eng-fra/COPYING,
the database file is released with GPL.

Best Regards,
Huang, Ying

> Thanks,
> Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 01 May 2017 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 6 years and 360 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.