Beispiel #1
0
    def test_change_cls_method(self):
        class Child(object):
            def a(self):
                return 'child'

        self.assertTrue(check_cls_has_attr(Child, 'a', method=True, overriden=True))
        self.assertEqual(Child().a(), 'child')

        change_cls_method(Child, 'a', 'new_a')

        self.assertFalse(check_cls_has_attr(Child, 'a', method=True, overriden=True))
        self.assertTrue(check_cls_has_attr(Child, 'new_a', method=True, overriden=True))
        self.assertEqual(Child().new_a(), 'child')
Beispiel #2
0
    def test_change_cls_method_replaces_with_new(self):
        class Child(object):
            def a(self):
                return 'child'

        self.assertTrue(check_cls_has_attr(Child, 'a', method=True, overriden=True))
        self.assertEqual(Child().a(), 'child')

        change_cls_method(Child, 'a', 'new_a', lambda self: 'child2')

        self.assertTrue(check_cls_has_attr(Child, 'a', method=True, overriden=True))
        self.assertTrue(check_cls_has_attr(Child, 'new_a', method=True, overriden=True))
        self.assertEqual(Child().new_a(), 'child')
        self.assertEqual(Child().a(), 'child2')
Beispiel #3
0
def _check_cls_method_error(cls, methods_config):
    if 'replacements' in methods_config:
        for replacement, is_method in methods_config['replacements']:
            if check_cls_has_attr(cls, replacement, method=is_method, overriden=True):
                return None
    if not any([check_cls_has_attr(cls, method_name, method=True, overriden=True)
                for method_name in methods_config['methods']]):
        # log_msg("[%s] ERROR. Class method `%s` not found" % (cls.__name__, str(methods_config['methods'])))
        return "Class method `%s` not found" % str(methods_config['methods'])

    if 'requirements' in methods_config:
        for requirement, is_method in methods_config['requirements']:
            if not check_cls_has_attr(cls, requirement, method=is_method, overriden=True):
                # log_msg("[%s] ERROR. Requirement for class method `%s` not found: %s" % (cls.__name__, str(methods_config['methods']), requirement))
                return "Requirement for class method `%s` not found: %s" % (str(methods_config['methods']), requirement)
    return None
Beispiel #4
0
    def test_true_if_checkoverriden_and_base_class_not_have_attr(self):
        class Parent(object):
            pass

        class Child(Parent):
            attr = 'Child'

        self.assertTrue(check_cls_has_attr(Child, 'attr', overriden=True))
Beispiel #5
0
    def test_true_if_checkoverriden_and_overriden_in_child(self):
        class Parent(object):
            attr = 'Parent'

        class Child(Parent):
            attr = 'Child'

        self.assertTrue(check_cls_has_attr(Child, 'attr', overriden=True))
Beispiel #6
0
    def test_false_if_checkoverriden_and_base_class_has_attr(self):
        class Parent(object):
            attr = 'Parent'

        class Child(Parent):
            pass

        self.assertFalse(check_cls_has_attr(Child, 'attr', overriden=True))
Beispiel #7
0
    def test_true_if_base_class_has_attr(self):
        class Parent(object):
            attr = 'Parent'

        class Child(Parent):
            pass

        self.assertTrue(check_cls_has_attr(Child, 'attr', overriden=False))
Beispiel #8
0
def _bsm_check_cls_attributes(cls):
    errors = []
    # should have mandatory attributes (not methods)
    mandatory_attrs = ['name', 'allowed_domains', 'start_urls']
    for attr_name in mandatory_attrs:
        if not check_cls_has_attr(cls, attr_name, method=False, overriden=True):
            # log_msg("[%s] ERROR. Class attribute not found: %s" % (cls.__name__, attr_name))
            errors.append("Class attribute not found: %s" % attr_name)
    return errors
Beispiel #9
0
    def test_true_if_base_class_has_method(self):
        class Parent(object):
            def attr(self):
                print 'Parent'

        class Child(Parent):
            pass

        self.assertTrue(check_cls_has_attr(Child, 'attr', method=True, overriden=False))
Beispiel #10
0
def _bsm_check_cls_overrides(cls):
     # should not override specific methods
    methods_should_not_be_changes = [
        '_metadata_enabled', '_get_prev_crawl_file', '_get_prev_crawl_meta_file', 'spider_idle', 'spider_closed',
        'full_run_required', '_get_matches_new_system_request', '_get_matches_old_system_request',
        'parse_matches_new_system', 'parse_matches_old_system', 'bsm_retry_download',
        # '_start_requests_full', '_start_requests_simple'
    ]
    overrides = []
    for method_name in methods_should_not_be_changes:
        if check_cls_has_attr(cls, method_name, method=True, overriden=True):
            # log_msg("[%s] ERROR. Method override found: %s" % (cls.__name__, method_name))
            overrides.append("Method override found: %s" % method_name)

    return overrides
Beispiel #11
0
    def test_false_if_not_have(self):
        class Child(object):
            pass

        self.assertFalse(check_cls_has_attr(Child, 'attr'))
Beispiel #12
0
    def test_true_if_has_method(self):
        class Child(object):
            def attr(self):
                print 'Child'

        self.assertTrue(check_cls_has_attr(Child, 'attr', method=True))
Beispiel #13
0
    def test_false_if_has_nonmethod_with_the_same_name(self):
        class Child(object):
            attr = 'Child'

        self.assertFalse(check_cls_has_attr(Child, 'attr', method=True))
Beispiel #14
0
    def test_true_if_has_attr(self):
        class Child(object):
            attr = 'Child'

        self.assertTrue(check_cls_has_attr(Child, 'attr'))
Beispiel #15
0
    def test_false_if_has_method_with_the_same_name(self):
        class Child(object):
            def attr(self):
                print 'Child'

        self.assertFalse(check_cls_has_attr(Child, 'attr'))