- -
-

pyams_utils package

- -
-

Submodules

-
-
-

pyams_utils.adapter module

-

Adapters management package

-

This package provides a small set of standard base adapters for context, context and request, and -context and request and view.

-

See Managing ZCA with PyAMS to see how PyAMS can help components management.

-
-
-class pyams_utils.adapter.ContextAdapter(context)
-

Bases: object

-

Context adapter

-
- -
-
-class pyams_utils.adapter.ContextRequestAdapter(context, request)
-

Bases: object

-

Context + request multi-adapter

-
- -
-
-class pyams_utils.adapter.ContextRequestViewAdapter(context, request, view)
-

Bases: object

-

Context + request + view multi-adapter

-
- -
-
-class pyams_utils.adapter.adapter_config(**settings)
-

Bases: object

-

Function or class decorator to declare an adapter

-

Annotation parameters can be:

- --- - - - -
Parameters:
    -
  • name (str) – (default=’‘), name of the adapter
  • -
  • context ([Interface...]) – an interface, or a tuple of interfaces, that the component adapts
  • -
  • provides (Interface) – the interface that the adapter provides
  • -
-
-
-
-venusian = <module 'venusian' from '/var/local/env/pyams/eggs/venusian-1.0-py3.4.egg/venusian/__init__.py'>
-
- -
- -
-
-

pyams_utils.attr module

-
-
-class pyams_utils.attr.AttributeTraverser(context)
-

Bases: pyams_utils.adapter.ContextAdapter

-

++attr++ namespace traverser

-

This custom traversing adapter can be used to access an object attribute directly from -an URL by using a path like this:

-
/path/to/object/++attr++name
-
-
-

Whare name is the name of the requested attribute

-
-
-traverse(name, furtherpath=None)
-
- -
- -
-
-

pyams_utils.container module

-
-
-class pyams_utils.container.BTreeOrderedContainer
-

Bases: zope.container.ordered.OrderedContainer

-

BTree based ordered container

-

This container maintain a manual order of it’s contents

-
- -
-
-class pyams_utils.container.ContainerSublocationsAdapter(context)
-

Bases: pyams_utils.adapter.ContextAdapter

-

Contained object sub-locations adapter

-

This adapter checks for custom ISublocations interface adapters which can -be defined by any component to get access to inner locations, defined for -example via annotations.

-
-
-sublocations()
-

See zope.location.interfaces.ISublocations interface

-
- -
- -
-
-pyams_utils.container.find_objects_matching(root, condition, ignore_root=False)
-

Find all objects in root that match the condition

-

The condition is a Python callable object that takes an object as -argument and must return a boolean result.

-

All sub-objects of the root will also be searched recursively.

- --- - - - - - -
Parameters:
    -
  • root (object) – the parent object from which search is started
  • -
  • condition (callable) – a callable object which may return true for a given -object to be selected
  • -
  • ignore_root (boolean) – if True, the root object will not be returned, even if it matches -the given condition
  • -
-
Returns:

an iterator for all root’s sub-objects matching condition

-
-
- -
-
-pyams_utils.container.find_objects_providing(root, interface)
-

Find all objects in root that provide the specified interface

-

All sub-objects of the root will also be searched recursively.

- --- - - - - - -
Parameters:
    -
  • root (object) – object; the parent object from which search is started
  • -
  • interface (Interface) – interface; an interface that sub-objects should provide
  • -
-
Returns:

an iterator for all root’s sub-objects that provide the given interface

-
-
- -
-
-

pyams_utils.context module

-
-
-class pyams_utils.context.ContextSelector(ifaces, config)
-

Bases: object

-

Interface based context selector

-

This selector can be used as a subscriber predicate to define -an interface that the context must support for the event to be applied:

-
from pyams_utils.interfaces.site import ISiteRoot
-
-@subscriber(IObjectModifiedEvent, context_selector=ISiteRoot)
-def siteroot_modified_event_handler(event):
-    '''This is an event handler for an ISiteRoot object modification event'''
-
-
-
-
-phash()
-
- -
-
-text()
-
- -
- -
-
-

pyams_utils.data module

-

Object data API module

-

The IObjectData interface is a generic interface which can be used to assign custom data to nay object. -This object data may be any object which can be serialized to JSON, and assigned to any HTML data attribute. -It can typically be used to set a data-ams-data attribute to objects, which is afterwards converted to -classic data- attributes by MyAMS.js framework.

-

For example, for a custom widget in a form:

-
def updateWidgets(self):
-    super(MyForm, self).updateWidgets()
-    widget = self.widgets['mywidget']
-    alsoProvides(widget, IObjectData)
-    widget.object_data = {'ams-colorpicker-position': 'top left'}
-
-
-

You can then set an attribute in a TAL template like this:

-
<div tal:attributes="data-ams-data extension:object_data(widget)">...</div>
-
-
-

After data initialization by MyAMS.js, the following code will be converted to:

-
<div data-ams-colorpicker-position="top left">...</div>
-
-
-
-
-class pyams_utils.data.BrowserRequestDataExtension(context, request, view)
-

Bases: pyams_utils.adapter.ContextRequestViewAdapter

-

extension:request_data TALES extension for Zope browser request

-

This TALES extension can be used to get a request data, previously stored in the request via an annotation. -For example:

-
<div tal:content="extension:request_data('my.annotation.key')">...</div>
-
-
-
-
-render(params=None)
-

See pyams_utils.interfaces.tales.ITALESExtension interface

-
- -
- -
-
-class pyams_utils.data.ObjectDataExtension(context, request, view)
-

Bases: pyams_utils.adapter.ContextRequestViewAdapter

-

extension:object_data TALES extension

-

This TALES extension is to be used in Chameleon templates to define a custom data attribute -which stores all object data (see pyams_utils.interfaces.data.IObjectData interface), like this:

-
<div tal:attributes="data-ams-data extension:object_data(context)">...</div>
-
-
-
-
-render(context=None)
-

See pyams_utils.interfaces.tales.ITALESExtension interface

-
- -
- -
-
-class pyams_utils.data.ObjectDataRenderer(context)
-

Bases: pyams_utils.adapter.ContextAdapter

-

Object data JSON renderer

-
-
-get_object_data()
-

