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()
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())
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)
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)
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()
def is_repo_link(self): ''' Checks whether repository is just a link for other one. ''' return is_repo_link(self.repo)
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() )
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() )
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) )
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())
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))
def is_repo_link(self): """ Checks whether repository is just a link for other one. """ return is_repo_link(self.repo)
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() )