コード例 #1
0
ファイル: import_project.py プロジェクト: mashanz/weblate
    def handle(self, *args, **options):
        """Automatic import of project."""
        # Read params
        repo = options["repo"]
        branch = options["branch"]
        self.parse_options(repo, options)

        # Try to get project
        try:
            project = Project.objects.get(slug=options["project"])
        except Project.DoesNotExist:
            raise CommandError(
                'Project "{}" not found, please create it first!'.format(
                    options["project"]))

        # Get or create main component
        if is_repo_link(repo):
            try:
                component = Component.objects.get_linked(repo)
                # Avoid operating on link
                if component.is_repo_link:
                    component = component.linked_component
            except Component.DoesNotExist:
                raise CommandError(
                    f'Component "{repo}" not found, please create it first!')
        else:
            component = self.import_initial(project, repo, branch)

        discovery = self.get_discovery(component)
        discovery.perform()
コード例 #2
0
    def handle(self, *args, **options):
        '''
        Automatic import of project.
        '''
        # Read params
        repo = options['repo']
        branch = options['branch']
        self.parse_options(options)

        # Try to get project
        try:
            project = Project.objects.get(slug=options['project'])
        except Project.DoesNotExist:
            raise CommandError(
                'Project %s does not exist, you need to create it first!' %
                options['project'])

        if is_repo_link(repo):
            sharedrepo = repo
            try:
                sub_project = SubProject.objects.get_linked(repo)
            except SubProject.DoesNotExist:
                raise CommandError('SubProject %s does not exist, '
                                   'you need to create it first!' % repo)
            matches = self.get_matching_subprojects(sub_project.get_path(), )
        else:
            matches, sharedrepo = self.import_initial(project, repo, branch)

        # We need to limit slug length to avoid problems with MySQL
        # silent truncation
        # pylint: disable=W0212
        slug_len = SubProject._meta.get_field('slug').max_length

        # Create remaining subprojects sharing git repository
        for match in matches:
            name = self.format_string(self.name_template, match)
            template = self.format_string(self.base_file_template, match)
            slug = slugify(name)[:slug_len]
            subprojects = SubProject.objects.filter(Q(name=name)
                                                    | Q(slug=slug),
                                                    project=project)
            if subprojects.exists():
                if not options['duplicates']:
                    self.logger.warning(
                        'Component %s already exists, skipping', name)
                    continue
                else:
                    name, slug = self.find_usable_slug(name, slug_len, project)

            self.logger.info('Creating component %s', name)
            SubProject.objects.create(name=name,
                                      slug=slug,
                                      project=project,
                                      repo=sharedrepo,
                                      branch=branch,
                                      template=template,
                                      filemask=self.filemask.replace(
                                          '**', match),
                                      **self.get_project_attribs())
コード例 #3
0
 def get_linked(self, val):
     '''
     Returns subproject for linked repo.
     '''
     if not is_repo_link(val):
         return None
     project, subproject = val[10:].split('/', 1)
     return self.get(slug=subproject, project__slug=project)
コード例 #4
0
ファイル: subproject.py プロジェクト: rakesh-mohanta/weblate
 def get_linked(self, val):
     '''
     Returns subproject for linked repo.
     '''
     if not is_repo_link(val):
         return None
     project, subproject = val[10:].split('/', 1)
     return self.get(slug=subproject, project__slug=project)
コード例 #5
0
ファイル: subproject.py プロジェクト: miumok98/weblate
 def get_linked(self, val):
     """
     Returns subproject for linked repo.
     """
     if not is_repo_link(val):
         return None
     project, subproject = val[10:].split("/", 1)
     return self.get(slug=subproject, project__slug=project)