See pyams_utils.interfaces.data.IObjectDataRenderer interface

-
- -
- -
-
-class pyams_utils.data.PyramidRequestDataExtension(context, request, view)
-

Bases: pyams_utils.adapter.ContextRequestViewAdapter

-

extension:request_data TALES extension for Pyramid request

-

This TALES extension can be used to get a request data, previously stored in the request via an annotation. -For example:

-
<div tal:content="extension:request_data('my.annotation.key')">...</div>
-
-
-
-
-render(params=None)
-

See pyams_utils.interfaces.tales.ITALESExtension interface

-
- -
- -
-
-

pyams_utils.date module

-
-
-pyams_utils.date.date_to_datetime(value)
-

Get datetime value converted from a date or datetime object

- --- - - - - - -
Parameters:value (date/datetime) – a date or datetime value to convert
Returns:datetime; input value converted to datetime
-
>>> from datetime import date, datetime
->>> from pyams_utils.date import date_to_datetime
->>> value = date(2016, 11, 15)
->>> date_to_datetime(value)
-datetime.datetime(2016, 11, 15, 0, 0)
->>> value = datetime(2016, 11, 15, 10, 13, 12)
->>> value
-datetime.datetime(2016, 11, 15, 10, 13, 12)
->>> date_to_datetime(value) is value
-True
-
-
-
- -
-
-pyams_utils.date.format_date(value, format='on %d/%m/%Y', request=None)
-

Format given date with the given format

- --- - - - - - -
Parameters:
    -
  • value (datetime) – the value to format
  • -
  • format (str) – a format string to use by strftime function
  • -
  • request – the request from which to extract localization info for translation
  • -
-
Returns:

str; input datetime converted to given format

-
-
>>> from datetime import datetime
->>> from pyams_utils.date import format_date, SH_DATE_FORMAT
->>> value = datetime(2016, 11, 15, 10, 13, 12)
->>> format_date(value)
-'on 15/11/2016'
->>> format_date(value, SH_DATE_FORMAT)
-'15/11/2016'
-
-
-
- -
-
-pyams_utils.date.format_datetime(value, format='on %d/%m/%Y at %H:%M', request=None)
-

Format given datetime with the given format including time

- --- - - - - - -
Parameters:
    -
  • value (datetime) – the value to format
  • -
  • format (str) – a format string to use by strftime function
  • -
  • request – request; the request from which to extract localization info for translation
  • -
-
Returns:

str; input datetime converted to given format

-
-
>>> from datetime import datetime
->>> from pyams_utils.date import format_datetime, SH_DATETIME_FORMAT
->>> value = datetime(2016, 11, 15, 10, 13, 12)
->>> format_datetime(value)
-'on 15/11/2016 at 10:13'
->>> format_datetime(value, SH_DATETIME_FORMAT)
-'15/11/2016 - 10:13'
-
-
-
- -
-
-pyams_utils.date.get_age(value, request=None)
-

Get ‘human’ age of a given datetime (including timezone) compared to current datetime (in UTC)

- --- - - - - - -
Parameters:value (datetime) – input datetime to be compared with current datetime
Returns:str; the delta value, converted to months, weeks, days, hours or minutes
-
- -
-
-pyams_utils.date.get_duration(v1, v2=None, request=None)
-

Get ‘human’ delta as string between two dates

- --- - - - - - -
Parameters:
    -
  • v1 (datetime) – start date
  • -
  • v2 (datetime) – end date, or current date (in UTC) if None
  • -
  • request – the request from which to extract localization infos
  • -
-
Returns:

str; approximate delta between the two input dates

-
-
>>> from datetime import datetime
->>> from pyams_utils.date import get_duration
->>> from pyramid.testing import DummyRequest
->>> request = DummyRequest()
->>> date1 = datetime(2015, 1, 1)
->>> date2 = datetime(2014, 3, 1)
->>> get_duration(date1, date2, request)
-'10 months'
-
-
-

Dates order is not important:

-
>>> get_duration(date2, date1, request)
-'10 months'
->>> date2 = datetime(2014, 11, 10)
->>> get_duration(date1, date2, request)
-'7 weeks'
->>> date2 = datetime(2014, 12, 26)
->>> get_duration(date1, date2, request)
-'6 days'
-
-
-

For durations lower than 2 days, duration also display hours:

-
>>> date1 = datetime(2015, 1, 1)
->>> date2 = datetime(2015, 1, 2, 15, 10, 0)
->>> get_duration(date1, date2, request)
-'1 day and 15 hours'
->>> date2 = datetime(2015, 1, 2)
->>> get_duration(date1, date2, request)
-'24 hours'
->>> date2 = datetime(2015, 1, 1, 13, 12)
->>> get_duration(date1, date2, request)
-'13 hours'
->>> date2 = datetime(2015, 1, 1, 1, 15)
->>> get_duration(date1, date2, request)
-'75 minutes'
->>> date2 = datetime(2015, 1, 1, 0, 0, 15)
->>> get_duration(date1, date2, request)
-'15 seconds'
-
-
-
- -
-
-pyams_utils.date.parse_date(value)
-

Get date specified in unicode ISO format to Python datetime object

-

Dates are always assumed to be stored in GMT timezone

- --- - - - - - -
Parameters:value (str) – unicode date to be parsed
Returns:datetime; the specified value, converted to datetime
-
>>> from pyams_utils.date import parse_date
->>> parse_date('2016-11-15T10:13:12+00:00')
-datetime.datetime(2016, 11, 15, 10, 13, 12, tzinfo=<StaticTzInfo 'GMT'>)
-
-
-
- -
-
-pyams_utils.date.unidate(value)
-

Get specified date converted to unicode ISO format

-

Dates are always assumed to be stored in GMT timezone

- --- - - - - - -
Parameters:value (date) – input date to convert to unicode
Returns:unicode; input date converted to unicode
-
>>> from datetime import datetime
->>> from pyams_utils.date import unidate
->>> value = datetime(2016, 11, 15, 10, 13, 12)
->>> unidate(value)
-'2016-11-15T10:13:12+00:00'
-
-
-
- -
-
-

pyams_utils.decorator module

-
-
-pyams_utils.decorator.deprecated(*msg)
-

