def setup_basic_get_test(self, user, with_local_site, local_site_name, populate_items): return (get_hosting_service_list_url(local_site_name), hosting_service_list_mimetype, get_hosting_services())
def __init__(self, *args, **kwargs): self.local_site_name = kwargs.pop('local_site_name', None) super(RepositoryForm, self).__init__(*args, **kwargs) self.hostkeyerror = None self.certerror = None self.userkeyerror = None self.hosting_account_linked = False self.local_site = None self.repository_forms = {} self.bug_tracker_forms = {} self.hosting_service_info = {} self.validate_repository = True self.cert = None # Determine the local_site that will be associated with any # repository coming from this form. # # We're careful to disregard any local_sites that are specified # from the form data. The caller needs to pass in a local_site_name # to ensure that it will be used. if self.local_site_name: self.local_site = LocalSite.objects.get(name=self.local_site_name) elif self.instance and self.instance.local_site: self.local_site = self.instance.local_site self.local_site_name = self.local_site.name elif self.fields['local_site'].initial: self.local_site = self.fields['local_site'].initial self.local_site_name = self.local_site.name # Grab the entire list of HostingServiceAccounts that can be # used by this form. When the form is actually being used by the # user, the listed accounts will consist only of the ones available # for the selected hosting service. hosting_accounts = HostingServiceAccount.objects.accessible( local_site=self.local_site) self.fields['hosting_account'].queryset = hosting_accounts # Standard forms don't support 'instance', so don't pass it through # to any created hosting service forms. if 'instance' in kwargs: kwargs.pop('instance') # Load the list of repository forms and hosting services. hosting_service_choices = [] bug_tracker_choices = [] for hosting_service_id, hosting_service in get_hosting_services(): if hosting_service.supports_repositories: hosting_service_choices.append((hosting_service_id, hosting_service.name)) if hosting_service.supports_bug_trackers: bug_tracker_choices.append((hosting_service_id, hosting_service.name)) self.bug_tracker_forms[hosting_service_id] = {} self.repository_forms[hosting_service_id] = {} self.hosting_service_info[hosting_service_id] = { 'scmtools': hosting_service.supported_scmtools, 'plans': [], 'planInfo': {}, 'self_hosted': hosting_service.self_hosted, 'needs_authorization': hosting_service.needs_authorization, 'supports_bug_trackers': hosting_service.supports_bug_trackers, 'supports_ssh_key_association': hosting_service.supports_ssh_key_association, 'accounts': [ { 'pk': account.pk, 'hosting_url': account.hosting_url, 'username': account.username, 'is_authorized': account.is_authorized, } for account in hosting_accounts if account.service_name == hosting_service_id ], } try: if hosting_service.plans: for type_id, info in hosting_service.plans: form = info.get('form', None) if form: self._load_hosting_service(hosting_service_id, hosting_service, type_id, info['name'], form, *args, **kwargs) elif hosting_service.form: self._load_hosting_service(hosting_service_id, hosting_service, self.DEFAULT_PLAN_ID, self.DEFAULT_PLAN_NAME, hosting_service.form, *args, **kwargs) except Exception as e: logging.error('Error loading hosting service %s: %s' % (hosting_service_id, e), exc_info=1) # Build the list of hosting service choices, sorted, with # "None" being first. hosting_service_choices.sort(key=lambda x: x[1]) hosting_service_choices.insert(0, (self.NO_HOSTING_SERVICE_ID, self.NO_HOSTING_SERVICE_NAME)) self.fields['hosting_type'].choices = hosting_service_choices # Now do the same for bug trackers, but have separate None and Custom # entries. bug_tracker_choices.sort(key=lambda x: x[1]) bug_tracker_choices.insert(0, (self.NO_BUG_TRACKER_ID, self.NO_BUG_TRACKER_NAME)) bug_tracker_choices.insert(1, (self.CUSTOM_BUG_TRACKER_ID, self.CUSTOM_BUG_TRACKER_NAME)) self.fields['bug_tracker_type'].choices = bug_tracker_choices # Get the current SSH public key that would be used for repositories, # if one has been created. self.ssh_client = SSHClient(namespace=self.local_site_name) ssh_key = self.ssh_client.get_user_key() if ssh_key: self.public_key = self.ssh_client.get_public_key(ssh_key) self.public_key_str = '%s %s' % ( ssh_key.get_name(), ''.join(str(self.public_key).splitlines()) ) else: self.public_key = None self.public_key_str = '' # If no SSH key has been created, disable the key association field. if not self.public_key: self.fields['associate_ssh_key'].help_text = \ self.NO_KEY_HELP_FMT % local_site_reverse( 'settings-ssh', local_site_name=self.local_site_name) self.fields['associate_ssh_key'].widget.attrs['disabled'] = \ 'disabled' if self.instance: self._populate_repository_info_fields() self._populate_hosting_service_fields() self._populate_bug_tracker_fields()
def __init__(self, *args, **kwargs): self.local_site_name = kwargs.pop('local_site_name', None) super(RepositoryForm, self).__init__(*args, **kwargs) self.hostkeyerror = None self.certerror = None self.userkeyerror = None self.hosting_account_linked = False self.local_site = None self.repository_forms = {} self.bug_tracker_forms = {} self.hosting_service_info = {} self.validate_repository = True self.cert = None # Determine the local_site that will be associated with any # repository coming from this form. # # We're careful to disregard any local_sites that are specified # from the form data. The caller needs to pass in a local_site_name # to ensure that it will be used. if self.local_site_name: self.local_site = LocalSite.objects.get(name=self.local_site_name) elif self.instance and self.instance.local_site: self.local_site = self.instance.local_site self.local_site_name = self.local_site.name elif self.fields['local_site'].initial: self.local_site = self.fields['local_site'].initial self.local_site_name = self.local_site.name # Grab the entire list of HostingServiceAccounts that can be # used by this form. When the form is actually being used by the # user, the listed accounts will consist only of the ones available # for the selected hosting service. hosting_accounts = HostingServiceAccount.objects.accessible( local_site=self.local_site) self.fields['hosting_account'].queryset = hosting_accounts # Standard forms don't support 'instance', so don't pass it through # to any created hosting service forms. if 'instance' in kwargs: kwargs.pop('instance') # Load the list of repository forms and hosting services. hosting_service_choices = [] bug_tracker_choices = [] for hosting_service_id, hosting_service in get_hosting_services(): if hosting_service.supports_repositories: hosting_service_choices.append((hosting_service_id, hosting_service.name)) if hosting_service.supports_bug_trackers: bug_tracker_choices.append((hosting_service_id, hosting_service.name)) self.bug_tracker_forms[hosting_service_id] = {} self.repository_forms[hosting_service_id] = {} self.hosting_service_info[hosting_service_id] = { 'scmtools': hosting_service.supported_scmtools, 'plans': [], 'planInfo': {}, 'self_hosted': hosting_service.self_hosted, 'needs_authorization': hosting_service.needs_authorization, 'supports_bug_trackers': hosting_service.supports_bug_trackers, 'supports_ssh_key_association': hosting_service.supports_ssh_key_association, 'accounts': [ { 'pk': account.pk, 'hosting_url': account.hosting_url, 'username': account.username, 'is_authorized': account.is_authorized, } for account in hosting_accounts if account.service_name == hosting_service_id ], } try: if hosting_service.plans: for type_id, info in hosting_service.plans: form = info.get('form', None) if form: self._load_hosting_service(hosting_service_id, hosting_service, type_id, info['name'], form, *args, **kwargs) elif hosting_service.form: self._load_hosting_service(hosting_service_id, hosting_service, self.DEFAULT_PLAN_ID, self.DEFAULT_PLAN_NAME, hosting_service.form, *args, **kwargs) except Exception, e: logging.error('Error loading hosting service %s: %s' % (hosting_service_id, e), exc_info=1)
def __init__(self, *args, **kwargs): self.local_site_name = kwargs.pop('local_site_name', None) super(RepositoryForm, self).__init__(*args, **kwargs) self.hostkeyerror = None self.certerror = None self.userkeyerror = None self.hosting_account_linked = False self.local_site = None self.repository_forms = {} self.bug_tracker_forms = {} self.hosting_service_info = {} self.validate_repository = True self.cert = None # Determine the local_site that will be associated with any # repository coming from this form. # # We're careful to disregard any local_sites that are specified # from the form data. The caller needs to pass in a local_site_name # to ensure that it will be used. if self.local_site_name: self.local_site = LocalSite.objects.get(name=self.local_site_name) elif self.instance and self.instance.local_site: self.local_site = self.instance.local_site self.local_site_name = self.local_site.name elif self.fields['local_site'].initial: self.local_site = self.fields['local_site'].initial self.local_site_name = self.local_site.name # Grab the entire list of HostingServiceAccounts that can be # used by this form. When the form is actually being used by the # user, the listed accounts will consist only of the ones available # for the selected hosting service. hosting_accounts = HostingServiceAccount.objects.accessible( local_site=self.local_site) self.fields['hosting_account'].queryset = hosting_accounts # Standard forms don't support 'instance', so don't pass it through # to any created hosting service forms. if 'instance' in kwargs: kwargs.pop('instance') # Load the list of repository forms and hosting services. hosting_service_choices = [] bug_tracker_choices = [] for hosting_service_id, hosting_service in get_hosting_services(): if hosting_service.supports_repositories: hosting_service_choices.append( (hosting_service_id, hosting_service.name)) if hosting_service.supports_bug_trackers: bug_tracker_choices.append( (hosting_service_id, hosting_service.name)) self.bug_tracker_forms[hosting_service_id] = {} self.repository_forms[hosting_service_id] = {} self.hosting_service_info[hosting_service_id] = { 'scmtools': hosting_service.supported_scmtools, 'plans': [], 'planInfo': {}, 'needs_authorization': hosting_service.needs_authorization, 'supports_bug_trackers': hosting_service.supports_bug_trackers, 'accounts': [{ 'pk': account.pk, 'username': account.username, 'is_authorized': account.is_authorized, } for account in hosting_accounts if account.service_name == hosting_service_id], } try: if hosting_service.plans: for type_id, info in hosting_service.plans: form = info.get('form', None) if form: self._load_hosting_service(hosting_service_id, hosting_service, type_id, info['name'], form, *args, **kwargs) elif hosting_service.form: self._load_hosting_service(hosting_service_id, hosting_service, self.DEFAULT_PLAN_ID, self.DEFAULT_PLAN_NAME, hosting_service.form, *args, **kwargs) except Exception, e: logging.error('Error loading hosting service %s: %s' % (hosting_service_id, e), exc_info=1)
def get_queryset(self, request, *args, **kwargs): return LocalDataQuerySet(get_hosting_services())
def __init__(self, *args, **kwargs): self.local_site_name = kwargs.pop('local_site_name', None) super(RepositoryForm, self).__init__(*args, **kwargs) self.hostkeyerror = None self.certerror = None self.userkeyerror = None self.hosting_account_linked = False self.local_site = None self.repository_forms = {} self.bug_tracker_forms = {} self.hosting_service_info = {} self.validate_repository = True self.cert = None # Determine the local_site that will be associated with any # repository coming from this form. # # We're careful to disregard any local_sites that are specified # from the form data. The caller needs to pass in a local_site_name # to ensure that it will be used. if self.local_site_name: self.local_site = LocalSite.objects.get(name=self.local_site_name) elif self.instance and self.instance.local_site: self.local_site = self.instance.local_site self.local_site_name = self.local_site.name elif self.fields['local_site'].initial: self.local_site = self.fields['local_site'].initial self.local_site_name = self.local_site.name # Grab the entire list of HostingServiceAccounts that can be # used by this form. When the form is actually being used by the # user, the listed accounts will consist only of the ones available # for the selected hosting service. hosting_accounts = HostingServiceAccount.objects.accessible( local_site=self.local_site) self.fields['hosting_account'].queryset = hosting_accounts # Standard forms don't support 'instance', so don't pass it through # to any created hosting service forms. if 'instance' in kwargs: kwargs.pop('instance') # Load the list of repository forms and hosting services. hosting_service_choices = [] bug_tracker_choices = [] for hosting_service_id, hosting_service in get_hosting_services(): if hosting_service.supports_repositories: hosting_service_choices.append((hosting_service_id, hosting_service.name)) if hosting_service.supports_bug_trackers: bug_tracker_choices.append((hosting_service_id, hosting_service.name)) self.bug_tracker_forms[hosting_service_id] = {} self.repository_forms[hosting_service_id] = {} self.hosting_service_info[hosting_service_id] = { 'scmtools': hosting_service.supported_scmtools, 'plans': [], 'planInfo': {}, 'self_hosted': hosting_service.self_hosted, 'needs_authorization': hosting_service.needs_authorization, 'supports_bug_trackers': hosting_service.supports_bug_trackers, 'supports_ssh_key_association': hosting_service.supports_ssh_key_association, 'supports_two_factor_auth': hosting_service.supports_two_factor_auth, 'needs_two_factor_auth_code': False, 'accounts': [ { 'pk': account.pk, 'hosting_url': account.hosting_url, 'username': account.username, 'is_authorized': account.is_authorized, } for account in hosting_accounts if account.service_name == hosting_service_id ], } try: if hosting_service.plans: for type_id, info in hosting_service.plans: form = info.get('form', None) if form: self._load_hosting_service(hosting_service_id, hosting_service, type_id, info['name'], form, *args, **kwargs) elif hosting_service.form: self._load_hosting_service(hosting_service_id, hosting_service, self.DEFAULT_PLAN_ID, self.DEFAULT_PLAN_NAME, hosting_service.form, *args, **kwargs) except Exception as e: logging.error('Error loading hosting service %s: %s' % (hosting_service_id, e), exc_info=1) # Build the list of hosting service choices, sorted, with # "None" being first. hosting_service_choices.sort(key=lambda x: x[1]) hosting_service_choices.insert(0, (self.NO_HOSTING_SERVICE_ID, self.NO_HOSTING_SERVICE_NAME)) self.fields['hosting_type'].choices = hosting_service_choices # Now do the same for bug trackers, but have separate None and Custom # entries. bug_tracker_choices.sort(key=lambda x: x[1]) bug_tracker_choices.insert(0, (self.NO_BUG_TRACKER_ID, self.NO_BUG_TRACKER_NAME)) bug_tracker_choices.insert(1, (self.CUSTOM_BUG_TRACKER_ID, self.CUSTOM_BUG_TRACKER_NAME)) self.fields['bug_tracker_type'].choices = bug_tracker_choices # Get the current SSH public key that would be used for repositories, # if one has been created. self.ssh_client = SSHClient(namespace=self.local_site_name) ssh_key = self.ssh_client.get_user_key() if ssh_key: self.public_key = self.ssh_client.get_public_key(ssh_key) self.public_key_str = '%s %s' % ( ssh_key.get_name(), ''.join(six.text_type(self.public_key).splitlines()) ) else: self.public_key = None self.public_key_str = '' # If no SSH key has been created, disable the key association field. if not self.public_key: self.fields['associate_ssh_key'].help_text = \ self.NO_KEY_HELP_FMT % local_site_reverse( 'settings-ssh', local_site_name=self.local_site_name) self.fields['associate_ssh_key'].widget.attrs['disabled'] = \ 'disabled' if self.instance: self._populate_repository_info_fields() self._populate_hosting_service_fields() self._populate_bug_tracker_fields()