コード例 #6
0
ファイル: import_project.py プロジェクト: daleathan/weblate
    def handle(self, *args, **options):
        """Automatic import of project."""
        # Read params
        repo = options['repo']
        branch = options['branch']
        self.parse_options(repo, options)

        # Try to get project
        try:
            project = Project.objects.get(slug=options['project'])
        except Project.DoesNotExist:
            raise CommandError(
                'Project "{0}" not found, please create it first!'.format(
                    options['project']
                )
            )

        # Get or create main component
        if is_repo_link(repo):
            try:
                component = Component.objects.get_linked(repo)
                # Avoid operating on link
                if component.is_repo_link:
                    component = component.linked_component
            except Component.DoesNotExist:
                raise CommandError(
                    'Component "{0}" not found, '
                    'please create it first!'.format(
                        repo
                    )
                )
        else:
            component = self.import_initial(project, repo, branch)

        discovery = self.get_discovery(component)
        discovery.perform()
コード例 #7
0
 def is_repo_link(self):
     '''
     Checks whether repository is just a link for other one.
     '''
     return is_repo_link(self.repo)
コード例 #8
0
ファイル: import_project.py プロジェクト: saily/weblate
    def handle(self, *args, **options):
        """Automatic import of project."""
        # Read params
        repo = options['repo']
        branch = options['branch']
        self.parse_options(options)

        # Try to get project
        try:
            project = Project.objects.get(slug=options['project'])
        except Project.DoesNotExist:
            raise CommandError(
                'Project {0} not found, you have to create it first!'.format(
                    options['project']
                )
            )

        # We need to limit slug length to avoid problems with MySQL
        # silent truncation
        # pylint: disable=W0212
        slug_len = SubProject._meta.get_field('slug').max_length
        name_len = SubProject._meta.get_field('name').max_length

        if is_repo_link(repo):
            sharedrepo = repo
            try:
                sub_project = SubProject.objects.get_linked(repo)
            except SubProject.DoesNotExist:
                raise CommandError(
                    'SubProject {0} not found, '
                    'you need to create it first!'.format(
                        repo
                    )
                )
            matches = self.get_matching_subprojects(
                sub_project.get_path(),
            )
        else:
            matches, sharedrepo = self.import_initial(
                project, repo, branch, slug_len, name_len
            )

        # Create remaining subprojects sharing git repository
        for match in matches:
            name = self.format_string(self.name_template, match)[:name_len]
            template = self.format_string(self.base_file_template, match)
            slug = slugify(name)[:slug_len]
            subprojects = SubProject.objects.filter(
                Q(name=name) | Q(slug=slug),
                project=project
            )
            if subprojects.exists():
                if not options['duplicates']:
                    self.logger.warning(
                        'Component %s already exists, skipping',
                        name
                    )
                    continue
                else:
                    name, slug = self.find_usable_slug(
                        name, slug_len, project
                    )

            self.logger.info('Creating component %s', name)
            SubProject.objects.create(
                name=name,
                slug=slug,
                project=project,
                repo=sharedrepo,
                branch=branch,
                template=template,
                filemask=self.filemask.replace('**', match),
                **self.get_project_attribs()
            )