This is a decorator which can be used to mark functions -as deprecated. It will result in a warning being emitted -when the function is used.

-
- -
-
-

pyams_utils.encoding module

-
-
-class pyams_utils.encoding.EncodingField(vocabulary='PyAMS encodings', **kw)
-

Bases: zope.schema._field.Choice

-

Encoding schema field

-
- -
-
-class pyams_utils.encoding.EncodingsVocabulary(terms, *interfaces)
-

Bases: zope.schema.vocabulary.SimpleVocabulary

-

A vocabulary containing a set of registered encodings

-
- -
-
-

pyams_utils.html module

-
-
-class pyams_utils.html.MyHTMLParser(strict=<object object>, *, convert_charrefs=<object object>)
-

Bases: html.parser.HTMLParser

-

HTML parser

-
-
-charrefs = {34: '"', 38: '&', 39: "'", 60: '<', 62: '>', 192: 'À', 193: 'A', 194: 'Â', 195: 'A', 196: 'Ä', 197: 'A', 198: 'AE', 199: 'Ç', 200: 'È', 201: 'É', 202: 'Ê', 203: 'Ë', 204: 'I', 205: 'I', 206: 'Î', 207: 'Ï', 208: 'D', 209: 'N', 210: 'O', 211: 'O', 212: 'Ô', 213: 'O', 214: 'Ö', 215: 'x', 216: 'O', 217: 'Ù', 218: 'U', 219: 'Û', 220: 'Ü', 221: 'Y', 222: 'T', 223: 'sz', 224: 'à', 225: 'a', 226: 'â', 227: 'a', 228: 'ä', 229: 'a', 230: 'ae', 231: 'ç', 232: 'è', 233: 'é', 234: 'ê', 235: 'ë', 236: 'i', 237: 'i', 238: 'î', 239: 'ï', 240: 'e', 241: 'n', 242: 'o', 243: 'o', 244: 'ô', 245: 'o', 246: 'ö', 248: 'o', 249: 'ù', 250: 'u', 251: 'û', 252: 'ü', 253: 'y', 255: 'ÿ'}
-
- -
-
-data = ''
-
- -
-
-entitydefs = {'ecirc': 'ê', 'aring': 'a', 'Aring': 'A', 'thorn': 't', 'agrave': 'à', 'Ograve': 'O', 'ocirc': 'ô', 'Eacute': 'È', 'eacute': 'é', 'atilde': 'a', 'iuml': 'ï', 'aelig': 'ae', 'igrave': 'i', 'Auml': 'Ä', 'Uuml': 'Ü', 'ucirc': 'û', 'ugrave': 'ù', 'iacute': 'i', 'ograve': 'o', 'oacute': 'o', 'Euml': 'Ë', 'apos': "'", 'Ouml': 'Ö', 'aacute': 'a', 'Ccedil': 'Ç', 'Oslash': 'O', 'egrave': 'è', 'Uacute': 'U', 'uacute': 'u', 'Igrave': 'I', 'Agrave': 'À', 'Iuml': 'I', 'Otilde': 'O', 'Yacute': 'Y', 'ntilde': 'n', 'Ugrave': 'Ù', 'Ucirc': 'Û', 'icirc': 'î', 'Ecirc': 'Ê', 'Ntilde': 'N', 'Egrave': 'É', 'nbsp': ' ', 'quot': '"', 'oslash': 'o', 'ouml': 'ö', 'yacute': 'y', 'uuml': 'ü', 'yuml': 'ÿ', 'Aacute': 'A', 'Icirc': 'I', 'euml': 'ë', 'otilde': 'o', 'auml': 'ä', 'ccedil': 'ç', 'Oacute': 'O', 'lt': '<', 'amp': '&', 'Iacute': 'I', 'Ocirc': 'Ô', 'gt': '>', 'Atilde': 'A', 'acirc': 'â', 'Acirc': 'Â', 'THORN': 'T', 'AElig': 'AE'}
-
- -
-
-handle_charref(name)
-
- -
-
-handle_data(data)
-
- -
-
-handle_endtag(tag)
-
- -
-
-handle_entityref(name)
-
- -
-
-handle_starttag(tag, attrs)
-
- -
- -
-
-pyams_utils.html.html_to_text(value)
-

Utility function to extract text content from HTML

-
>>> from pyams_utils.html import html_to_text
->>> html = '''<p>This is a HTML text part.</p>'''
->>> html_to_text(html)
-'This is a HTML text part.\n'
-
-
-

HTML parser should handle entities correctly:

-
>>> html = '''<div><p>Header</p><p>This is an &lt;&nbsp;&#242;&nbsp;&gt; entity.<br /></p></div>'''
->>> html_to_text(html)
-'Header\nThis is an < o > entity.\n\n'
-
-
-
- -
-
-

pyams_utils.i18n module

-
-
-pyams_utils.i18n.get_browser_language(request)
-

Custom locale negotiator

-

Copied from zope.publisher code

-
- -
-
-pyams_utils.i18n.normalize_lang(lang)
-
- -
-
-

pyams_utils.include module

-
-
-pyams_utils.include.include_package(config)
-

Pyramid package include

-
- -
-
-

pyams_utils.intids module

-
-
-class pyams_utils.intids.UniqueIdAdapter(context)
-

Bases: pyams_utils.adapter.ContextAdapter

-

Object unique ID adapter

-

This adapter is based on a registered IIntIds utility to get a unique ID -for any persistent object.

-
-
-oid
-

Get context ID in hexadecimal form

-
- -
- -
-
-pyams_utils.intids.handle_added_object(event)
-

Notify IntId utility for added objects

-

This subscriber is used for all persistent objects to be registered -in all locally registered IIntIds utilities.

-
- -
-
-pyams_utils.intids.handle_intid_event(event)
-

Event subscriber used to dispatch all IIntIdEvent events using Pyramid events subscribers to matching -subscribers using Zope events

-
- -
-
-pyams_utils.intids.handle_removed_object(event)
-

Notify IntId utility for removed objects

-

This subscriber is used for all persistent objects to be unregistered -from all locally registered IIntIds utilities.

-
- -
-
-

pyams_utils.list module

-
-
-pyams_utils.list.unique(seq, idfun=None)
-

