コード例 #1
0
ファイル: add_plugin.py プロジェクト: edisona/amcat
    def _bind_form(self, *args, **kargs):
        form = super(AddPlugin, self)._bind_form(*args, **kargs)
        form.data = form.data.copy()

        if form.data['module'] is None:
            if "/" in form.data['class_name']:
                # filename, so find and import module and class is first defined Script class
                form.data['module'] = guess_module(form.data['class_name'])
                cls = classtools.get_class_from_module(form.data['module'],
                                                       Script)
                form.data['class_name'] = cls.__name__
            elif "." in form.data['class_name']:
                # qualified class name, so split into module and class
                mod, cls = form.data['class_name'].rsplit(".", 1)
                form.data['module'], form.data['class_name'] = mod, cls
            else:
                raise forms.ValidationError(
                    "If module is not given,"
                    "class name needs to be fully qualified")
        elif set(form.data['class_name']) & set([".", "/"]):
            raise forms.ValidationError(
                "If module name is given, class name %r cannot contain"
                ". or / characters" % form.data['class_name'])
        try:
            plugin_class = classtools.import_attribute(form.data['module'],
                                                       form.data['class_name'])
        except ImportError as e:
            raise forms.ValidationError(
                "Class %s.%s could not be imported: %s" %
                (form.data['module'], form.data['class_name'], e))
        if not form.data['label']:
            form.data['label'] = form.data['class_name']
        if not form.data['description']:
            if plugin_class.__doc__ is None:
                plugin_module = classtools.import_attribute(
                    form.data['module'])
                form.data['description'] = plugin_module.__doc__.strip()
            else:
                form.data['description'] = plugin_class.__doc__.strip()
        if form.data['type'] is None:
            superclass = plugin_class.__bases__[0]
            form.data['type'] = ".".join(
                (superclass.__module__, superclass.__name__))

        lan = form.data['analysis_language']
        if lan:
            try:
                int(lan)
            except ValueError:
                if isinstance(lan, basestring):
                    lan = Language.objects.get(label=lan)
                form.data['analysis_language'] = lan.id

        f = self.options_form(
            form.data)  # hack: re-bind form to propagate data
        print("XXXXXXXXXXX", f.data)
        return f
コード例 #2
0
ファイル: test_classtools.py プロジェクト: CJStuart/amcat
    def test_import_attribute(self):
        t = classtools.import_attribute("amcat.tools.tests.test_classtools", "TestClassTools")
        self.assertEqual(t.__name__, 'TestClassTools')
        t = classtools.import_attribute("amcat.tools.tests.test_classtools.TestClassTools")
        self.assertRaises(ImportError, classtools.import_attribute, "__wva_does_not_exist")
        self.assertRaises(ImportError, classtools.import_attribute,
                          "amcat.tools.classtools", "__wva_does_not_exist")
        self.assertRaises(ImportError, classtools.import_attribute,
                          "amcat.tools.classtools.__wva_does_not_exist")

        self.assertEqual(classtools.import_attribute(u"amcat.models.article").__name__, "amcat.models.article")
コード例 #3
0
    def test_import_attribute(self):
        t = classtools.import_attribute("amcat.tools.tests.test_classtools",
                                        "TestClassTools")
        self.assertEqual(t.__name__, 'TestClassTools')
        t = classtools.import_attribute(
            "amcat.tools.tests.test_classtools.TestClassTools")
        self.assertRaises(ImportError, classtools.import_attribute,
                          "__wva_does_not_exist")
        self.assertRaises(ImportError, classtools.import_attribute,
                          "amcat.tools.classtools", "__wva_does_not_exist")
        self.assertRaises(ImportError, classtools.import_attribute,
                          "amcat.tools.classtools.__wva_does_not_exist")

        self.assertEqual(
            classtools.import_attribute(u"amcat.models.article").__name__,
            "amcat.models.article")
