Mercurial > babel > old > mirror
annotate babel/messages/frontend.py @ 179:6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
* The `--use-fuzzy` option works again from the command-line.
author | cmlenz |
---|---|
date | Wed, 27 Jun 2007 14:29:17 +0000 |
parents | 51fffa0a51ac |
children | 7e88950ab661 |
rev | line source |
---|---|
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
1 #!/usr/bin/env python |
3 | 2 # -*- coding: utf-8 -*- |
3 # | |
4 # Copyright (C) 2007 Edgewall Software | |
5 # All rights reserved. | |
6 # | |
7 # This software is licensed as described in the file COPYING, which | |
8 # you should have received as part of this distribution. The terms | |
9 # are also available at http://babel.edgewall.org/wiki/License. | |
10 # | |
11 # This software consists of voluntary contributions made by many | |
12 # individuals. For the exact contribution history, see the revision | |
13 # history and logs, available at http://babel.edgewall.org/log/. | |
14 | |
15 """Frontends for the message extraction functionality.""" | |
16 | |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
17 from ConfigParser import RawConfigParser |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
18 from datetime import datetime |
3 | 19 from distutils import log |
20 from distutils.cmd import Command | |
51
3664c93860f1
Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents:
50
diff
changeset
|
21 from distutils.errors import DistutilsOptionError, DistutilsSetupError |
3 | 22 from optparse import OptionParser |
23 import os | |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
24 import re |
51
3664c93860f1
Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents:
50
diff
changeset
|
25 from StringIO import StringIO |
3 | 26 import sys |
27 | |
28 from babel import __version__ as VERSION | |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
29 from babel import Locale |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
30 from babel.core import UnknownLocaleError |
58
068952b4d4c0
Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
57
diff
changeset
|
31 from babel.messages.catalog import Catalog |
56
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
32 from babel.messages.extract import extract_from_dir, DEFAULT_KEYWORDS, \ |
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
33 DEFAULT_MAPPING |
162 | 34 from babel.messages.mofile import write_mo |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
35 from babel.messages.pofile import read_po, write_po |
56
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
36 from babel.messages.plurals import PLURALS |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
37 from babel.util import odict, LOCALTZ |
3 | 38 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
39 __all__ = ['CommandLineInterface', 'extract_messages', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
40 'check_message_extractors', 'main'] |
3 | 41 __docformat__ = 'restructuredtext en' |
42 | |
43 | |
162 | 44 class compile_catalog(Command): |
45 """Catalog compilation command for use in ``setup.py`` scripts. | |
46 | |
47 If correctly installed, this command is available to Setuptools-using | |
48 setup scripts automatically. For projects using plain old ``distutils``, | |
49 the command needs to be registered explicitly in ``setup.py``:: | |
50 | |
51 from babel.messages.frontend import compile_catalog | |
52 | |
53 setup( | |
54 ... | |
171 | 55 cmdclass = {'compile_catalog': compile_catalog} |
162 | 56 ) |
57 | |
58 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ | |
59 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ | |
60 """ | |
61 | |
62 description = 'compile a catalog to a binary MO file' | |
63 user_options = [ | |
64 ('domain=', 'D', | |
65 "domain of PO file (default 'messages')"), | |
66 ('directory=', 'd', | |
67 'path to base directory containing the catalogs'), | |
68 ('input-file=', 'i', | |
69 'name of the input file'), | |
70 ('output-file=', 'o', | |
71 "name of the output file (default " | |
72 "'<output_dir>/<locale>/LC_MESSAGES/<domain>.po')"), | |
73 ('locale=', 'l', | |
74 'locale of the catalog to compile'), | |
75 ('use-fuzzy', 'f', | |
76 'also include fuzzy translations'), | |
77 ] | |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
78 boolean_options = ['use-fuzzy', 'compile-all'] |
162 | 79 |
80 def initialize_options(self): | |
81 self.domain = 'messages' | |
82 self.directory = None | |
83 self.input_file = None | |
84 self.output_file = None | |
85 self.locale = None | |
86 self.use_fuzzy = False | |
87 | |
88 def finalize_options(self): | |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
89 if not self.input_file and not self.directory: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
90 raise DistutilsOptionError('you must specify either the input file ' |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
91 'or the base directory') |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
92 if not self.output_file and not self.directory: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
93 raise DistutilsOptionError('you must specify either the input file ' |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
94 'or the base directory') |
162 | 95 |
96 def run(self): | |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
97 po_files = [] |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
98 mo_files = [] |
177
47f6c31e9a24
Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents:
172
diff
changeset
|
99 |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
100 if not self.input_file: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
101 if self.locale: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
102 po_files.append(os.path.join(self.directory, self.locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
103 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
104 self.domain + '.po')) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
105 mo_files.append(os.path.join(self.directory, self.locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
106 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
107 self.domain + '.mo')) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
108 else: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
109 for locale in os.listdir(self.directory): |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
110 po_file = os.path.join(self.directory, locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
111 'LC_MESSAGES', self.domain + '.po') |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
112 if os.path.exists(po_file): |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
113 po_files.append(po_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
114 mo_files.append(os.path.join(self.directory, locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
115 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
116 self.domain + '.mo')) |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
117 else: |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
118 po_files.append(self.output_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
119 if self.output_file: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
120 mo_files.append(self.output_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
121 else: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
122 mo_files.append(os.path.join(self.directory, locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
123 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
124 self.domain + '.mo')) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
125 |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
126 for idx, po_file in enumerate(po_files): |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
127 mo_file = mo_files[idx] |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
128 infile = open(po_file, 'r') |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
129 try: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
130 catalog = read_po(infile) |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
131 finally: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
132 infile.close() |
177
47f6c31e9a24
Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents:
172
diff
changeset
|
133 |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
134 if catalog.fuzzy and not self.use_fuzzy: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
135 print 'catalog %r is marked as fuzzy, skipping' % (po_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
136 continue |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
137 |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
138 print 'compiling catalog %r to %r' % (po_file, mo_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
139 |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
140 outfile = open(mo_file, 'w') |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
141 try: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
142 write_mo(outfile, catalog, use_fuzzy=self.use_fuzzy) |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
143 finally: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
144 outfile.close() |
162 | 145 |
146 | |
3 | 147 class extract_messages(Command): |
148 """Message extraction command for use in ``setup.py`` scripts. | |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
149 |
3 | 150 If correctly installed, this command is available to Setuptools-using |
151 setup scripts automatically. For projects using plain old ``distutils``, | |
152 the command needs to be registered explicitly in ``setup.py``:: | |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
153 |
56
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
154 from babel.messages.frontend import extract_messages |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
155 |
3 | 156 setup( |
157 ... | |
158 cmdclass = {'extract_messages': extract_messages} | |
159 ) | |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
160 |
3 | 161 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ |
162 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ | |
163 """ | |
164 | |
165 description = 'extract localizable strings from the project code' | |
166 user_options = [ | |
167 ('charset=', None, | |
168 'charset to use in the output file'), | |
169 ('keywords=', 'k', | |
12
0ce673c24cb1
Both Babel's [source:trunk/babel/catalog/frontend.py frontend] and [source:trunk/babel/catalog/extract.py extract] now handle keyword indices. Also added an extra boolean flag so that the default keywords defined by Babel are not included in the keywords to search for when extracting strings.
palgarvio
parents:
9
diff
changeset
|
170 'space-separated list of keywords to look for in addition to the ' |
3 | 171 'defaults'), |
12
0ce673c24cb1
Both Babel's [source:trunk/babel/catalog/frontend.py frontend] and [source:trunk/babel/catalog/extract.py extract] now handle keyword indices. Also added an extra boolean flag so that the default keywords defined by Babel are not included in the keywords to search for when extracting strings.
palgarvio
parents:
9
diff
changeset
|
172 ('no-default-keywords', None, |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
173 'do not include the default keywords'), |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
174 ('mapping-file=', 'F', |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
175 'path to the mapping configuration file'), |
3 | 176 ('no-location', None, |
177 'do not include location comments with filename and line number'), | |
178 ('omit-header', None, | |
179 'do not include msgid "" entry in header'), | |
7
8d7b3077e6d1
* The creation-date header in generated PO files now includes the timezone offset.
cmlenz
parents:
3
diff
changeset
|
180 ('output-file=', 'o', |
3 | 181 'name of the output file'), |
25 | 182 ('width=', 'w', |
26
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
183 'set output line width (default 76)'), |
25 | 184 ('no-wrap', None, |
26
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
185 'do not break long message lines, longer than the output line width, ' |
60 | 186 'into several lines'), |
73 | 187 ('sort-output', None, |
188 'generate sorted output (default False)'), | |
189 ('sort-by-file', None, | |
190 'sort output by file location (default False)'), | |
80
8e2e9d549693
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
73
diff
changeset
|
191 ('msgid-bugs-address=', None, |
8e2e9d549693
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
73
diff
changeset
|
192 'set report address for msgid'), |
81
51f73a110a84
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
80
diff
changeset
|
193 ('copyright-holder=', None, |
51f73a110a84
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
80
diff
changeset
|
194 'set copyright holder in output'), |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
195 ('add-comments=', 'c', |
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
196 'place comment block with TAG (or those preceding keyword lines) in ' |
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
197 'output file. Seperate multiple TAGs with commas(,)'), |
61 | 198 ('input-dirs=', None, |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
199 'directories that should be scanned for messages'), |
3 | 200 ] |
25 | 201 boolean_options = [ |
73 | 202 'no-default-keywords', 'no-location', 'omit-header', 'no-wrap', |
203 'sort-output', 'sort-by-file' | |
25 | 204 ] |
3 | 205 |
206 def initialize_options(self): | |
207 self.charset = 'utf-8' | |
119
c84f629da9de
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
114
diff
changeset
|
208 self.keywords = '' |
c84f629da9de
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
114
diff
changeset
|
209 self._keywords = DEFAULT_KEYWORDS.copy() |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
210 self.no_default_keywords = False |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
211 self.mapping_file = None |
3 | 212 self.no_location = False |
213 self.omit_header = False | |
214 self.output_file = None | |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
215 self.input_dirs = None |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
216 self.width = 76 |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
217 self.no_wrap = False |
73 | 218 self.sort_output = False |
219 self.sort_by_file = False | |
80
8e2e9d549693
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
73
diff
changeset
|
220 self.msgid_bugs_address = None |
81
51f73a110a84
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
80
diff
changeset
|
221 self.copyright_holder = None |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
222 self.add_comments = None |
97
debd9ac3bb4d
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
92
diff
changeset
|
223 self._add_comments = [] |
3 | 224 |
225 def finalize_options(self): | |
25 | 226 if self.no_default_keywords and not self.keywords: |
26
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
227 raise DistutilsOptionError('you must specify new keywords if you ' |
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
228 'disable the default ones') |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
229 if self.no_default_keywords: |
25 | 230 self._keywords = {} |
119
c84f629da9de
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
114
diff
changeset
|
231 if self.keywords: |
25 | 232 self._keywords.update(parse_keywords(self.keywords.split())) |
26
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
233 |
119
c84f629da9de
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
114
diff
changeset
|
234 if not self.output_file: |
c84f629da9de
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
114
diff
changeset
|
235 raise DistutilsOptionError('no output file specified') |
25 | 236 if self.no_wrap and self.width: |
73 | 237 raise DistutilsOptionError("'--no-wrap' and '--width' are mutually " |
26
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
238 "exclusive") |
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
239 if self.no_wrap: |
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
240 self.width = None |
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
241 else: |
25 | 242 self.width = int(self.width) |
97
debd9ac3bb4d
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
92
diff
changeset
|
243 |
73 | 244 if self.sort_output and self.sort_by_file: |
245 raise DistutilsOptionError("'--sort-output' and '--sort-by-file' " | |
246 "are mutually exclusive") | |
3 | 247 |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
248 if not self.input_dirs: |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
249 self.input_dirs = dict.fromkeys([k.split('.',1)[0] |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
250 for k in self.distribution.packages |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
251 ]).keys() |
97
debd9ac3bb4d
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
92
diff
changeset
|
252 |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
253 if self.add_comments: |
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
254 self._add_comments = self.add_comments.split(',') |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
255 |
3 | 256 def run(self): |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
257 mappings = self._get_mappings() |
3 | 258 outfile = open(self.output_file, 'w') |
259 try: | |
104
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
260 catalog = Catalog(project=self.distribution.get_name(), |
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
261 version=self.distribution.get_version(), |
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
262 msgid_bugs_address=self.msgid_bugs_address, |
107
4b42e23644e5
`Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents:
106
diff
changeset
|
263 copyright_holder=self.copyright_holder, |
104
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
264 charset=self.charset) |
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
265 |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
266 for dirname, (method_map, options_map) in mappings.items(): |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
267 def callback(filename, method, options): |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
268 if method == 'ignore': |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
269 return |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
270 filepath = os.path.normpath(os.path.join(dirname, filename)) |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
271 optstr = '' |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
272 if options: |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
273 optstr = ' (%s)' % ', '.join(['%s="%s"' % (k, v) for |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
274 k, v in options.items()]) |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
275 log.info('extracting messages from %s%s' |
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
276 % (filepath, optstr)) |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
277 |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
278 extracted = extract_from_dir(dirname, method_map, options_map, |
119
c84f629da9de
Made new frontend tests more ''unit-y'', i.e. calling the APIs directly instead of launching the scripts.
cmlenz
parents:
114
diff
changeset
|
279 keywords=self._keywords, |
86
8a703ecdba91
Some cosmetic changes for the new translator comments support.
cmlenz
parents:
82
diff
changeset
|
280 comment_tags=self._add_comments, |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
281 callback=callback) |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
282 for filename, lineno, message, comments in extracted: |
59
e68fd956ebce
* The `extract_messages` distutils command now operators on configurable input directories again, instead of the complete current directory. The `input_dirs` default to the package directories.
cmlenz
parents:
58
diff
changeset
|
283 filepath = os.path.normpath(os.path.join(dirname, filename)) |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
284 catalog.add(message, None, [(filepath, lineno)], |
107
4b42e23644e5
`Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents:
106
diff
changeset
|
285 auto_comments=comments) |
26
93eaa2f4a0a2
Reimplement line wrapping for PO writing (as the `textwrap` module is too destructive with white space) and move it to the `normalize` function (which was already doing some handling of line breaks).
cmlenz
parents:
25
diff
changeset
|
286 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
287 log.info('writing PO template file to %s' % self.output_file) |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
288 write_po(outfile, catalog, width=self.width, |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
289 no_location=self.no_location, |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
290 omit_header=self.omit_header, |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
291 sort_output=self.sort_output, |
107
4b42e23644e5
`Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents:
106
diff
changeset
|
292 sort_by_file=self.sort_by_file) |
3 | 293 finally: |
294 outfile.close() | |
295 | |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
296 def _get_mappings(self): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
297 mappings = {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
298 |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
299 if self.mapping_file: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
300 fileobj = open(self.mapping_file, 'U') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
301 try: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
302 method_map, options_map = parse_mapping(fileobj) |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
303 for dirname in self.input_dirs: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
304 mappings[dirname] = method_map, options_map |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
305 finally: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
306 fileobj.close() |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
307 |
125
0053443e7cb2
Make the check for the `message_extractors` setup keyword more robst.
cmlenz
parents:
122
diff
changeset
|
308 elif getattr(self.distribution, 'message_extractors', None): |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
309 message_extractors = self.distribution.message_extractors |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
310 for dirname, mapping in message_extractors.items(): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
311 if isinstance(mapping, basestring): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
312 method_map, options_map = parse_mapping(StringIO(mapping)) |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
313 else: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
314 method_map, options_map = [], {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
315 for pattern, method, options in mapping: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
316 method_map.append((pattern, method)) |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
317 options_map[pattern] = options or {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
318 mappings[dirname] = method_map, options_map |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
319 |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
320 else: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
321 for dirname in self.input_dirs: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
322 mappings[dirname] = DEFAULT_MAPPING, {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
323 |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
324 return mappings |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
325 |
3 | 326 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
327 def check_message_extractors(dist, name, value): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
328 """Validate the ``message_extractors`` keyword argument to ``setup()``. |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
329 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
330 :param dist: the distutils/setuptools ``Distribution`` object |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
331 :param name: the name of the keyword argument (should always be |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
332 "message_extractors") |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
333 :param value: the value of the keyword argument |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
334 :raise `DistutilsSetupError`: if the value is not valid |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
335 :see: `Adding setup() arguments |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
336 <http://peak.telecommunity.com/DevCenter/setuptools#adding-setup-arguments>`_ |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
337 """ |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
338 assert name == 'message_extractors' |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
339 if not isinstance(value, dict): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
340 raise DistutilsSetupError('the value of the "message_extractors" ' |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
341 'parameter must be a dictionary') |
3 | 342 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
343 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
344 class new_catalog(Command): |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
345 """New catalog command for use in ``setup.py`` scripts. |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
346 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
347 If correctly installed, this command is available to Setuptools-using |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
348 setup scripts automatically. For projects using plain old ``distutils``, |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
349 the command needs to be registered explicitly in ``setup.py``:: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
350 |
56
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
351 from babel.messages.frontend import new_catalog |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
352 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
353 setup( |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
354 ... |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
355 cmdclass = {'new_catalog': new_catalog} |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
356 ) |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
357 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
358 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
359 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
360 """ |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
361 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
362 description = 'create new catalogs based on a catalog template' |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
363 user_options = [ |
57
e7080996fc46
`new_catalog` now accepts another argument, `--domain`, which is used to build the output file path, which now is of the form `<output_dir>/<locale>/<domain>.po`, the correct form.
palgarvio
parents:
56
diff
changeset
|
364 ('domain=', 'D', |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
365 "domain of PO file (default 'messages')"), |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
366 ('input-file=', 'i', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
367 'name of the input file'), |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
368 ('output-dir=', 'd', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
369 'path to output directory'), |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
370 ('output-file=', 'o', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
371 "name of the output file (default " |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
372 "'<output_dir>/<locale>/LC_MESSAGES/<domain>.po')"), |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
373 ('locale=', 'l', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
374 'locale for the new localized catalog'), |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
375 ] |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
376 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
377 def initialize_options(self): |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
378 self.output_dir = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
379 self.output_file = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
380 self.input_file = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
381 self.locale = None |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
382 self.domain = 'messages' |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
383 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
384 def finalize_options(self): |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
385 if not self.input_file: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
386 raise DistutilsOptionError('you must specify the input file') |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
387 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
388 if not self.locale: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
389 raise DistutilsOptionError('you must provide a locale for the ' |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
390 'new catalog') |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
391 try: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
392 self._locale = Locale.parse(self.locale) |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
393 except UnknownLocaleError, e: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
394 raise DistutilsOptionError(e) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
395 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
396 if not self.output_file and not self.output_dir: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
397 raise DistutilsOptionError('you must specify the output directory') |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
398 if not self.output_file: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
399 self.output_file = os.path.join(self.output_dir, self.locale, |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
400 'LC_MESSAGES', self.domain + '.po') |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
401 |
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
402 if not os.path.exists(os.path.dirname(self.output_file)): |
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
403 os.makedirs(os.path.dirname(self.output_file)) |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
404 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
405 def run(self): |
92 | 406 log.info('creating catalog %r based on %r', self.output_file, |
57
e7080996fc46
`new_catalog` now accepts another argument, `--domain`, which is used to build the output file path, which now is of the form `<output_dir>/<locale>/<domain>.po`, the correct form.
palgarvio
parents:
56
diff
changeset
|
407 self.input_file) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
408 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
409 infile = open(self.input_file, 'r') |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
410 try: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
411 catalog = read_po(infile) |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
412 finally: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
413 infile.close() |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
414 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
415 catalog.locale = self._locale |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
416 |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
417 outfile = open(self.output_file, 'w') |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
418 try: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
419 write_po(outfile, catalog) |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
420 finally: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
421 outfile.close() |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
422 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
423 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
424 class CommandLineInterface(object): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
425 """Command-line interface. |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
426 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
427 This class provides a simple command-line interface to the message |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
428 extraction and PO file generation functionality. |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
429 """ |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
430 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
431 usage = '%%prog %s [options] %s' |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
432 version = '%%prog %s' % VERSION |
163 | 433 commands = { |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
434 'compile': 'compile message catalogs to MO files', |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
435 'extract': 'extract messages from source files and generate a POT file', |
167
533baef258bb
Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents:
163
diff
changeset
|
436 'init': 'create new message catalogs from a template', |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
437 } |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
438 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
439 def run(self, argv=sys.argv): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
440 """Main entry point of the command-line interface. |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
441 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
442 :param argv: list of arguments passed on the command-line |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
443 """ |
129 | 444 self.parser = OptionParser(usage=self.usage % ('command', '[args]'), |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
445 version=self.version) |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
446 self.parser.disable_interspersed_args() |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
447 self.parser.print_help = self._help |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
448 options, args = self.parser.parse_args(argv[1:]) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
449 if not args: |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
450 self.parser.error('incorrect number of arguments') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
451 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
452 cmdname = args[0] |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
453 if cmdname not in self.commands: |
129 | 454 self.parser.error('unknown command "%s"' % cmdname) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
455 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
456 getattr(self, cmdname)(args[1:]) |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
457 |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
458 def _help(self): |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
459 print self.parser.format_help() |
129 | 460 print "commands:" |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
461 longest = max([len(command) for command in self.commands]) |
129 | 462 format = " %%-%ds %%s" % max(11, longest) |
163 | 463 commands = self.commands.items() |
464 commands.sort() | |
465 for name, description in commands: | |
466 print format % (name, description) | |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
467 |
162 | 468 def compile(self, argv): |
469 """Subcommand for compiling a message catalog to a MO file. | |
470 | |
471 :param argv: the command arguments | |
472 """ | |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
473 parser = OptionParser(usage=self.usage % ('compile', ''), |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
474 description=self.commands['compile']) |
162 | 475 parser.add_option('--domain', '-D', dest='domain', |
476 help="domain of MO and PO files (default '%default')") | |
477 parser.add_option('--directory', '-d', dest='directory', | |
478 metavar='DIR', help='base directory of catalog files') | |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
479 parser.add_option('--locale', '-l', dest='locale', metavar='LOCALE', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
480 help='locale of the catalog') |
162 | 481 parser.add_option('--input-file', '-i', dest='input_file', |
482 metavar='FILE', help='name of the input file') | |
483 parser.add_option('--output-file', '-o', dest='output_file', | |
484 metavar='FILE', | |
485 help="name of the output file (default " | |
486 "'<output_dir>/<locale>/LC_MESSAGES/" | |
487 "<domain>.mo')") | |
488 parser.add_option('--use-fuzzy', '-f', dest='use_fuzzy', | |
489 action='store_true', | |
490 help='also include fuzzy translations (default ' | |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
491 '%default)'), |
162 | 492 |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
493 parser.set_defaults(domain='messages', use_fuzzy=False, |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
494 compile_all=False) |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
495 options, args = parser.parse_args(argv) |
162 | 496 |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
497 po_files = [] |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
498 mo_files = [] |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
499 if not options.input_file: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
500 if not options.directory: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
501 parser.error('you must specify either the input file or the ' |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
502 'base directory') |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
503 if options.locale: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
504 po_files.append(os.path.join(options.directory, options.locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
505 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
506 options.domain + '.po')) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
507 mo_files.append(os.path.join(options.directory, options.locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
508 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
509 options.domain + '.mo')) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
510 else: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
511 for locale in os.listdir(options.directory): |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
512 po_file = os.path.join(options.directory, locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
513 'LC_MESSAGES', options.domain + '.po') |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
514 if os.path.exists(po_file): |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
515 po_files.append(po_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
516 mo_files.append(os.path.join(options.directory, locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
517 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
518 options.domain + '.mo')) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
519 else: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
520 po_files.append(options.output_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
521 if options.output_file: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
522 mo_files.append(options.output_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
523 else: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
524 if not options.directory: |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
525 parser.error('you must specify either the input file or ' |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
526 'the base directory') |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
527 mo_files.append(os.path.join(options.directory, locale, |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
528 'LC_MESSAGES', |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
529 options.domain + '.mo')) |
162 | 530 |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
531 for idx, po_file in enumerate(po_files): |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
532 mo_file = mo_files[idx] |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
533 infile = open(po_file, 'r') |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
534 try: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
535 catalog = read_po(infile) |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
536 finally: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
537 infile.close() |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
538 |
177
47f6c31e9a24
Changed the `__repr__` output to include the flags(it can be changed back, but it was usefull to implement the fuzzy header parsing).
palgarvio
parents:
172
diff
changeset
|
539 if catalog.fuzzy and not options.use_fuzzy: |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
540 print 'catalog %r is marked as fuzzy, skipping' % (po_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
541 continue |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
542 |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
543 print 'compiling catalog %r to %r' % (po_file, mo_file) |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
544 |
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
545 outfile = open(mo_file, 'w') |
172
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
546 try: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
547 write_mo(outfile, catalog, use_fuzzy=options.use_fuzzy) |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
548 finally: |
91396d14e0b8
Allow the compile catalog frontends to compile all available locales.
palgarvio
parents:
171
diff
changeset
|
549 outfile.close() |
162 | 550 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
551 def extract(self, argv): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
552 """Subcommand for extracting messages from source files and generating |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
553 a POT file. |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
554 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
555 :param argv: the command arguments |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
556 """ |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
557 parser = OptionParser(usage=self.usage % ('extract', 'dir1 <dir2> ...'), |
163 | 558 description=self.commands['extract']) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
559 parser.add_option('--charset', dest='charset', |
162 | 560 help='charset to use in the output (default ' |
561 '"%default")') | |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
562 parser.add_option('-k', '--keyword', dest='keywords', action='append', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
563 help='keywords to look for in addition to the ' |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
564 'defaults. You can specify multiple -k flags on ' |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
565 'the command line.') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
566 parser.add_option('--no-default-keywords', dest='no_default_keywords', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
567 action='store_true', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
568 help="do not include the default keywords") |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
569 parser.add_option('--mapping', '-F', dest='mapping_file', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
570 help='path to the extraction mapping file') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
571 parser.add_option('--no-location', dest='no_location', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
572 action='store_true', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
573 help='do not include location comments with filename ' |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
574 'and line number') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
575 parser.add_option('--omit-header', dest='omit_header', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
576 action='store_true', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
577 help='do not include msgid "" entry in header') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
578 parser.add_option('-o', '--output', dest='output', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
579 help='path to the output POT file') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
580 parser.add_option('-w', '--width', dest='width', type='int', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
581 help="set output line width (default %default)") |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
582 parser.add_option('--no-wrap', dest='no_wrap', action = 'store_true', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
583 help='do not break long message lines, longer than ' |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
584 'the output line width, into several lines') |
73 | 585 parser.add_option('--sort-output', dest='sort_output', |
586 action='store_true', | |
587 help='generate sorted output (default False)') | |
588 parser.add_option('--sort-by-file', dest='sort_by_file', | |
589 action='store_true', | |
590 help='sort output by file location (default False)') | |
80
8e2e9d549693
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
73
diff
changeset
|
591 parser.add_option('--msgid-bugs-address', dest='msgid_bugs_address', |
8e2e9d549693
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
73
diff
changeset
|
592 metavar='EMAIL@ADDRESS', |
8e2e9d549693
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents:
73
diff
changeset
|
593 help='set report address for msgid') |
81
51f73a110a84
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
80
diff
changeset
|
594 parser.add_option('--copyright-holder', dest='copyright_holder', |
51f73a110a84
Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents:
80
diff
changeset
|
595 help='set copyright holder in output') |
97
debd9ac3bb4d
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
92
diff
changeset
|
596 parser.add_option('--add-comments', '-c', dest='comment_tags', |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
597 metavar='TAG', action='append', |
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
598 help='place comment block with TAG (or those ' |
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
599 'preceding keyword lines) in output file. One ' |
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
600 'TAG per argument call') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
601 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
602 parser.set_defaults(charset='utf-8', keywords=[], |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
603 no_default_keywords=False, no_location=False, |
73 | 604 omit_header = False, width=76, no_wrap=False, |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
605 sort_output=False, sort_by_file=False, |
97
debd9ac3bb4d
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
92
diff
changeset
|
606 comment_tags=[]) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
607 options, args = parser.parse_args(argv) |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
608 if not args: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
609 parser.error('incorrect number of arguments') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
610 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
611 if options.output not in (None, '-'): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
612 outfile = open(options.output, 'w') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
613 else: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
614 outfile = sys.stdout |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
615 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
616 keywords = DEFAULT_KEYWORDS.copy() |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
617 if options.no_default_keywords: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
618 if not options.keywords: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
619 parser.error('you must specify new keywords if you disable the ' |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
620 'default ones') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
621 keywords = {} |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
622 if options.keywords: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
623 keywords.update(parse_keywords(options.keywords)) |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
624 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
625 if options.mapping_file: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
626 fileobj = open(options.mapping_file, 'U') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
627 try: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
628 method_map, options_map = parse_mapping(fileobj) |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
629 finally: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
630 fileobj.close() |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
631 else: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
632 method_map = DEFAULT_MAPPING |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
633 options_map = {} |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
634 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
635 if options.width and options.no_wrap: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
636 parser.error("'--no-wrap' and '--width' are mutually exclusive.") |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
637 elif not options.width and not options.no_wrap: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
638 options.width = 76 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
639 elif not options.width and options.no_wrap: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
640 options.width = 0 |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
641 |
73 | 642 if options.sort_output and options.sort_by_file: |
643 parser.error("'--sort-output' and '--sort-by-file' are mutually " | |
644 "exclusive") | |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
645 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
646 try: |
104
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
647 catalog = Catalog(msgid_bugs_address=options.msgid_bugs_address, |
107
4b42e23644e5
`Message`, `read_po` and `write_po` now all handle user/auto comments correctly.
palgarvio
parents:
106
diff
changeset
|
648 copyright_holder=options.copyright_holder, |
104
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
649 charset=options.charset) |
57d2f21a1fcc
Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents:
97
diff
changeset
|
650 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
651 for dirname in args: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
652 if not os.path.isdir(dirname): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
653 parser.error('%r is not a directory' % dirname) |
97
debd9ac3bb4d
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
92
diff
changeset
|
654 extracted = extract_from_dir(dirname, method_map, options_map, |
debd9ac3bb4d
Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents:
92
diff
changeset
|
655 keywords, options.comment_tags) |
82
f421e5576d26
Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents:
81
diff
changeset
|
656 for filename, lineno, message, comments in extracted: |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
657 filepath = os.path.normpath(os.path.join(dirname, filename)) |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
658 catalog.add(message, None, [(filepath, lineno)], |
112 | 659 auto_comments=comments) |
58
068952b4d4c0
Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents:
57
diff
changeset
|
660 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
661 write_po(outfile, catalog, width=options.width, |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
662 no_location=options.no_location, |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
663 omit_header=options.omit_header, |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
664 sort_output=options.sort_output, |
114
eeed857fa3d5
copyright_holder arg is no longer needed for write_po
pjenvey
parents:
112
diff
changeset
|
665 sort_by_file=options.sort_by_file) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
666 finally: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
667 if options.output: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
668 outfile.close() |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
669 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
670 def init(self, argv): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
671 """Subcommand for creating new message catalogs from a template. |
179
6138ea7ef7a8
* Instead of an extra `compile-all` option on the `compile` (or `compile_catalog`) command, compilation of all catalogs is performed when neither an `input_file` nor a `locale` is specified.
cmlenz
parents:
178
diff
changeset
|
672 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
673 :param argv: the command arguments |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
674 """ |
167
533baef258bb
Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents:
163
diff
changeset
|
675 parser = OptionParser(usage=self.usage % ('init', ''), |
163 | 676 description=self.commands['init']) |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
677 parser.add_option('--domain', '-D', dest='domain', |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
678 help="domain of PO file (default '%default')") |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
679 parser.add_option('--input-file', '-i', dest='input_file', |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
680 metavar='FILE', help='name of the input file') |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
681 parser.add_option('--output-dir', '-d', dest='output_dir', |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
682 metavar='DIR', help='path to output directory') |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
683 parser.add_option('--output-file', '-o', dest='output_file', |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
684 metavar='FILE', |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
685 help="name of the output file (default " |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
686 "'<output_dir>/<locale>/LC_MESSAGES/" |
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
687 "<domain>.po')") |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
688 parser.add_option('--locale', '-l', dest='locale', metavar='LOCALE', |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
689 help='locale for the new localized catalog') |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
690 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
691 parser.set_defaults(domain='messages') |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
692 options, args = parser.parse_args(argv) |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
693 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
694 if not options.locale: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
695 parser.error('you must provide a locale for the new catalog') |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
696 try: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
697 locale = Locale.parse(options.locale) |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
698 except UnknownLocaleError, e: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
699 parser.error(e) |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
700 |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
701 if not options.input_file: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
702 parser.error('you must specify the input file') |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
703 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
704 if not options.output_file and not options.output_dir: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
705 parser.error('you must specify the output file or directory') |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
706 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
707 if not options.output_file: |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
708 options.output_file = os.path.join(options.output_dir, |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
709 options.locale, 'LC_MESSAGES', |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
710 options.domain + '.po') |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
711 if not os.path.exists(os.path.dirname(options.output_file)): |
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
712 os.makedirs(os.path.dirname(options.output_file)) |
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
713 |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
714 infile = open(options.input_file, 'r') |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
715 try: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
716 catalog = read_po(infile) |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
717 finally: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
718 infile.close() |
89
31519c52c0fe
Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents:
88
diff
changeset
|
719 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
720 catalog.locale = locale |
134 | 721 catalog.revision_date = datetime.now(LOCALTZ) |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
722 |
92 | 723 print 'creating catalog %r based on %r' % (options.output_file, |
724 options.input_file) | |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
725 |
106
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
726 outfile = open(options.output_file, 'w') |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
727 try: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
728 write_po(outfile, catalog) |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
729 finally: |
2a00e352c986
Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents:
105
diff
changeset
|
730 outfile.close() |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
731 |
167
533baef258bb
Implement fuzzy matching to catalog updates. No frontend yet.
cmlenz
parents:
163
diff
changeset
|
732 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
733 def main(): |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
734 CommandLineInterface().run(sys.argv) |
3 | 735 |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
736 def parse_mapping(fileobj, filename=None): |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
737 """Parse an extraction method mapping from a file-like object. |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
738 |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
739 >>> buf = StringIO(''' |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
740 ... # Python source files |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
741 ... [python: **.py] |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
742 ... |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
743 ... # Genshi templates |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
744 ... [genshi: **/templates/**.html] |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
745 ... include_attrs = |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
746 ... [genshi: **/templates/**.txt] |
146 | 747 ... template_class = genshi.template:TextTemplate |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
748 ... encoding = latin-1 |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
749 ... ''') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
750 |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
751 >>> method_map, options_map = parse_mapping(buf) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
752 |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
753 >>> method_map[0] |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
754 ('**.py', 'python') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
755 >>> options_map['**.py'] |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
756 {} |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
757 >>> method_map[1] |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
758 ('**/templates/**.html', 'genshi') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
759 >>> options_map['**/templates/**.html']['include_attrs'] |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
760 '' |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
761 >>> method_map[2] |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
762 ('**/templates/**.txt', 'genshi') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
763 >>> options_map['**/templates/**.txt']['template_class'] |
146 | 764 'genshi.template:TextTemplate' |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
765 >>> options_map['**/templates/**.txt']['encoding'] |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
766 'latin-1' |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
767 |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
768 :param fileobj: a readable file-like object containing the configuration |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
769 text to parse |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
770 :return: a `(method_map, options_map)` tuple |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
771 :rtype: `tuple` |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
772 :see: `extract_from_directory` |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
773 """ |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
774 method_map = [] |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
775 options_map = {} |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
776 |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
777 parser = RawConfigParser() |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
778 parser._sections = odict(parser._sections) # We need ordered sections |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
779 parser.readfp(fileobj, filename) |
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
780 for section in parser.sections(): |
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
781 method, pattern = [part.strip() for part in section.split(':', 1)] |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
782 method_map.append((pattern, method)) |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
783 options_map[pattern] = dict(parser.items(section)) |
49
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
784 |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
785 return (method_map, options_map) |
9979a409589e
Support passing extraction method mapping and options from the frontends (see #4). No distutils/setuptools keyword supported yet, but the rest seems to be working okay.
cmlenz
parents:
26
diff
changeset
|
786 |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
787 def parse_keywords(strings=[]): |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
788 """Parse keywords specifications from the given list of strings. |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
789 |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
790 >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3']) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
791 >>> for keyword, indices in sorted(kw.items()): |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
792 ... print (keyword, indices) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
793 ('_', None) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
794 ('dgettext', (2,)) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
795 ('dngettext', (2, 3)) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
796 """ |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
797 keywords = {} |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
798 for string in strings: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
799 if ':' in string: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
800 funcname, indices = string.split(':') |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
801 else: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
802 funcname, indices = string, None |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
803 if funcname not in keywords: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
804 if indices: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
805 indices = tuple([(int(x)) for x in indices.split(',')]) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
806 keywords[funcname] = indices |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
807 return keywords |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
808 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
809 |
3 | 810 if __name__ == '__main__': |
57
e7080996fc46
`new_catalog` now accepts another argument, `--domain`, which is used to build the output file path, which now is of the form `<output_dir>/<locale>/<domain>.po`, the correct form.
palgarvio
parents:
56
diff
changeset
|
811 main() |