# HG changeset patch # User Lennard de Rijk # Date 1246712908 -7200 # Node ID 855ee76c16a2bb613316c94c54cf3555e8ca4c96 # Parent d7a0ab3f1965744c168ac8399130d574744e4c10 Refactored filter construction to _constructFilterForProjectSelection. This allows Grading Project Survey to overwrite this method and create its own filter. diff -r d7a0ab3f1965 -r 855ee76c16a2 app/soc/views/models/project_survey.py --- a/app/soc/views/models/project_survey.py Sat Jul 04 14:29:13 2009 +0200 +++ b/app/soc/views/models/project_survey.py Sat Jul 04 15:08:28 2009 +0200 @@ -75,8 +75,6 @@ For Args see base.View().public(). """ - from soc.logic.models.student import logic as student_logic - survey_logic = params['logic'] try: @@ -88,19 +86,10 @@ get_dict = request.GET if not 'project' in get_dict: - user_entity = user_logic.getForCurrentAccount() - - fields = {'user': user_entity, - 'scope': survey_logic.getScope(entity), - 'status': 'active'} + # get the fields needed to filter projects on + fields = self._constructFilterForProjectSelection(entity, params) - student_entity = student_logic.getForFields(fields, unique=True) - - # TODO(ljvderijk) transform StudentProject to handle multiple surveys - fields = {'student': student_entity, - 'status': 'accepted'} - - # show project selection screen + # show project selection screen using the given filter return self._selectProjects(request, page_name, params, entity, fields) return super(View, self).take(request, 'any_access', page_name=page_name, @@ -112,7 +101,7 @@ This method also take the StudentProject specified as GET param into account when querying for the SurveyRecord. - For params see base.View._getSurveyRecordFor(). + For params see survey.View._getSurveyRecordFor(). """ from soc.logic.models.student_project import logic as student_project_logic @@ -159,13 +148,43 @@ # update the properties that will be stored with the referenced project properties.update(project=project_entity) + def _constructFilterForProjectSelection(self, survey, params): + """Returns the filter needed for the Project selection view. + + Args: + survey: a Survey entity + params: the params dict for the requesting view + + Returns: + Dictionary that can be used as a input for a query. + """ + + from soc.logic.models.student import logic as student_logic + + survey_logic = params['logic'] + + user_entity = user_logic.getForCurrentAccount() + + # get the student entity for the current user and program + fields = {'user': user_entity, + 'scope': survey_logic.getScope(survey), + 'status': 'active'} + + student_entity = student_logic.getForFields(fields, unique=True) + + # TODO(ljvderijk) transform StudentProject to handle multiple surveys + fields = {'student': student_entity, + 'status': 'accepted'} + + return fields + def _selectProjects(self, request, page_name, params, survey, fields): """Shows a view upon which a User can select a Student Project to fill in the ProjectSurvey for. Args: survey: a Survey entity - fields: the filter to use on the Project List. + fields: the filter to use on the Project List rest: see base.View.public() """