Example #1
0
def test_section_added_to_section_hook():
    calls = []

    config = Config({'uploads': {
        'db': {
            'user': '******',
        }
    }})

    @config.hooks.section_added_to_section
    def section_added_to_section1(*args, **kwargs):
        calls.append(
            ('on_root', args, sub_dict(kwargs,
                                       ('section', 'subject', 'alias'))))

    @config.uploads.hooks.section_added_to_section
    def section_added_to_section2(*args, **kwargs):
        calls.append(('on_uploads', args,
                      sub_dict(kwargs, ('section', 'subject', 'alias'))))

    assert calls == []

    config.add_section('downloads', config.create_section())
    assert len(calls) == 1
    assert calls[-1:] == [
        ('on_root', (), {
            'subject': config.downloads,
            'alias': 'downloads',
            'section': config
        }),
    ]

    config.uploads.db.add_section('backups', config.create_section())
    assert len(calls) == 3
    assert calls[-2:] == [
        ('on_uploads', (), {
            'subject': config.uploads.db.backups,
            'alias': 'backups',
            'section': config.uploads.db
        }),
        ('on_root', (), {
            'subject': config.uploads.db.backups,
            'alias': 'backups',
            'section': config.uploads.db
        }),
    ]
Example #2
0
def test_item_added_to_section_hook():
    calls = []

    config = Config({'uploads': {
        'db': {
            'user': '******',
        }
    }})

    @config.hooks.item_added_to_section
    def item_added_to_section(*args, **kwargs):
        calls.append(
            ('first', args, sub_dict(kwargs, ('section', 'subject', 'alias'))))

    @config.hooks.item_added_to_section
    def item_added_to_section2(*args, **kwargs):
        calls.append(
            ('second', args, sub_dict(kwargs,
                                      ('section', 'subject', 'alias'))))

    assert calls == []

    # Adding a section to a section is unrelated
    config.add_section('downloads', config.create_section())

    assert calls == []

    password = config.create_item(name='password')
    threads = config.create_item(name='threads', default=5)
    assert calls == []

    config.uploads.db.add_item(password.name, password)

    # Note that the item added to Config is actually a different instance to the one that was passed to add_item.
    # This is because we do deepcopy in add_item.
    assert calls == [
        ('first', (), {
            'section': config.uploads.db,
            'subject': config.uploads.db.password,
            'alias': 'password'
        }),
        ('second', (), {
            'section': config.uploads.db,
            'subject': config.uploads.db.password,
            'alias': 'password'
        }),
    ]

    config.uploads.add_item('threads_alias', threads)
    assert len(calls) == 4

    assert calls[2:] == [
        ('first', (), {
            'section': config.uploads,
            'subject': config.uploads.threads,
            'alias': 'threads_alias'
        }),
        ('second', (), {
            'section': config.uploads,
            'subject': config.uploads.threads,
            'alias': 'threads_alias'
        }),
    ]