from django import forms
+from lxml import etree
+from librarian import dcparser
+
from explorer import models
class BookForm(forms.Form):
text = forms.CharField(widget=forms.Textarea)
-
+ commit_message = forms.CharField()
+ user = forms.CharField()
class ImageFoldersForm(forms.Form):
folders = forms.ChoiceField(required=False)
super(ImageFoldersForm, self).__init__(*args, **kwargs)
self.fields['folders'].choices = [('', '-- Wybierz folder z obrazkami --')] + [(fn, fn) for fn in models.get_image_folders()]
+
+class DublinCoreForm(forms.Form):
+ wiki_url = forms.URLField(verify_exists=False)
+ author = forms.CharField()
+ title = forms.CharField()
+ epoch = forms.CharField()
+ kind = forms.CharField()
+ genre = forms.CharField()
+ created_at = forms.DateField()
+ released_to_public_domain_at = forms.DateField()
+ translator = forms.CharField(required=False)
+ technical_editor = forms.CharField(required=False)
+ publisher = forms.CharField()
+ source_name = forms.CharField(widget=forms.Textarea)
+ source_url = forms.URLField(verify_exists=False)
+ url = forms.URLField(verify_exists=False)
+ parts = forms.CharField(widget=forms.Textarea, required=False)
+ license = forms.CharField(required=False)
+ license_description = forms.CharField(widget=forms.Textarea, required=False)
+
+ def __init__(self, *args, **kwargs):
+ text = None
+ if 'text' in kwargs:
+ text = kwargs.pop('text')
+
+ super(DublinCoreForm, self).__init__(*args, **kwargs)
+
+ if text is not None:
+ book_info = dcparser.BookInfo.from_string(text)
+ for name, value in book_info.to_dict().items():
+ self.fields[name].initial = value
+
+ def save(self, repository, path):
+ file_contents = repository.get_file(path).data()
+ doc = etree.fromstring(file_contents)
+
+ book_info = dcparser.BookInfo()
+ for name, value in self.cleaned_data.items():
+ if value is not None and value != '':
+ setattr(book_info, name, value)
+ rdf = etree.XML(book_info.to_xml())
+
+ old_rdf = doc.getroottree().find('//{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF')
+ old_rdf.getparent().remove(old_rdf)
+ doc.insert(0, rdf)
+ repository.add_file(path, unicode(etree.tostring(doc), 'utf-8'))
+