Skip to content
This repository was archived by the owner on May 7, 2024. It is now read-only.

Commit e522b3c

Browse files
committed
Migration project settings to django
1 parent 6cbeeab commit e522b3c

7 files changed

Lines changed: 254 additions & 267 deletions

File tree

app.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
(re.compile(r'/\w+/\w+/watchers'), django_app),
2828
(re.compile(r'/\w+/\w+/forkers'), django_app),
2929
(re.compile(r'/\w+/\w+/archive'), django_app),
30+
(re.compile(r'/\w+/\w+/settings'), django_app),
3031
(re.compile(r'/.*'), web)]
3132

3233

vilya/urls.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from views.django import gist_comment
2525
from views.django import badge
2626
from views.django import project
27+
from views.django import project_setting
2728
from views.django import trello
2829

2930

@@ -81,6 +82,19 @@
8182
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/watchers/?$', project.watchers, name="project_watchers"),
8283
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/forkers/?$', project.forkers, name="project_forkers"),
8384
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/archive/(?P<revision>\w+)/?$', project.archive, name="project_archive"),
85+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/?$', project_setting.index, name="project_setting_index"),
86+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/add_committer/?$', project_setting.add_committer, name="project_setting_add_committer"),
87+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/del_committer/?$', project_setting.del_committer, name="project_setting_del_committer"),
88+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/sphinx_docs/?$', project_setting.sphinx_docs, name="project_setting_sphinx_docs"),
89+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/hooks/?$', project_setting.hooks_index, name="project_setting_hooks_index"),
90+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/hooks/new/?$', project_setting.hooks_new, name="project_setting_hooks_new"),
91+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/hooks/(?P<id>[0-9]+)/?$', project_setting.hooks_hook, name="project_setting_hooks_hook"),
92+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/conf/?$', project_setting.conf, name="project_setting_conf"),
93+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/pages/?$', project_setting.pages, name="project_setting_pages"),
94+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/transfer_project/?$', project_setting.transfer_project, name="project_setting_transfer_project"),
95+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/rename_project/?$', project_setting.rename_project, name="project_setting_rename_project"),
96+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/groups/?$', project_setting.groups_index, name="project_setting_groups_index"),
97+
url(r'^(?P<username>\w+)/(?P<projectname>\w+)/settings/groups/destroy/?$', project_setting.groups_destory, name="project_setting_groups_destroy"),
8498
# FIXME(xutao) move `^watch/?$` to user
8599
url(r'^watch/?$', project.watch_index, name="project_watch_index"),
86100
url(r'^watch/(?P<id>[0-9]+)/?$', project.watch, name="project_watch"),