Extract unique values from list, preserving order

- --- - - - - - -
Parameters:
    -
  • seq (list) – input list
  • -
  • idfun (callable) – an identity function which is used to get ‘identity’ value of each element -in the list
  • -
-
Returns:

list; a new list containing only unique elements of the original list in their initial order. -Original list is not modified.

-
-
>>> from pyams_utils.list import unique
->>> mylist = [1, 2, 3, 2, 1]
->>> unique(mylist)
-[1, 2, 3]
-
-
-
>>> mylist = [3, 2, 2, 1, 4, 2]
->>> unique(mylist)
-[3, 2, 1, 4]
-
-
-

You can also set an ‘id’ function applied on each element:

-
>>> mylist = [1, 2, 3, '2', 4]
->>> unique(mylist, idfun=str)
-[1, 2, 3, 4]
-
-
-
- -
-
-

pyams_utils.lock module

-
-
-class pyams_utils.lock.CacheLock(name, wait=True)
-

Bases: object

-

Beaker based lock

-

This lock can be used when you need to get a lot across several processes or even computers. -The lock relies on a shared value stored into a shared Beaker cache.

- --- - - - -
Parameters:
    -
  • name (str) – name of the lock to use as shared key
  • -
  • wait (boolean) – if False, a LockException is raised if lock can’t be taken; otherwise, -application waits until lock is released
  • -
-
-

Lock can be used as a context manager.

-
- -
-
-exception pyams_utils.lock.LockException
-

Bases: Exception

-

Cache lock exception

-
- -
-
-pyams_utils.lock.get_locks_cache()
-

Get locks shared cache

-
- -
-
-pyams_utils.lock.locked(name, wait=True)
-

Locked function decorator

-

Can be used with any function or method which requires a global shared lock.

- --- - - - -
Parameters:
    -
  • name (str) – name of the lock to use as shared key
  • -
  • wait (boolean) – if False, a LockException is raised if lock can’t be taken; otherwise, -application waits until lock is released
  • -
-
-
- -
-
-

pyams_utils.progress module

-
-
-pyams_utils.progress.get_progress_cache()
-

Get cache storing tasks progress

-
- -
-
-pyams_utils.progress.get_progress_status_view(request)
-

Get progress status of a given task

-

Each submitted task is identified by an ID defined when the task is created

-
- -
-
-pyams_utils.progress.get_running_tasks()
-

Get list of running tasks

-
- -
-
-pyams_utils.progress.get_tasks_cache()
-

Get cache storing tasks list

-
- -
-
-pyams_utils.progress.set_running_tasks(tasks)
-

Update list of running tasks

-
- -
-
-

pyams_utils.property module

-
-
-class pyams_utils.property.DocFieldProperty(field, name=None)
-

Bases: zope.schema.fieldproperty.FieldProperty

-
- -
-
-class pyams_utils.property.cached(function)
-

Bases: object

-

Custom property decorator to define a property or function which is calculated only once

-

When applied on a function, caching is based on input arguments

-
-
-expire(*args)
-
- -
- -
-
-class pyams_utils.property.cached_property(fget, doc=None)
-

Bases: object

-

A read-only property decorator that is only evaluated once.

-

The value is cached on the object itself rather than the function or class; this should prevent -memory leakage.

-
- -
-
-pyams_utils.property.request_property(key, prefix=None)
-

Define a method decorator used to store result into current request’s annotations

-

If not request is currently running, a new one is created. -key is a required argument; if None, the key will be the method’s object

- --- - - - -
Parameters:
    -
  • key (str) – session’s value key; if None, the key will be the method’s object; if key is a callable -object, it will be called to get the actual session key
  • -
  • prefix – str; prefix to use for session key; if None, the prefix will be the property name
  • -
-
-
- -
-
-pyams_utils.property.session_property(app, key=None, prefix=None)
-

Define a method decorator used to store result into request’s session

-

If no request is currently running, a new one is created.

- --- - - - -
Parameters:
    -
  • app (str) – application identifier used to prefix session keys
  • -
  • key (str) – session’s value key; if None, the key will be the method’s object; if key is a callable -object, il will be called to get the actual session key
  • -
  • prefix – str; prefix to use for session key; if None, the prefix will be the property name
  • -
-
-
- -
-
-

pyams_utils.registry module

-

Local registry management package

-

This package is used to manage local registry. A local registry is a site management component -created automatically on application startup by PyAMS_utils package. It can be used to store and register -components, mainly utilities which are created and configured dynamically by a site administrator; this can include -SQLAlchemy engines, ZEO connections, and several PyAMS utilities like security manager, medias converter, -tasks scheduler and many other ones.

-

See Managing ZCA with PyAMS to get a brief introduction about using a local registry with PyAMS packages.

-
-
-class pyams_utils.registry.LocalRegistry
-

Bases: _thread._local

-

Local registry

-
-
-get_registry()
-
- -
-
-set_registry(registry)
-
- -
- -
-
-pyams_utils.registry.get_all_utilities_registered_for(interface)
-

Get list of registered utilities for given interface

-

Do a registry lookup for matching utilities into local registry first, then on each registry -associated with current thread stack.

-
- -
-
-pyams_utils.registry.get_local_registry()
-

Get local registry

-
- -
-
-pyams_utils.registry.get_registries()
-

Iterator on components registries

-

Returns an iterator on current local registry (if any) and registries associated -in current thread stack.

-
- -
-
-pyams_utils.registry.get_utilities_for(interface)
-

Get utilities registered with given interface as (name, util) tuples iterator

-

Do a registry lookup for matching utilities into local registry first, then on each registry -associated with current thread stack.

-
- -
-
-pyams_utils.registry.get_utility(provided, name='')
-

Get utility registered with given interface

-

Do a registry lookup for given utility into local registry first, then on each registry -associated with current thread stack.

- --- - - - - - -
Parameters:
    -
  • provided (Interface) – the requested interface
  • -
  • name (str) – name of the requested utility
  • -
-
Returns:

object; the requested object. A ComponentLookupError is raised if the utility -can’t be found.

-
-
- -
-
-pyams_utils.registry.handle_new_request(event)
-

New request event subscriber

-

Is used to initialize local registry to None for any new request

