diff --git a/mgmt/bugs_views.py b/mgmt/bugs_views.py index 3b29200..6b5a6f7 100644 --- a/mgmt/bugs_views.py +++ b/mgmt/bugs_views.py @@ -12,6 +12,7 @@ from forms import BugForm,BugPriorityForm,BugComplexityForm,CommentForm @login_required @render_to('bug_report.html') def bug_report(request,pid): + "Create a bug report" project = Project.objects.get(pk=pid) if request.method=='POST': form = BugForm(request.POST) @@ -33,6 +34,7 @@ def bug_report(request,pid): @render_to('bug.html') def one_bug(request,id): + "Show bug with given ID" bug = Bug.objects.get(pk=id) if can(request.user,'comment'): form = CommentForm() @@ -102,6 +104,7 @@ def one_bug(request,id): @check_auth(Bug,'edit') @render_to('edit_bug.html') def edit_bug(request,bug): + "Edit given bug" if request.method=='POST': form = BugForm(request.POST,instance=bug) if form.is_valid(): @@ -117,6 +120,7 @@ def edit_bug(request,bug): @render_to('all_bugs.html') def all_bugs(request): + "Show a list of all bugs" page,pages,bugs = get_bugs(request) return {'bugs': bugs, 'current_page': page, @@ -124,6 +128,7 @@ def all_bugs(request): @render_to('all_bugs.html') def bugs_by_state(request,sid): + "Show a list of all bugs in given state" state = BugState.objects.get(pk=sid) page,pages,bugs = Bug.objects.filter(status=state) return {'bugs': bugs, diff --git a/mgmt/context.py b/mgmt/context.py index 87e1e36..0163aff 100644 --- a/mgmt/context.py +++ b/mgmt/context.py @@ -11,11 +11,15 @@ import debug from models import * +# Export django.conf.settings to all modules hms.modules.settings = settings hms.modules.exports.append('settings') hms.modules.init() def make_chart(path): + """Return HTML for bugs chart. + Show chart of bugs in given projects on /projects/id/, and + chart of all bugs on other urls.""" p1 = re.compile(settings.BASE_URL+'/projects/(\d+)/$') m = p1.match(path) if m: @@ -36,6 +40,8 @@ def make_chart(path): return title+hms.modules.bug_chart(d) def add_blocks(request): + """Add {{blocks}} variable to context, a dict, containing all blocks. + Also, add {{login_message}} and {{chart}} for bugs chart.""" blocks = {} logged = request.user.is_authenticated() for blk in hms.generate('block'): @@ -61,13 +67,16 @@ def add_blocks(request): return dict(blocks=blocks,login_message=log_msg, chart=make_chart(request.path)) def add_menu(request): + """Add {{menu}} variable to context.""" menu = hms.modules.menu(request) return dict(menu=menu) def for_rss(request): + """Add variables, needed to form RSS feeds.""" return dict(pub_date = datetime.now().strftime('%a, %d %b %Y %H:%M:%S') ) def debug_messages(request): + "Add {{debug}} variable for all debug messages" if settings.DEBUG: return dict(debug = debug.dump()) else: diff --git a/mgmt/decorators.py b/mgmt/decorators.py index 1d1f289..fc027c1 100644 --- a/mgmt/decorators.py +++ b/mgmt/decorators.py @@ -4,6 +4,7 @@ from rights import can from utils import render_it,render_rss def login_required(func): + "Show page only for authorized users. Redirect guests to LOGIN_URL." def wrapper(request,*args,**kwargs): if request.user.is_authenticated(): return func(request,*args,**kwargs) @@ -17,6 +18,7 @@ def login_required(func): #################### def check_auth(cls,action): + "Show page only for users, who is allowed to view it. Return Http403 for others." def decorator(func): def wrapper(request,id,*args,**kwargs): obj = cls.objects.get(pk=id) @@ -24,11 +26,13 @@ def check_auth(cls,action): return HttpResponseForbidden("<h1>You are not allowed to view this page</h1>") return func(request,obj,*args,**kwargs) wrapper.__name__ = func.__name__ + wrapper.__doc__ = func.__doc__ return wrapper decorator.__name__ = 'check_auth' return decorator def render_to(template): + "If function returns dict, render it with given template. Otherwise, just return the result." def decorator(func): def wrapper(request,*args,**kwargs): r = func(request,*args,**kwargs) @@ -37,14 +41,17 @@ def render_to(template): else: return r wrapper.__name__ = func.__name__ + wrapper.__doc__ = func.__doc__ return wrapper return decorator def rss(template): + "Form RSS feed with given template." def decorator(func): def wrapper(request,*args,**kwargs): r = func(request,*args,**kwargs) return render_rss(template, r, request) wrapper.__name__ = func.__name__ + wrapper.__doc__ = func.__doc__ return wrapper return decorator diff --git a/mgmt/documents_views.py b/mgmt/documents_views.py index ffe9c14..2fcc101 100644 --- a/mgmt/documents_views.py +++ b/mgmt/documents_views.py @@ -10,6 +10,7 @@ from forms import CommentForm,DocForm @check_auth(Project,'view') @render_to('project_docs.html') def project_documents(request,project): + "Show a list of all documents for given project." cats = Category.objects.filter(document__project=project).distinct() return {'project': project, 'categories': cats} @@ -17,6 +18,7 @@ def project_documents(request,project): @check_auth(Document,'view') @render_to('document.html') def one_document(request,doc): + "Show given document." if can(request.user,'comment'): form = CommentForm() else: diff --git a/mgmt/models.py b/mgmt/models.py index d274a5f..6048b63 100644 --- a/mgmt/models.py +++ b/mgmt/models.py @@ -10,6 +10,7 @@ from django.utils.translation import activate # _ = lambda s: s class Object(models.Model): + "Base abstract model." name = models.CharField(_("Name"),max_length=64) text = models.TextField(_("Text")) created = models.DateTimeField(_("Created")) diff --git a/mgmt/project_views.py b/mgmt/project_views.py index d416236..f6b5d8b 100644 --- a/mgmt/project_views.py +++ b/mgmt/project_views.py @@ -31,6 +31,7 @@ def one_project(request,project): @check_auth(Project,'view') @render_to('project_bugs.html') def project_bugs(request,project): + "Show a list of bugs for given project." page,pages,bugs = get_bugs(request,project.id) for bug in bugs: bug.complexity_str = dict(settings.COMPLEXITY_CHOICES).get(bug.complexity,'Unknown') diff --git a/mgmt/reports_views.py b/mgmt/reports_views.py index a9629fe..eec559e 100644 --- a/mgmt/reports_views.py +++ b/mgmt/reports_views.py @@ -15,6 +15,7 @@ def one_report(request,rid): @render_to('task_reports.html') def task_reports(request,tid): + "Show a list of reports for given task." task = Task.objects.get(pk=tid) reports = task.report_set.select_related().all() return {'task': task, diff --git a/mgmt/requests_views.py b/mgmt/requests_views.py index 9e64f71..bc4b207 100644 --- a/mgmt/requests_views.py +++ b/mgmt/requests_views.py @@ -9,6 +9,7 @@ from forms import RequestForm,RequestStateForm,CommentForm @render_to('requests.html') def requests(request,pid): + "Show a list of all feature requests for given project" project = Project.objects.get(pk=pid) rs = project.request_set.all() can_request = can(request.user,'request',project) diff --git a/mgmt/rights.py b/mgmt/rights.py index 8db62ea..4fad778 100644 --- a/mgmt/rights.py +++ b/mgmt/rights.py @@ -18,6 +18,7 @@ def can_change_bug_state(user,bug,new_state): return False def can(user,action,object=None,target=None): + "Main function, which determines whether {user} can do {action} within {object}." cls = object.__class__.__name__ if action in ['comment','send bug','request']: return user.is_authenticated() @@ -66,6 +67,7 @@ def can(user,action,object=None,target=None): return False def possible_changes(bug,user): + "Return a list of bug states, to which given user can turn given bug." r = [] for new in range(1,6): if can_change_bug_state(user,bug,new): diff --git a/mgmt/tasks_views.py b/mgmt/tasks_views.py index f8c48fb..4798c8d 100644 --- a/mgmt/tasks_views.py +++ b/mgmt/tasks_views.py @@ -8,6 +8,7 @@ from forms import TaskStateForm,TaskModelForm @render_to('project_tasks.html') def project_tasks(request,pid): + "A list of all tasks for given project." project = Project.objects.get(pk=pid) tasks = project.task_set.all() can_task = can(request.user,'create task',project) diff --git a/mgmt/utils.py b/mgmt/utils.py index 9adc659..56db47c 100644 --- a/mgmt/utils.py +++ b/mgmt/utils.py @@ -14,11 +14,13 @@ from forms import CommentForm ############ def render_it(template,dict,request): + "Render template with given context. Use some context processors." c = RequestContext(request,dict,[add_blocks,add_menu,debug_messages]) t = get_template(template) return HttpResponse(t.render(c)) def render_rss(template,dict,request): + "Render template, using only context processors suitable for RSS." c = RequestContext(request,dict,[for_rss]) t = get_template(template) return HttpResponse(t.render(c),mimetype='application/xml') diff --git a/mgmt/views.py b/mgmt/views.py index 8a78b7c..f801cc2 100644 --- a/mgmt/views.py +++ b/mgmt/views.py @@ -31,6 +31,7 @@ from rss_views import * @render_to('main.html') def main(request): + "Create main page - a list of projects." if request.user.is_authenticated(): projects = Project.objects.all() else: @@ -84,6 +85,7 @@ def my_page(request): @login_required @render_to('private_message.html') def private_message(request,mid): + "Show given private message" msg = PrivateMsg.objects.get(pk=mid) if request.user.id != msg.reciever.id: return HttpResponseForbidden('<h1>Forbidden!</h1>')