Show More
@@ -0,0 +1,20 b'' | |||||
|
1 | """Test trait types of the widget packages.""" | |||
|
2 | ||||
|
3 | # Copyright (c) IPython Development Team. | |||
|
4 | # Distributed under the terms of the Modified BSD License. | |||
|
5 | ||||
|
6 | from unittest import TestCase | |||
|
7 | from IPython.utils.traitlets import HasTraits | |||
|
8 | from IPython.utils.tests.test_traitlets import TraitTestBase | |||
|
9 | from IPython.html.widgets import Color | |||
|
10 | ||||
|
11 | ||||
|
12 | class ColorTrait(HasTraits): | |||
|
13 | value = Color("black") | |||
|
14 | ||||
|
15 | ||||
|
16 | class TestColor(TraitTestBase): | |||
|
17 | obj = ColorTrait() | |||
|
18 | ||||
|
19 | _good_values = ["blue", "#AA0", "#FFFFFF"] | |||
|
20 | _bad_values = ["vanilla", "blues"] |
@@ -0,0 +1,29 b'' | |||||
|
1 | # encoding: utf-8 | |||
|
2 | """ | |||
|
3 | Trait types for html widgets. | |||
|
4 | """ | |||
|
5 | ||||
|
6 | # Copyright (c) IPython Development Team. | |||
|
7 | # Distributed under the terms of the Modified BSD License. | |||
|
8 | ||||
|
9 | import re | |||
|
10 | from IPython.utils import traitlets | |||
|
11 | ||||
|
12 | #----------------------------------------------------------------------------- | |||
|
13 | # Utilities | |||
|
14 | #----------------------------------------------------------------------------- | |||
|
15 | ||||
|
16 | _color_names = ['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink', 'indianred ', 'indigo ', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'] | |||
|
17 | _color_re = re.compile(r'#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?$') | |||
|
18 | ||||
|
19 | ||||
|
20 | class Color(traitlets._CoercedString): | |||
|
21 | """A string holding a valid HTML color such as 'blue', '#060482', '#A80'""" | |||
|
22 | ||||
|
23 | info_text = 'a valid HTML color' | |||
|
24 | ||||
|
25 | def validate(self, obj, value): | |||
|
26 | value = self._coerce_str(obj, value) | |||
|
27 | if value.lower() in _color_names or _color_re.match(value): | |||
|
28 | return value | |||
|
29 | self.error(obj, value) No newline at end of file |
@@ -1,5 +1,7 b'' | |||||
1 | from .widget import Widget, DOMWidget, CallbackDispatcher, register |
|
1 | from .widget import Widget, DOMWidget, CallbackDispatcher, register | |
2 |
|
2 | |||
|
3 | from .trait_types import Color | |||
|
4 | ||||
3 | from .widget_bool import Checkbox, ToggleButton |
|
5 | from .widget_bool import Checkbox, ToggleButton | |
4 | from .widget_button import Button |
|
6 | from .widget_button import Button | |
5 | from .widget_box import Box, FlexBox, HBox, VBox |
|
7 | from .widget_box import Box, FlexBox, HBox, VBox |
@@ -20,8 +20,9 b' from IPython.kernel.comm import Comm' | |||||
20 | from IPython.config import LoggingConfigurable |
|
20 | from IPython.config import LoggingConfigurable | |
21 | from IPython.utils.importstring import import_item |
|
21 | from IPython.utils.importstring import import_item | |
22 | from IPython.utils.traitlets import Unicode, Dict, Instance, Bool, List, \ |
|
22 | from IPython.utils.traitlets import Unicode, Dict, Instance, Bool, List, \ | |
23 |
CaselessStrEnum, Tuple, CUnicode, Int, Set |
|
23 | CaselessStrEnum, Tuple, CUnicode, Int, Set | |
24 | from IPython.utils.py3compat import string_types |
|
24 | from IPython.utils.py3compat import string_types | |
|
25 | from .trait_types import Color | |||
25 |
|
26 | |||
26 | #----------------------------------------------------------------------------- |
|
27 | #----------------------------------------------------------------------------- | |
27 | # Classes |
|
28 | # Classes |
@@ -14,7 +14,8 b' Represents an unbounded float using a widget.' | |||||
14 | # Imports |
|
14 | # Imports | |
15 | #----------------------------------------------------------------------------- |
|
15 | #----------------------------------------------------------------------------- | |
16 | from .widget import DOMWidget, register |
|
16 | from .widget import DOMWidget, register | |
17 | from IPython.utils.traitlets import Unicode, CFloat, Bool, CaselessStrEnum, Tuple, Color |
|
17 | from .trait_types import Color | |
|
18 | from IPython.utils.traitlets import Unicode, CFloat, Bool, CaselessStrEnum, Tuple | |||
18 | from IPython.utils.warn import DeprecatedClass |
|
19 | from IPython.utils.warn import DeprecatedClass | |
19 |
|
20 | |||
20 | #----------------------------------------------------------------------------- |
|
21 | #----------------------------------------------------------------------------- |
@@ -14,7 +14,8 b' Represents an unbounded int using a widget.' | |||||
14 | # Imports |
|
14 | # Imports | |
15 | #----------------------------------------------------------------------------- |
|
15 | #----------------------------------------------------------------------------- | |
16 | from .widget import DOMWidget, register |
|
16 | from .widget import DOMWidget, register | |
17 | from IPython.utils.traitlets import Unicode, CInt, Bool, CaselessStrEnum, Tuple, Color |
|
17 | from .trait_types import Color | |
|
18 | from IPython.utils.traitlets import Unicode, CInt, Bool, CaselessStrEnum, Tuple | |||
18 | from IPython.utils.warn import DeprecatedClass |
|
19 | from IPython.utils.warn import DeprecatedClass | |
19 |
|
20 | |||
20 | #----------------------------------------------------------------------------- |
|
21 | #----------------------------------------------------------------------------- |
@@ -17,7 +17,7 b' from nose import SkipTest' | |||||
17 |
|
17 | |||
18 | from IPython.utils.traitlets import ( |
|
18 | from IPython.utils.traitlets import ( | |
19 | HasTraits, MetaHasTraits, TraitType, Any, Bool, CBytes, Dict, Enum, |
|
19 | HasTraits, MetaHasTraits, TraitType, Any, Bool, CBytes, Dict, Enum, | |
20 |
Int, Long, Integer, Float, Complex, Bytes, Unicode, |
|
20 | Int, Long, Integer, Float, Complex, Bytes, Unicode, TraitError, | |
21 | Union, Undefined, Type, This, Instance, TCPAddress, List, Tuple, |
|
21 | Union, Undefined, Type, This, Instance, TCPAddress, List, Tuple, | |
22 | ObjectName, DottedObjectName, CRegExp, link, directional_link, |
|
22 | ObjectName, DottedObjectName, CRegExp, link, directional_link, | |
23 | EventfulList, EventfulDict, ForwardDeclaredType, ForwardDeclaredInstance, |
|
23 | EventfulList, EventfulDict, ForwardDeclaredType, ForwardDeclaredInstance, | |
@@ -918,16 +918,6 b' class TestDottedObjectName(TraitTestBase):' | |||||
918 | _good_values.append(u"t.ΓΎ") |
|
918 | _good_values.append(u"t.ΓΎ") | |
919 |
|
919 | |||
920 |
|
920 | |||
921 | class ColorTrait(HasTraits): |
|
|||
922 | value = Color("black") |
|
|||
923 |
|
||||
924 | class TestColor(TraitTestBase): |
|
|||
925 | obj = ColorTrait() |
|
|||
926 |
|
||||
927 | _good_values = ["blue", "#AA0", "#FFFFFF"] |
|
|||
928 | _bad_values = ["vanilla", "blues"] |
|
|||
929 |
|
||||
930 |
|
||||
931 | class TCPAddressTrait(HasTraits): |
|
921 | class TCPAddressTrait(HasTraits): | |
932 | value = TCPAddress() |
|
922 | value = TCPAddress() | |
933 |
|
923 |
@@ -1331,22 +1331,6 b' class DottedObjectName(ObjectName):' | |||||
1331 | self.error(obj, value) |
|
1331 | self.error(obj, value) | |
1332 |
|
1332 | |||
1333 |
|
1333 | |||
1334 | _color_names = ['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink', 'indianred ', 'indigo ', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'] |
|
|||
1335 | _color_re = re.compile(r'#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?$') |
|
|||
1336 |
|
||||
1337 |
|
||||
1338 | class Color(_CoercedString): |
|
|||
1339 | """A string holding a valid HTML color such as 'blue', '#060482', '#A80'""" |
|
|||
1340 |
|
||||
1341 | info_text = 'a valid HTML color' |
|
|||
1342 |
|
||||
1343 | def validate(self, obj, value): |
|
|||
1344 | value = self._coerce_str(obj, value) |
|
|||
1345 | if value.lower() in _color_names or _color_re.match(value): |
|
|||
1346 | return value |
|
|||
1347 | self.error(obj, value) |
|
|||
1348 |
|
||||
1349 |
|
||||
1350 | class Bool(TraitType): |
|
1334 | class Bool(TraitType): | |
1351 | """A boolean (True, False) trait.""" |
|
1335 | """A boolean (True, False) trait.""" | |
1352 |
|
1336 |
General Comments 0
You need to be logged in to leave comments.
Login now