annotate babel/messages/frontend.py @ 104:22f222e23b86

Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
author cmlenz
date Wed, 13 Jun 2007 23:02:24 +0000
parents 7cdf89eb9007
children f744dd56573d
rev   line source
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
1 #!/usr/bin/env python
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
2 # -*- coding: utf-8 -*-
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
3 #
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2007 Edgewall Software
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
5 # All rights reserved.
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
6 #
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
7 # This software is licensed as described in the file COPYING, which
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
8 # you should have received as part of this distribution. The terms
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
9 # are also available at http://babel.edgewall.org/wiki/License.
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
10 #
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
11 # This software consists of voluntary contributions made by many
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
12 # individuals. For the exact contribution history, see the revision
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
13 # history and logs, available at http://babel.edgewall.org/log/.
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
14
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
15 """Frontends for the message extraction functionality."""
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
16
48
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
17 from ConfigParser import RawConfigParser
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
18 from datetime import datetime
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
19 from distutils import log
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
20 from distutils.cmd import Command
49
daf35e2ad044 Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents: 48
diff changeset
21 from distutils.errors import DistutilsOptionError, DistutilsSetupError
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
22 from optparse import OptionParser
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
23 import os
47
76381d4b3635 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: 24
diff changeset
24 import re
49
daf35e2ad044 Support a `message_extractors` keyword argument directly in `setup()`. Closes #4.
cmlenz
parents: 48
diff changeset
25 from StringIO import StringIO
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
26 import sys
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
27
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
28 from babel import __version__ as VERSION
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
29 from babel import Locale
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
30 from babel.core import UnknownLocaleError
56
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 55
diff changeset
31 from babel.messages.catalog import Catalog
54
b3395b285104 Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents: 52
diff changeset
32 from babel.messages.extract import extract_from_dir, DEFAULT_KEYWORDS, \
b3395b285104 Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents: 52
diff changeset
33 DEFAULT_MAPPING
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
34 from babel.messages.pofile import read_po, write_po
54
b3395b285104 Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents: 52
diff changeset
35 from babel.messages.plurals import PLURALS
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
36 from babel.util import odict, LOCALTZ
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
37
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
38 __all__ = ['CommandLineInterface', 'extract_messages',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
39 'check_message_extractors', 'main']
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
40 __docformat__ = 'restructuredtext en'
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
41
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
42
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
43 class extract_messages(Command):
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
44 """Message extraction command for use in ``setup.py`` scripts.
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
45
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
46 If correctly installed, this command is available to Setuptools-using
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
47 setup scripts automatically. For projects using plain old ``distutils``,
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
48 the command needs to be registered explicitly in ``setup.py``::
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
49
54
b3395b285104 Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents: 52
diff changeset
50 from babel.messages.frontend import extract_messages
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
51
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
52 setup(
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
53 ...
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
54 cmdclass = {'extract_messages': extract_messages}
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
55 )
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
56
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
57 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
58 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
59 """
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
60
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
61 description = 'extract localizable strings from the project code'
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
62 user_options = [
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
63 ('charset=', None,
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
64 'charset to use in the output file'),
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
65 ('keywords=', 'k',
10
b24987f7318d 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: 7
diff changeset
66 'space-separated list of keywords to look for in addition to the '
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
67 'defaults'),
10
b24987f7318d 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: 7
diff changeset
68 ('no-default-keywords', None,
12
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
69 'do not include the default keywords'),
47
76381d4b3635 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: 24
diff changeset
70 ('mapping-file=', 'F',
76381d4b3635 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: 24
diff changeset
71 'path to the mapping configuration file'),
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
72 ('no-location', None,
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
73 'do not include location comments with filename and line number'),
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
74 ('omit-header', None,
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
75 'do not include msgid "" entry in header'),
5
50ad95bee876 * The creation-date header in generated PO files now includes the timezone offset.
cmlenz
parents: 1
diff changeset
76 ('output-file=', 'o',
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
77 'name of the output file'),
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
78 ('width=', 'w',
24
4fad20ab7cca 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: 23
diff changeset
79 'set output line width (default 76)'),
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
80 ('no-wrap', None,
24
4fad20ab7cca 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: 23
diff changeset
81 'do not break long message lines, longer than the output line width, '
58
dcd8ceccf416 Fix typo in [58].
cmlenz
parents: 57
diff changeset
82 'into several lines'),
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
83 ('sort-output', None,
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
84 'generate sorted output (default False)'),
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
85 ('sort-by-file', None,
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
86 'sort output by file location (default False)'),
78
ee043bb666f0 Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents: 71
diff changeset
87 ('msgid-bugs-address=', None,
ee043bb666f0 Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents: 71
diff changeset
88 'set report address for msgid'),
79
9a05230571f8 Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents: 78
diff changeset
89 ('copyright-holder=', None,
9a05230571f8 Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents: 78
diff changeset
90 'set copyright holder in output'),
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
91 ('add-comments=', 'c',
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
92 'place comment block with TAG (or those preceding keyword lines) in '
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
93 'output file. Seperate multiple TAGs with commas(,)'),
59
5b5d35117a73 Fix 2nd typo of [58].
palgarvio
parents: 58
diff changeset
94 ('input-dirs=', None,
57
a6183d300a6e * 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: 56
diff changeset
95 'directories that should be scanned for messages'),
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
96 ]
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
97 boolean_options = [
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
98 'no-default-keywords', 'no-location', 'omit-header', 'no-wrap',
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
99 'sort-output', 'sort-by-file'
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
100 ]
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
101
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
102 def initialize_options(self):
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
103 self.charset = 'utf-8'
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
104 self.keywords = self._keywords = DEFAULT_KEYWORDS.copy()
12
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
105 self.no_default_keywords = False
47
76381d4b3635 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: 24
diff changeset
106 self.mapping_file = None
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
107 self.no_location = False
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
108 self.omit_header = False
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
109 self.output_file = None
57
a6183d300a6e * 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: 56
diff changeset
110 self.input_dirs = None
47
76381d4b3635 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: 24
diff changeset
111 self.width = 76
76381d4b3635 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: 24
diff changeset
112 self.no_wrap = False
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
113 self.sort_output = False
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
114 self.sort_by_file = False
78
ee043bb666f0 Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents: 71
diff changeset
115 self.msgid_bugs_address = None
79
9a05230571f8 Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents: 78
diff changeset
116 self.copyright_holder = None
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
117 self.add_comments = None
95
008cd3f7d485 Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 90
diff changeset
118 self._add_comments = []
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
119
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
120 def finalize_options(self):
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
121 if self.no_default_keywords and not self.keywords:
24
4fad20ab7cca 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: 23
diff changeset
122 raise DistutilsOptionError('you must specify new keywords if you '
4fad20ab7cca 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: 23
diff changeset
123 'disable the default ones')
12
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
124 if self.no_default_keywords:
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
125 self._keywords = {}
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
126 if isinstance(self.keywords, basestring):
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
127 self._keywords.update(parse_keywords(self.keywords.split()))
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
128 self.keywords = self._keywords
24
4fad20ab7cca 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: 23
diff changeset
129
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
130 if self.no_wrap and self.width:
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
131 raise DistutilsOptionError("'--no-wrap' and '--width' are mutually "
24
4fad20ab7cca 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: 23
diff changeset
132 "exclusive")
4fad20ab7cca 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: 23
diff changeset
133 if self.no_wrap:
4fad20ab7cca 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: 23
diff changeset
134 self.width = None
4fad20ab7cca 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: 23
diff changeset
135 else:
23
bd45ff425485 Added line-wrap support for `write_po`.
palgarvio
parents: 12
diff changeset
136 self.width = int(self.width)
95
008cd3f7d485 Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 90
diff changeset
137
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
138 if self.sort_output and self.sort_by_file:
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
139 raise DistutilsOptionError("'--sort-output' and '--sort-by-file' "
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
140 "are mutually exclusive")
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
141
57
a6183d300a6e * 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: 56
diff changeset
142 if not self.input_dirs:
a6183d300a6e * 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: 56
diff changeset
143 self.input_dirs = dict.fromkeys([k.split('.',1)[0]
a6183d300a6e * 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: 56
diff changeset
144 for k in self.distribution.packages
a6183d300a6e * 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: 56
diff changeset
145 ]).keys()
95
008cd3f7d485 Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 90
diff changeset
146
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
147 if self.add_comments:
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
148 self._add_comments = self.add_comments.split(',')
57
a6183d300a6e * 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: 56
diff changeset
149
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
150 def run(self):
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
151 mappings = self._get_mappings()
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
152 outfile = open(self.output_file, 'w')
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
153 try:
102
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
154 catalog = Catalog(project=self.distribution.get_name(),
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
155 version=self.distribution.get_version(),
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
156 msgid_bugs_address=self.msgid_bugs_address,
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
157 charset=self.charset)
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
158
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
159 for dirname, (method_map, options_map) in mappings.items():
57
a6183d300a6e * 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: 56
diff changeset
160 def callback(filename, method, options):
a6183d300a6e * 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: 56
diff changeset
161 if method == 'ignore':
a6183d300a6e * 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: 56
diff changeset
162 return
a6183d300a6e * 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: 56
diff changeset
163 filepath = os.path.normpath(os.path.join(dirname, filename))
a6183d300a6e * 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: 56
diff changeset
164 optstr = ''
a6183d300a6e * 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: 56
diff changeset
165 if options:
a6183d300a6e * 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: 56
diff changeset
166 optstr = ' (%s)' % ', '.join(['%s="%s"' % (k, v) for
a6183d300a6e * 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: 56
diff changeset
167 k, v in options.items()])
a6183d300a6e * 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: 56
diff changeset
168 log.info('extracting messages from %s%s'
a6183d300a6e * 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: 56
diff changeset
169 % (filepath, optstr))
47
76381d4b3635 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: 24
diff changeset
170
57
a6183d300a6e * 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: 56
diff changeset
171 extracted = extract_from_dir(dirname, method_map, options_map,
a6183d300a6e * 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: 56
diff changeset
172 keywords=self.keywords,
84
4ff9cc26c11b Some cosmetic changes for the new translator comments support.
cmlenz
parents: 80
diff changeset
173 comment_tags=self._add_comments,
57
a6183d300a6e * 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: 56
diff changeset
174 callback=callback)
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
175 for filename, lineno, message, comments in extracted:
57
a6183d300a6e * 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: 56
diff changeset
176 filepath = os.path.normpath(os.path.join(dirname, filename))
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
177 catalog.add(message, None, [(filepath, lineno)],
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
178 comments=comments)
24
4fad20ab7cca 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: 23
diff changeset
179
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
180 log.info('writing PO template file to %s' % self.output_file)
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
181 write_po(outfile, catalog, width=self.width,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
182 no_location=self.no_location,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
183 omit_header=self.omit_header,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
184 sort_output=self.sort_output,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
185 sort_by_file=self.sort_by_file,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
186 copyright_holder=self.copyright_holder)
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
187 finally:
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
188 outfile.close()
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
189
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
190 def _get_mappings(self):
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
191 mappings = {}
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
192
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
193 if self.mapping_file:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
194 fileobj = open(self.mapping_file, 'U')
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
195 try:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
196 method_map, options_map = parse_mapping(fileobj)
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
197 for dirname in self.input_dirs:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
198 mappings[dirname] = method_map, options_map
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
199 finally:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
200 fileobj.close()
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
201
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
202 elif self.distribution.message_extractors:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
203 message_extractors = self.distribution.message_extractors
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
204 for dirname, mapping in message_extractors.items():
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
205 if isinstance(mapping, basestring):
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
206 method_map, options_map = parse_mapping(StringIO(mapping))
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
207 else:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
208 method_map, options_map = [], {}
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
209 for pattern, method, options in mapping:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
210 method_map.append((pattern, method))
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
211 options_map[pattern] = options or {}
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
212 mappings[dirname] = method_map, options_map
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
213
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
214 else:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
215 for dirname in self.input_dirs:
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
216 mappings[dirname] = DEFAULT_MAPPING, {}
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
217
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
218 return mappings
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
219
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
220
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
221 def check_message_extractors(dist, name, value):
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
222 """Validate the ``message_extractors`` keyword argument to ``setup()``.
47
76381d4b3635 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: 24
diff changeset
223
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
224 :param dist: the distutils/setuptools ``Distribution`` object
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
225 :param name: the name of the keyword argument (should always be
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
226 "message_extractors")
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
227 :param value: the value of the keyword argument
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
228 :raise `DistutilsSetupError`: if the value is not valid
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
229 :see: `Adding setup() arguments
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
230 <http://peak.telecommunity.com/DevCenter/setuptools#adding-setup-arguments>`_
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
231 """
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
232 assert name == 'message_extractors'
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
233 if not isinstance(value, dict):
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
234 raise DistutilsSetupError('the value of the "message_extractors" '
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
235 'parameter must be a dictionary')
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
236
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
237
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
238 class new_catalog(Command):
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
239 """New catalog command for use in ``setup.py`` scripts.
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
240
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
241 If correctly installed, this command is available to Setuptools-using
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
242 setup scripts automatically. For projects using plain old ``distutils``,
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
243 the command needs to be registered explicitly in ``setup.py``::
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
244
54
b3395b285104 Rename the `babel.catalog` package to `babel.messages` for consistency with the other package names.
cmlenz
parents: 52
diff changeset
245 from babel.messages.frontend import new_catalog
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
246
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
247 setup(
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
248 ...
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
249 cmdclass = {'new_catalog': new_catalog}
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
250 )
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
251
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
252 :see: `Integrating new distutils commands <http://docs.python.org/dist/node32.html>`_
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
253 :see: `setuptools <http://peak.telecommunity.com/DevCenter/setuptools>`_
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
254 """
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
255
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
256 description = 'create new catalogs based on a catalog template'
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
257 user_options = [
55
c3291ad6b010 `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: 54
diff changeset
258 ('domain=', 'D',
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
259 "domain of PO file (default 'messages')"),
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
260 ('input-file=', 'i',
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
261 'name of the input file'),
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
262 ('output-dir=', 'd',
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
263 'path to output directory'),
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
264 ('output-file=', 'o',
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
265 "name of the output file (default "
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
266 "'<output_dir>/<locale>/LC_MESSAGES/<domain>.po')"),
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
267 ('locale=', 'l',
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
268 'locale for the new localized catalog'),
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
269 ]
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
270
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
271 def initialize_options(self):
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
272 self.output_dir = None
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
273 self.output_file = None
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
274 self.input_file = None
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
275 self.locale = None
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
276 self.domain = 'messages'
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
277
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
278 def finalize_options(self):
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
279 if not self.input_file:
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
280 raise DistutilsOptionError('you must specify the input file')
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
281
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
282 if not self.locale:
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
283 raise DistutilsOptionError('you must provide a locale for the '
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
284 'new catalog')
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
285 try:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
286 self._locale = Locale.parse(self.locale)
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
287 except UnknownLocaleError, e:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
288 raise DistutilsOptionError(e)
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
289
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
290 if not self.output_file and not self.output_dir:
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
291 raise DistutilsOptionError('you must specify the output directory')
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
292 if not self.output_file:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
293 self.output_file = os.path.join(self.output_dir, self.locale,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
294 'LC_MESSAGES', self.domain + '.po')
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
295
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
296 if not os.path.exists(os.path.dirname(self.output_file)):
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
297 os.makedirs(os.path.dirname(self.output_file))
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
298
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
299 def run(self):
90
e43bb7dc7eec Some doc improvements on distutils integration.
cmlenz
parents: 88
diff changeset
300 log.info('creating catalog %r based on %r', self.output_file,
55
c3291ad6b010 `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: 54
diff changeset
301 self.input_file)
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
302
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
303 infile = open(self.input_file, 'r')
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
304 try:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
305 catalog = read_po(infile)
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
306 finally:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
307 infile.close()
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
308
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
309 catalog.locale = self._locale
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
310 catalog.revision_date = datetime.now()
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
311
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
312 outfile = open(self.output_file, 'w')
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
313 try:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
314 write_po(outfile, catalog)
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
315 finally:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
316 outfile.close()
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
317
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
318
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
319 class CommandLineInterface(object):
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
320 """Command-line interface.
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
321
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
322 This class provides a simple command-line interface to the message
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
323 extraction and PO file generation functionality.
51
7f61453c1bea Fixed a bug regarding plural msgid's handling when writing the `.pot` file.
palgarvio
parents: 49
diff changeset
324 """
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
325
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
326 usage = '%%prog %s [options] %s'
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
327 version = '%%prog %s' % VERSION
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
328 commands = ['extract', 'init']
63
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
329 command_descriptions = {
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
330 'extract': 'extract messages from source files and generate a POT file',
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
331 'init': 'create new message catalogs from a template'
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
332 }
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
333
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
334 def run(self, argv=sys.argv):
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
335 """Main entry point of the command-line interface.
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
336
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
337 :param argv: list of arguments passed on the command-line
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
338 """
63
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
339 self.parser = OptionParser(usage=self.usage % ('subcommand', '[args]'),
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
340 version=self.version)
63
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
341 self.parser.disable_interspersed_args()
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
342 self.parser.print_help = self._help
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
343 options, args = self.parser.parse_args(argv[1:])
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
344 if not args:
63
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
345 self.parser.error('incorrect number of arguments')
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
346
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
347 cmdname = args[0]
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
348 if cmdname not in self.commands:
63
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
349 self.parser.error('unknown subcommand "%s"' % cmdname)
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
350
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
351 getattr(self, cmdname)(args[1:])
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
352
63
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
353 def _help(self):
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
354 print self.parser.format_help()
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
355 print "Subcommands:"
63
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
356 longest = max([len(command) for command in self.commands])
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
357 format = " %" + str(longest) + "s %s"
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
358 self.commands.sort()
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
359 for command in self.commands:
ac684a515b72 Added the available commands list to the `--help` output of Babel's binary.
palgarvio
parents: 62
diff changeset
360 print format % (command, self.command_descriptions[command])
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
361
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
362 def extract(self, argv):
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
363 """Subcommand for extracting messages from source files and generating
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
364 a POT file.
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
365
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
366 :param argv: the command arguments
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
367 """
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
368 parser = OptionParser(usage=self.usage % ('extract', 'dir1 <dir2> ...'),
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
369 description=self.command_descriptions['extract'])
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
370 parser.add_option('--charset', dest='charset',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
371 help='charset to use in the output')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
372 parser.add_option('-k', '--keyword', dest='keywords', action='append',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
373 help='keywords to look for in addition to the '
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
374 'defaults. You can specify multiple -k flags on '
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
375 'the command line.')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
376 parser.add_option('--no-default-keywords', dest='no_default_keywords',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
377 action='store_true',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
378 help="do not include the default keywords")
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
379 parser.add_option('--mapping', '-F', dest='mapping_file',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
380 help='path to the extraction mapping file')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
381 parser.add_option('--no-location', dest='no_location',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
382 action='store_true',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
383 help='do not include location comments with filename '
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
384 'and line number')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
385 parser.add_option('--omit-header', dest='omit_header',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
386 action='store_true',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
387 help='do not include msgid "" entry in header')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
388 parser.add_option('-o', '--output', dest='output',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
389 help='path to the output POT file')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
390 parser.add_option('-w', '--width', dest='width', type='int',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
391 help="set output line width (default %default)")
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
392 parser.add_option('--no-wrap', dest='no_wrap', action = 'store_true',
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
393 help='do not break long message lines, longer than '
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
394 'the output line width, into several lines')
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
395 parser.add_option('--sort-output', dest='sort_output',
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
396 action='store_true',
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
397 help='generate sorted output (default False)')
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
398 parser.add_option('--sort-by-file', dest='sort_by_file',
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
399 action='store_true',
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
400 help='sort output by file location (default False)')
78
ee043bb666f0 Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents: 71
diff changeset
401 parser.add_option('--msgid-bugs-address', dest='msgid_bugs_address',
ee043bb666f0 Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents: 71
diff changeset
402 metavar='EMAIL@ADDRESS',
ee043bb666f0 Fixed the plurals header on `Catalog` which should only be written if it's not a catalog template.
palgarvio
parents: 71
diff changeset
403 help='set report address for msgid')
79
9a05230571f8 Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents: 78
diff changeset
404 parser.add_option('--copyright-holder', dest='copyright_holder',
9a05230571f8 Implemented item 4 from #12. Set the copyright holder in the output.
palgarvio
parents: 78
diff changeset
405 help='set copyright holder in output')
95
008cd3f7d485 Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 90
diff changeset
406 parser.add_option('--add-comments', '-c', dest='comment_tags',
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
407 metavar='TAG', action='append',
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
408 help='place comment block with TAG (or those '
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
409 'preceding keyword lines) in output file. One '
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
410 'TAG per argument call')
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
411
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
412 parser.set_defaults(charset='utf-8', keywords=[],
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
413 no_default_keywords=False, no_location=False,
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
414 omit_header = False, width=76, no_wrap=False,
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
415 sort_output=False, sort_by_file=False,
95
008cd3f7d485 Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 90
diff changeset
416 comment_tags=[])
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
417 options, args = parser.parse_args(argv)
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
418 if not args:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
419 parser.error('incorrect number of arguments')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
420
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
421 if options.output not in (None, '-'):
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
422 outfile = open(options.output, 'w')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
423 else:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
424 outfile = sys.stdout
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
425
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
426 keywords = DEFAULT_KEYWORDS.copy()
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
427 if options.no_default_keywords:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
428 if not options.keywords:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
429 parser.error('you must specify new keywords if you disable the '
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
430 'default ones')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
431 keywords = {}
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
432 if options.keywords:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
433 keywords.update(parse_keywords(options.keywords))
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
434
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
435 if options.mapping_file:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
436 fileobj = open(options.mapping_file, 'U')
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
437 try:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
438 method_map, options_map = parse_mapping(fileobj)
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
439 finally:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
440 fileobj.close()
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
441 else:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
442 method_map = DEFAULT_MAPPING
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
443 options_map = {}
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
444
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
445 if options.width and options.no_wrap:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
446 parser.error("'--no-wrap' and '--width' are mutually exclusive.")
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
447 elif not options.width and not options.no_wrap:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
448 options.width = 76
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
449 elif not options.width and options.no_wrap:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
450 options.width = 0
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
451
71
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
452 if options.sort_output and options.sort_by_file:
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
453 parser.error("'--sort-output' and '--sort-by-file' are mutually "
ea4cb904df8f Implemented message sorting, see #7.
palgarvio
parents: 66
diff changeset
454 "exclusive")
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
455
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
456 try:
102
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
457 catalog = Catalog(msgid_bugs_address=options.msgid_bugs_address,
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
458 charset=options.charset)
eb0d9591d555 Project name and version, and the charset are available via the `Catalog` object, and do not need to be passed to `write_pot()`.
cmlenz
parents: 95
diff changeset
459
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
460 for dirname in args:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
461 if not os.path.isdir(dirname):
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
462 parser.error('%r is not a directory' % dirname)
95
008cd3f7d485 Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 90
diff changeset
463 extracted = extract_from_dir(dirname, method_map, options_map,
008cd3f7d485 Fix for #11 (use local timezone in timestamps of generated POT).
cmlenz
parents: 90
diff changeset
464 keywords, options.comment_tags)
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
465 for filename, lineno, message, comments in extracted:
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
466 filepath = os.path.normpath(os.path.join(dirname, filename))
80
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
467 catalog.add(message, None, [(filepath, lineno)],
9c84b9fa5d30 Added support for translator comments at the API and frontends levels.(See #12, item 1). Updated docs and tests accordingly.
palgarvio
parents: 79
diff changeset
468 comments=comments)
56
27fba894d3ca Add actual data structures for handling message catalogs, so that more code can be reused here between the frontends.
cmlenz
parents: 55
diff changeset
469
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
470 write_po(outfile, catalog, width=options.width,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
471 no_location=options.no_location,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
472 omit_header=options.omit_header,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
473 sort_output=options.sort_output,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
474 sort_by_file=options.sort_by_file,
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
475 copyright_holder=options.copyright_holder)
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
476 finally:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
477 if options.output:
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
478 outfile.close()
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
479
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
480 def init(self, argv):
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
481 """Subcommand for creating new message catalogs from a template.
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
482
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
483 :param argv: the command arguments
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
484 """
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
485 parser = OptionParser(usage=self.usage % ('init',''),
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
486 description=self.command_descriptions['init'])
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
487 parser.add_option('--domain', '-D', dest='domain',
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
488 help="domain of PO file (default '%default')")
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
489 parser.add_option('--input-file', '-i', dest='input_file',
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
490 metavar='FILE', help='name of the input file')
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
491 parser.add_option('--output-dir', '-d', dest='output_dir',
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
492 metavar='DIR', help='path to output directory')
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
493 parser.add_option('--output-file', '-o', dest='output_file',
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
494 metavar='FILE',
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
495 help="name of the output file (default "
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
496 "'<output_dir>/<locale>/LC_MESSAGES/"
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
497 "<domain>.po')")
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
498 parser.add_option('--locale', '-l', dest='locale', metavar='LOCALE',
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
499 help='locale for the new localized catalog')
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
500
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
501 parser.set_defaults(domain='messages')
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
502 options, args = parser.parse_args(argv)
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
503
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
504 if not options.locale:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
505 parser.error('you must provide a locale for the new catalog')
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
506 try:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
507 locale = Locale.parse(options.locale)
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
508 except UnknownLocaleError, e:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
509 parser.error(e)
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
510
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
511 if not options.input_file:
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
512 parser.error('you must specify the input file')
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
513
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
514 if not options.output_file and not options.output_dir:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
515 parser.error('you must specify the output file or directory')
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
516
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
517 if not options.output_file:
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
518 options.output_file = os.path.join(options.output_dir,
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
519 options.locale, 'LC_MESSAGES',
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
520 options.domain + '.po')
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
521 if not os.path.exists(os.path.dirname(options.output_file)):
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
522 os.makedirs(os.path.dirname(options.output_file))
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
523
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
524 infile = open(options.input_file, 'r')
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
525 try:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
526 catalog = read_po(infile)
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
527 finally:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
528 infile.close()
87
f259182f9baf Fixed a bug on Catalog. `__setitem__` was not updating the translator comments. Thanks pjenvey!
palgarvio
parents: 86
diff changeset
529
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
530 catalog.locale = locale
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
531 catalog.revision_date = datetime.now()
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
532
90
e43bb7dc7eec Some doc improvements on distutils integration.
cmlenz
parents: 88
diff changeset
533 print 'creating catalog %r based on %r' % (options.output_file,
e43bb7dc7eec Some doc improvements on distutils integration.
cmlenz
parents: 88
diff changeset
534 options.input_file)
66
72e43f6881a9 Implemented the `init` subcommand, aka, `new_catalog` for the distutils/setuptools implmentation.
palgarvio
parents: 63
diff changeset
535
104
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
536 outfile = open(options.output_file, 'w')
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
537 try:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
538 write_po(outfile, catalog)
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
539 finally:
22f222e23b86 Merged `write_pot` and `write_po` functions by moving more functionality to the `Catalog` class. This is certainly not perfect yet, but moves us in the right direction.
cmlenz
parents: 103
diff changeset
540 outfile.close()
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
541
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
542 def main():
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
543 CommandLineInterface().run(sys.argv)
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
544
48
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
545 def parse_mapping(fileobj, filename=None):
47
76381d4b3635 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: 24
diff changeset
546 """Parse an extraction method mapping from a file-like object.
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
547
47
76381d4b3635 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: 24
diff changeset
548 >>> buf = StringIO('''
76381d4b3635 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: 24
diff changeset
549 ... # Python source files
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
550 ... [python: **.py]
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
551 ...
47
76381d4b3635 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: 24
diff changeset
552 ... # Genshi templates
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
553 ... [genshi: **/templates/**.html]
48
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
554 ... include_attrs =
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
555 ... [genshi: **/templates/**.txt]
48
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
556 ... template_class = genshi.template.text.TextTemplate
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
557 ... encoding = latin-1
47
76381d4b3635 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: 24
diff changeset
558 ... ''')
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
559
47
76381d4b3635 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: 24
diff changeset
560 >>> method_map, options_map = parse_mapping(buf)
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
561
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
562 >>> method_map[0]
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
563 ('**.py', 'python')
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
564 >>> options_map['**.py']
47
76381d4b3635 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: 24
diff changeset
565 {}
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
566 >>> method_map[1]
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
567 ('**/templates/**.html', 'genshi')
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
568 >>> options_map['**/templates/**.html']['include_attrs']
47
76381d4b3635 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: 24
diff changeset
569 ''
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
570 >>> method_map[2]
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
571 ('**/templates/**.txt', 'genshi')
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
572 >>> options_map['**/templates/**.txt']['template_class']
47
76381d4b3635 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: 24
diff changeset
573 'genshi.template.text.TextTemplate'
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
574 >>> options_map['**/templates/**.txt']['encoding']
47
76381d4b3635 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: 24
diff changeset
575 'latin-1'
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
576
47
76381d4b3635 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: 24
diff changeset
577 :param fileobj: a readable file-like object containing the configuration
76381d4b3635 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: 24
diff changeset
578 text to parse
76381d4b3635 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: 24
diff changeset
579 :return: a `(method_map, options_map)` tuple
76381d4b3635 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: 24
diff changeset
580 :rtype: `tuple`
76381d4b3635 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: 24
diff changeset
581 :see: `extract_from_directory`
76381d4b3635 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: 24
diff changeset
582 """
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
583 method_map = []
47
76381d4b3635 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: 24
diff changeset
584 options_map = {}
76381d4b3635 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: 24
diff changeset
585
48
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
586 parser = RawConfigParser()
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
587 parser._sections = odict(parser._sections) # We need ordered sections
48
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
588 parser.readfp(fileobj, filename)
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
589 for section in parser.sections():
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
590 method, pattern = [part.strip() for part in section.split(':', 1)]
62
84d400066b71 The order of extraction methods is now preserved (see #10).
cmlenz
parents: 59
diff changeset
591 method_map.append((pattern, method))
48
bd647e3760e0 Move the mapping configuration file format to `ConfigParser`, and add some more documentation about it.
cmlenz
parents: 47
diff changeset
592 options_map[pattern] = dict(parser.items(section))
47
76381d4b3635 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: 24
diff changeset
593
76381d4b3635 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: 24
diff changeset
594 return (method_map, options_map)
76381d4b3635 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: 24
diff changeset
595
12
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
596 def parse_keywords(strings=[]):
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
597 """Parse keywords specifications from the given list of strings.
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
598
12
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
599 >>> kw = parse_keywords(['_', 'dgettext:2', 'dngettext:2,3'])
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
600 >>> for keyword, indices in sorted(kw.items()):
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
601 ... print (keyword, indices)
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
602 ('_', None)
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
603 ('dgettext', (2,))
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
604 ('dngettext', (2, 3))
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
605 """
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
606 keywords = {}
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
607 for string in strings:
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
608 if ':' in string:
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
609 funcname, indices = string.split(':')
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
610 else:
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
611 funcname, indices = string, None
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
612 if funcname not in keywords:
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
613 if indices:
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
614 indices = tuple([(int(x)) for x in indices.split(',')])
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
615 keywords[funcname] = indices
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
616 return keywords
a2c54ef107c2 * Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents: 10
diff changeset
617
52
1e724c305460 Support sub-commands in command-line interface, and renamed the generated script wrapper to `babel`. See #9.
cmlenz
parents: 51
diff changeset
618
1
f71ca60f2a4a Import of initial code base.
cmlenz
parents:
diff changeset
619 if __name__ == '__main__':
55
c3291ad6b010 `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: 54
diff changeset
620 main()
Copyright (C) 2012-2017 Edgewall Software