Ejemplo n.º 1
0
    def test_settings_command(self):
        node = config.SchemaNode(colander.Str(), name="node", default="test")

        group = config.register_settings("group1", node, title="Section1", description="Description1")

        group = config.register_settings("group2", node, title="Section2", description="Description2")

        self._init_ptah()

        # all
        sys.argv[1:] = ["-a"]

        stdout = sys.stdout
        out = StringIO()
        sys.stdout = out

        commands.settingsCommand()
        sys.stdout = stdout

        val = out.getvalue()
        self.assertIn("Section1", val)
        self.assertIn("Section2", val)
        self.assertIn("group1.node", val)
        self.assertIn("group2.node", val)

        # section
        sys.argv[1:] = ["-l", "group1"]

        stdout = sys.stdout
        out = StringIO()
        sys.stdout = out

        commands.settingsCommand()
        sys.stdout = stdout

        val = out.getvalue()
        self.assertIn("Section1", val)
        self.assertNotIn("Section2", val)
        self.assertIn("group1.node", val)
        self.assertNotIn("group2.node", val)

        # print
        sys.argv[1:] = ["-p"]

        stdout = sys.stdout
        out = StringIO()
        sys.stdout = out

        commands.settingsCommand()
        sys.stdout = stdout

        val = out.getvalue().strip()
        self.assertIn("group1.node = test", val)
        self.assertIn("group2.node = test", val)
Ejemplo n.º 2
0
    def test_settings_group_multiple_validation(self):
        def validator1(node, appstruct):
            raise colander.Invalid(node['node1'], 'Error1')
        def validator2(node, appstruct):
            raise colander.Invalid(node, 'Error2')

        node1 = config.SchemaNode(
                colander.Str(),
                name = 'node1',
                default = 'test')

        node2 = config.SchemaNode(
                colander.Str(),
                name = 'node2',
                default = 'test')

        group = config.register_settings(
            'group3', node1, node2, validator=(validator1, validator2))

        self._init_ptah()

        try:
            group.schema.deserialize({
                    'group3.node1': 'value',
                    'group3.node2': 'value'})
        except colander.Invalid, err:
            pass
Ejemplo n.º 3
0
    def test_settings_export(self):
        node1 = config.SchemaNode(
                colander.Str(),
                name = 'node1',
                default = 'test')

        node2 = config.SchemaNode(
                colander.Str(),
                name = 'node2',
                default = 'test')

        group = config.register_settings('group4', node1, node2)

        self._init_ptah()

        # changed settings
        self.assertEqual(config.Settings.export(), {})

        # default settings
        self.assertEqual(config.Settings.export(default=True),
                         {'group4.node1': 'test', 'group4.node2': 'test'})

        # changed settings
        group['node2'] = 'changed'
        data = dict(config.Settings.export())
        self.assertEqual(data, {'group4.node2': 'changed'})
Ejemplo n.º 4
0
    def test_settings_register_multiple(self):
        node = config.SchemaNode(
            colander.Str(),
            name = 'node',
            default = 'test')

        group = config.register_settings(
            'group1', node,
            title = 'Section title',
            description = 'Section description',
            )

        node2 = config.SchemaNode(
            colander.Str(),
            name = 'node2',
            default = 'test2')

        group2 = config.register_settings(
            'group1', node2,
            title = 'Section title',
            description = 'Section description',
            )

        self.assertTrue(group is group2)
Ejemplo n.º 5
0
    def _create_default_group(self):
        node1 = config.SchemaNode(
                colander.Str(),
                name = 'node1',
                default = 'default1')

        node2 = config.SchemaNode(
                colander.Int(),
                name = 'node2',
                default = 10)

        group = config.register_settings('group', node1, node2)
        self._init_ptah()

        group.clear()
        return group
Ejemplo n.º 6
0
    def test_settings_group_validation(self):
        def validator(node, appstruct):
            raise colander.Invalid(node['node'], 'Error')

        node = config.SchemaNode(
                colander.Str(),
                name = 'node',
                default = 'test')

        group = config.register_settings(
            'group2', node, validator=validator)

        self._init_ptah()

        try:
            group.schema.deserialize({'group2.node': 'value'})
        except colander.Invalid, err:
            pass
Ejemplo n.º 7
0
    def test_settings_initialize_load_default(self):
        node1 = config.SchemaNode(
                colander.Str(),
                name = 'node1',
                default = 'default1')

        node2 = config.SchemaNode(
                colander.Int(),
                name = 'node2',
                default = 10)

        group = config.register_settings('group', node1, node2)
        self._init_ptah()

        config.initialize_settings({'group.node1': 'setting from ini'})

        self.assertEqual(group['node1'], 'setting from ini')
        self.assertEqual(group['node2'], 10)
