示例#1
0
def startLocation(parser, data):
    attrs = SOX.validatedAttributes(parser, data, locRequired, locOptional)
    acquirePermission(data, attrs)
    prev = findComponentData(data)
    parent = prev['sm.component']
    name = attrs.get('name')

    if data['previous'] is not prev:
        parser.err("Locations must be directly inside other locations")

    if isRoot(prev):
        if name is not None:
            parser.err("Root location cannot have a 'name'")

        if 'sm_included_from' in prev:
            inclattrs = prev['sm_included_from']
            name = inclattrs.get('name')
            if 'class' in inclattrs:
                attrs['class'] = inclattrs['class']
            if 'sm_conflict_manager' in prev:
                data['sm_conflict_manager'] = prev['sm_conflict_manager']
                data['no_resolve'] = True  # let the including file do it

    elif not name:
        parser.err("Non-root locations must have a 'name'")

    data.setdefault('sm_conflict_manager', ConflictManager())
    loc = makeLocation(parser, data, attrs, parent, name)
    data['sm.component'] = loc
    data['sm_container_stack'] = []
示例#2
0
def doOffer(parser, data):
    attrs = SOX.validatedAttributes(parser, data, (
        'path',
        'as',
    ))
    prev = findComponentData(data)
    prev['sm.component'].registerLocation(attrs['as'], attrs['path'])
示例#3
0
def doContent(parser, data):
    attrs = SOX.validatedAttributes(parser, data, content_req, content_opt)
    acquirePermission(data, attrs)
    acquireHelper(data, attrs)
    data['sm.content_type'] = evalObject(data, attrs['type'])
    if 'location' in attrs:
        registerView(parser, data, attrs, 'peak.web.url',
                     locationView(attrs['location']))
示例#4
0
def doView(parser, data):
    attrs = SOX.validatedAttributes(parser, data, view_required, view_optional)

    mode, expr = choose(parser, view_one_of, attrs)
    if mode == 'object':
        handler = objectView(evalObject(data, expr))
    elif mode == 'function':
        handler = evalObject(data, expr)
    elif mode == 'expr':
        g = getGlobals(data['previous'])

        def handler(ctx, ob, namespace, name, qname, default=NOT_GIVEN):
            return ctx.childContext(qname, eval(expr, locals(), g))
    elif mode == 'attribute':
        handler = attributeView(expr)
    elif mode == 'resource':
        handler = resourceView(expr)

    registerView(parser, data, attrs, attrs['name'], handler)
示例#5
0
def doContainer(parser, data):
    attrs = SOX.validatedAttributes(parser, data, (), (
        'lookup',
        'object',
        'permission',
    ))
    prev = findComponentData(data)
    perm = acquirePermission(data, attrs)
    loc = prev['sm.component']

    if ('object' in attrs) == ('lookup' in attrs):
        parser.err("container must have a 'lookup' or 'object'")
    elif 'object' in attrs:
        container = evalObject(data, attrs['object'])
    else:
        container = binding.lookupComponent(loc,
                                            evalObject(data, attrs['lookup']))

    prev['sm_container_stack'].append(
        lambda: loc.addContainer(container, perm))
    data['container'] = container
示例#6
0
def fromFile(filename_or_stream, parentComponent, **kw):
    document = XMIDocument(parentComponent)
    SOX.load(filename_or_stream, document, namespaces=True)
    return DM(parentComponent, document=document, **kw)[()]
示例#7
0
def doRequire(parser, data):
    attrs = SOX.validatedAttributes(parser, data, ('permission', ),
                                    ('helper', ))
    acquirePermission(data, attrs)
    acquireHelper(data, attrs)
示例#8
0
def doImport(parser, data):
    attrs = SOX.validatedAttributes(parser, data, ('module', ), ('as', ))
    module = str(attrs['module'])
    as_ = attrs.get('as', module.split('.')[-1])
    getGlobals(data['previous'])[as_] = lazyModule(module)
示例#9
0
def doAllow(parser, data):
    attrs = SOX.validatedAttributes(parser, data, ('attributes', ),
                                    ('permission', 'helper'))
    for attr in attrs['attributes'].split(','):
        registerView(parser, data, attrs, attr, attributeView(attr.strip()))
示例#10
0
 def setUp(self):
     self.n = SOX.NegotiatingParser()
     self.attrs = []
     self.log = []
     self.n.element_map['nothing'] = self.nothing
示例#11
0
 def setUp(self):
     self.object = ob = SOX.load(stream(self.text), namespaces=self.useNS)
     self.de = ob.documentElement