Mercurial > babel > old > mirror
annotate babel/messages/frontend.py @ 80:8e2e9d549693
Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
Added support to the frontends for `--msgid-bugs-address` that set's the `Report-Msgid-Bugs-To` header, which was also a missing header on `Catalog`, so, a bug found by chance :) (See #12, item 6)
author | palgarvio |
---|---|
date | Sun, 10 Jun 2007 08:42:21 +0000 |
parents | 5d8e87acdcc7 |
children | 51f73a110a84 |
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 |
3 | 18 from distutils import log |
19 from distutils.cmd import Command | |
51
3664c93860f1
Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents:
50
diff
changeset
|
20 from distutils.errors import DistutilsOptionError, DistutilsSetupError |
3 | 21 from optparse import OptionParser |
22 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
|
23 import re |
51
3664c93860f1
Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents:
50
diff
changeset
|
24 from StringIO import StringIO |
3 | 25 import sys |
26 | |
27 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
|
28 from babel import Locale |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
29 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
|
30 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
|
31 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
|
32 DEFAULT_MAPPING |
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
33 from babel.messages.pofile import write_po, write_pot |
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
34 from babel.messages.plurals import PLURALS |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
35 from babel.util import odict |
3 | 36 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
37 __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
|
38 'check_message_extractors', 'main'] |
3 | 39 __docformat__ = 'restructuredtext en' |
40 | |
41 | |
42 class extract_messages(Command): | |
43 """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
|
44 |
3 | 45 If correctly installed, this command is available to Setuptools-using |
46 setup scripts automatically. For projects using plain old ``distutils``, | |
47 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
|
48 |
56
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
49 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
|
50 |
3 | 51 setup( |
52 ... | |
53 cmdclass = {'extract_messages': extract_messages} | |
54 ) | |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
55 |
3 | 56 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_ |
57 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_ | |
58 """ | |
59 | |
60 description = 'extract localizable strings from the project code' | |
61 user_options = [ | |
62 ('charset=', None, | |
63 'charset to use in the output file'), | |
64 ('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
|
65 'space-separated list of keywords to look for in addition to the ' |
3 | 66 '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
|
67 ('no-default-keywords', None, |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
68 '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
|
69 ('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
|
70 'path to the mapping configuration file'), |
3 | 71 ('no-location', None, |
72 'do not include location comments with filename and line number'), | |
73 ('omit-header', None, | |
74 '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
|
75 ('output-file=', 'o', |
3 | 76 'name of the output file'), |
25 | 77 ('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
|
78 'set output line width (default 76)'), |
25 | 79 ('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
|
80 'do not break long message lines, longer than the output line width, ' |
60 | 81 'into several lines'), |
73 | 82 ('sort-output', None, |
83 'generate sorted output (default False)'), | |
84 ('sort-by-file', None, | |
85 '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
|
86 ('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
|
87 'set report address for msgid'), |
61 | 88 ('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
|
89 'directories that should be scanned for messages'), |
3 | 90 ] |
25 | 91 boolean_options = [ |
73 | 92 'no-default-keywords', 'no-location', 'omit-header', 'no-wrap', |
93 'sort-output', 'sort-by-file' | |
25 | 94 ] |
3 | 95 |
96 def initialize_options(self): | |
97 self.charset = 'utf-8' | |
25 | 98 self.keywords = self._keywords = DEFAULT_KEYWORDS.copy() |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
99 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
|
100 self.mapping_file = None |
3 | 101 self.no_location = False |
102 self.omit_header = False | |
103 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
|
104 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
|
105 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
|
106 self.no_wrap = False |
73 | 107 self.sort_output = False |
108 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
|
109 self.msgid_bugs_address = None |
3 | 110 |
111 def finalize_options(self): | |
25 | 112 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
|
113 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
|
114 'disable the default ones') |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
115 if self.no_default_keywords: |
25 | 116 self._keywords = {} |
3 | 117 if isinstance(self.keywords, basestring): |
25 | 118 self._keywords.update(parse_keywords(self.keywords.split())) |
119 self.keywords = 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
|
120 |
25 | 121 if self.no_wrap and self.width: |
73 | 122 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
|
123 "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
|
124 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
|
125 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
|
126 else: |
25 | 127 self.width = int(self.width) |
73 | 128 |
129 if self.sort_output and self.sort_by_file: | |
130 raise DistutilsOptionError("'--sort-output' and '--sort-by-file' " | |
131 "are mutually exclusive") | |
3 | 132 |
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
|
133 if not self.input_dirs: |
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
|
134 self.input_dirs = dict.fromkeys([k.split('.',1)[0] |
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
|
135 for k in self.distribution.packages |
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
|
136 ]).keys() |
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
|
137 |
3 | 138 def run(self): |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
139 mappings = self._get_mappings() |
3 | 140 outfile = open(self.output_file, 'w') |
141 try: | |
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
|
142 catalog = Catalog(msgid_bugs_address=self.msgid_bugs_address) |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
143 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
|
144 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
|
145 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
|
146 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 % (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
|
154 |
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
|
155 extracted = extract_from_dir(dirname, method_map, options_map, |
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
|
156 keywords=self.keywords, |
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
|
157 callback=callback) |
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
|
158 for filename, lineno, message in extracted: |
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
|
159 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
|
160 catalog.add(message, None, [(filepath, lineno)]) |
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
|
161 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
162 log.info('writing PO template file to %s' % self.output_file) |
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
|
163 write_pot(outfile, catalog, project=self.distribution.get_name(), |
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
|
164 version=self.distribution.get_version(), width=self.width, |
7
8d7b3077e6d1
* The creation-date header in generated PO files now includes the timezone offset.
cmlenz
parents:
3
diff
changeset
|
165 charset=self.charset, no_location=self.no_location, |
73 | 166 omit_header=self.omit_header, sort_output=self.sort_output, |
167 sort_by_file=self.sort_by_file) | |
3 | 168 finally: |
169 outfile.close() | |
170 | |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
171 def _get_mappings(self): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
172 mappings = {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
173 |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
174 if self.mapping_file: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
175 fileobj = open(self.mapping_file, 'U') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
176 try: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
177 method_map, options_map = parse_mapping(fileobj) |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
178 for dirname in self.input_dirs: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
179 mappings[dirname] = method_map, options_map |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
180 finally: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
181 fileobj.close() |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
182 |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
183 elif self.distribution.message_extractors: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
184 message_extractors = self.distribution.message_extractors |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
185 for dirname, mapping in message_extractors.items(): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
186 if isinstance(mapping, basestring): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
187 method_map, options_map = parse_mapping(StringIO(mapping)) |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
188 else: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
189 method_map, options_map = [], {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
190 for pattern, method, options in mapping: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
191 method_map.append((pattern, method)) |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
192 options_map[pattern] = options or {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
193 mappings[dirname] = method_map, options_map |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
194 |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
195 else: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
196 for dirname in self.input_dirs: |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
197 mappings[dirname] = DEFAULT_MAPPING, {} |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
198 |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
199 return mappings |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
200 |
3 | 201 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
202 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
|
203 """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
|
204 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
205 :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
|
206 :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
|
207 "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
|
208 :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
|
209 :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
|
210 :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
|
211 <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
|
212 """ |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
213 assert name == 'message_extractors' |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
214 if not isinstance(value, dict): |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
215 raise DistutilsSetupError('the value of the "message_extractors" ' |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
216 'parameter must be a dictionary') |
3 | 217 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
218 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
219 class new_catalog(Command): |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
220 """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
|
221 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
222 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
|
223 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
|
224 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
|
225 |
56
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
226 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
|
227 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
228 setup( |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
229 ... |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
230 cmdclass = {'new_catalog': new_catalog} |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
231 ) |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
232 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
233 :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
|
234 :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
|
235 """ |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
236 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
237 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
|
238 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
|
239 ('domain=', 'D', |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
240 "domain of PO file (defaults to lower-cased project name)"), |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
241 ('input-file=', 'i', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
242 'name of the input file'), |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
243 ('output-dir=', 'd', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
244 'path to output directory'), |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
245 ('output-file=', 'o', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
246 "name of the output file (default " |
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
|
247 "'<output_dir>/<locale>/<domain>.po')"), |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
248 ('locale=', 'l', |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
249 '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
|
250 ('first-author=', None, |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
251 'name of first author'), |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
252 ('first-author-email=', None, |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
253 'email of first author') |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
254 ] |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
255 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
256 def initialize_options(self): |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
257 self.output_dir = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
258 self.output_file = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
259 self.input_file = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
260 self.locale = None |
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
|
261 self.domain = None |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
262 self.first_author = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
263 self.first_author_email = None |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
264 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
265 def finalize_options(self): |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
266 if not self.input_file: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
267 raise DistutilsOptionError('you must specify the input 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
|
268 |
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
|
269 if not self.domain: |
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
|
270 self.domain = self.distribution.get_name().lower() |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
271 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
272 if not self.locale: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
273 raise DistutilsOptionError('you must provide a locale for the ' |
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
|
274 'new catalog') |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
275 else: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
276 try: |
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
|
277 self._locale = Locale.parse(self.locale) |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
278 except UnknownLocaleError, error: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
279 log.error(error) |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
280 sys.exit(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
|
281 |
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
|
282 if self._locale.territory.lower() == self._locale.language: |
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
|
283 # Remove country part if equal to language |
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
|
284 # XXX: This might not be the best behaviour, investigate |
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
|
285 self.locale = self._locale.language |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
286 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
287 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
|
288 raise DistutilsOptionError('you must specify the output directory') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
289 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
290 if not self.output_file and self.output_dir: |
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
|
291 self.output_file = os.path.join(self.output_dir, |
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
|
292 self.locale, |
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
|
293 self.domain + '.po') |
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
|
294 if not os.path.exists(os.path.dirname(self.output_file)): |
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
|
295 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
|
296 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
297 def run(self): |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
298 outfile = open(self.output_file, 'w') |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
299 infile = open(self.input_file, 'r') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
300 |
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
|
301 if PLURALS.has_key(str(self._locale)): |
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
|
302 # Try <language>_<COUNTRY> if passed by user |
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
|
303 plurals = PLURALS[str(self._locale)] |
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
|
304 elif PLURALS.has_key(self._locale.language): |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
305 # Try <language> |
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
|
306 plurals = PLURALS[self._locale.language] |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
307 else: |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
308 plurals = ('INTEGER', 'EXPRESSION') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
309 |
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
|
310 log.info('Creating %s %r PO from %r PO template', |
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
|
311 self._locale.english_name, |
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
|
312 self.output_file, |
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
|
313 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
|
314 |
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
|
315 write_po(outfile, infile, self._locale, |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
316 project=self.distribution.get_name(), |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
317 version=self.distribution.get_version(), |
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
|
318 plurals=plurals, |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
319 first_author=self.first_author, |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
320 first_author_email=self.first_author_email) |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
321 |
53
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
322 infile.close() |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
323 outfile.close() |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
324 |
52dbebdd3789
Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents:
51
diff
changeset
|
325 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
326 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
|
327 """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
|
328 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
329 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
|
330 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
|
331 """ |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
332 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
333 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
|
334 version = '%%prog %s' % VERSION |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
335 commands = ['extract', 'init'] |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
336 command_descriptions = { |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
337 'extract': 'extract messages from source files and generate a POT file', |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
338 'init': 'create new message catalogs from a template' |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
339 } |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
340 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
341 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
|
342 """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
|
343 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
344 :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
|
345 """ |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
346 self.parser = OptionParser(usage=self.usage % ('subcommand', '[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
|
347 version=self.version) |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
348 self.parser.disable_interspersed_args() |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
349 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
|
350 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
|
351 if not args: |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
352 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
|
353 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
354 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
|
355 if cmdname not in self.commands: |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
356 self.parser.error('unknown subcommand "%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
|
357 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
358 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
|
359 |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
360 def _help(self): |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
361 print self.parser.format_help() |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
362 print "Subcommands:" |
65
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
363 longest = max([len(command) for command in self.commands]) |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
364 format = " %" + str(longest) + "s %s" |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
365 self.commands.sort() |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
366 for command in self.commands: |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
367 print format % (command, self.command_descriptions[command]) |
b7b61e0fd23e
Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents:
64
diff
changeset
|
368 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
369 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
|
370 """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
|
371 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
|
372 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
373 :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
|
374 """ |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
375 parser = OptionParser(usage=self.usage % ('extract', 'dir1 <dir2> ...'), |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
376 description=self.command_descriptions['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
|
377 parser.add_option('--charset', dest='charset', |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
378 help='charset to use in the output') |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
379 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
|
380 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
|
381 '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
|
382 '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
|
383 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
|
384 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
|
385 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
|
386 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
|
387 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
|
388 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
|
389 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
|
390 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
|
391 '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
|
392 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
|
393 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
|
394 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
|
395 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
|
396 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
|
397 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
|
398 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
|
399 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
|
400 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
|
401 'the output line width, into several lines') |
73 | 402 parser.add_option('--sort-output', dest='sort_output', |
403 action='store_true', | |
404 help='generate sorted output (default False)') | |
405 parser.add_option('--sort-by-file', dest='sort_by_file', | |
406 action='store_true', | |
407 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
|
408 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
|
409 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
|
410 help='set report address for msgid') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
411 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
412 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
|
413 no_default_keywords=False, no_location=False, |
73 | 414 omit_header = False, width=76, no_wrap=False, |
415 sort_output=False, sort_by_file=False) | |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
416 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
|
417 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
|
418 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
|
419 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
420 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
|
421 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
|
422 else: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
423 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
|
424 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
425 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
|
426 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
|
427 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
|
428 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
|
429 '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
|
430 keywords = {} |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
431 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
|
432 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
|
433 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
434 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
|
435 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
|
436 try: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
437 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
|
438 finally: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
439 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
|
440 else: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
441 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
|
442 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
|
443 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 options.width = 0 |
73 | 450 |
451 if options.sort_output and options.sort_by_file: | |
452 parser.error("'--sort-output' and '--sort-by-file' are mutually " | |
453 "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
|
454 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
455 try: |
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
|
456 catalog = Catalog(msgid_bugs_address=options.msgid_bugs_address) |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
457 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
|
458 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
|
459 parser.error('%r is not a directory' % dirname) |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
460 extracted = extract_from_dir(dirname, method_map, 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
|
461 keywords) |
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
|
462 for filename, lineno, message 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
|
463 filepath = os.path.normpath(os.path.join(dirname, filename)) |
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
|
464 catalog.add(message, None, [(filepath, lineno)]) |
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
|
465 |
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
|
466 write_pot(outfile, catalog, width=options.width, |
56
27d55a07c897
Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents:
54
diff
changeset
|
467 charset=options.charset, no_location=options.no_location, |
73 | 468 omit_header=options.omit_header, |
469 sort_output=options.sort_output, | |
470 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
|
471 finally: |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
472 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
|
473 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
|
474 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
475 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
|
476 """Subcommand for creating new message catalogs from a template. |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
477 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
478 :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
|
479 """ |
68
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
480 parser = OptionParser(usage=self.usage % ('init',''), |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
481 description=self.command_descriptions['init']) |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
482 parser.add_option('--domain', '-D', dest='domain', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
483 help="domain of PO file (defaults to lower-cased " |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
484 "project name)") |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
485 parser.add_option('--input-file', '-i', dest='input_file', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
486 help='name of the input file') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
487 parser.add_option('--output-dir', '-d', dest='output_dir', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
488 help='path to output directory') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
489 parser.add_option('--output-file', '-o', dest='output_file', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
490 help="name of the output file (default " |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
491 "'<output_dir>/<locale>/<domain>.po')") |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
492 parser.add_option('--locale', '-l', dest='locale', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
493 help='locale for the new localized catalog') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
494 parser.add_option('--first-author', dest='first_author', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
495 metavar='FIRST_AUTHOR_NAME', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
496 help='name of first author') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
497 parser.add_option('--first-author-email', dest='first_author_email', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
498 help='email of first author') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
499 parser.add_option('--project-name', dest='project_name', metavar='NAME', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
500 default='PROJECT', help='the project name') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
501 parser.add_option('--project-version', dest='project_version', |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
502 metavar='VERSION', help='the project version') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
503 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
504 options, args = parser.parse_args(argv) |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
505 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
506 if not options.project_name: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
507 parser.error('please provide the project name') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
508 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
509 if not options.project_version: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
510 parser.error('please provide the project version') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
511 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
512 if not options.input_file: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
513 parser.error('you must specify the input file') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
514 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
515 if not options.domain: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
516 options.domain = options.project_name.lower() |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
517 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
518 if not options.locale: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
519 parser.error('you must provide a locale for the new catalog') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
520 else: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
521 try: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
522 _locale = Locale.parse(options.locale) |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
523 except UnknownLocaleError, error: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
524 parser.error(error) |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
525 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
526 if _locale.territory.lower() == _locale.language: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
527 # Remove country part if equal to language |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
528 # XXX: This might not be the best behaviour, investigate |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
529 options.locale = _locale.language |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
530 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
531 if not options.output_file and not options.output_dir: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
532 parser.error('you must specify the output directory') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
533 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
534 if not options.output_file and options.output_dir: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
535 options.output_file = os.path.join(options.output_dir, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
536 options.locale, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
537 options.domain + '.po') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
538 if not os.path.exists(os.path.dirname(options.output_file)): |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
539 os.makedirs(os.path.dirname(options.output_file)) |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
540 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
541 outfile = open(options.output_file, 'w') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
542 infile = open(options.input_file, 'r') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
543 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
544 if PLURALS.has_key(str(_locale)): |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
545 # Try <language>_<COUNTRY> if passed by user |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
546 plurals = PLURALS[str(_locale)] |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
547 elif PLURALS.has_key(_locale.language): |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
548 # Try <language> |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
549 plurals = PLURALS[_locale.language] |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
550 else: |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
551 plurals = ('INTEGER', 'EXPRESSION') |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
552 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
553 print 'Creating %s %r PO from %r PO template' % (_locale.english_name, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
554 options.output_file, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
555 options.input_file) |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
556 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
557 write_po(outfile, infile, _locale, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
558 project=options.project_name, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
559 version=options.project_version, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
560 plurals=plurals, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
561 first_author=options.first_author, |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
562 first_author_email=options.first_author_email) |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
563 |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
564 infile.close() |
22e30e5a6736
Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents:
65
diff
changeset
|
565 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
|
566 |
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
567 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
|
568 CommandLineInterface().run(sys.argv) |
3 | 569 |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
570 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
|
571 """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
|
572 |
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
|
573 >>> 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
|
574 ... # Python source files |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
575 ... [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
|
576 ... |
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
|
577 ... # Genshi templates |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
578 ... [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
|
579 ... include_attrs = |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
580 ... [genshi: **/templates/**.txt] |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
581 ... template_class = genshi.template.text.TextTemplate |
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
582 ... 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
|
583 ... ''') |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
584 |
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
|
585 >>> 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
|
586 |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
587 >>> method_map[0] |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
588 ('**.py', 'python') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
589 >>> 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
|
590 {} |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
591 >>> method_map[1] |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
592 ('**/templates/**.html', 'genshi') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
593 >>> 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
|
594 '' |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
595 >>> method_map[2] |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
596 ('**/templates/**.txt', 'genshi') |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
597 >>> options_map['**/templates/**.txt']['template_class'] |
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
|
598 'genshi.template.text.TextTemplate' |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
599 >>> 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
|
600 '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
|
601 |
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
|
602 :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
|
603 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
|
604 :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
|
605 :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
|
606 :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
|
607 """ |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
608 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
|
609 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
|
610 |
50
b6497cfd06d6
Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents:
49
diff
changeset
|
611 parser = RawConfigParser() |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
61
diff
changeset
|
612 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
|
613 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
|
614 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
|
615 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
|
616 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
|
617 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
|
618 |
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
|
619 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
|
620 |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
621 def parse_keywords(strings=[]): |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
622 """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
|
623 |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
624 >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3']) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
625 >>> for keyword, indices in sorted(kw.items()): |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
626 ... print (keyword, indices) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
627 ('_', None) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
628 ('dgettext', (2,)) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
629 ('dngettext', (2, 3)) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
630 """ |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
631 keywords = {} |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
632 for string in strings: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
633 if ':' in string: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
634 funcname, indices = string.split(':') |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
635 else: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
636 funcname, indices = string, None |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
637 if funcname not in keywords: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
638 if indices: |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
639 indices = tuple([(int(x)) for x in indices.split(',')]) |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
640 keywords[funcname] = indices |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
641 return keywords |
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
12
diff
changeset
|
642 |
54
cc3c6cfe909d
Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents:
53
diff
changeset
|
643 |
3 | 644 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
|
645 main() |