Ejemplo n.º 8
0
    def test_settings_register_simple(self):
        node = config.SchemaNode(
                colander.Str(),
                name = 'node',
                default = 'test')

        group = config.register_settings(
            'group1', node,
            title = 'Section title',
            description = 'Section description',
            )

        self.assertEqual(group.name, 'group1')
        self.assertEqual(group.title, 'Section title')
        self.assertEqual(group.description, 'Section description')
        self.assertEqual(len(group.schema.children), 0)
        self.assertTrue(isinstance(group.category, InterfaceClass))

        self._init_ptah()

        self.assertEqual(len(group.schema.children), 1)
        self.assertTrue(group.schema.children[0] is node)
        self.assertEqual(group.node, 'test')
        self.assertEqual(group['node'], 'test')
        self.assertRaises(
            AttributeError,
            group.__getattr__, 'unknown')
        self.assertRaises(
            KeyError,
            group.__getitem__, 'unknown')

        self.assertEqual(config.Settings._changed, None)

        group.node = 'test2'
        self.assertFalse(group.node == group['node'])

        group['node'] =  'test2'
        self.assertTrue('group1' in config.Settings._changed)
        self.assertTrue('node' in config.Settings._changed['group1'])
Ejemplo n.º 9
0
    def test_settings_initialize_load_settings_include(self):
        path = os.path.join(self.dir, 'settings.cfg')
        f = open(path, 'wb')
        f.write('[DEFAULT]\ngroup.node1 = value\n\n')
        f.close()

        node1 = config.SchemaNode(
                colander.Str(),
                name = 'node1',
                default = 'default1')

        node2 = config.SchemaNode(
                colander.Int(),
                name = 'node2',
                default = 10)

        group = config.register_settings('group', node1, node2)
        self._init_ptah()

        config.initialize_settings({'include': path})

        self.assertEqual(group['node1'], 'value')
        self.assertEqual(group['node2'], 10)
Ejemplo n.º 10
0
    def test_settings_fs_watcher(self):
        path = os.path.join(self.dir, 'settings.cfg')
        f = open(path, 'wb')
        f.write('[DEFAULT]\ngroup.node1 = value\n\n')
        f.close()

        node1 = config.SchemaNode(
                colander.Str(),
                name = 'node1',
                default = 'default1')

        group = config.register_settings('group', node1)
        self._init_ptah()

        class Config(object):
            def begin(self):
                pass
            def end(self):
                pass

        config.initialize_settings({'settings': path}, config=Config())

        self.assertTrue(
            isinstance(config.Settings.loader.watcher, iNotifyWatcher))
        self.assertEqual(group['node1'], 'value')

        f = open(path, 'wb')
        f.write('[DEFAULT]\ngroup.node1 = new_value\n\n')
        f.close()
        time.sleep(0.2)

        self.assertEqual(group['node1'], 'new_value')
        self.assertTrue(config.Settings.loader.watcher.started)

        shutdown()
        self.assertFalse(config.Settings.loader.watcher.started)
Ejemplo n.º 11
0
CONFIG = config.register_settings(
    'manage',

    config.SchemaNode(
        config.Sequence(), colander.SchemaNode(colander.Str()),
        name = 'managers',
        title = 'Managers',
        description = 'List of user logins with access rights to '\
            'ptah management ui.',
        default = ()),

    config.SchemaNode(
        colander.Str(),
        name = 'manage_url',
        title = 'Ptah manage url',
        default = '/ptah-manage'),

    config.SchemaNode(
        config.Sequence(), colander.SchemaNode(colander.Str()),
        name = 'disable_modules',
        title = 'Hide Modules in Management UI',
        description = 'List of modules names to hide in manage ui',
        default = ()),

    config.SchemaNode(
        config.Sequence(), colander.SchemaNode(colander.Str()),
        name = 'disable_models',
        title = 'Hide Models in Model Management UI',
        description = 'List of models to hide in model manage ui',
        default = ('cms-type:sqlblob',)),

    title = 'Ptah manage settings',
    )
Ejemplo n.º 12
0
from urlparse import urljoin, urlparse
from paste import fileapp, request, httpexceptions

from ptah import config
from ptah.view import tmpl
from ptah.view.customize import LayerWrapper


STATIC = config.register_settings(
    'static',

    config.SchemaNode(
        colander.Str(),
        name = 'url',
        default = 'static'),

    config.SchemaNode(
        colander.Int(),
        name = 'cache_max_age',
        default = 0),

    title = 'Static resources management',
)
STATIC.isurl = False


