Ejemplo n.º 1
0
 def find_files(self, root):
     """
     Get all files in the given root. Also check that there is a matching
     locale dir for each file.
     """
     all_files = []
     ignored_roots = []
     if self.settings_available:
         ignored_roots = [os.path.normpath(p) for p in (settings.MEDIA_ROOT, settings.STATIC_ROOT) if p]
     for dirpath, dirnames, filenames in os.walk(root, topdown=True, followlinks=self.symlinks):
         for dirname in dirnames[:]:
             if (is_ignored_path(os.path.normpath(os.path.join(dirpath, dirname)), self.ignore_patterns) or
                     os.path.join(os.path.abspath(dirpath), dirname) in ignored_roots):
                 dirnames.remove(dirname)
                 if self.verbosity > 1:
                     self.stdout.write('ignoring directory %s\n' % dirname)
             elif dirname == 'locale':
                 dirnames.remove(dirname)
                 self.locale_paths.insert(0, os.path.join(os.path.abspath(dirpath), dirname))
         for filename in filenames:
             file_path = os.path.normpath(os.path.join(dirpath, filename))
             file_ext = os.path.splitext(filename)[1]
             if file_ext not in self.extensions or is_ignored_path(file_path, self.ignore_patterns):
                 if self.verbosity > 1:
                     self.stdout.write('ignoring file %s in %s\n' % (filename, dirpath))
             else:
                 locale_dir = None
                 for path in self.locale_paths:
                     if os.path.abspath(dirpath).startswith(os.path.dirname(path)):
                         locale_dir = path
                         break
                 locale_dir = locale_dir or self.default_locale_path or NO_LOCALE_DIR
                 all_files.append(self.translatable_file_class(dirpath, filename, locale_dir))
     return sorted(all_files)
Ejemplo n.º 2
0
 def test_is_ignored_path_false(self):
     self.assertIs(
         is_ignored_path(
             "foo/bar/baz",
             ignore_patterns=["foo/bar/bat", "bar", "flub/blub"]),
         False,
     )
Ejemplo n.º 3
0
    def handle(self, **options):
        locale = options['locale']
        exclude = options['exclude']
        ignore_patterns = set(options['ignore_patterns'])
        self.verbosity = options['verbosity']
        if options['fuzzy']:
            self.program_options = self.program_options + ['-f']

        if find_command(self.program) is None:
            raise CommandError("Can't find %s. Make sure you have GNU gettext "
                               "tools 0.15 or newer installed." % self.program)

        basedirs = [os.path.join('conf', 'locale'), 'locale']
        if os.environ.get('DJANGO_SETTINGS_MODULE'):
            from django.conf import settings
            basedirs.extend(settings.LOCALE_PATHS)

        # Walk entire tree, looking for locale directories
        for dirpath, dirnames, filenames in os.walk('.', topdown=True):
            for dirname in dirnames:
                if is_ignored_path(os.path.normpath(os.path.join(dirpath, dirname)), ignore_patterns):
                    dirnames.remove(dirname)
                elif dirname == 'locale':
                    basedirs.append(os.path.join(dirpath, dirname))

        # Gather existing directories.
        basedirs = set(map(os.path.abspath, filter(os.path.isdir, basedirs)))

        if not basedirs:
            raise CommandError("This script should be run from the Django Git "
                               "checkout or your project or app tree, or with "
                               "the settings module specified.")

        # Build locale list
        all_locales = []
        for basedir in basedirs:
            locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % basedir))
            all_locales.extend(map(os.path.basename, locale_dirs))

        # Account for excluded locales
        locales = locale or all_locales
        locales = set(locales).difference(exclude)

        self.has_errors = False
        for basedir in basedirs:
            if locales:
                dirs = [os.path.join(basedir, l, 'LC_MESSAGES') for l in locales]
            else:
                dirs = [basedir]
            locations = []
            for ldir in dirs:
                for dirpath, dirnames, filenames in os.walk(ldir):
                    locations.extend((dirpath, f) for f in filenames if f.endswith('.po'))
            if locations:
                self.compile_messages(locations)

        if self.has_errors:
            raise CommandError('compilemessages generated one or more errors.')
Ejemplo n.º 4
0
 def test_is_ignored_path_true(self):
     patterns = (
         ['foo/bar/baz'],
         ['baz'],
         ['foo/bar/baz'],
         ['*/baz'],
         ['*'],
         ['b?z'],
         ['[abc]az'],
         ['*/ba[!z]/baz'],
     )
     for ignore_patterns in patterns:
         with self.subTest(ignore_patterns=ignore_patterns):
             self.assertIs(is_ignored_path('foo/bar/baz', ignore_patterns=ignore_patterns), True)
Ejemplo n.º 5
0
 def test_is_ignored_path_true(self):
     patterns = (
         ['foo/bar/baz'],
         ['baz'],
         ['foo/bar/baz'],
         ['*/baz'],
         ['*'],
         ['b?z'],
         ['[abc]az'],
         ['*/ba[!z]/baz'],
     )
     for ignore_patterns in patterns:
         with self.subTest(ignore_patterns=ignore_patterns):
             self.assertIs(is_ignored_path('foo/bar/baz', ignore_patterns=ignore_patterns), True)
Ejemplo n.º 6
0
 def test_is_ignored_path_true(self):
     patterns = (
         ["foo/bar/baz"],
         ["baz"],
         ["foo/bar/baz"],
         ["*/baz"],
         ["*"],
         ["b?z"],
         ["[abc]az"],
         ["*/ba[!z]/baz"],
     )
     for ignore_patterns in patterns:
         with self.subTest(ignore_patterns=ignore_patterns):
             self.assertIs(
                 is_ignored_path("foo/bar/baz",
                                 ignore_patterns=ignore_patterns),
                 True,
             )
Ejemplo n.º 7
0
 def test_is_ignored_path_false(self):
     self.assertIs(is_ignored_path('foo/bar/baz', ignore_patterns=['foo/bar/bat', 'bar', 'flub/blub']), False)
Ejemplo n.º 8
0
 def test_is_ignored_path_false(self):
     self.assertIs(is_ignored_path('foo/bar/baz', ignore_patterns=['foo/bar/bat', 'bar', 'flub/blub']), False)