[Checkins] SVN: Sandbox/luciano/kirbi/src/kirbi/interfaces.py moved
IBook to interfaces.py
Luciano Ramalho
luciano at ramalho.org
Tue Aug 14 21:38:00 EDT 2007
Log message for revision 78829:
moved IBook to interfaces.py
Changed:
A Sandbox/luciano/kirbi/src/kirbi/interfaces.py
-=-
Added: Sandbox/luciano/kirbi/src/kirbi/interfaces.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/interfaces.py (rev 0)
+++ Sandbox/luciano/kirbi/src/kirbi/interfaces.py 2007-08-15 01:37:59 UTC (rev 78829)
@@ -0,0 +1,57 @@
+from zope.interface import Interface, invariant, Invalid
+from zope import schema
+from isbn import isValidISBN
+
+class InvalidISBN(schema.ValidationError):
+ """This is not a valid ISBN-10 or ISBN-13"""
+
+def validateISBN(isbn):
+ if not isValidISBN(isbn):
+ raise InvalidISBN
+ else:
+ return True
+
+class IBook(Interface):
+ """A book record"""
+ title = schema.TextLine(title=u"Title",
+ required=False,
+ default=u'',
+ missing_value=u'')
+ isbn = schema.TextLine(title=u"ISBN",
+ required=False,
+ constraint=validateISBN,
+ description=u"ISBN in 10 or 13 digit format",
+ min_length=10,
+ max_length=17 #978-3-540-33807-9
+ )
+
+ creators = schema.Tuple(title=u"Authors",
+ value_type=schema.TextLine(),
+ default=())
+ edition = schema.TextLine(title=u"Edition", required=False)
+ publisher = schema.TextLine(title=u"Publisher", required=False)
+ issued = schema.TextLine(title=u"Issued", required=False)
+ # TODO: set a vocabulary for language
+ language = schema.TextLine(title=u"Language", required=False)
+
+ subjects = schema.Tuple(title=u"Subjects",
+ value_type=schema.TextLine(),
+ default=())
+
+ source = schema.TextLine(title=u"Record source",
+ required=False,
+ description=u"Name of the source of this record.")
+ source_url = schema.URI(title=u"Source URL",
+ required=False,
+ description=u"URL of the source of this record.")
+ source_item_id = schema.TextLine(title=u"Item ID at Source",
+ required=False,
+ description= (u"Product number or other identifier"
+ u" for this item at source.")
+ )
+
+ @invariant
+ def titleOrIsbnGiven(book):
+ if (not book.title or not book.title.strip()) and (not book.isbn):
+ raise Invalid('Either the title or the ISBN must be given.')
+
More information about the Checkins
mailing list