コード例 #4
0
ファイル: webscript.py プロジェクト: pombredanne/amcat
def webscript_task(self, cls, **kwargs):
    task_id = self.request.id
    # TODO: Dit moet weg, stub code om status door te geven
    if isinstance(cls, (str, unicode)):
        cls = classtools.import_attribute(cls)
    webscript = cls(**kwargs)
    webscript.progress_monitor.add_listener(CeleryProgressUpdater(task_id).update)
    return webscript.run()
コード例 #5
0
ファイル: plugin.py プロジェクト: pombredanne/amcat
 def get_class(self):
     """Return the class defined by this plugin"""
     return classtools.import_attribute(self.class_name)
コード例 #6
0
ファイル: __init__.py プロジェクト: pombredanne/amcat
MODELS = [
    'Article', 'AmCAT', 'Role', 'ProjectRole', 'Medium', 'Language',
    'CodingSchema', 'CodingSchemaField', 'CodebookCode',
    'CodingSchemaFieldType', 'CodedArticleStatus',
    'django.contrib.auth.models.Group',
    'django.contrib.auth.models.Permission', 'PluginType', "RuleSet",
    "CodingRuleAction"
]

# Automatically generate resources for these models
for modelname in MODELS:
    if "." in modelname:
        package, modelname = modelname.rsplit(".", 1)
    else:
        package, modelname = "amcat.models", modelname
    model = classtools.import_attribute(package, modelname)
    resource = AmCATResource.create_subclass(model)
    setattr(sys.modules[__name__], resource.__name__, resource)


def all_resources():
    for r in globals().values():
        if (isinstance(r, (type, types.ClassType))
                and issubclass(r, AmCATResource) and r != AmCATResource):
            yield r


def get_resource_for_model(model):
    for resource in all_resources():
        if resource.model == model:
            return resource
コード例 #7
0
ファイル: task.py プロジェクト: BBie/amcat
 def get_handler(self):
     return classtools.import_attribute(self.handler_class_name)(self)
コード例 #8
0
ファイル: task.py プロジェクト: BBie/amcat
 def get_class(self):
     return classtools.import_attribute(self.class_name)
コード例 #9
0
ファイル: task.py プロジェクト: isususi/amcat
 def get_handler(self):
     return classtools.import_attribute(self.handler_class_name)(self)
コード例 #10
0
ファイル: task.py プロジェクト: isususi/amcat
 def get_class(self):
     return classtools.import_attribute(self.class_name)
コード例 #11
0
ファイル: __init__.py プロジェクト: CJStuart/amcat
          'Medium', 'Language',
          'CodingSchema', 'CodingSchemaField',
          'CodebookCode', 'CodingSchemaFieldType', 'CodedArticleStatus',
          'django.contrib.auth.models.Group', 'django.contrib.auth.models.Permission',
          'PluginType',
          "RuleSet",
          "CodingRuleAction",
          "Query"]

# Automatically generate resources for these models
for modelname in MODELS:
    if "." in modelname:
        package, modelname = modelname.rsplit(".", 1)
    else:
        package, modelname = "amcat.models", modelname
    model = classtools.import_attribute(package, modelname)
    resource =  AmCATResource.create_subclass(model)
    setattr(sys.modules[__name__], resource.__name__, resource)

def all_resources():
    for r in globals().values():
        if (isinstance(r, (type, types.ClassType))
            and issubclass(r, AmCATResource)
            and r != AmCATResource):
            yield r

def get_resource_for_model(model):
    for resource in all_resources():
        if resource.model == model:
            return resource
    raise ValueError("No resource registered for model {model}".format(**locals()))
コード例 #12
0
ファイル: plugin.py プロジェクト: CJStuart/amcat
 def get_class(self):
     """Return the class defined by this plugin"""
     return classtools.import_attribute(self.class_name)
コード例 #13
0
 def get_analysis_script(self):
     analysis = self.api.get_object("analysis", self.analysis_id)
     plugin = self.api.get_object("plugin", analysis.plugin)
     return classtools.import_attribute(plugin.module,
                                        plugin.class_name)(analysis)