-
- -
-
-pyams_utils.registry.handle_site_before_traverse(event)
-

Before traverse event subscriber

-

Define site’s local registry when an object implementing ISite is traversed

-
- -
-
-pyams_utils.registry.query_utility(provided, name='', default=None)
-

Query utility registered with given interface

-

Do a registry lookup for given utility into local registry first, then on each registry -associated with current thread stack.

- --- - - - - - -
Parameters:
    -
  • provided (Interface) – the requested interface
  • -
  • name (str) – name of the requested utility
  • -
  • default (object) – the default object returned if the requested utility can’t be found
  • -
-
Returns:

object; the requested object, or default if it can’t be found

-
-
- -
-
-pyams_utils.registry.registered_utilities()
-

Get utilities registrations as generator

-

Iterates over utilities defined in all registries, starting with local ones.

-
- -
-
-pyams_utils.registry.set_local_registry(registry)
-

Define local registry

-
- -
-
-class pyams_utils.registry.utility_config(**settings)
-

Bases: object

-

Function or class decorator to register a utility in the global registry

- --- - - - -
Parameters:
    -
  • name (str) – default=’‘; name under which the utility is registered
  • -
  • provides (Interface) – the interface for which the utility is registered
  • -
-
-

Please note that a single utility can be registered several times (using several annotations).

-
-
-venusian = <module 'venusian' from '/var/local/env/pyams/eggs/venusian-1.0-py3.4.egg/venusian/__init__.py'>
-
- -
- -
-
-

pyams_utils.request module

-
-
-pyams_utils.request.check_request(path='/', environ=None, base_url=None, headers=None, POST=None, **kw)
-

Get current request, or create a new blank one if missing

-
- -
-
-pyams_utils.request.get_annotations(request)
-

Define ‘annotations’ request property

-

This function is automatically defined as a custom request method on package include.

-
- -
-
-pyams_utils.request.get_debug(request)
-

Define ‘debug’ request property

-

This function is automatically defined as a custom request method on package include.

-
- -
-
-pyams_utils.request.get_request(raise_exception=True)
-

Get current request

-

Raises a NoInteraction exception if there is no active request.

-
- -
-
-pyams_utils.request.get_request_data(request, key, default=None)
-

Get data associated with request

- --- - - - - - -
Parameters:
    -
  • request – the request containing requested data
  • -
  • key (str) – request data annotation key
  • -
  • default (object) – the default value when data is missing
  • -
-
Returns:

the requested value, or default

-
-
- -
-
-pyams_utils.request.query_request()
-

Query current request

-

Returns None if there is no active request

-
- -
-
-pyams_utils.request.set_request_data(request, key, value)
-

Associate data with request

- --- - - - -
Parameters:
    -
  • request – the request in which to set data
  • -
  • key (str) – request data annotation key
  • -
  • value (object) – the value to be set in request annotation
  • -
-
-
- -
-
-

pyams_utils.schema module

-
-
-class pyams_utils.schema.ColorField(*args, **kw)
-

Bases: zope.schema._bootstrapfields.TextLine

-

Color field

-
- -
-
-class pyams_utils.schema.DatesRangeField(value_type=None, unique=False, **kw)
-

Bases: zope.schema._field.Tuple

-

Dates range field

-
- -
-
-class pyams_utils.schema.DottedDecimalField(*args, **kw)
-

Bases: zope.schema._field.Decimal

-

Dotted decimal field

-
- -
-
-class pyams_utils.schema.EncodedPassword(*args, **kw)
-

Bases: zope.schema._bootstrapfields.Password

-

Encoded password field

-
-
-constraint(value)
-
- -
-
-fromUnicode(str)
-
- -
- -
-
-class pyams_utils.schema.HTMLField(*args, **kw)
-

Bases: zope.schema._bootstrapfields.Text

-

HTML field

-
- -
-
-class pyams_utils.schema.PersistentDict(key_type=None, value_type=None, **kw)
-

Bases: zope.schema._field.Dict

-

Persistent mapping field

-
- -
-
-class pyams_utils.schema.PersistentList(value_type=None, unique=False, **kw)
-

Bases: zope.schema._field.List

-

Persistent list field

-
- -
-
-class pyams_utils.schema.TextLineListField(value_type=None, unique=False, **kw)
-

Bases: zope.schema._field.List

-

TextLine list field

-
- -
-
-

pyams_utils.session module

-
-
-pyams_utils.session.get_session_data(request, app, key, default=None)
-

Get data associated with current user session

-

PyAMS session management is based on Beaker package session management.

- --- - - - -
Parameters:
    -
  • request – the request from which session is extracted
  • -
  • app (str) – application name
  • -
  • key (str) – session data key for given application
  • -
  • default – object; requested session data, or default if it can’t be found
  • -
-
-
APPLICATION_KEY = 'MyApp'
-SESSION_KEY = 'MyFunction'
-
-def my_function(request):
-    return get_session_data(request, APPLICATION_KEY, SESSION_KEY)
-
-
-
- -
-
-pyams_utils.session.set_session_data(request, app, key, value)
-

Associate data with current user session

- --- - - - -
Parameters:
    -
  • request – the request from which session is extracted
  • -
  • app (str) – application name
  • -
  • key (str) – session data key for given application
  • -
  • value (object) – any object that can be pickled can be stored into user session
  • -
-
-
APPLICATION_KEY = 'MyApp'
-SESSION_KEY = 'MyFunction'
-
-def my_function(request):
-    value = {'key1': 'value1', 'key2': 'value2'}
-    set_session_data(request, APPLICATION_KEY, SESSION_KEY, value)
-
-
-
- -
-
-

pyams_utils.site module

-
-
-class pyams_utils.site.BaseSiteRoot
-

Bases: zope.container.folder.Folder, zope.site.site.SiteManagerContainer

-

Default site root

-

A site root can be used as base application root in your ZODB. -It’s also site root responsibility to manage your local site manager.

-

BaseSiteRoot defines a basic ACL which gives all permissions to system administrator.

-
-
-config_klass = None
-
- -
- -
-
-class pyams_utils.site.NewLocalSiteCreatedEvent(object)
-

Bases: zope.interface.interfaces.ObjectEvent

-

New local site creation event

