from django.forms.util import ErrorList
+import wlrepo
+
#
# Some useful decorators
def with_repo(view):
"""Open a repository for this view"""
def view_with_repo(request, *args, **kwargs):
- kwargs['repo'] = hg.Repository(settings.REPOSITORY_PATH)
+ kwargs['repo'] = wlrepo.open_library(settings.REPOSITORY_PATH, 'hg')
return view(request, *args, **kwargs)
return view_with_repo
# View all files
#
@with_repo
-def file_list(request, repo):
- #
- latest_default = repo.get_branch_tip('default')
-
- fl = []
- for file in repo.repo[latest_default]:
- m = re.match(u'^pub_([^/]+).xml$', file.decode('utf-8'), re.UNICODE)
- if m is not None:
- fl.append(m.group(1))
-
- bookform = forms.BookUploadForm()
+def file_list(request, repo):
+ import api.forms
+ from api.resources import library_resource
+
+ bookform = api.forms.DocumentUploadForm()
+ # short-circut the api document list
+ doctree = library_resource.handler.read(request)
+ # print "DOCTREE:", doctree['documents']
+
return direct_to_template(request, 'explorer/file_list.html', extra_context={
- 'files': fl, 'bookform': bookform,
+ 'filetree': doctree['documents'], 'bookform': bookform,
})
@permission_required('explorer.can_add_files')
@with_repo
def file_upload(request, repo):
- other_errors = []
- if request.method == 'POST':
- form = forms.BookUploadForm(request.POST, request.FILES)
- if form.is_valid():
- try:
- # prepare the data
- f = request.FILES['file']
- decoded = f.read().decode('utf-8')
- fileid = form.cleaned_data['bookname'].lower()
- rpath = file_path(fileid)
-
- if form.cleaned_data['autoxml']:
- decoded = librarian.wrap_text(decoded, unicode(date.today()) )
-
- def upload_action():
- repo._add_file(rpath, decoded.encode('utf-8') )
- repo._commit(message="File %s uploaded by user %s" % \
- (rpath, request.user.username), user=request.user.username)
-
- repo.in_branch(upload_action, 'default')
+ from api.resources import library_resource
+ from api.forms import DocumentUploadForm
+ from django.http import HttpRequest, HttpResponseRedirect
- # if everything is ok, redirect to the editor
- return HttpResponseRedirect( reverse('editor_view',
- kwargs={'path': fileid}) )
+ response = library_resource.handler.create(request)
- except hg.RepositoryException, e:
- other_errors.append(u'Błąd repozytorium: ' + unicode(e) )
- #except UnicodeDecodeError, e:
- # other_errors.append(u'Niepoprawne kodowanie pliku: ' + e.reason \
- # + u'. Żądane kodowanie: ' + e.encoding)
- # invalid form
-
- # get
- form = forms.BookUploadForm()
- return direct_to_template(request, 'explorer/file_upload.html',\
- extra_context = {'form' : form, 'other_errors': other_errors})
-
+ if isinstance(response, HttpResponse):
+ data = json.loads(response.content)
+
+ if response.status_code == 201:
+ return HttpResponseRedirect( \
+ reverse("editor_view", args=[ data['name'] ]) )
+ else:
+ bookform = DocumentUploadForm(request.POST, request.FILES)
+ bookform.is_valid()
+
+ return direct_to_template(request, 'explorer/file_upload.html',
+ extra_context={'bookform': bookform } )
+
+
#
# Edit the file
#
# Display the main editor view
@login_required
-@with_repo
-def display_editor(request, path, repo):
-
+# @with_repo
+def display_editor(request, path):
# this is the only entry point where we create an autobranch for the user
# if it doesn't exists. All other views SHOULD fail.
- def ensure_branch_exists():
- parent = repo.get_branch_tip('default')
- repo._create_branch(file_branch(path, request.user), parent)
+ #def ensure_branch_exists():
+ # parent = repo.get_branch_tip('default')
+ # repo._create_branch(file_branch(path, request.user), parent)
- try:
- repo.with_wlock(ensure_branch_exists)
+# try:
+ # repo.with_wlock(ensure_branch_exists)
- return direct_to_template(request, 'explorer/editor.html', extra_context={
- 'fileid': path,
- 'panel_list': ['lewy', 'prawy'],
- 'availble_panels': models.EditorPanel.objects.all(),
- 'scriptlets': toolbar_models.Scriptlet.objects.all()
- })
- except KeyError:
- return direct_to_template(request, 'explorer/nofile.html', \
- extra_context = { 'fileid': path })
+ return direct_to_template(request, 'explorer/editor.html', extra_context={
+ 'fileid': path,
+ 'panel_list': ['lewy', 'prawy'],
+ 'availble_panels': models.EditorPanel.objects.all(),
+ # 'scriptlets': toolbar_models.Scriptlet.objects.all()
+ })
+# except KeyError:
+# return direct_to_template(request, 'explorer/nofile.html', \
+# extra_context = { 'fileid': path })
# ===============
# = Panel views =
print "validating sform"
if sform.is_valid():
valid = True
- if sform.cleaned_data['autoxml']:
- print "validating dcform"
- valid = dcform.is_valid()
+# if sform.cleaned_data['autoxml']:
+# print "validating dcform"
+# valid = dcform.is_valid()
print "valid is ", valid
+
if valid:
uri = path + '$' + sform.cleaned_data['partname']
child_rpath = file_path(uri)
fulltext = sform.cleaned_data['fulltext']
fulltext = fulltext.replace(u'<include-tag-placeholder />',
- librarian.xinclude_forURI('wlrepo://'+uri) )
+ librarian.xinclude_forURI(u'wlrepo://'+uri) )
repo._write_file(rpath, fulltext.encode('utf-8'))
if sform.cleaned_data['autoxml']:
# this is a horrible hack - really
bi = dcparser.BookInfo.from_element(librarian.DEFAULT_BOOKINFO.to_etree())
- bi.update(dcform.cleaned_data)
+ bi.update(dcform.data)
newtext = librarian.wrap_text(newtext, \
unicode(date.today()), bookinfo=bi )
if repo.in_branch(split_action, file_branch(path, request.user)):
# redirect to success
+ import urllib
+ uri = urllib.quote( unicode(uri).encode('utf-8'))
return HttpResponseRedirect( reverse('split-success',\
- kwargs={'path': path})+'?child='+uri)
+ kwargs={'path': path})+'?child='+uri )
else:
try: # to read the current DC
repo = hg.Repository(settings.REPOSITORY_PATH)