Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
class HtmlTemplateForm(forms.Form):
    template = forms.CharField(required=False)