-
- -
-
-class pyams_utils.site.SiteRootEtcTraverser(context)
-

Bases: pyams_utils.adapter.ContextAdapter

-

Site root ++etc++ namespace traverser

-

Gives access to local site manager from /++etc++site URL

-
-
-traverse(name, furtherpath=None)
-
- -
- -
-
-class pyams_utils.site.SiteUpgradeEvent(object)
-

Bases: zope.interface.interfaces.ObjectEvent

-

Site upgrade request event

-
- -
-
-pyams_utils.site.check_required_utilities(site, utilities)
-

Utility function to check for required utilities

- --- - - - -
Parameters:
    -
  • site (object) – the site manager into which configuration may be checked
  • -
  • utilities (tuple) – each element of the tuple is another tuple made of the utility interface, -the utility registration name, the utility factory and the object name when creating the utility, as in:
  • -
-
-
REQUIRED_UTILITIES = ((ISecurityManager, '', SecurityManager, 'Security manager'),
-                      (IPrincipalAnnotationUtility, '', PrincipalAnnotationUtility, 'User profiles'))
-
-
-
- -
-
-pyams_utils.site.site_factory(request)
-

Application site factory

-

On application startup, this factory checks configuration to get application name and -load it from the ZODB; if the application can’t be found, configuration is scanned to -get application factory, create a new one and create a local site manager.

-
- -
-
-pyams_utils.site.site_upgrade(request)
-

Upgrade site when needed

-

This function is executed by pyams_upgrade console script. -Site generations are registered named utilities providing -ISiteGenerations interface.

-

Current site generations are stored into annotations for each generation adapter.

-
- -
-
-

pyams_utils.size module

-
-
-pyams_utils.size.get_human_size(value, request=None)
-

Convert given bytes value in human readable format

-
>>> from pyramid.testing import DummyRequest
->>> request = DummyRequest(params={'_LOCALE_': 'en'})
->>> request.locale_name
-'en'
->>> from pyams_utils.size import get_human_size
->>> get_human_size(256, request)
-'256 bytes'
->>> get_human_size(3678, request)
-'3.6 Kb'
->>> get_human_size(6785342, request)
-'6.47 Mb'
->>> get_human_size(3674815342, request)
-'3.422 Gb'
->>> request = DummyRequest(params={'_LOCALE_': 'fr'})
->>> request.locale_name
-'fr'
->>> get_human_size(256, request)
-'256 bytes'
->>> get_human_size(3678, request)
-'3,6 Kb'
->>> get_human_size(6785342, request)
-'6,47 Mb'
->>> get_human_size(3674815342, request)
-'3,422 Gb'
-
-
-
- -
-
-

pyams_utils.tales module

-
-
-class pyams_utils.tales.ContextExprMixin
-

Bases: object

-

Mixin-class for expression compilers

-
-
-transform = None
-
- -
- -
-
-class pyams_utils.tales.ExtensionExpr(expression, braces_required=False)
-

Bases: pyams_utils.tales.ContextExprMixin, chameleon.tales.StringExpr

-

extension: TALES expression

-

This expression can be used a call a custom named adapter providing ITALESExtension interface.

-
-
-transform = <Symbol value=<function render_extension> at 7f3cb9015518>
-
- -
- -
-
-pyams_utils.tales.render_extension(econtext, name)
-

TALES extension renderer

-

See Custom TALES extensions for complete description.

-
- -
-
-

pyams_utils.text module

-
-
-class pyams_utils.text.BaseHTMLRenderer(context, request)
-

Bases: object

-

Raw text HTML renderer

-

This renderer renders input text ‘as is’, mainly for use in a <pre> tag.

-
-
-render(**kwargs)
-
- -
- -
-
-class pyams_utils.text.HTMLTalesExtension(context, request, view)
-

Bases: pyams_utils.adapter.ContextRequestViewAdapter

-

extension:html TALES expression

-

If first context argument of the renderer is an object for which an IHTMLRenderer -can be found, this adapter is used to render the context to HTML; if context is a string, -it is converted to HTML using the renderer defined as second parameter; otherwise, context is just -converted to string using the str() function.

-
-
-render(context=None, renderer='text')
-
- -
- -
-
-class pyams_utils.text.ReStructuredTextRenderer(context, request)
-

Bases: pyams_utils.text.BaseHTMLRenderer

-

reStructuredText HTML renderer

-

This renderer is using docutils to render HTML output.

-
-
-render(**kwargs)
-

Render reStructuredText to HTML

-
- -
- -
-
-class pyams_utils.text.RenderersVocabulary
-

Bases: zope.schema.vocabulary.SimpleVocabulary

-

Text renderers vocabulary

-
- -
-
-class pyams_utils.text.TextRenderer(context, request)
-

Bases: pyams_utils.text.BaseHTMLRenderer

-

Basic text HTML renderer

-

This renderer only replace newlines with HTML breaks.

-
-
-render(**kwargs)
-
- -
- -
-
-pyams_utils.text.get_text_start(text, length, max=0)
-

Get first words of given text with maximum given length

-

If max is specified, text is shortened only if remaining text is longer this value

- --- - - - -
Parameters:
    -
  • text (str) – initial text
  • -
  • length (integer) – maximum length of resulting text
  • -
  • max (integer) – if > 0, text is shortened only if remaining text is longer than max
  • -
-
-
>>> from pyams_utils.text import get_text_start
->>> get_text_start('This is a long string', 10)
-'This is a&#133;'
->>> get_text_start('This is a long string', 20)
-'This is a long&#133;'
->>> get_text_start('This is a long string', 20, 7)
-'This is a long string'
-
-
-
- -
-
-pyams_utils.text.text_to_html(text, renderer='text')
-

Convert text to HTML using the given renderer

-

Renderer name can be any registered HTML renderer adapter

-
- -
-
-

pyams_utils.traversing module

-
-
-class pyams_utils.traversing.NamespaceTraverser(root)
-

Bases: pyramid.traversal.ResourceTreeTraverser

-

Custom traverser handling views and namespaces

-

This is an upgraded version of native Pyramid traverser. -It adds: -- a new BeforeTraverseEvent before traversing each object in the path -- support for namespaces with “++” notation

