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
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")
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")
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()
def get_class(self): """Return the class defined by this plugin""" return classtools.import_attribute(self.class_name)
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
def get_handler(self): return classtools.import_attribute(self.handler_class_name)(self)
def get_class(self): return classtools.import_attribute(self.class_name)
'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()))
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)