class ViewModelForm(amcat.scripts.forms.GeneralColumnsForm): start = forms.IntegerField(initial=0, min_value=0, widget=forms.HiddenInput, required=False) length = forms.IntegerField(initial=100, min_value=1, max_value=9999999, widget=forms.HiddenInput, required=False) model = forms.CharField() select_related = forms.BooleanField(required=False, initial=False) search = forms.CharField(required=False) projects = forms.ModelMultipleChoiceField(queryset=Project.objects.all(), required=False) # TODO: change to projects of user sortColumnNr = forms.IntegerField(required=False) sortOrder = forms.ChoiceField( choices=( ('asc', 'Ascending'), ('desc', 'Descending'), ), initial = 'asc', required=False) def clean_start(self): data = self.cleaned_data['start'] if data == None: data = 0 return data def clean_length(self): data = self.cleaned_data['length'] if data == None: data = 100 if data == -1: data = 99999999 # unlimited (well, sort of ;) return data def clean_model(self): """return the corresponding model with the provided string. Also handles . for instance 'coding.CodingJob' will find class 'coding.codingjob.CodingJob' but also 'authorisation.ProjectRole' will find the corresponding class""" data = self.cleaned_data['model'] try: if '.' in data: # this code is ugly.. split = data.split('.') clss = getattr(amcat.models, split[0].lower()) try: moduleobj = getattr(clss, split[1].lower()) data = split[1] except AttributeError: moduleobj = clss data = split[1] else: moduleobj = getattr(amcat.models, data.lower()) log.info('moduleobj: %s, data: %s' % (moduleobj, data)) if data.islower(): data = data.capitalize() # to make sure "medium" can also be used, not only "Medium" (for example) data = getattr(moduleobj, data) except Exception,e: log.exception('finding model problem') self._errors["model"] = self.error_class(['Invalid model name']) # if not hasattr(amcat.models, data.lower()): # self._errors["modelname"] = self.error_class(['Invalid model name']) # return None return data
class SaveAsSetForm(forms.Form): setname = forms.CharField(required=False) setproject = forms.ModelChoiceField( queryset=Project.objects.all(), required=False) # TODO: change to projects of user existingset = forms.ModelChoiceField( queryset=ArticleSet.objects.all(), required=False) #TODO: change to articlesets inside project def __init__(self, *args, **kwargs): super(SaveAsSetForm, self).__init__(*args, **kwargs) # Due to the design of (web)scripts, it is not possible to access # POST data below. A workaround is used below (navigator stores # a request object in the threads local storage) to access it, but # should be removed as soon as possible. try: from amcatnavigator.utils.auth import get_request request = get_request() except ImportError: log.debug( "AmCAT Navigator not installed! Wil not set default project / filter on existing sets." ) return if request is None: log.debug( "AmCAT Navigator not running! Wil not set default project / filter on existing sets." ) return # Try to find out if we're on the Article Selection page project_id = request.REQUEST.get("project") if project_id is None: log.debug( "Not on Article Selection page. Can't filter on existing set / default project." ) return project = Project.objects.get(id=project_id) self.fields['setproject'].widget = forms.HiddenInput() self.fields['setproject'].initial = project self.fields['existingset'].queryset = ArticleSet.objects.filter( project=project) def clean(self): cleanedData = self.cleaned_data if cleanedData['existingset']: if 'setproject' in cleanedData: del cleanedData['setproject'] if 'setname' in cleanedData: del cleanedData['setname'] else: if not cleanedData.get('setname'): self._errors["setname"] = self.error_class( ["Missing Set Name"]) if not cleanedData.get('setproject'): self._errors["setproject"] = self.error_class( ["Missing Project"]) return cleanedData
class ArticleListForm(amcat.scripts.forms.ArticleColumnsForm, amcat.scripts.forms.SelectionForm): start = forms.IntegerField(initial=0, min_value=0, widget=forms.HiddenInput, required=False) length = forms.IntegerField(initial=100, min_value=1, max_value=9999999, widget=forms.HiddenInput, required=False) highlight = forms.BooleanField(initial=False, required=False) sortColumn = forms.CharField(required=False) sortOrder = forms.ChoiceField( choices=( ('asc', 'Ascending'), ('desc', 'Descending'), ), initial = 'asc', required=False) def clean_start(self): data = self.cleaned_data['start'] if data == None: data = 0 return data def clean_length(self): data = self.cleaned_data['length'] if data == None: data = 100 if data == -1: data = 99999999 # unlimited (well, sort of ;) return data def clean_columns(self): data = self.cleaned_data['columns'] if self.cleaned_data['query'] == '' and ('keywordInContext' in data or 'hits' in data): self._errors["columns"] = self.error_class( ['Keyword in Context and Hits columns require a query']) return data
class HtmlTemplateForm(forms.Form): template = forms.CharField(required=False)