mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-27 02:12:18 +00:00
Added printing requirements
This commit is contained in:
113
z3c/rml/occurence.py
Normal file
113
z3c/rml/occurence.py
Normal file
@@ -0,0 +1,113 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Condition Implementation
|
||||
"""
|
||||
import reportlab
|
||||
import sys
|
||||
import zope.interface
|
||||
import zope.schema
|
||||
from zope.schema import fieldproperty
|
||||
|
||||
class ICondition(zope.interface.Interface):
|
||||
"""Condition that is checked before a directive is available."""
|
||||
|
||||
__doc__ = zope.schema.TextLine(
|
||||
title=u'Description',
|
||||
description=u'The description of the condition.',
|
||||
required=True)
|
||||
|
||||
def __call__(directive):
|
||||
"""Check whether the condition is fulfilled for the given directive."""
|
||||
|
||||
|
||||
class IOccurence(zope.interface.Interface):
|
||||
"""Description of the occurence of a sub-directive."""
|
||||
|
||||
__doc__ = zope.schema.TextLine(
|
||||
title=u'Description',
|
||||
description=u'The description of the occurence.',
|
||||
required=True)
|
||||
|
||||
tag = zope.schema.BytesLine(
|
||||
title=u'Tag',
|
||||
description=u'The tag of the sub-directive within the directive',
|
||||
required=True)
|
||||
|
||||
signature = zope.schema.Field(
|
||||
title=u'Signature',
|
||||
description=u'The signature of the sub-directive.',
|
||||
required=True)
|
||||
|
||||
condition = zope.schema.Field(
|
||||
title=u'Condition',
|
||||
description=u'The condition that the directive is available.',
|
||||
required=False)
|
||||
|
||||
|
||||
@zope.interface.implementer(ICondition)
|
||||
def laterThanReportlab21(directive):
|
||||
"""The directive is only available in Reportlab 2.1 and higher."""
|
||||
return [int(num) for num in reportlab.Version.split('.')] >= (2, 0)
|
||||
|
||||
|
||||
def containing(*occurences):
|
||||
frame = sys._getframe(1)
|
||||
f_locals = frame.f_locals
|
||||
f_globals = frame.f_globals
|
||||
|
||||
if not (f_locals is not f_globals
|
||||
and f_locals.get('__module__')
|
||||
and f_locals.get('__module__') == f_globals.get('__name__')
|
||||
):
|
||||
raise TypeError("contains not called from signature interface")
|
||||
|
||||
f_locals['__interface_tagged_values__'] = {'directives': occurences}
|
||||
|
||||
|
||||
class Occurence(object):
|
||||
zope.interface.implements(IOccurence)
|
||||
|
||||
tag = fieldproperty.FieldProperty(IOccurence['tag'])
|
||||
signature = fieldproperty.FieldProperty(IOccurence['signature'])
|
||||
condition = fieldproperty.FieldProperty(IOccurence['condition'])
|
||||
|
||||
def __init__(self, tag, signature, condition=None):
|
||||
self.tag = tag
|
||||
self.signature = signature
|
||||
self.condition = condition
|
||||
|
||||
|
||||
class ZeroOrMore(Occurence):
|
||||
"""Zero or More
|
||||
|
||||
This sub-directive can occur zero or more times.
|
||||
"""
|
||||
|
||||
class ZeroOrOne(Occurence):
|
||||
"""Zero or one
|
||||
|
||||
This sub-directive can occur zero or one time.
|
||||
"""
|
||||
|
||||
class OneOrMore(Occurence):
|
||||
"""One or More
|
||||
|
||||
This sub-directive can occur one or more times.
|
||||
"""
|
||||
|
||||
class One(Occurence):
|
||||
"""One
|
||||
|
||||
This sub-directive must occur exactly one time.
|
||||
"""
|
||||
Reference in New Issue
Block a user