-
-
-NAMESPACE_SELECTOR = '++'
-
- -
- -
-
-class pyams_utils.traversing.PathElementsAdapter(context)
-

Bases: pyams_utils.adapter.ContextAdapter

-

Contained object path elements adapter

-

This interface is intended to be used inside a keyword index to -be able to search object based on a given parent

-
-
-parents
-
- -
- -
-
-pyams_utils.traversing.get_parent(context, interface=<InterfaceClass zope.interface.Interface>, allow_context=True, condition=None)
-

Get first parent of the context that implements given interface

- --- - - - -
Parameters:
    -
  • context (object) – base element
  • -
  • interface (Interface) – the interface that parend should implement
  • -
  • allow_context (boolean) – if ‘True’ (the default), traversing is done starting with context; otherwise, -traversing is done starting from context’s parent
  • -
  • condition (callable) – an optional function that should return a ‘True’ result when called with parent -as first argument
  • -
-
-
- -
-
-

pyams_utils.unicode module

-
-
-pyams_utils.unicode.decode(value, encoding='utf-8')
-

Decode given bytes value to unicode with given encoding

- --- - - - - - -
Parameters:
    -
  • value (bytes) – the value to decode
  • -
  • encoding (str) – selected encoding
  • -
-
Returns:

str; value decoded to unicode string if input is a bytes, original value otherwise

-
-
>>> from pyams_utils.unicode import decode
->>> decode(b'Cha\xc3\xaene accentu\xc3\xa9e')
-'Chaîne accentuée'
->>> decode(b'Cha\xeene accentu\xe9e', 'latin1')
-'Chaîne accentuée'
-
-
-
- -
-
-pyams_utils.unicode.encode(value, encoding='utf-8')
-

Encode given Unicode value to bytes with given encoding

- --- - - - - - -
Parameters:
    -
  • value (str) – the value to encode
  • -
  • encoding (str) – selected encoding
  • -
-
Returns:

bytes; value encoded to bytes if input is a string, original value otherwise

-
-
>>> from pyams_utils.unicode import encode
->>> encode('Chaîne accentuée')
-b'Cha\xc3\xaene accentu\xc3\xa9e'
->>> encode('Chaîne accentuée', 'latin1')
-b'Cha\xeene accentu\xe9e'
-
-
-
- -
-
-pyams_utils.unicode.nvl(value, default='')
-

Get specified value, or an empty string if value is empty

- --- - - - - - -
Parameters:
    -
  • value (object) – value to be checked
  • -
  • default (object) – default value to be returned if value is false
  • -
-
Returns:

input value, or default if value is false

-
-
>>> from pyams_utils.unicode import nvl
->>> nvl(None)
-''
->>> nvl('foo')
-'foo'
->>> nvl(False, 'bar')
-'bar'
-
-
-
- -
-
-pyams_utils.unicode.translate_string(s, escape_slashes=False, force_lower=True, spaces=' ', remove_punctuation=True, keep_chars='_-.')
-

Remove extended characters and diacritics from string and replace them with ‘basic’ ones

- --- - - - - - -
Parameters:
    -
  • s (str) – text to be cleaned.
  • -
  • escape_slashes (boolean) – if True, slashes are also converted
  • -
  • force_lower (boolean) – if True, result is automatically converted to lower case
  • -
  • spaces (str) – character used to replace spaces
  • -
  • remove_punctuation (boolean) – if True, all punctuation characters are removed
  • -
  • keep_chars (str) – characters which may be kept in the input string
  • -
-
Returns:

text without diacritics or special characters

-
-
>>> from pyams_utils.unicode import translate_string
->>> input = 'Ceci est un test en Français !!!'
->>> translate_string(input)
-'ceci est un test en francais'
->>> translate_string(input, force_lower=False)
-'Ceci est un test en Francais'
->>> translate_string(input, spaces='-')
-'ceci-est-un-test-en-francais'
->>> translate_string(input, remove_punctuation=False)
-'ceci est un test en francais !!!'
->>> translate_string(input, keep_chars='!')
-'ceci est un test en francais !!!'
-
-
-
- -
-
-pyams_utils.unicode.unidict(value, encoding='utf-8')
-

Get specified dict with values converted to unicode

- --- - - - - - -
Parameters:value (dict) – input mapping of strings which may be converted to unicode
Returns:dict; a new mapping with each value converted to unicode
-
>>> from pyams_utils.unicode import unidict
->>> unidict({'input': b'Cha\xc3\xaene accentu\xc3\xa9e'})
-{'input': 'Chaîne accentuée'}
->>> unidict({'input': b'Cha\xeene accentu\xe9e'}, 'latin1')
-{'input': 'Chaîne accentuée'}
-
-
-
- -
-
-pyams_utils.unicode.unilist(value, encoding='utf-8')
-

Get specified list with values converted to unicode

- --- - - - - - -
Parameters:value (list) – input list of strings which may be converted to unicode
Returns:list; a new list with each value converted to unicode
-
>>> from pyams_utils.unicode import unilist
->>> unilist([b'Cha\xc3\xaene accentu\xc3\xa9e'])
-['Chaîne accentuée']
->>> unilist([b'Cha\xeene accentu\xe9e'], 'latin1')
-['Chaîne accentuée']
-
-
-
- -
-
-pyams_utils.unicode.uninvl(value, default='', encoding='utf-8')
-

Get specified value converted to unicode, or an empty unicode string if value is empty

- --- - - - - - -
Parameters:
    -
  • value (str/bytes) – the input to be checked
  • -
  • default – str; default value
  • -
  • encoding – str; encoding name to use for conversion
  • -
-
Returns:

str; value, or default if value is empty, converted to unicode

-
-
>>> from pyams_utils.unicode import uninvl
->>> uninvl('String value')
-'String value'
->>> uninvl(b'String value')
-'String value'
->>> uninvl(b'Cha\xc3\xaene accentu\xc3\xa9e')
-'Chaîne accentuée'
->>> uninvl(b'Cha\xeene accentu\xe9e', 'latin1')
-'Chaîne accentuée'
-
-
-
- -
-
-pyams_utils.unicode.utf8(value)
-

Encode given unicode value to UTF-8 encoded bytes