vilya/views/__init__.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
from vilya.views.uis.code_review import CodeReviewUI
2323
from vilya.views.uis.pr_comment import PrCommentUI
2424
from vilya.views.uis.issue import IssueBoardUI, IssueCommentUI
25-
from vilya.views.uis.settings import SettingsUI
2625
from vilya.views.util import jsonize
2726
from vilya.views.fair import FairUI
2827
from vilya.views.hub.search_beta import SrcIndexUI, SearchUI
@@ -129,7 +128,7 @@ def _q_lookup(self, request, url_part):
129128
class CodeUI:
130129
_q_exports = [
131130
'hooks', 'graph', 'commit', 'pull', 'newpull', 'comments',
132-
'compare', 'line_comments', 'settings', 'browsefiles', 'pulls',
131+
'compare', 'line_comments', 'browsefiles', 'pulls',
133132
'docs', 'remove', 'code_review', 'pr_comment', 'issues',
134133
'issue_comments', 're_index_docs', 'src_index',
135134
'search', 'pages', 'xdocs', 'dashboard',
@@ -221,10 +220,6 @@ def code_review(self):
221220
def pr_comment(self):
222221
return PrCommentUI(self.proj_name)
223222

224-
@property
225-
def settings(self):
226-
return SettingsUI(self.proj_name)
227-
228223
@property
229224
def browsefiles(self):
230225
return BrowsefilesUI(self.proj_name)
Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from django.http import Http404
4+
from django.http import HttpResponse
5+
from django.http import HttpResponseRedirect
6+
from django.http import HttpResponseForbidden
7+
from django.views.decorators.csrf import csrf_exempt
8+
from vilya.libs.template import st
9+
10+
11+
@csrf_exempt
12+
def index(request, username, projectname):
13+
from vilya.models.team import Team
14+
from vilya.models.project import CodeDoubanProject
15+
from vilya.models.user import User
16+
name = '/'.join([username, projectname])
17+
project = CodeDoubanProject.get_by_name(name)
18+
user = request.user
19+
if not project:
20+
raise Http404
21+
if not project.is_owner(request.user):
22+
return HttpResponseForbidden()
23+
24+
if request.method == 'GET':
25+
teams = Team.gets()
26+
owner = User(project.owner_id)
27+
committers = project.get_committers_by_project(project.id)
28+
29+
if project.fork_from:
30+
fork_from = CodeDoubanProject.get(project.fork_from)
31+
32+
return HttpResponse(st('settings/main.html', **locals()))
33+
34+
elif request.method == 'POST':
35+
if user.name == project.owner_id:
36+
summary = request.POST.get('summary', '')
37+
product = request.POST.get('product', '')
38+
intern_banned = request.POST.get('intern_banned', None)
39+
project.update(summary, product, name, intern_banned)
40+
41+
return HttpResponseRedirect('/%s/settings' % name)
42+
43+
44+
def add_committer(request, username, projectname):
45+
from vilya.models.project import CodeDoubanProject
46+
name = '/'.join([username, projectname])
47+
project = CodeDoubanProject.get_by_name(name)
48+
user = request.user
49+
if request.method == 'POST':
50+
if user.name == project.owner_id:
51+
committers = request.POST.get('username', '')
52+
committers = committers.split(' ')
53+
for committer in committers:
54+
project.add_committer(project.id, committer)
55+
return HttpResponseRedirect('/%s/settings' % name)
56+
57+
58+
def del_committer(request, username, projectname):
59+
from vilya.models.project import CodeDoubanProject
60+
name = '/'.join([username, projectname])
61+
project = CodeDoubanProject.get_by_name(name)
62+
user = request.user
63+
if request.method == 'POST':
64+
if user.name == project.owner_id:
65+
committers = request.POST.get('username', '')
66+
project.del_committer(project.id, committers)
67+
return HttpResponseRedirect('/%s/settings' % name)
68+
69+
70+
def sphinx_docs(request, username, projectname):
71+
from tasks import sphinx_builds_add
72+
from vilya.models.sphinx_docs import SphinxDocs
73+
from vilya.models.project import CodeDoubanProject
74+
name = '/'.join([username, projectname])
75+
project = CodeDoubanProject.get_by_name(name)
76+
user = request.user
77+
docs = SphinxDocs(name)
78+
if request.GET.get('force_rebuild') == 'mq':
79+
sphinx_builds_add(name)
80+
return HttpResponseRedirect('/%s/settings/sphinx_docs' % name)
81+
if request.GET.get('force_rebuild') == 'direct':
82+
docs.build_all()
83+
return HttpResponseRedirect('/%s/settings/sphinx_docs' % name)
84+
tdt = {
85+
'project': project,
86+
'request': request,
87+
'enabled': docs.enabled,
88+
'last_build': docs.last_build_info(),
89+
'user': user,
90+
}
91+
return HttpResponse(st('settings/sphinx_docs.html', **tdt))
92+
93+
94+
def hooks_index(request, username, projectname):
95+
# FIXME(xutao) remove TELCHAR_URL
96+
from vilya.models.consts import FEATURE_HOOK_URLS, TELCHAR_URL
97+
from vilya.models.project import CodeDoubanProject
98+
name = '/'.join([username, projectname])
99+
errors = ''
100+
user = request.user
101+
project = CodeDoubanProject.get_by_name(name)
102+
hooks = [hook for hook in project.hooks
103+
if hook.url not in FEATURE_HOOK_URLS]
104+
enabled_telchar = next((hook for hook in project.hooks
105+
if hook.url == TELCHAR_URL), False)
106+
return HttpResponse(st('settings/hooks.html', **locals()))
107+
108+
109+
@csrf_exempt
110+
def hooks_new(request, username, projectname):
111+
from vilya.models.hook import CodeDoubanHook
112+
from vilya.models.project import CodeDoubanProject
113+
name = '/'.join([username, projectname])
114+
errors = ''
115+
user = request.user
116+
url = request.get_form_var('url')
117+
project = CodeDoubanProject.get_by_name(name)
118+
hooks = project.hooks
119+
if request.method == "POST":
120+
hook = CodeDoubanHook(0, url, project.id)
121+
exists_id = CodeDoubanHook.get_id_by_url(project.id, url)
122+
errors = hook.validate()
123+
if not project.is_owner(user):
124+
errors.append("You can't set hooks for this project")
125+
if exists_id is not None:
126+
errors.append("This hook url has exists")
127+
if not errors:
128+
CodeDoubanHook.add(hook.url, hook.project_id)
129+
return HttpResponseRedirect('/%s/settings/hooks' % name)
130+
return HttpResponse(st('settings/hooks.html', **locals()))
131+
132+
133+
def hooks_hook(request, username, projectname, id):
134+
from vilya.models.project import CodeDoubanProject
135+
name = '/'.join([username, projectname])
136+
user = request.user
137+
hook_id = id
138+
project = CodeDoubanProject.get_by_name(name)
139+
if request.get_form_var('_method') == 'delete' \
140+
and project.is_owner(user):
141+
hooks = project.hooks
142+
hook = (h for h in hooks if int(h.id) == int(hook_id)).next()
143+
hook.destroy()
144+
return HttpResponseRedirect('/%s/settings/hooks' % name)
145+
146+
147+
def conf(request, username, projectname):
148+
from vilya.models.project import CodeDoubanProject
149+
name = '/'.join([username, projectname])
150+
project = CodeDoubanProject.get_by_name(name)
151+
user = request.user
152+
tdt = {
153+
'user': user,
154+
'project': project,
155+
'request': request,
156+
}
157+
return HttpResponse(st('settings/config.html', **tdt))
158+
159+
160+
def pages(request, username, projectname):
161+
from vilya.models.sphinx_docs import SphinxDocs
162+
from vilya.models.project import CodeDoubanProject
163+
name = '/'.join([username, projectname])
164+
user = request.user
165+
project = CodeDoubanProject.get_by_name(name)
166+
docs = SphinxDocs(name)
167+
tdt = {
168+
'project': project,
169+
'request': request,
170+
'user': user,
171+
'docs': docs,
172+
'last_build': docs.last_build_info(),
173+
}
174+
return HttpResponse(st('settings/pages.html', **tdt))
175+
176+
177+
def transfer_project(request, username, projectname):
178+
from vilya.models.project import CodeDoubanProject
179+
name = '/'.join([username, projectname])
180+
project = CodeDoubanProject.get_by_name(name)
181+
user_id = request.GET.get('username')
182+
if user_id:
183+
project.transfer_to(user_id)
184+
return HttpResponse('transfer success')
185+
return HttpResponse('please input a username')
186+
187+
188+
def rename_project(request, username, projectname):
189+
from vilya.models.project import CodeDoubanProject
190+
name = '/'.join([username, projectname])
191+
project = CodeDoubanProject.get_by_name(name)
192+
repo_name = request.GET.get('repo_name')
193+
if repo_name:
194+
if project.rename(repo_name) is not False:
195+
return HttpResponseRedirect(project.url)
196+
else:
197+
return HttpResponse("repo name already exist")
198+
return HttpResponse('please input a repo name')
199+
200+
201+
def groups_index(request, username, projectname):
202+
from vilya.models.team import Team
203+
from vilya.models.team_group import TeamGroup
204+
from vilya.models.project import CodeDoubanProject
205+
name = '/'.join([username, projectname])
206+
project = CodeDoubanProject.get_by_name(name)
207+
group_name = request.GET.get('group', '')
208+
if not group_name:
209+
return HttpResponseRedirect("%ssettings/" % project.url)
210+
team, _, group = group_name.rpartition('/')
211+
t = Team.get_by_uid(team)
212+
if not t:
213+
return HttpResponseRedirect("%ssettings/" % project.url)
214+
g = TeamGroup.get(team_id=t.id, name=group)
215+
if not g:
216+
return HttpResponseRedirect("%ssettings/" % project.url)
217+
g.add_project(project_id=project.id)
218+
return HttpResponseRedirect("%ssettings/" % project.url)
219+
220+
221+
def groups_destory(request, username, projectname):
222+
from vilya.models.team import Team
223+
from vilya.models.team_group import TeamGroup
224+
from vilya.models.project import CodeDoubanProject
225+
name = '/'.join([username, projectname])
226+
project = CodeDoubanProject.get_by_name(name)
227+
group_name = request.GET.get('group', '')
228+
if not group_name:
229+
return HttpResponseRedirect("%ssettings/" % project.url)
230+
team, _, group = group_name.rpartition('/')
231+
t = Team.get_by_uid(team)
232+
if not t:
233+
return HttpResponseRedirect("%ssettings/" % project.url)
234+
g = TeamGroup.get(team_id=t.id, name=group)
235+
if not g:
236+
return HttpResponseRedirect("%ssettings/" % project.url)
237+
g.remove_project(project_id=project.id)
238+
return HttpResponseRedirect("%ssettings/" % project.url)

vilya/views/uis/conf.py

Lines changed: 0 additions & 24 deletions
This file was deleted.

vilya/views/uis/hooks.py

Lines changed: 0 additions & 61 deletions
This file was deleted.

0 commit comments

Comments
 (0)