コード例 #9
0
ファイル: import_project.py プロジェクト: aplanas/weblate
    def handle(self, *args, **options):
        '''
        Automatic import of project.
        '''
        # Check params count
        if len(args) != 4:
            raise CommandError('Invalid number of parameters!')

        # Read params
        repo = args[1]
        branch = args[2]
        self.parse_options(args, options)

        # Try to get project
        try:
            project = Project.objects.get(slug=args[0])
        except Project.DoesNotExist:
            raise CommandError(
                'Project %s does not exist, you need to create it first!' %
                args[0]
            )

        if is_repo_link(repo):
            sharedrepo = repo
            try:
                sub_project = SubProject.objects.get(
                    project=project,
                    slug=repo.rsplit('/', 1)[-1]
                )
            except SubProject.DoesNotExist:
                raise CommandError(
                    'SubProject %s does not exist, '
                    'you need to create it first!' % repo
                )
            matches = self.get_matching_subprojects(
                sub_project.get_path(),
            )
        else:
            matches, sharedrepo = self.import_initial(project, repo, branch)

        # We need to limit slug length to avoid problems with MySQL
        # silent truncation
        # pylint: disable=W0212
        slug_len = SubProject._meta.get_field('slug').max_length

        # Create remaining subprojects sharing git repository
        for match in matches:
            name = self.format_string(self.name_template, match)
            template = self.format_string(self.base_file_template, match)
            slug = slugify(name)[:slug_len]
            subprojects = SubProject.objects.filter(
                Q(name=name) | Q(slug=slug),
                project=project
            )
            if subprojects.exists():
                if not options['duplicates']:
                    self.logger.warning(
                        'Component %s already exists, skipping',
                        name
                    )
                    continue
                else:
                    name, slug = self.find_usable_slug(
                        name, slug_len, project
                    )

            self.logger.info('Creating component %s', name)
            SubProject.objects.create(
                name=name,
                slug=slug,
                project=project,
                repo=sharedrepo,
                branch=branch,
                template=template,
                filemask=self.filemask.replace('**', match),
                **self.get_project_attribs()
            )
コード例 #10
0
ファイル: import_project.py プロジェクト: blockgiven/weblate
    def handle(self, *args, **options):
        '''
        Automatic import of project.
        '''

        # Check params
        if len(args) != 4:
            raise CommandError('Invalid number of parameters!')

        if options['file_format'] not in FILE_FORMATS:
            raise CommandError(
                'Invalid file format: %s' % options['file_format']
            )

        # Read params
        repo = args[1]
        branch = args[2]
        self.filemask = args[3]
        self.vcs = options['vcs']
        self.file_format = options['file_format']
        self.name_template = options['name_template']
        self.base_file_template = options['base_file_template']

        # Try to get project
        try:
            project = Project.objects.get(slug=args[0])
        except Project.DoesNotExist:
            raise CommandError(
                'Project %s does not exist, you need to create it first!' %
                args[0]
            )

        # Do we have correct mask?
        if '**' not in self.filemask:
            raise CommandError(
                'You need to specify double wildcard '
                'for subproject part of the match!'
            )

        if is_repo_link(repo):
            sharedrepo = repo
            try:
                sub_project = SubProject.objects.get(
                    project=project,
                    slug=repo.rsplit('/', 1)[-1]
                )
            except SubProject.DoesNotExist:
                raise CommandError(
                    'SubProject %s does not exist, '
                    'you need to create it first!' % repo
                )
            matches = self.get_matching_subprojects(
                sub_project.get_path(),
            )
        else:
            matches, sharedrepo = self.import_initial(project, repo, branch)

        # Create remaining subprojects sharing git repository
        for match in matches:
            name = self.format_string(self.name_template, match)
            template = self.format_string(self.base_file_template, match)
            slug = slugify(name)
            subprojects = SubProject.objects.filter(
                Q(name=name) | Q(slug=slug),
                project=project
            )
            if subprojects.exists():
                self.logger.warn(
                    'Component %s already exists, skipping',
                    name
                )
                continue

            self.logger.info('Creating component %s', name)
            SubProject.objects.create(
                name=name,
                slug=slug,
                project=project,
                repo=sharedrepo,
                branch=branch,
                template=template,
                file_format=self.file_format,
                filemask=self.filemask.replace('**', match)
            )
コード例 #11
0
ファイル: subproject.py プロジェクト: rakesh-mohanta/weblate
 def is_repo_link(self):
     '''
     Checks whether repository is just a link for other one.
     '''
     return is_repo_link(self.repo)
