Skip to content

Commit edb52c5

Browse files
authored
Merge pull request #189 from highcharts-for-python/develop
PR for v.1.9.0
2 parents fec60b3 + 10c3786 commit edb52c5

File tree

17 files changed

+435
-15
lines changed

17 files changed

+435
-15
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,6 @@ dmypy.json
132132
# temp files
133133
~$*.*
134134
tests/input_files/headless_export/output/
135+
136+
# VSCode Settings
137+
.vscode/

CHANGES.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,21 @@
11

2+
Release 1.9.0
3+
=========================================
4+
5+
* **BUGFIX:** Fixed missing serialization/de-serialization of ``ChartEvents.render``.
6+
* **BUGFIX:** Added new ``utility_classes.data_labels.PieDataLabel`` class to ensure support for
7+
the ``.distance`` property on Pie-chart (and descended) data labels. Closes #183.
8+
* **BUGFIX:** Fixed ``options.chart.height`` type validation to accept string values as per JS API.
9+
(Issue reported in #184).
10+
* **BUGFIX:** Added missing support for ``options.plot_options.sunburst.SunburstOptions.border_radius``
11+
(issue reported in #184).
12+
* **BUGFIX:** Added support for concatenation via `+` operator in JS literal strings when parsed by
13+
``.from_js_literal()``. Closes #185.
14+
* **ENHANCEMENT:** Added support for ``utility_classes.border_radius.BorderRadius`` object.
15+
16+
----
17+
18+
219
Release 1.8.2
320
=========================================
421

docs/api.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,8 @@ Core Components
622622
:class:`ASTNode <highcharts_core.utility_classes.ast.ASTNode>`
623623
:class:`TextPath <highcharts_core.utility_classes.ast.TextPath>`
624624
:class:`AttributeObject <highcharts_core.utility_classes.ast.AttributeObject>`
625+
* - :mod:`.utility_classes.border_radius <highcharts_core.utility_classes.border_radius>`
626+
- :class:`BorderRadius <highcharts_core.utility_classes.border_radius.BorderRadius>`
625627
* - :mod:`.utility_classes.breadcrumbs <highcharts_core.utility_classes.breadcrumbs>`
626628
- :class:`BreadcrumbOptions <highcharts_core.utility_classes.breadcrumbs.BreadcrumbOptions>`
627629
:class:`Separator <highcharts_core.utility_classes.breadcrumbs.Separator>`
@@ -638,6 +640,7 @@ Core Components
638640
- :class:`DataGroupingOptions <highcharts_core.utility_classes.data_grouping.DataGroupingOptions>`
639641
* - :mod:`.utility_classes.data_labels <highcharts_core.utility_classes.data_labels>`
640642
- :class:`DataLabel <highcharts_core.utility_classes.data_labels.DataLabel>`
643+
:class:`PieDataLabel <highcharts_core.utility_classes.data_labels.PieDataLabel>`
641644
:class:`SunburstDataLabel <highcharts_core.utility_classes.data_labels.SunburstDataLabel>`
642645
:class:`OrganizationDataLabel <highcharts_core.utility_classes.data_labels.OrganizationDataLabel>`
643646
:class:`NodeDataLabel <highcharts_core.utility_classes.data_labels.NodeDataLabel>`
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
##########################################################################################
2+
:mod:`.border_radius <highcharts_core.utility_classes.border_radius>`
3+
##########################################################################################
4+
5+
.. contents:: Module Contents
6+
:local:
7+
:depth: 3
8+
:backlinks: entry
9+
10+
--------------
11+
12+
.. module:: highcharts_core.utility_classes.border_radius
13+
14+
********************************************************************************************************************
15+
class: :class:`BorderRadius <highcharts_core.utility_classes.border_radius.BorderRadius>`
16+
********************************************************************************************************************
17+
18+
.. autoclass:: BorderRadius
19+
:members:
20+
:inherited-members:
21+
22+
.. collapse:: Class Inheritance
23+
24+
.. inheritance-diagram:: BorderRadius
25+
:top-classes: highcharts_core.metaclasses.HighchartsMeta
26+
:parts: -1
27+
28+
|
29+

docs/api/utility_classes/data_labels.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,24 @@ class: :class:`OrganizationDataLabel <highcharts_core.utility_classes.data_label
4747
4848
-----------------
4949

50+
********************************************************************************************************************
51+
class: :class:`PieDataLabel <highcharts_core.utility_classes.data_labels.PieDataLabel>`
52+
********************************************************************************************************************
53+
54+
.. autoclass:: PieDataLabel
55+
:members:
56+
:inherited-members:
57+
58+
.. collapse:: Class Inheritance
59+
60+
.. inheritance-diagram:: PieDataLabel
61+
:top-classes: highcharts_core.metaclasses.HighchartsMeta
62+
:parts: -1
63+
64+
|
65+
66+
-----------------
67+
5068
********************************************************************************************************************
5169
class: :class:`SunburstDataLabel <highcharts_core.utility_classes.data_labels.SunburstDataLabel>`
5270
********************************************************************************************************************

docs/api/utility_classes/index.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ Sub-components
5353
:class:`ASTNode <highcharts_core.utility_classes.ast.ASTNode>`
5454
:class:`TextPath <highcharts_core.utility_classes.ast.TextPath>`
5555
:class:`AttributeObject <highcharts_core.utility_classes.ast.AttributeObject>`
56+
* - :mod:`.utility_classes.border_radius <highcharts_core.utility_classes.border_radius>`
57+
- :class:`BorderRadius <highcharts_core.utility_classes.border_radius.BorderRadius>`
5658
* - :mod:`.utility_classes.breadcrumbs <highcharts_core.utility_classes.breadcrumbs>`
5759
- :class:`BreadcrumbOptions <highcharts_core.utility_classes.breadcrumbs.BreadcrumbOptions>`
5860
:class:`Separator <highcharts_core.utility_classes.breadcrumbs.Separator>`
@@ -68,6 +70,7 @@ Sub-components
6870
- :class:`DataGroupingOptions <highcharts_core.utility_classes.data_grouping.DataGroupingOptions>`
6971
* - :mod:`.utility_classes.data_labels <highcharts_core.utility_classes.data_labels>`
7072
- :class:`DataLabel <highcharts_core.utility_classes.data_labels.DataLabel>`
73+
:class:`PieDataLabel <highcharts_core.utility_classes.data_labels.PieDataLabel>`
7174
:class:`SunburstDataLabel <highcharts_core.utility_classes.data_labels.SunburstDataLabel>`
7275
:class:`OrganizationDataLabel <highcharts_core.utility_classes.data_labels.OrganizationDataLabel>`
7376
:class:`NodeDataLabel <highcharts_core.utility_classes.data_labels.NodeDataLabel>`

highcharts_core/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.8.2'
1+
__version__ = '1.9.0'

highcharts_core/js_literal_functions.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,25 @@ def convert_js_property_to_python(property_definition, original_str = None):
581581
elif property_definition.value.type == 'ClassExpression':
582582
return JavaScriptClass._convert_from_js_ast(property_definition.value,
583583
original_str)
584+
elif property_definition.value.type == 'BinaryExpression':
585+
property_value = property_definition.value
586+
operator = property_value.operator
587+
left, right = property_value.left, property_value.right
588+
left_type, right_type = left.type, right.type
589+
590+
if (left_type not in ['Literal']) or (right_type not in ['Literal']):
591+
raise errors.HighchartsParseError(f'unable to find two Literal values within'
592+
f'a Binary expression. Found: '
593+
f'{left_type, right_type}')
594+
595+
left_value, right_value = left.value, right.value
596+
if operator not in ['+', '-', '/']:
597+
raise errors.HighchartsParseError(f'operator "{operator}" not supported within '
598+
f'Binary expression parsing')
599+
left_value = validators.string(left_value, allow_empty = False)
600+
right_value = validators.string(right_value, allow_empty = False)
601+
602+
return left_value + right_value
584603
elif property_definition.value.type == 'CallExpression':
585604
expression = property_definition.value
586605
try:
@@ -650,6 +669,7 @@ def convert_js_to_python(javascript, original_str = None):
650669
'ObjectExpression',
651670
'ArrayExpression',
652671
'UnaryExpression',
672+
'BinaryExpression',
653673
'FunctionExpression'):
654674
raise errors.HighchartsParseError(f'javascript should contain a '
655675
f'Property, Literal, ObjectExpression, '

highcharts_core/options/chart/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ def height(self, value):
523523
self._height = validators.numeric(value,
524524
allow_empty = False,
525525
minimum = 0)
526-
except ValueError:
526+
except (ValueError, TypeError):
527527
self._height = validators.string(value,
528528
allow_empty = False)
529529
except ValueError:

highcharts_core/options/plot_options/bar.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from highcharts_core.utility_classes.patterns import Pattern
1111
from highcharts_core.utility_classes.data_grouping import DataGroupingOptions
1212
from highcharts_core.utility_classes.partial_fill import PartialFillOptions
13+
from highcharts_core.utility_classes.border_radius import BorderRadius
1314

1415

1516
class BaseBarOptions(SeriesOptions):
@@ -61,7 +62,7 @@ def border_color(self, value):
6162
self._border_color = utility_functions.validate_color(value)
6263

6364
@property
64-
def border_radius(self) -> Optional[int | float | Decimal]:
65+
def border_radius(self) -> Optional[int | float | Decimal | str | BorderRadius]:
6566
"""The corner radius of the border surrounding each column or bar. Defaults to
6667
``0``.
6768
@@ -71,9 +72,28 @@ def border_radius(self) -> Optional[int | float | Decimal]:
7172

7273
@border_radius.setter
7374
def border_radius(self, value):
74-
self._border_radius = validators.numeric(value,
75-
allow_empty = True,
76-
minimum = 0)
75+
if value is None:
76+
self._border_radius = None
77+
else:
78+
try:
79+
self._border_radius = validators.numeric(value,
80+
allow_empty = True,
81+
minimum = 0)
82+
except (ValueError, TypeError):
83+
try:
84+
self._border_radius = validate_types(value, BorderRadius)
85+
except (ValueError, TypeError):
86+
if not isinstance(value, str):
87+
raise errors.HighchartsValueError(f'border_radius must be a numeric value, '
88+
f'a string, or an instance of BorderRadius. '
89+
f'Received {value.__class__.__name__}.')
90+
if not value.endswith(('%', 'px', 'em')):
91+
raise errors.HighchartsValueError(f'border_radius must be a numeric value, '
92+
f'a percentage string, a pixel measurement, '
93+
f'or an instance of BorderRadius. '
94+
f'Received: "{value}".')
95+
96+
self._border_radius = value
7797

7898
@property
7999
def border_width(self) -> Optional[int | float | Decimal]:

0 commit comments

Comments
 (0)