registry = {}
dirs = {}

def static(name, path, layer=''):
    """ Register new static assets directory
Ejemplo n.º 13
0
import colander
from chameleon import template as chameleon_template

from ptah import config


TEMPLATE = config.register_settings(
    'template',

    config.SchemaNode(
        colander.Bool(),
        name = 'chameleon_reload',
        default = False,
        title = 'Auto reload',
        description = 'Enable chameleon templates auto reload.'),

    title = 'Templates settings',
    )


class _ViewLayersManager(object):

    def __init__(self):
        self.layers = {}

    def register(self, layer, discriminator):
        data = self.layers.setdefault(discriminator, [])
        if not layer:
            data.insert(0, layer)
        else:
            data.append(layer)
Ejemplo n.º 14
0
PWD_CONFIG = config.register_settings(
    'ptah-password',

    config.SchemaNode(
        colander.Str(),
        name = 'manager',
        title = 'Password manager',
        description = 'Available password managers \
            ("plain", "ssha", "bcrypt")',
        default = 'plain'),

    config.SchemaNode(
        colander.Int(),
        name = 'min_length',
        title = 'Length',
        description = 'Password minimium length.',
        default = 5),

    config.SchemaNode(
        colander.Bool(),
        name = 'letters_digits',
        title = 'Letters and digits',
        description = 'Use letters and digits in password.',
        default = False),

    config.SchemaNode(
        colander.Bool(),
        name = 'letters_mixed_case',
        title = 'Letters mixed case',
        description = 'Use letters in mixed case.',
        default = False),

    title = 'Password tool settings',
    )
Ejemplo n.º 15
0
FORMAT = config.register_settings(
    'format',

    config.SchemaNode(
        Timezone(),
        name = 'timezone',
        default = pytz.timezone('US/Central'),
        title = _('Timezone'),
        description = _('Site wide timezone.')),

    config.SchemaNode(
        colander.Str(),
        name = 'date_short',
        default = u'%m/%d/%y',
        title = _(u'Date'),
        description = _(u'Date short format')),

    config.SchemaNode(
        colander.Str(),
        name = 'date_medium',
        default = u'%b %d, %Y',
        title = _(u'Date'),
        description = _(u'Date medium format')),

    config.SchemaNode(
        colander.Str(),
        name = 'date_long',
        default = u'%B %d, %Y',
        title = _(u'Date'),
        description = _(u'Date long format')),

    config.SchemaNode(
        colander.Str(),
        name = 'date_full',
        default = u'%A, %B %d, %Y',
        title = _(u'Date'),
        description = _(u'Date full format')),

    config.SchemaNode(
        colander.Str(),
        name = 'time_short',
        default = u'%I:%M %p',
        title = _(u'Time'),
        description = _(u'Time short format')),

    config.SchemaNode(
        colander.Str(),
        name = 'time_medium',
        default = u'%I:%M %p',
        title = _(u'Time'),
        description = _(u'Time medium format')),

    config.SchemaNode(
        colander.Str(),
        name = 'time_long',
        default = u'%I:%M %p %z',
        title = _(u'Time'),
        description = _(u'Time long format')),

    config.SchemaNode(
        colander.Str(),
        name = 'time_full',
        default = u'%I:%M:%S %p %Z',
        title = _(u'Time'),
        description = _(u'Time full format')),

    title = 'Site formats',
    )
Ejemplo n.º 16
0
Archivo: mail.py Proyecto: mcdonc/ptah
MAIL = config.register_settings(
    'mail',

    config.SchemaNode(
        colander.Str(),
        name = 'host',
        title = 'Host',
        description = 'SMTP Server host name.',
        default = 'localhost'),

    config.SchemaNode(
        colander.Int(),
        name = 'port',
        title = 'Port',
        description = 'SMTP Server port number.',
        default = 25),

    config.SchemaNode(
        colander.Str(),
        name = 'username',
        title = 'Username',
        description = 'SMTP Auth username.',
        default = ''),

    config.SchemaNode(
        colander.Str(),
        name = 'password',
        title = 'Password',
        description = 'SMTP Auth password.',
        default = ''),

    config.SchemaNode(
        colander.Bool(),
        name = 'no_tls',
        title = 'No tls',
        description = 'Disable TLS.',
        default = False),

    config.SchemaNode(
        colander.Bool(),
        name = 'force_tls',
        title = 'Force TLS',
        description = 'Force use TLS.',
        default = False),

    config.SchemaNode(
        colander.Bool(),
        name = 'debug',
        title = 'Debug',
        description = 'Debug smtp.',
        default = False),

    config.SchemaNode(
        colander.Str(),
        name = 'from_name',
        default = 'Site administrator'),

    config.SchemaNode(
        colander.Str(),
        name = 'from_address',
        validator = colander.Email(),
        required = False,
        default = '*****@*****.**'),

    title = 'Mail settings',
    description = 'Configuration settings for application mail.',
)
Ejemplo n.º 17
0
PTAH_CONFIG = config.register_settings(
    'ptah',

    config.SchemaNode(
        config.Sequence(), colander.SchemaNode(colander.Str()),
        name = 'managers',
        title = 'Managers',
        description = 'List of user logins with access rights to '\
            'ptah management ui.',
        default = ()),

    config.SchemaNode(
        colander.Str(),
        name = 'login',
        title = 'Login url',
        default = ''),

    config.SchemaNode(
        colander.Str(),
        name = 'pwdmanager',
        title = 'Password manager',
        description = 'Available password managers ("plain", "ssha", "bcrypt")',
        default = 'plain'),

    config.SchemaNode(
        config.Sequence(), colander.SchemaNode(colander.Str()),
        name = 'disable_modules',
        title = 'Hide Modules in Management UI',
        description = 'List of modules names to hide in manage ui',
        default = ()),

    title = 'Ptah settings',
    )
Ejemplo n.º 18
0
import colander
from ptah import config

nerdfilestest = config.register_settings(
    'nerdfilestest',

    config.SchemaNode(
        colander.Str(),
        name = 'band',
        default = 'Primus',
        title = 'Favorite band',
        description = 'This is your favorite band.'),

    config.SchemaNode(
        colander.Bool(),
        name = 'happy',
        default = True,
        title = 'Are you happy?',
        description = 'Does Ptah bring you happiness?'),

    title = 'nerdfilestest settings',
    description = 'Configuration settings for nerdfilestest.'
    )
Ejemplo n.º 19
0
CROWD = config.register_settings(
    'ptah-crowd',

    config.SchemaNode(
        colander.Bool(),
        name = 'provider',
        title = 'Default user provider',
        description = 'Enable/Disable default provider',
        default = True),

    config.SchemaNode(
        colander.Bool(),
        name = 'join',
        title = 'Site registration',
        description = 'Enable/Disable site registration',
        default = True),

    config.SchemaNode(
        colander.Str(),
        name = 'joinurl',
        title = 'Join form url',
        default = ''),

    config.SchemaNode(
        colander.Bool(),
        name = 'password',
        title = 'User password',
        description = 'Allow use to select password during registration',
        default = False),

    config.SchemaNode(
        colander.Bool(),
        name = 'validation',
        title = 'Email validation',
        description = 'Validate user account by email.',
        default = True),

    config.SchemaNode(
        colander.Bool(),
        name = 'allow-unvalidated',
        title = 'Allow un validation',
        description = 'Allow login for un Validated users.',
        default = True),

    title = 'Ptah crowd settings',
    )
Ejemplo n.º 20
0
log = logging.getLogger('ptah.view')


TEMPLATE = config.register_settings(
    'template',

    config.SchemaNode(
        colander.Str(),
        name = 'custom',
        default = '',
        title = 'Directory',
        description = 'Filesystem directory with custom templates.'),

    config.SchemaNode(
        colander.Str(),
        name = 'watcher',
        default = 'inotify',
        title = 'Filesystem watcher',
        description = 'Custom filesystem directory watcher.'),

    config.SchemaNode(
        colander.Bool(),
        name = 'chameleon_reload',
        default = False,
        title = 'Auto reload',
        description = 'Enable chameleon templates auto reload.'),

    title = 'Templates settings',
    )
TEMPLATE._manager = None
TEMPLATE._watcher = None
Ejemplo n.º 21
0
Archivo: app.py Proyecto: mcdonc/ptah
SECURITY = config.register_settings(
    'auth',

    config.SchemaNode(
        colander.Str(),
        name = 'policy',
        title = _('Authentication policy'),
        validator = colander.OneOf(types.keys()),
        required = False,
        default = ''),

    config.SchemaNode(
        colander.Str(),
        name = 'secret',
        title = _('Policy secret'),
        description = _('The secret (a string) used for auth_tkt '
                        'cookie signing'),
        required = False),

    config.SchemaNode(
        colander.Bool(),
        name = 'authorization',
        title = _('Authorization policy'),
        description = _('Enable/disable default authorization policy.'),
        required = False,
        default = True),

    title = _('Pyramid authentication settings'),
    validator = config.RequiredWithDependency('secret','policy','auth_tkt',''),
)
SECURITY['callback'] = LocalRoles