コード例 #12
0
ファイル: import_project.py プロジェクト: phylophyl/weblate
    def handle(self, *args, **options):
        '''
        Automatic import of project.
        '''

        # Check params
        if len(args) != 4:
            raise CommandError('Invalid number of parameters!')

        if options['file_format'] not in FILE_FORMATS:
            raise CommandError('Invalid file format: %s' %
                               options['file_format'])

        # Read params
        repo = args[1]
        branch = args[2]
        self.filemask = args[3]
        self.vcs = options['vcs']
        self.file_format = options['file_format']
        self.language_regex = options['language_regex']
        self.main_component = options['main_component']
        self.name_template = options['name_template']
        self.license = options['license']
        self.license_url = options['license_url']
        self.base_file_template = options['base_file_template']
        if options['component_regexp']:
            try:
                self.component_re = re.compile(options['component_regexp'],
                                               re.MULTILINE | re.DOTALL)
            except re.error as error:
                raise CommandError(
                    'Failed to compile regullar expression "{0}": {1}'.format(
                        options['component_regexp'], error))
            if 'name' not in self.component_re.groupindex:
                raise CommandError(
                    'Component regullar expression lacks named group "name"')

        # Try to get project
        try:
            project = Project.objects.get(slug=args[0])
        except Project.DoesNotExist:
            raise CommandError(
                'Project %s does not exist, you need to create it first!' %
                args[0])

        # Do we have correct mask?
        if '**' not in self.filemask:
            raise CommandError('You need to specify double wildcard '
                               'for subproject part of the match!')

        if is_repo_link(repo):
            sharedrepo = repo
            try:
                sub_project = SubProject.objects.get(project=project,
                                                     slug=repo.rsplit('/',
                                                                      1)[-1])
            except SubProject.DoesNotExist:
                raise CommandError('SubProject %s does not exist, '
                                   'you need to create it first!' % repo)
            matches = self.get_matching_subprojects(sub_project.get_path(), )
        else:
            matches, sharedrepo = self.import_initial(project, repo, branch)

        # Create remaining subprojects sharing git repository
        for match in matches:
            name = self.format_string(self.name_template, match)
            template = self.format_string(self.base_file_template, match)
            slug = slugify(name)
            subprojects = SubProject.objects.filter(Q(name=name)
                                                    | Q(slug=slug),
                                                    project=project)
            if subprojects.exists():
                self.logger.warn('Component %s already exists, skipping', name)
                continue

            self.logger.info('Creating component %s', name)
            SubProject.objects.create(name=name,
                                      slug=slug,
                                      project=project,
                                      repo=sharedrepo,
                                      branch=branch,
                                      template=template,
                                      filemask=self.filemask.replace(
                                          '**', match),
                                      **self.get_project_attribs())
コード例 #13
0
    def handle(self, *args, **options):
        '''
        Automatic import of project.
        '''
        if len(args) != 4:
            raise CommandError('Invalid number of parameters!')

        if options['file_format'] not in FILE_FORMATS:
            raise CommandError('Invalid file format: %s' %
                               options['file_format'])

        # Read params, pylint: disable=W0632
        prjname, repo, branch, filemask = args

        # Try to get project
        try:
            project = Project.objects.get(slug=prjname)
        except Project.DoesNotExist:
            raise CommandError(
                'Project %s does not exist, you need to create it first!' %
                prjname)

        # Do we have correct mask?
        if '**' not in filemask:
            raise CommandError('You need to specify double wildcard '
                               'for subproject part of the match!')

        if is_repo_link(repo):
            sharedrepo = repo
            try:
                sub_project = SubProject.objects.get(project=project,
                                                     slug=repo.rsplit('/',
                                                                      1)[-1])
            except SubProject.DoesNotExist:
                raise CommandError('SubProject %s does not exist, '
                                   'you need to create it first!' % repo)
            matches = self.get_matching_subprojects(sub_project.get_path(),
                                                    filemask)
        else:
            matches, sharedrepo = self.import_initial(
                project, repo, branch, filemask, options['name_template'],
                options['file_format'], options['base_file_template'])

        # Create remaining subprojects sharing git repository
        for match in matches:
            name = self.format_string(options['name_template'], match)
            template = self.format_string(options['base_file_template'], match)
            slug = slugify(name)
            subprojects = SubProject.objects.filter(Q(name=name)
                                                    | Q(slug=slug),
                                                    project=project)
            if subprojects.exists():
                weblate.logger.warn('Subproject %s already exists, skipping',
                                    name)
                continue

            weblate.logger.info('Creating subproject %s', name)
            SubProject.objects.create(name=name,
                                      slug=slug,
                                      project=project,
                                      repo=sharedrepo,
                                      branch=branch,
                                      template=template,
                                      file_format=options['file_format'],
                                      filemask=filemask.replace('**', match))