- --- - - - - - -
Parameters:value (str) – the value to encode to utf-8
Returns:bytes; value encoded to bytes if input is a string, original value otherwise
-
>>> from pyams_utils.unicode import utf8
->>> utf8('Chaîne accentuée')
-b'Cha\xc3\xaene accentu\xc3\xa9e'
-
-
-
- -
-
-

pyams_utils.url module

-
-
-class pyams_utils.url.AbsoluteUrlTalesExtension(context, request, view)
-

Bases: pyams_utils.adapter.ContextRequestViewAdapter

-

extension:absolute_url(context, view_name) TALES extension

-

A PyAMS TALES extension used to get access to an object URL from a page template.

-
-
-render(context=None, view_name=None)
-
- -
- -
-
-pyams_utils.url.absolute_url(context, request, view_name=None)
-

Get resource absolute_url

- --- - - - -
Parameters:
    -
  • context (object) – the persistent object for which absolute URL is required
  • -
  • request – the request on which URL is based
  • -
  • view_name (str) – an optional view name to add to URL
  • -
-
-

This absolute URL function is based on default Pyramid’s resource_url() function, but -add checks to remove some double slashes, and add control on view name when it begins with a ‘#’ -character which is used by MyAMS.js framework.

-
- -
-
-

pyams_utils.vocabulary module

-
-
-class pyams_utils.vocabulary.vocabulary_config(name)
-

Bases: object

-

Class decorator to define a vocabulary

- --- - - - -
Parameters:name (str) – name of the registered vocabulary
-

This is, for example, how a vocabulary of registered ZEO connections utilities is created:

-
from pyams_utils.interfaces.zeo import IZEOConnection
-
-from pyams_utils.registry import get_utilities_for
-from pyams_utils.vocabulary import vocabulary_config
-from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
-
-@vocabulary_config(name='PyAMS ZEO connections')
-class ZEOConnectionVocabulary(SimpleVocabulary):
-    '''ZEO connections vocabulary'''
-
-    def __init__(self, context=None):
-        terms = [SimpleTerm(name, title=util.name) for name, util in get_utilities_for(IZEOConnection)]
-        super(ZEOConnectionVocabulary, self).__init__(terms)
-
-
-

You can then use such a vocabulary in any schema field:

-
from zope.interface import Interface
-from zope.schema import Choice
-
-class MySchema(Interface):
-    '''Custom schema interface'''
-
-    zeo_connection_name = Choice(title='ZEO connection name',
-                                 description='Please select a registered ZEO connection',
-                                 vocabulary='PyAMS ZEO connections',
-                                 required=False)
-
-
-
- -
-
-

pyams_utils.wsgi module

-
-
-pyams_utils.wsgi.wsgi_environ_cache(*names)
-

Wrap a function/method to cache its result for call into request.environ

- --- - - - -
Parameters:names ([string...]) – keys to cache into environ; len(names) must -be equal to the result’s length or scalar
-
- -
-
-

pyams_utils.zodb module

-
-
-class pyams_utils.zodb.ZEOConnection
-

Bases: object

-

ZEO connection object

-

This object can be used to store all settings to be able to open a ZEO connection.

-

Note that a ZEO connection object is a context manager, so you can use it like this:

-
from pyams_utils.zodb import ZEOConnection
-
-def my_method(zeo_settings):
-    zeo_connection = ZEOConnection()
-    zeo_connection.update(zeo_settings)
-    with zeo_connection as root:
-        # *root* is then the ZODB root object
-        # do whatever you want with ZEO connection,
-        # which is closed automatically
-
-
-
-
-blob_dir
-

Directory path for blob data

-
- -
-
-connection
-
- -
-
-get_connection(wait=False, get_storage=False)
-

Create ZEO client connection from current settings

- --- - - - - - -
Parameters:
    -
  • wait (boolean) – should connection wait until storage is ready
  • -
  • get_storage (boolean) – if True, the method should return a tuple containing -storage and DB objects; otherwise only DB object is returned
  • -
-
Returns:

tuple containing ZEO client storage and DB object (if get_storage argument is -set to True), or only DB object otherwise

-
-
- -
-
-get_settings()
-

Get mapping of all connection settings

-

These settings can be converted to JSON and sent to another process, for example -via a ØMQ connection.

- --- - - - -
Returns:dict
-
- -
-
-name
-

Registration name of ZEO connection

-
- -
-
-password
-

User password on ZEO server

-
- -
-
-server_name
-

Hostname of ZEO server

-
- -
-
-server_port
-

Port number of ZEO server

-
- -
-
-server_realm
-

Realm name on ZEO server

-
- -
-
-shared_blob_dir
-

Flag whether the blob_dir is a server-shared filesystem that should be used instead of transferring blob data over zrpc.

-
- -
-
-storage
-

Storage name on ZEO server

-
- -
-
-update(settings)
-

Update connection properties with settings as dict

- --- - - - -
Parameters:settings (dict) – typically extracted via the get_settings() method from -another process
-
- -
-
-username
-

User name on ZEO server

-
- -
- -
-
-class pyams_utils.zodb.ZEOConnectionUtility
-

Bases: pyams_utils.zodb.ZEOConnection, persistent.Persistent, zope.container.contained.Contained

-

Persistent ZEO connection utility

-
- -
-
-class pyams_utils.zodb.ZEOConnectionVocabulary(context=None)
-

Bases: zope.schema.vocabulary.SimpleVocabulary

-

ZEO connections vocabulary

-
- -
-
-pyams_utils.zodb.get_connection(obj)
-

An adapter which gets a ZODB connection from a persistent object

-

We are assuming the object has a parent if it has been created in -this transaction.

-

Raises ValueError if it is impossible to get a connection.

-
- -
-
-pyams_utils.zodb.get_connection_from_settings(settings)
-

Load connection matching registry settings

-
- -
-
-pyams_utils.zodb.get_transaction_manager(obj)
-
- -
-
-pyams_utils.zodb.handle_added_connection(event)
-

Register new ZEO connection when added

-
- -
-
-pyams_utils.zodb.handle_removed_connection(event)
-

Un-register ZEO connection when deleted

-
- -
-
-

Module contents

-
-
-pyams_utils.includeme(config)
-

pyams_utils features include

-
- -
-
- - -