Passed
Push — 2.x ( 353ef7...3874f5 )
by Jordi
05:23
created

senaite.core.registry   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 9
eloc 34
dl 0
loc 52
rs 10
c 0
b 0
f 0

3 Functions

Rating   Name   Duplication   Size   Complexity  
A get_registry() 0 6 1
A get() 0 10 3
A set() 0 21 5
1
# -*- coding: utf-8 -*-
2
3
from plone.registry.interfaces import IRegistry
4
from senaite.core.registry.schema import ISenaiteRegistry
5
from zope.component import getUtility
6
from zope.schema._bootstrapinterfaces import WrongType
7
8
PREFIX = "senaite.core"
9
10
11
def get_registry():
12
    """Returns the registry utility
13
14
    :returns: Registry object
15
    """
16
    return getUtility(IRegistry)
17
18
19
def get(name, default=None):
20
    """Get registry value by name
21
    """
22
    if not name.startswith(PREFIX):
23
        name = "{}.{}".format(PREFIX, name)
24
    registry = get_registry()
25
    try:
26
        return registry[name]
27
    except KeyError:
28
        return default
29
30
31
def set(name, value):
32
    """Set registry value
33
    """
34
    if not name.startswith(PREFIX):
35
        name = "{}.{}".format(PREFIX, name)
36
37
    registry = get_registry()
38
    try:
39
        registry[name] = value
40
    except WrongType:
41
        field_type = None
42
        for field in ISenaiteRegistry.namesAndDescriptions():
43
            if field[0] == name:
44
                field_type = field[1]
45
                break
46
        raise TypeError(
47
            u"The value parameter for the field {name} needs to be "
48
            u"{of_class} instead of {of_type}".format(
49
                name=name,
50
                of_class=str(field_type.__class__),
51
                of_type=type(value),
52
            ),
53
        )
54