def optgroups(self, name, value, attrs=None): optgroups = super().optgroups(name, value, attrs=attrs) local_languages = get_config('content', 'local-languages') if local_languages is None: return optgroups result = [] for group_name, group_choices, group_index in optgroups: choices = [] for option in group_choices: if option['value'] == '': choices.append(option) elif option['value'] in local_languages: choices.append(option) elif option['selected']: choices.append(option) result.append((group_name, choices, group_index)) return result
def test_reset_invalid_config(capsys, monkeypatch, user): monkeypatch.setattr('ideascube.configuration.registry.REGISTRY', {'namespace1': { 'key1': { 'type': int, 'default': 0 } }}) # Make an invalid config, this should never happen in theory Configuration(namespace='namespace1', key='key1', value='foo', actor=user).save() call_command('config', 'reset', 'namespace1', 'key1') out, err = capsys.readouterr() assert out.strip() == '' assert err.strip().split(':') == [ 'ERROR', 'ideascube.configuration', "The stored value for namespace1.key1='foo' is of type <class 'str'> " "instead of <class 'int'>. This should never have happened." ] assert get_config('namespace1', 'key1') == 0 # No log added this time, the invalid value is gone out, err = capsys.readouterr() assert out.strip() == '' assert err.strip() == ''
def test_reset_home_to_installed_packages(catalog): catalog.add_mocked_package(Package('pkg1', { 'name':'Test package1', 'description':'Test package1 description', 'language':'fr', 'staff_only':False, })) catalog.add_mocked_package(Package('pkg2', { 'name':'Test package2', 'description':'Test package2 description', 'language':'fr', 'staff_only':False, })) assert get_config('home-page', 'displayed-package-ids') == [] call_command('reset_home') assert get_config('home-page', 'displayed-package-ids') == ['pkg1', 'pkg2']
def report_config(self, _): for namespace in get_all_namespaces(): for key in get_namespaced_configs(namespace): value = get_config(namespace, key) default = get_default_value(namespace, key) print('%s %s: %r (default: %r)' % (namespace, key, value, default))
def report_config(self, _): for namespace in get_all_namespaces(): for key in get_namespaced_configs(namespace): value = get_config(namespace, key) default = get_default_value(namespace, key) print('%s %s: %r (default: %r)' % ( namespace, key, value, default))
def _update_displayed_packages_on_home(*, to_remove_ids=None, to_add_ids=None): displayed_packages = get_config('home-page', 'displayed-package-ids') if to_remove_ids: displayed_packages = [id for id in displayed_packages if id not in to_remove_ids] if to_add_ids: displayed_packages.extend(id for id in to_add_ids if id not in displayed_packages) set_config('home-page', 'displayed-package-ids', displayed_packages, User.objects.get_system_user())
def test_get_configuration(monkeypatch, value, user): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'tests': {'setting1': {'type': type(value), 'default': "whatever"}}}) Configuration( namespace='tests', key='setting1', value=value, actor=user).save() assert get_config('tests', 'setting1') == value
def test_get_default_configuration(monkeypatch): monkeypatch.setattr('ideascube.configuration.registry.REGISTRY', {'tests': { 'setting1': { 'type': int, 'default': 42 } }}) assert get_config('tests', 'setting1') == 42
def test_reset_default_config(capsys, monkeypatch): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'namespace1': {'key1': {'type': str, 'default': 'default'}}}) call_command('config', 'reset', 'namespace1', 'key1') out, err = capsys.readouterr() assert out.strip() == '' assert err.strip() == '' assert get_config('namespace1', 'key1') == 'default'
def test_reset_home_to_installed_packages(catalog): catalog.add_mocked_package( Package( 'pkg1', { 'name': 'Test package1', 'description': 'Test package1 description', 'language': 'fr', 'staff_only': False, })) catalog.add_mocked_package( Package( 'pkg2', { 'name': 'Test package2', 'description': 'Test package2 description', 'language': 'fr', 'staff_only': False, })) assert get_config('home-page', 'displayed-package-ids') == [] call_command('reset_home') assert get_config('home-page', 'displayed-package-ids') == ['pkg1', 'pkg2']
def get_config(self, options): namespace = options['namespace'] key = options['key'] try: value = get_config(namespace, key) except (NoSuchConfigurationNamespaceError, NoSuchConfigurationKeyError) as e: raise CommandError(e) print('%r' % value)
def test_set_config(capsys, monkeypatch, value, expected, type, default): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'namespace1': {'key1': {'type': type, 'default': default}}}) call_command('config', 'set', 'namespace1', 'key1', value) out, err = capsys.readouterr() assert out.strip() == '' assert err.strip() == '' assert get_config('namespace1', 'key1') == expected
def test_reset_default_config(capsys, monkeypatch): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'namespace1': {'key1': {'type': str, 'default': 'default'}}}) call_command('config', 'reset', 'namespace1', 'key1') out, err = capsys.readouterr() assert out.strip() == '' assert err.strip() == '' assert get_config('namespace1', 'key1') == 'default'
def get_config(self, options): namespace = options['namespace'] key = options['key'] try: value = get_config(namespace, key) except (NoSuchConfigurationNamespaceError, NoSuchConfigurationKeyError) as e: raise CommandError(e) print('%r' % value)
def test_set_config(capsys, monkeypatch, value, expected, type, default): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'namespace1': {'key1': {'type': type, 'default': default}}}) call_command('config', 'set', 'namespace1', 'key1', value) out, err = capsys.readouterr() assert out.strip() == '' assert err.strip() == '' assert get_config('namespace1', 'key1') == expected
def _update_displayed_packages_on_home(*, to_remove_ids=None, to_add_ids=None): displayed_packages = get_config('home-page', 'displayed-package-ids') if to_remove_ids: displayed_packages = [ id for id in displayed_packages if id not in to_remove_ids ] if to_add_ids: displayed_packages.extend(id for id in to_add_ids if id not in displayed_packages) set_config('home-page', 'displayed-package-ids', displayed_packages, User.objects.get_system_user())
def home_page(request): if request.POST: displayed_packages = request.POST.getlist("displayed") set_config('home-page', 'displayed-package-ids', displayed_packages, request.user) messages.success(request, _('Home cards updated successfully')) catalog = catalog_mod.Catalog() installed_packages = catalog.list_installed(['*']) displayed_packages = get_config('home-page', 'displayed-package-ids') return render(request, 'serveradmin/home_page.html', {'installed_packages': installed_packages, 'displayed_packages': displayed_packages})
def test_get_configuration(monkeypatch, value, user): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'tests': { 'setting1': { 'type': type(value), 'default': "whatever" } }}) Configuration(namespace='tests', key='setting1', value=value, actor=user).save() assert get_config('tests', 'setting1') == value
def home_page(request): if request.POST: displayed_packages = request.POST.getlist("displayed") set_config('home-page', 'displayed-package-ids', displayed_packages, request.user) messages.success(request, _('Home cards updated successfully')) catalog = catalog_mod.Catalog() installed_packages = catalog.list_installed(['*']) displayed_packages = get_config('home-page', 'displayed-package-ids') return render( request, 'serveradmin/home_page.html', { 'installed_packages': installed_packages, 'displayed_packages': displayed_packages })
def test_get_configuration_invalid_type(capsys, monkeypatch, user): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'tests': {'setting1': {'type': int, 'default': 42}}}) # Store a bad value in the database Configuration( namespace='tests', key='setting1', value='foo', actor=user).save() assert get_config('tests', 'setting1') == 42 out, err = capsys.readouterr() assert out.strip() == '' assert err.strip().split(':') == [ 'ERROR', 'ideascube.configuration', "The stored value for tests.setting1='foo' is of type <class 'str'> " "instead of <class 'int'>. This should never have happened."]
def welcome_staff(request): """Allow to create a staff user if None exists yet.""" if user_model.objects.filter(is_staff=True).exists(): return HttpResponseRedirect('/') if request.method == 'POST': form = CreateStaffForm(request.POST) if form.is_valid(): user = form.save() user = authenticate(serial=user.serial, password=request.POST['password']) login(request, user) msg = _(u'Welcome to {}, {}!').format( get_config('server', 'site-name'), user) messages.add_message(request, messages.SUCCESS, msg) return HttpResponseRedirect('/') else: form = CreateStaffForm() return render(request, 'ideascube/welcome_staff.html', {'form': form})
def build_package_card_info(): package_card_info = [] catalog = catalog_mod.Catalog() packages_to_display = catalog.list_installed(get_config('home-page', 'displayed-package-ids')) for package in packages_to_display: card_info = { 'id': package.template_id, 'name': package.name, 'description': getattr(package, 'description', ''), 'lang': getattr(package, 'language', ''), 'package_id': package.id, 'is_staff': getattr(package, 'staff_only', False), 'theme': getattr(package, 'theme', None), 'css_class': getattr(package, 'css_class', None) } package_card_info.append(card_info) return package_card_info
def test_staff_can_set_languages(staffapp): set_config('content', 'local-languages', ['en'], staffapp.user) response = staffapp.get(reverse('server:languages')) form = response.forms['languages'] checked = sorted(f.id for f in form.fields['languages'] if f.checked) assert checked == ['en'] for field in form.fields['languages']: field.checked = field.id in ('ar', 'zh-hant') response = form.submit() form = response.forms['languages'] checked = sorted(f.id for f in form.fields['languages'] if f.checked) assert checked == ['ar', 'zh-hant'] assert get_config('content', 'local-languages') == ['ar', 'zh-hant']
def build_package_card_info(): package_card_info = [] catalog = catalog_mod.Catalog() packages_to_display = catalog.list_installed(get_config('home-page', 'displayed-package-ids')) for package in packages_to_display: card_info = { 'id': package.template_id, 'name': package.name, 'description': getattr(package, 'description', ''), 'lang': getattr(package, 'language', ''), 'package_id': package.id, 'is_staff': getattr(package, 'staff_only', False), 'theme': getattr(package, 'theme', None), 'css_class': getattr(package, 'css_class', None) } package_card_info.append(card_info) return package_card_info
def welcome_staff(request): """Allow to create a staff user if None exists yet.""" if user_model.objects.filter(is_staff=True).exists(): return HttpResponseRedirect('/') if request.method == 'POST': form = CreateStaffForm(request.POST) if form.is_valid(): user = form.save() user = authenticate(serial=user.serial, password=request.POST['password']) login(request, user) msg = _(u'Welcome to {}, {}!').format( get_config('server', 'site-name'), user) messages.add_message(request, messages.SUCCESS, msg) return HttpResponseRedirect('/') else: form = CreateStaffForm() return render(request, 'ideascube/welcome_staff.html', {'form': form})
def render_options(self, selected_choices): local_languages = get_config('content', 'local-languages') if local_languages is not None: tmp = [] for code, name in self.choices: if code is '': tmp.append((code, name)) elif code in local_languages: tmp.append((code, name)) elif code in selected_choices: tmp.append((code, name)) self.choices = tmp return super().render_options(selected_choices)
def test_staff_cannot_unset_all_languages(staffapp): set_config('content', 'local-languages', ['ar', 'zh-hant'], staffapp.user) response = staffapp.get(reverse('server:languages')) form = response.forms['languages'] checked = sorted(f.id for f in form.fields['languages'] if f.checked) assert checked == ['ar', 'zh-hant'] for field in form.fields['languages']: field.checked = False response = form.submit() assert 'Please select at least one language' in response.unicode_body form = response.forms['languages'] checked = sorted(f.id for f in form.fields['languages'] if f.checked) assert checked == ['ar', 'zh-hant'] assert get_config('content', 'local-languages') == ['ar', 'zh-hant']
def languages(request): languages = get_all_languages() if request.method == "POST": selected = request.POST.getlist('languages') if selected: set_config('content', 'local-languages', sorted(selected), request.user) else: messages.error(request, _('Please select at least one language')) local_languages = get_config('content', 'local-languages') return render(request, 'serveradmin/languages.html', { 'languages': languages, 'selected': local_languages, })
def languages(request): languages = get_all_languages() if request.method == "POST": selected = request.POST.getlist('languages') if selected: set_config( 'content', 'local-languages', sorted(selected), request.user) else: messages.error(request, _('Please select at least one language')) local_languages = get_config('content', 'local-languages') return render( request, 'serveradmin/languages.html', { 'languages': languages, 'selected': local_languages, })
def test_get_configuration_invalid_type(capsys, monkeypatch, user): monkeypatch.setattr('ideascube.configuration.registry.REGISTRY', {'tests': { 'setting1': { 'type': int, 'default': 42 } }}) # Store a bad value in the database Configuration(namespace='tests', key='setting1', value='foo', actor=user).save() assert get_config('tests', 'setting1') == 42 out, err = capsys.readouterr() assert out.strip() == '' assert err.strip().split(':') == [ 'ERROR', 'ideascube.configuration', "The stored value for tests.setting1='foo' is of type <class 'str'> " "instead of <class 'int'>. This should never have happened." ]
def test_reset_invalid_config(capsys, monkeypatch, user): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'namespace1': {'key1': {'type': int, 'default': 0}}}) # Make an invalid config, this should never happen in theory Configuration( namespace='namespace1', key='key1', value='foo', actor=user).save() call_command('config', 'reset', 'namespace1', 'key1') out, err = capsys.readouterr() assert out.strip() == '' assert err.strip().split(':') == [ 'ERROR', 'ideascube.configuration', "The stored value for namespace1.key1='foo' is of type <class 'str'> " "instead of <class 'int'>. This should never have happened."] assert get_config('namespace1', 'key1') == 0 # No log added this time, the invalid value is gone out, err = capsys.readouterr() assert out.strip() == '' assert err.strip() == ''
def get_initial(self): book = get_object_or_404(Book, pk=self.kwargs['book_pk']) return {'item': book, 'location': get_config('server', 'site-name')}
def test_get_configuration_invalid_key(monkeypatch): monkeypatch.setattr('ideascube.configuration.registry.REGISTRY', {'tests': {}}) with pytest.raises(NoSuchConfigurationKeyError): get_config('tests', 'setting1')
def server(request): return {'server_name': get_config('server', 'site-name')}
def get_initial(self): book = get_object_or_404(Book, pk=self.kwargs['book_pk']) return {'item': book, 'location': get_config('server', 'site-name')}
def test_get_default_configuration(monkeypatch): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'tests': {'setting1': {'type': int, 'default': 42}}}) assert get_config('tests', 'setting1') == 42
def test_get_configuration_invalid_key(monkeypatch): monkeypatch.setattr( 'ideascube.configuration.registry.REGISTRY', {'tests': {}}) with pytest.raises(NoSuchConfigurationKeyError): get_config('tests', 'setting1')
def test_reset_home_no_installed_packages(): assert get_config('home-page', 'displayed-package-ids') == [] call_command('reset_home') assert get_config('home-page', 'displayed-package-ids') == []
def test_reset_home_no_installed_packages(): assert get_config('home-page', 'displayed-package-ids') == [] call_command('reset_home') assert get_config('home-page', 'displayed-package-ids') == []
def server(request): return {'server_name': get_config('server', 'site-name')}