Skip to main content

Integration layer making it possible to load schema definitions from XML

Project description

Introduction

plone.supermodel provides XML import and export for schema interfaces based on zope.schema fields. The principal use cases are:

1. Define a schema interface in code based on an XML file. This can be done with syntax like:

>>> from plone.supermodel import xmlSchema
>>> IMySchema = xmlSchema("myschema.xml")

2. Save and load interface definitions via an XML format. To turn a schema interface into XML, you can do:

>>> from plone.supermodel import serializeSchema
>>> xml_string = serializeSchema(IMySchema)

To get a schema from an XML file, you can use the xmlSchema() function above, or you can use the more powerful spec() function, which turns a dict of all schemata and widget hints in a given XML file.

See schema.txt and interfaces.py in the source code for more information, including details on how to give widget hints for forms and how to keep multiple schemata in the same XML file.

Supermodel vs. Userschema

This package is quite similar to Tres Seaver’s “userschema” library, which can be found at http://agendaless.com/Members/tseaver/software/userschema.

In fact, plone.supermodel was originally based on userschema. However, as the package was refined and refactored, less and less of userschema remained, to the point where we’d have needed to significantly refactor the latter to keep using it.

The XML import/export code is currently based on algorithms that were written for plone.app.portlets and plone.app.contentrules’ GenericSetup handlers.

Some of the key differences between the two packages are:

  • userschema can create schema interfaces from HTML forms and CSV spreadsheets. plone.supermodel does not support such configuration.

  • Schemata created with userschema are typically loaded at startup, with a ZCML directive. plone.supermodel supports a “pseudo-base class” syntax, as seen above, to define interfaces in Python code. Beyond that, its API is more geared towards runtime configuration.

  • plone.supermodel supports serialisation of schemata to XML.

  • The plone.supermodel XML syntax is more directly tied to zope.schema fields, and infers most parameters from the schema interface declared by each zope.schema field. This has two advantages:

    • API documentation for zope.schema can be easily applied to <schema /> blocks

    • New fields and obscure attributes are easier to support

  • plone.supermodel’s XML schema is intended to support more schema metadata, including widget hints.

In the future, it may be possible to make userschema re-use part of plone.supermodel or vice-a-versa, with more refactoring.

Changelog

1.0b6 - 2011-01-04

  • Declare zope.app.testing as a test dependency for Zope 2.13 compatibility. [esteele]

  • Fix namespace bug which could prevent loading Dict and Collection elements. [davisagli]

1.0b5 - 2010-04-19

  • Added support for zope.schema.Decimal fields. [optilude]

1.0b4 - 2009-11-17

  • Ignored vocabularyName property when writing Choice fields. The constructor still uses they ‘vocabulary’ key in an overloaded capacity. We only support ‘vocabulary’ with a named vocabulary, or ‘values’ with a list of values. This fixes test failures on Zope 2.12 / zope.schema 3.5.4. [optilude]

1.0b3 - 2009-09-28

  • Add support for synchronising marker interfaces found on source fields to syncSchema(). [optilude]

1.0b2 - 2009-07-12

  • Changed API methods and arguments to mixedCase to be more consistent with the rest of Zope. This is a non-backwards-compatible change. Our profuse apologies, but it’s now or never. :-/

    If you find that you get import errors or unknown keyword arguments in your code, please change names from foo_bar too fooBar, e.g. load_file() becomes loadFile(). [optilude]

  • No longer include name kwarg to Field constructor if no name was set [MatthewWilkes]

1.0b1 - 2009-04-17

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plone.supermodel-1.0b6.zip (41.7 kB view details)

Uploaded Source

File details

Details for the file plone.supermodel-1.0b6.zip.

File metadata

  • Download URL: plone.supermodel-1.0b6.zip
  • Upload date:
  • Size: 41.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for plone.supermodel-1.0b6.zip
Algorithm Hash digest
SHA256 86be5304fc9b13ebf6319abaa318dbbdf51f235202b46a0a946a0827570376b3
MD5 8bc55948a51724b28c976de4bff72f61
BLAKE2b-256 ad3de732692c2ad9b23f1d9b479980cbf7ce0cfa58b4cb2d046068edb285ec1e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page