コード例 #14
0
ファイル: subproject.py プロジェクト: miumok98/weblate
 def is_repo_link(self):
     """
     Checks whether repository is just a link for other one.
     """
     return is_repo_link(self.repo)
コード例 #15
0
ファイル: import_project.py プロジェクト: Intrainos/weblate
    def handle(self, *args, **options):
        '''
        Automatic import of project.
        '''

        # Check params
        if len(args) != 4:
            raise CommandError('Invalid number of parameters!')

        if options['file_format'] not in FILE_FORMATS:
            raise CommandError(
                'Invalid file format: %s' % options['file_format']
            )

        # Read params
        repo = args[1]
        branch = args[2]
        self.filemask = args[3]
        self.vcs = options['vcs']
        self.file_format = options['file_format']
        self.language_regex = options['language_regex']
        self.main_component = options['main_component']
        self.name_template = options['name_template']
        self.license = options['license']
        self.license_url = options['license_url']
        self.base_file_template = options['base_file_template']
        if options['component_regexp']:
            try:
                self.component_re = re.compile(
                    options['component_regexp'],
                    re.MULTILINE | re.DOTALL
                )
            except re.error as error:
                raise CommandError(
                    'Failed to compile regullar expression "{0}": {1}'.format(
                        options['component_regexp'], error
                    )
                )
            if 'name' not in self.component_re.groupindex:
                raise CommandError(
                    'Component regullar expression lacks named group "name"'
                )

        # Try to get project
        try:
            project = Project.objects.get(slug=args[0])
        except Project.DoesNotExist:
            raise CommandError(
                'Project %s does not exist, you need to create it first!' %
                args[0]
            )

        # Do we have correct mask?
        if '**' not in self.filemask:
            raise CommandError(
                'You need to specify double wildcard '
                'for subproject part of the match!'
            )

        if is_repo_link(repo):
            sharedrepo = repo
            try:
                sub_project = SubProject.objects.get(
                    project=project,
                    slug=repo.rsplit('/', 1)[-1]
                )
            except SubProject.DoesNotExist:
                raise CommandError(
                    'SubProject %s does not exist, '
                    'you need to create it first!' % repo
                )
            matches = self.get_matching_subprojects(
                sub_project.get_path(),
            )
        else:
            matches, sharedrepo = self.import_initial(project, repo, branch)

        # We need to limit slug length to avoid problems with MySQL
        # silent truncation
        # pylint: disable=W0212
        slug_len = SubProject._meta.get_field('slug').max_length

        # Create remaining subprojects sharing git repository
        for match in matches:
            name = self.format_string(self.name_template, match)
            template = self.format_string(self.base_file_template, match)
            slug = slugify(name)[:slug_len]
            subprojects = SubProject.objects.filter(
                Q(name=name) | Q(slug=slug),
                project=project
            )
            if subprojects.exists():
                self.logger.warning(
                    'Component %s already exists, skipping',
                    name
                )
                continue

            self.logger.info('Creating component %s', name)
            SubProject.objects.create(
                name=name,
                slug=slug,
                project=project,
                repo=sharedrepo,
                branch=branch,
                template=template,
                filemask=self.filemask.replace('**', match),
                **self.get_project_attribs()
            )