예제 #1
0
    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
예제 #2
0
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']
예제 #4
0
    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))
예제 #5
0
    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))
예제 #6
0
 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())
예제 #7
0
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
예제 #8
0
def test_get_default_configuration(monkeypatch):
    monkeypatch.setattr('ideascube.configuration.registry.REGISTRY',
                        {'tests': {
                            'setting1': {
                                'type': int,
                                'default': 42
                            }
                        }})

    assert get_config('tests', 'setting1') == 42
예제 #9
0
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'
예제 #10
0
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']
예제 #11
0
    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)
예제 #12
0
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
예제 #13
0
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'
예제 #14
0
    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)
예제 #15
0
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
예제 #16
0
파일: catalog.py 프로젝트: blqn/ideascube
 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())
예제 #17
0
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})
예제 #18
0
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
예제 #19
0
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
        })
예제 #20
0
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."]
예제 #21
0
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})
예제 #22
0
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
예제 #23
0
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']
예제 #24
0
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
예제 #25
0
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})
예제 #26
0
파일: widgets.py 프로젝트: blqn/ideascube
    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)
예제 #27
0
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']
예제 #28
0
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,
    })
예제 #29
0
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,
        })
예제 #30
0
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."
    ]
예제 #31
0
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() == ''
예제 #32
0
    def get_initial(self):
        book = get_object_or_404(Book, pk=self.kwargs['book_pk'])

        return {'item': book, 'location': get_config('server', 'site-name')}
예제 #33
0
def test_get_configuration_invalid_key(monkeypatch):
    monkeypatch.setattr('ideascube.configuration.registry.REGISTRY',
                        {'tests': {}})

    with pytest.raises(NoSuchConfigurationKeyError):
        get_config('tests', 'setting1')
예제 #34
0
def server(request):
    return {'server_name': get_config('server', 'site-name')}
예제 #35
0
    def get_initial(self):
        book = get_object_or_404(Book, pk=self.kwargs['book_pk'])

        return {'item': book, 'location': get_config('server', 'site-name')}
예제 #36
0
def test_get_default_configuration(monkeypatch):
    monkeypatch.setattr(
        'ideascube.configuration.registry.REGISTRY',
        {'tests': {'setting1': {'type': int, 'default': 42}}})

    assert get_config('tests', 'setting1') == 42
예제 #37
0
def test_get_configuration_invalid_key(monkeypatch):
    monkeypatch.setattr(
        'ideascube.configuration.registry.REGISTRY', {'tests': {}})

    with pytest.raises(NoSuchConfigurationKeyError):
        get_config('tests', 'setting1')
예제 #38
0
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') == []
예제 #39
0
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') == []
예제 #40
0
def server(request):
    return {'server_name': get_config('server', 'site-name')}