diff --git a/LICENSE b/LICENSE index f0c8abd2..781347c9 100644 --- a/LICENSE +++ b/LICENSE @@ -1 +1,227 @@ -TODO: Add license details. +####################################################################### +Terms and Conditions for the Highcharts for Python Toolkit License +####################################################################### + +*********************************************** +1. Acceptance of the Terms and Conditions +*********************************************** + +These terms and conditions (the “Wrapper T&Cs”) shall apply to Licensee’s license to and use of the Wrapper (as defined below), a complementary product to the Software owned and delivered by Highsoft AS (“Highsoft”). The Wrapper is owned by HCP LLC (“HCP”) and distributed by Highsoft AS or its partners, resellers or distributors, and these Wrapper T&Cs shall apply to the Licensee’s usage of the Wrapper irrespective of which license type(s) to the Software the Licensee has subscribed to or purchased from Highsoft. + +By installing or using the Wrapper or any part thereof, Licensee agrees to be bound by these Wrapper T&Cs, unless Licensee is using the Software and the Wrapper for evaluation purposes authorized by Highsoft, i.e. during a trial period. + +Without prejudice to the limited right to download and test the Wrapper for evaluation prior to the purchase of a Wrapper License, Licensee is not authorized to install or use the Wrapper unless Licensee pays the applicable Wrapper Fee and fully agrees to all terms and conditions set forth herein and to any terms set forth in related licensing agreements or terms from Highsoft to which these Wrapper T&Cs constitute an addendum. + +*********************************************** +2. Relationship to the Main Agreement +*********************************************** + +A Wrapper License (as defined below) or renewal thereof can only be purchased by a Licensee either already holding a License to the Software, or at the same time as purchasing such a License, as an add-on product to such License, and only by a Licensee holding an active and valid enrolment in the Highcharts Advantage plan. The purchase of, and right to use the Licensed Software shall remain governed by the terms and conditions of the License issued by Highsoft to Licensee, whether this is Highsoft Standard License Agreement, Highsoft Terms and Conditions for Subscription to Annual License to Highsoft Software, or another licensing agreement as agreed between Highsoft and Licensee, as applicable (such terms and conditions between Highsoft and Licensee hereinafter collectively referred to as the “Main Agreement”). + +These Wrapper T&Cs constitute an addendum to the Main Agreement and an integral part thereof and apply to the use of the Wrapper only. + +In the case of any discrepancy between the Main Agreement and these Wrapper T&Cs related to the licensing of the Wrapper, these Wrapper T&Cs shall prevail. + +*********************************************** +3. Definitions +*********************************************** + +Unless otherwise defined below or elsewhere in these Wrapper T&Cs, all capitalized terms used but not otherwise defined herein shall have the same definitions as set out in the Main Agreement. + + * **Agreement** shall mean the Main Agreement, these Wrapper T&Cs and the License Statement; + * **Delivery Date** shall mean the date Licensee is invoiced by Highsoft for the Wrapper License, which will + correspond to the Delivery Date for the Software if purchased together, or at a separate time, if purchased as an + add-on to an existing License; + * **HCP** shall mean HCP LLC, the company behind the Wrapper, a US limited liability corporation registered in the + state of Delaware, with its registered office at 867 Boylston Street, 5th Floor #1674, Boston, MA 02116, United + States.Licensee shall mean the legal entity to which the License (to the Licensed Software) and the Wrapper License + has been granted, as expressly stated in the License Statement; + * **Licensors** shall mean Highsoft and/or HCP collectively; + * **Wrapper** shall mean the proprietary software products distributed by Highsoft and owned by HCP, including + Highcharts for Python – the main product included in all licenses – in addition to Highcharts Stock for Python, + Highcharts Maps for Python, Highcharts Gantt for Python, and other optional additional products or libraries which + may be developed by HCP and offered within the Wrapper by Highsoft. + * **Wrapper** Fee shall mean the fee payable by Licensee to Highsoft for the Wrapper License and for the right to + receive the support services provided by HCP under these Wrapper T&Cs ; + * **Wrapper License** shall mean the right to use the Wrapper in accordance with the Agreement and as set out herein, + whether granted as a perpetual license or in the form of a time-limited subscription (subject to renewal), and as + one or more of the license types as defined in the Main Agreement; + * **Wrapper Term** shall have the meaning set out in section 7. + +*********************************************** +4. Ownership and Copyright +*********************************************** + +The Wrapper is the property of HCP and is protected by copyright law as well as other statutory and non-statutory intellectual property law. All title and copyrights in and to the Wrapper are and shall remain owned fully and solely by HCP. + +Under the Agreement, the Wrapper is licensed to Licensee by Highsoft on behalf of HCP, not sold. + +The Licensors reserve all rights not expressly granted to Licensee under the Agreement. Without limiting the generality of the foregoing, Licensee acknowledges and agrees that: (a) except as specifically set forth herein, the Licensors retains all right, title and interest in and to the Wrapper and the Software, and Licensee does not acquire any right, title or interest to the Wrapper or the Software except as set forth herein; (b) any configuration or deployment of the Wrapper or the Software shall not affect or diminish the Licensor’s rights, title or interest in and to the Wrapper or the Software. The Agreement shall not limit in any way the Licensor’s right to develop, use, license, create derivative works of, or otherwise exploit the Wrapper or the Software, or to permit Third Parties to do so. + +The Licensors acknowledge and agree that (i) Licensee retains all rights, title and interest in and to any Licensee-owned software, and the Licensors do not acquire any right, title, or interest in or to such application; and (ii) any integration of the Wrapper with a Licensee-owned application shall not affect or diminish Licensee’s rights, title, and interest in and to such application. + +*********************************************** +5. Grant of License +*********************************************** + +Subject to Licensee’s full payment of the Wrapper Fee, Highsoft grants to Licensee a right to use the Wrapper during the Wrapper Term (as defined in Section 7 below), on the same terms and conditions as set forth in the Main Agreement and the License Statement as modified by these Wrapper T&Cs. The Main Agreement shall apply accordingly to the Wrapper License insofar as the terms and conditions therein are applicable, whereas all references to the “Licensed Software” in the Main Agreement shall for the purposes of these Wrapper T&Cs to the extent applicable be deemed to include the Wrapper. + +The License type(s) chosen by Licensee for the Licensed Software shall apply to the Wrapper License, and depending on the purchased License type(s), as stated in the Licensed Statement, the relevant section in the Main Agreement detailing the usage rights and limitations for the License shall apply similarly to the Wrapper License. + +The rights granted to Licensee under the Agreement, is strictly limited to the usage rights granted under the chosen License type and with the scope as stated in the License Statement. The number of authorized Developers included in the Wrapper License is the same as the number of authorized Developers included in the License, as set out in the License Statement. The Wrapper may only be used in such Web Application(s), SaaS Application(s) and/or Licensee Product(s) as expressly identified in the License Statement. + +A Wrapper License shall include the components of the Wrapper which correspond to the Licensed Software to which Licensee holds a valid License, i.e. a Wrapper License purchased for Highcharts Stock shall include the Highcharts for Python software and all component libraries needed to implement the Highcharts Stock for Python library, and a Wrapper License purchased for Highcharts Maps shall include the Highcharts for Python software and all component libraries needed to implement the Highcharts Maps for Python, etc. + +5.1 General Grants and Limitations +======================================== + +The Wrapper License includes the support services provided by HCP set forth in Section 6 below. +Irrespective of the chosen License type, the Wrapper License and any support services for the Wrapper shall be subject to renewal, and contingent upon Licensee’s continued enrollment in the Highcharts Advantage plan, as set out in section 7. + +Licensee may obtain the Wrapper source code by downloading the source code from the Highsoft Website or from Github or equivalent source code repository made available by HCP, by downloading and installing the source code from a public repository such as PyPi, and make its own edits, and keep its own repositories with the modified source code; provided, however, any such modifications shall be at Licensee’s own risk and shall void any support obligation of HCP hereunder. + +Licensee shall not modify, delete or obscure any notices of proprietary rights or any Wrapper identification or restrictions on or in the Wrapper found in the source code. + +*********************************************** +6. Wrapper Support +*********************************************** + +A Wrapper License entitles Licensee to the support services and access to new Releases of the Wrapper as set out herein. While support for the Wrapper is contingent upon Licensee’s valid enrollment in the Highcharts Advantage plan and the annual number of hours of support available for support of the Licensed Software for each successive twelve month term during the period that Licensee is enrolled in Highcharts Advantage (each, a “Support Year”) are inclusive of the number of hours of support offered during such Support Year for the Wrapper, support of the Wrapper is not covered under Licensee’s enrollment in Highcharts Advantage, but is offered by Highsoft for a separate fee and provided separately, directly and independently by HCP. + +All support inquiries related to the Wrapper shall be sent to support@highchartspython.com or filed at https://www.highchartspython.com. + +Under a valid and effective Wrapper License, Licensee shall be entitled to receive from HCP: + + i. All new releases or updates of the Wrapper released during the applicable Advantage Period; + ii. Up to ten (10) hours of the personalized technical support for the Wrapper and/or the Licensed Software + (combined) per Developer per Support Year based on the number of Developers stated in the License Statement for + the License. Licensee may freely distribute its included total of ten (10) hours of personalized technical + support between support of the Wrapper and support of the Licensed Software; + iii. Technical support by e-mail; + iv. Priority response; + v. Access to 2nd line support for the Wrapper by core developers; + vi. Online text chat with 1st line support Wrapper engineers; + vii. Investigation of any claimed bug/error/malfunction/nonfunctioning of the Wrapper, and when possible, + suggestions as to corrective or work-around solutions to the problems; + viii. Supply of emergency hot fixes to the Wrapper; + ix. Guidance and advice on implementing the Wrapper with the Software, as well as with any third-party systems and + platforms to the extent such implementation is authorized by Highsoft. The guidance and advice shall include + advice on best practices, limited code review, and guidance on parts of the code that are directly related to + using the Wrapper with the Software; + x. Any bug and error fixing, malfunctioning of the Wrapper is to be delivered outside the personalized technical + support hours. + +Licensee is responsible for downloading and installing major version releases and updates of the Wrapper during the applicable Advantage Period. During each Advantage Period in which Licensee is validly enrolled in Highcharts Advantage, HCP will provide support for the current version and last major version releases of the Wrapper. For the avoidance of doubt, HCP shall have no obligation to provide support for any version of the Wrapper released prior to the major version release which immediately preceded the then current major version release of the Wrapper. + +The support services as set forth in this section (i) do not cover issues arising in connection with implementation of the Wrapper or Licensed Software in/to Licensee Products or Licensee’s own applications or to the Wrapper as modified by Licensee, and (ii) shall not extend to any Third Parties to which Licensee distributes Licensee Products, SaaS Application(s) or Web Application(s) containing the Wrapper, Licensed Software or any part thereof. Support to any Licensee customers shall hence be Licensee’s full and sole responsibility. The Licensors may, at its sole discretion, at any time choose to discontinue the supply of new Releases of the Wrapper. + +*********************************************** +7. Term and Renewal +*********************************************** + +The term of the Wrapper License (the ”Wrapper Term”) shall correspond to the Initial Term of the License as indicated in the License Statement issued by Highsoft, and the provisions of the Main Agreement pertaining to the terms and conditions on the Term and Renewal of the License shall apply similarly to the Wrapper License; provided, however, in all cases, the support services set forth in Section 6 above are co-terminus with and contingent upon the Licensee’s enrollment in the Highsoft Advantage Plan as set forth in the applicable Main Agreement, including any renewal thereof, and payment of the corresponding Wrapper Fee. + +During the term of the Wrapper License, the Wrapper shall be made available by the Licensors and Licensee shall be authorized to download the Wrapper from the Highsoft Website, from Github or comparable source code repository maintained by HCP, or from a public Python library repository such as PyPi. + +*********************************************** +8. Termination +*********************************************** + +The termination and expiration provisions in the Main Agreement shall apply similarly to the Agreement, and a termination or expiration of the Main Agreement, however occasioned, shall be construed as, and entail a termination of this Agreement. + +*********************************************************** +9. Annual License Fee, Renewal Fee, and Payment Terms +*********************************************************** + +Licensee shall upon purchase of the Wrapper License pay the applicable Wrapper License Fee as determined by Highsoft, subject to the provisions on payment of the License Fee and Highcharts Advantage Fee as set out in the Main Agreement. +For avoidance of doubt, the Wrapper License and accompanying rights including any subsequent renewals is granted to Licensee on the condition that all the due fees are paid to Highsoft in full and on time. + +*********************************************************** +10. Warranties and Representations +*********************************************************** + +10.1 Scope +================= + +All warranties and representations given herein are provided by HCP, and HCP’s warranties and representations in this section 10 are limited to the Wrapper provided to Licensee under the Agreement. + +10.2 HCP’s Warranties and Representations +=============================================== + +HCP warrants and represents that: + + i. For a period of ninety (90) days following its Delivery Date, the Wrapper will perform substantially in + accordance with HCP’s written specifications, provided that it has been used in accordance with all documentation + and specifications made available on Highsoft's Website and not modified by Licensee, + ii. HCP will perform its obligations under the Wrapper License and these Wrapper T&Cs in accordance with all + applicable laws and regulations, + iii. HCP has the full and unconditional ownership of the Wrapper, + iv. The Wrapper does not infringe intellectual property rights of any Third Party, + v. When installed in accordance with HCP’s written specifications, Third Party Dependencies, defined as software on + which the Wrapper relies that has been developed and made available by Third Parties, shall be installed. HCP + warrants that at the time of the Wrapper’s Release, such software was available for public distribution in + accordance with its applicable licenses and its bundling with the Wrapper is fully compliant with the licenses of + any and all such Third Party Dependencies. The Licensee can review the details of all such Third Party + Dependencies, including their relevant licensing provisions, by reviewing the Wrapper documentation made + available on Highsoft’s Website. + vi. HCP has the requisite knowledge, personnel, resources and know-how to fully perform and deliver the Wrapper and + associated services as stipulated by these Wrapper T&Cs in a professional manner, + vii. HCP has not intentionally placed and will use its best efforts to avoid the placement of any Harmful Codes into + the Wrapper provided under the Wrapper License. For the purpose of this section 10.2, "Harmful Codes" is + defined as any program that infects, damages and/or impairs another program or data, disables hardware or + software, or permits or assists in the breach of data. + +10.3 Licensee’s Remedies +============================= + +In the event of a breach, or alleged breach of any of the warranties in section 10.2, Licensee shall promptly notify either HCP or Highsoft and delete the Wrapper. Licensee’s sole remedy in such an event shall be that HCP shall re-supply or correct the Wrapper so that it operates according to the warranties set out in section 10.2. The warranties shall not apply if Licensee has modified, or used the Wrapper improperly, or on an operating environment not approved by HCP. Improper use and unapproved operating environments will be as set forth in the documentation provided to Licensee on or prior to Delivery Date. + +*********************************************************** +11. Limitation of Liability +*********************************************************** + +11.1 Highsoft +=================== + +The Licensee understands and accepts that the Wrapper is provided by Highsoft as an Official Wrapper, and are hence not covered by the Warranties and Representations included in the Main Agreement, and is provided “as is” by Highsoft and may have errors and omissions. Highsoft disclaims any and all liability for the Wrapper or Licensee’s usage of or reliance on the Wrapper, and makes no warranties, express or implied, including but not limited to, warranties of merchantability, fitness for purpose, performance, accuracy, or non-infringing nature. + +11.2 HCP +================== + +The Wrapper and all related support services supplied by HCP are provided ‘as is’ and may have errors and omissions. Thus, remedies are only available to Licensee in the event of any breach of the warranties set out in section 10. + +UNDER NO CIRCUMSTANCES, AND EVEN IF INFORMED THEREOF BY LICENSEE OR ANY OTHER PARTY, WILL THE LICENSORS BE LIABLE UNDER OR IN CONNECTION WITH A CLAIM RELATING TO THESE WRAPPER T&CS OR ITS SUBJECT MATTER FOR (i) LOSS OF, OR DAMAGE TO, DATA; (ii) SPECIAL, INCIDENTAL, CONSEQUENTIAL OR INDIRECT DAMAGES; OR (iii) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +Incorporation of the Wrapper into any application as further described in the Main Agreement shall not in any manner expand HCP’s liabilities under the Annual Wrapper License. Thus, HCP shall not under any circumstance be neither responsible nor liable for any aspects of such Licensee application(s), including but not limited to its reliability, uptime/downtime, functioning or fitness for purpose. Any obligations, liabilities or warranties undertaken by Licensee towards its customers with respect to such application(s) shall apply only between mentioned parties, and Licensee hereby undertakes to indemnify and hold the Licensors harmless from and against any and all losses, clams and damages related to such application(s). + +IN NO EVENT WILL THE LIABILITY OF THE LICENSORS UNDER OR IN CONNECTION WITH THESE WRAPPER T&CS OR ITS SUBJECT MATTER, UNDER ANY LEGAL OR EQUITABLE THEORY, INCLUDING BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY, AND OTHERWISE, EXCEED THE TOTAL WRAPPER FEE PAID BY THE LICENSEE DURING THE LAST TWELVE (12) MONTHS PRIOR TO OCCURRENCE GIVING CAUSE TO SUCH LIABILITY. + +*********************************************************** +12. Confidentiality +*********************************************************** + +As a trusted partner of Highsoft, HCP is bound by the confidentiality provisions of the Main Agreement, which shall apply similarly for the Wrapper T&Cs, and Licensee hereby grants to Highsoft the explicit right to share Confidential Information with HCP as needed. + +*********************************************************** +13. Applicable Law and Venue +*********************************************************** + +The construction, validity and operation of the Wrapper License and these Wrapper T&Cs, and the performance of all obligations hereunder, shall be governed by and construed in accordance with the laws of the Commonwealth of Massachusetts, United States of America, without regard to conflict of law principles that would result in the application of any law other than the law of the Commonwealth of Massachusetts. + +In the event of a dispute, controversy or claim between Licensee and HCP arising out of or relating to the Wrapper License and these Wrapper T&Cs, or the breach, termination, or invalidity thereof the Parties shall meet in an effort to resolve such dispute, controversy or claim amicably through negotiation. If the Parties do not reach an amicable solution within two (2) weeks of such efforts being initiated, either Party may initiate legal proceedings in the United States federal courts and state courts located in the Commonwealth of Massachusetts, which courts shall have sole and exclusive jurisdiction and venue to adjudicate any such dispute, controversy or claim. The Parties consent to the exclusive jurisdiction of the courts specified above, and expressly waive any objection to the jurisdiction or convenience of such courts. + +Any dispute, controversy or claim between Licensee and Highsoft, shall be resolved in accordance with the provisions of the Main Agreement. + +*********************************************************** +14. Processing of Personal Data +*********************************************************** + +To the extent the purchase of the Wrapper License involves processing by either Highsoft and/or HCP of personal data about the Licensee or Licensee’s customers or personnel related to the purchase of the Wrapper License, Highsoft and HCP shall be acting as joint and independent data controllers. The provisions of the Main Agreement pertaining to Highsoft’s processing of personal data shall apply similarly to any processing by Highsoft of personal data in relation to the Agreement. + +To the extent the support services performed by HCP under this Agreement involves processing by HCP of personal data about the Licensee or Licensee’s customers or personnel, HCP shall be acting as a data controller. + +*********************************************************** +15. Miscellaneous +*********************************************************** + +The provisions of the Main Agreement entitled “Miscellaneous” shall apply similarly to these Wrapper T&Cs, as applicable. \ No newline at end of file diff --git a/README.rst b/README.rst index 1990bcc1..c6d8ac62 100644 --- a/README.rst +++ b/README.rst @@ -6,16 +6,32 @@ Highcharts for Python Toolkit The **Highcharts for Python Toolkit** is a Python library that provides a Python wrapper for the fantastic `Highcharts JS `__ suite of JavaScript data -visualization libraries, with full integration into the robust Python ecosystem. The full -toolkit includes support for: - - * **Highcharts JS** - the core Highcharts data visualization library - * **Highcharts Stock** - the robust time series visualization extension to Highcharts JS - * **Highcharts Maps** - the rich map visualization extension to Highcharts JS - * **Highcharts Gantt** - the :term:`Gantt charting ` extension to - Highcharts JS - * The **Highcharts Export Server** - enabling the programmatic creation of static - (downloadable) data visualizations +visualization libraries, with full integration into the robust Python ecosystem. + +The toolkit is composed of several different libraries, each of which provides comprehensive support for a component of the Highcharts JS suite: + +.. list-table:: + :widths: 30 30 40 + :header-rows: 1 + + * - Python Library + - JavaScript Library + - Description + * - **Highcharts Core for Python** + - `Highcharts Core (JS) `__ + - (this library) the core Highcharts data visualization library + * - `Highcharts Stock for Python `__ + - `Highcharts Stock (JS) `__ + - the robust time series visualization extension to Highcharts Core + * - `Highcharts Maps `__ + - `Highcharts Maps (JS) `__ + - the rich map visualization extension to Highcharts Core + * - `Highcharts Gantt `__ + - `Highcharts Gantt (JS) `__ + - the Gantt charting extension to Highcharts Core + * - (all libraries in the Python toolkit) + - The **Highcharts Export Server** + - enabling the programmatic creation of static (downloadable) data visualizations In order to integrate **Highcharts for Python** into the Python ecosystem, the library features native integration with: @@ -25,8 +41,9 @@ features native integration with: * **Pandas**. Automatically produce data visualizations from your Pandas dataframes * **PySpark**. Automatically produce data visualizations from data in a PySpark dataframe. + * ...and even more use-case specific integrations in each tool in the toolkit. -**COMPLETE DOCUMENTATION:** http://highcharts-core.readthedocs.org/en/latest/index.html +**COMPLETE DOCUMENTATION:** https://highcharts-core.readthedocs.org/en/latest/index.html -------------------- @@ -70,7 +87,7 @@ capabilities to simplify integration with Javascript frontend frameworks (React, VueJS, etc.). But facilitating that with Highcharts has historically been very difficult. Part of this difficulty is because the Highcharts JavaScript suite - while supporting JSON as a serialization/deserialization format - leverages -:term:`JavaScript object literals ` to expose the +JavaScript object literals to expose the full power and interactivity of its data visualizations. And while it's easy to serialize JSON from Python, serializing and deserializing to/from JavaScript object literal notation is much more complicated. This means that Python developers looking to integrate with @@ -96,21 +113,22 @@ Key Highcharts for Python Features `Highcharts JS `__ and the 50+ technical indicator visualizations available in `Highcharts Stock `__, with full support for - the rich JavaScript formatter (JS :term:`callback functions `) + the rich JavaScript formatter (JS callback functions) capabilities that are often needed to get the most out of Highcharts' visualization and interaction capabilities. - .. seealso:: + .. note:: + + **See Also** - * :doc:`Supported Visualizations ` + * `Supported Visualizations `__ * **Simple JavaScript Code Generation**. With one method call, produce production-ready JavaScript code to render your interactive visualizations using Highcharts' rich capabilities. * **Easy and Robust Chart Download**. With one method call, produce high-end static visualizations that can be downloaded or shared as files with your audience. Produce - static charts using the Highsoft-provided - :term:`Highcharts Export Server `, or using your own private export + static charts using the Highsoft-provided **Highcharts Export Server**, or using your own private export server as needed. * **Integration with Pandas and PySpark**. With two lines of code, produce a high-end interactive visualization of your Pandas or PySpark dataframe. @@ -125,7 +143,7 @@ Key Highcharts for Python Features ============================================== For a discussion of **Highcharts for Python** in comparison to alternatives, please see -the **COMPLETE DOCUMENTATION:** http://highcharts-core.readthedocs.org/en/latest/index.html +the **COMPLETE DOCUMENTATION:** https://highcharts-core.readthedocs.org/en/latest/index.html --------------------- @@ -133,10 +151,39 @@ the **COMPLETE DOCUMENTATION:** http://highcharts-core.readthedocs.org/en/latest Hello World, and Basic Usage ******************************** -1. Import Highcharts Stock for Python +1. Import Highcharts Core for Python ========================================== -.. include:: using/_importing.rst +.. code-block:: python + + # PRECISE-LOCATION PATTERN: BEST PRACTICE! + # This method of importing Highcharts for Python objects yields the fastest + # performance for the import statement. However, it is more verbose and requires + # you to navigate the extensive Highcharts Core for Python API. + + # Import classes using precise module indications. For example: + from highcharts_core.chart import Chart + from highcharts_core.global_options.shared_options import SharedOptions + from highcharts_core.options import HighchartsOptions + from highcharts_core.options.plot_options.bar import BarOptions + from highcharts_core.options.series.bar import BarSeries + + # CATCH-ALL PATTERN + # This method of importing Highcharts for Python classes has relatively slow + # performance because it imports hundreds of different classes from across the entire + # library. This performance impact may be acceptable to you in your use-case, but + # do use at your own risk. + + # Import objects from the catch-all ".highcharts" module. + from highcharts_core import highcharts + + # You can now access specific classes without individual import statements. + highcharts.Chart + highcharts.SharedOptions + highcharts.HighchartsOptions + highcharts.BarOptions + highcharts.BarSeries + 2. Create Your Chart ================================ @@ -292,12 +339,23 @@ that will render the chart wherever it is you want it to go: -------------- -********************* -Questions and Issues -********************* +*********************** +Getting Help/Support +*********************** -You can ask questions and report issues on the project's -`Github Issues Page `_ +The **Highcharts for Python** toolkit comes with all of the great support that you are used to from working with the +Highcharts JavaScript libraries. When you license the toolkit, you are welcome to use any of the following tools to get +help using the toolkit. In particular, you can: + + * Use the `Highcharts Forums `__ + * Use `Stack Overflow `__ with the + ``highcharts-for-python`` tag + * `Report bugs or request features `__ in the + library's Github repository + * `File a support ticket `__ with us + * `Schedule a live chat or video call `__ with us + +**FOR MORE INFORMATION:** https://www.highchartspython.com/get-help ----------------- @@ -306,10 +364,7 @@ Contributing ********************* We welcome contributions and pull requests! For more information, please see the -:doc:`Contributor Guide `. And thanks to all those who've already -contributed: - -.. include:: _contributors.rst +`Contributor Guide `__. And thanks to all those who've already contributed! ------------------- @@ -317,7 +372,7 @@ contributed: Testing ********************* -We use `TravisCI `_ for our build automation and +We use `TravisCI `_ for our build automation and `ReadTheDocs `_ for our documentation. Detailed information about our test suite and how to run tests locally can be diff --git a/docs/_dependencies.rst b/docs/_dependencies.rst index ceeb509b..47fe2bc9 100644 --- a/docs/_dependencies.rst +++ b/docs/_dependencies.rst @@ -1,6 +1,6 @@ .. note:: - **Highcharts for Python** has several types of dependencies: + **Highcharts Core for Python** has several types of dependencies: * "hard" dependencies, without which you will not be able to use the library at all, * "soft" dependencies, which will not produce errors but which may limit the value you @@ -16,15 +16,19 @@ .. warning:: If these hard dependencies are not available in the environment where - **Highcharts for Python** is running, then the library will simply not work. Besides + **Highcharts Core for Python** is running, then the library will simply not work. Besides Highcharts JS itself, all of the other hard dependencies are automatically installed - when installing **Highcharts for Python**. + when installing **Highcharts Core for Python** using: + + .. code-block:: bash + + $ pip install highcharts-core * `Highcharts JS `__ v.10.2 or higher .. note:: - Not technically a Python dependency, but obviously **Highcharts for Python** will + Not technically a Python dependency, but obviously **Highcharts Core for Python** will not work properly if your rendering layer does not leverage Highcharts JS. * `esprima-python `_ v.4.0 or higher @@ -37,7 +41,7 @@ .. warning:: If these soft dependencies are not available in the environment where - **Highcharts for Python** is running, then the library will throw a + **Highcharts Core for Python** is running, then the library will throw a :exc:`HighchartsDependencyError ` exception when you try to use functionality that relies on them. @@ -45,16 +49,17 @@ a ``from_pandas()`` method but `pandas `_ is not installed, you will get an error. + You can install *all* soft dependencies by executing: + + .. code-block:: bash + + $ pip install highcharts-core[soft] + + * `IPython `__ v. 8.10 or higher + * `orjson `__ v.3.7.7 or higher * `pandas `_ v. 1.3 or higher * `pyspark `_ v.3.3 or higher - * `python-dotenv `_ v. 0.21 or higher - - .. note:: - - `python-dotenv `_ will fail silently if - not available, as it will only leverage natural environment variables rather than - a ``.env`` file in the runtime environment. .. tab:: Developer @@ -66,11 +71,21 @@ .. code-block:: bash - $ pip install highcharts-core[develop] + $ pip install highcharts-core[dev] * `pytest `_ v.7.1 or higher * `pytest-cov `_ v.3.0 or higher * `pytest-xdist `_ v.2.5 or higher + * `python-dotenv `_ v. 0.21 or higher + + .. note:: + + `python-dotenv `_ will fail silently if + not available, as it will only leverage natural environment variables rather than + a ``.env`` file in the runtime environment. + + * `pytz `__ v.2022.1 or higher + * `tox `__ v.4.0.0 or higher .. tab:: Documentation @@ -83,8 +98,8 @@ $ pip install highcharts-core[docs] - * `Sphinx `_ v.5.1 or higher - * `Sphinx RTD Theme `_ v.1.0 + * `Sphinx `_ v.6.1.3 or higher + * `Sphinx RTD Theme `_ v.1.2 or higher * `sphinx-tabs `_ v.3.4.1 or higher - * `Sphinx Toolbox `_ v.3.2 or higher + * `Sphinx Toolbox `_ v.3.4 or higher diff --git a/docs/_static/gantt-example.png b/docs/_static/gantt-example.png new file mode 100644 index 00000000..5a8f362f Binary files /dev/null and b/docs/_static/gantt-example.png differ diff --git a/docs/_static/highcharts-for-python-dark-32x32.png b/docs/_static/highcharts-for-python-dark-32x32.png new file mode 100644 index 00000000..9498b40a Binary files /dev/null and b/docs/_static/highcharts-for-python-dark-32x32.png differ diff --git a/docs/_static/highcharts-for-python-light-150x149.png b/docs/_static/highcharts-for-python-light-150x149.png new file mode 100644 index 00000000..b84cca48 Binary files /dev/null and b/docs/_static/highcharts-for-python-light-150x149.png differ diff --git a/docs/_support.rst b/docs/_support.rst new file mode 100644 index 00000000..0b8c3db0 --- /dev/null +++ b/docs/_support.rst @@ -0,0 +1,13 @@ +The **Highcharts for Python** toolkit comes with all of the great support that you are used to from working with the +Highcharts JavaScript libraries. When you license the toolkit, you are welcome to use any of the following tools to get +help using the toolkit. In particular, you can: + + * Use the `Highcharts Forums `__ + * Use `Stack Overflow `__ with the + ``highcharts-for-python`` tag + * `Report bugs or request features `__ in the + library's Github repository + * `File a support ticket `__ with us + * `Schedule a live chat or video call `__ with us + +**FOR MORE INFORMATION:** https://www.highchartspython.com/get-help \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index 67a084fd..8f91fba4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -21,7 +21,7 @@ __version__ = version_dict.get('__version__') -project = 'Highcharts for Python' +project = 'Highcharts Core for Python' copyright = '2022, HCP LLC' author = 'Chris Modzelewski' @@ -72,8 +72,8 @@ 'prev_next_buttons_location': 'both' } -html_logo = '_static/highcharts-python-logo-100x50.png' -html_favicon = '_static/highcharts-python-logo-32x32.png' +html_logo = '_static/highcharts-for-python-light-150x149.png' +html_favicon = '_static/highcharts-for-python-dark-32x32.png' html_context = { "display_github": True, # Integrate GitHub diff --git a/docs/faq.rst b/docs/faq.rst index 23cad377..098db213 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -9,31 +9,65 @@ Frequently Asked Questions ------------------- *********************** -Licensing: +Getting Help +*********************** + +**Where can I get help using Highcharts for Python?** + +This documentation is a great place to start, but we're here to help! + +.. include:: _support.rst + +----------------- + +*********************** +Licensing *********************** **Is the Highcharts for Python toolkit free?** -If you are a student using it for educational purposes, or wish to familiarize yourself -with the library, then yes - you are free to use it without paying. However, if you are -using it for a professional purpose - either to use Highcharts for your work, or to build +If you are evaluating the **Highcharts for Python** toolkit, you are welcome to install and use it free of charge. +However, if you are using it for professional purposes - either to use Highcharts for your work, or to build an application that integrates the library - then you have to pay for both Highcharts JS -itself *and* for **Highcharts for Python**. +itself *and* for **Highcharts for Python**. -**How much does Highcharts for Python cost?** +You can purchase licenses for both from Highsoft A/S at: `https://shop.highcharts.com/ `__. -.. todo:: +**How much does Highcharts for Python cost?** - Add pricing details. +As a paid add-on to the Highcharts JavaScript libraries, the **Highcharts for Python** toolkit is priced at 30% of the price you pay for your **Highcharts** JavaScript license/support contract. **How do I license the Highcharts for Python toolkit?** -.. todo:: - - Add licensing instructions. +Licensing is super easy! You can go to `https://shop.highcharts.com `__ and fill out the +form, and that's it! ---------------------- -.. todo:: +****************************** +Open Source +****************************** + +**Is Highcharts for Python open source?** + +Yes. The **Highcharts for Python** toolkit is open source (but not free - see :ref:`licensing ` above). +You are welcome to review the source code on `Github `__. + +**Can I fork the toolkit?** + +.. warning:: + + Remember that if you fork the library and make modifications to the source code, that means that we will *not* be able to provide support or technical assistance for you should you run into trouble. So you will ultimately depend on + forks at your own risk! + +Yes. You are welcome to fork any of our repositories from `Github `__, +provided that you adhere to the terms of our :doc:`license`. + +.. tip:: + + Bear in mind that if you fork the repository, that does not mean you are allowed to use it for professional purposes. Even if forked, you still need a license to do so. You can purchase a license `here `__. + +**Can I contribute to the Highcharts for Python toolkit?** + +Absolutely! We encourage contributions to the toolkit from the community! For more information, please read our :doc:`Contributor Guide `. - Predict other key questions that might get asked. diff --git a/docs/index.rst b/docs/index.rst index 1d1c86b3..b823bb39 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,10 +1,11 @@ -.. image:: _static/highcharts-python-logo.png +.. image:: _static/highcharts-for-python-light-150x149.png :alt: Highcharts for Python - High-end Data Visualization for the Python Ecosystem :align: right - :width: 200 - :height: 100 + :width: 150 + :height: 149 | +| ################################################### Highcharts for Python Toolkit @@ -12,16 +13,6 @@ Highcharts for Python Toolkit **High-end data visualization for the Python ecosystem** -.. sidebar:: Version Compatibility - - **Highcharts for Python** is designed to be compatible with: - - * Python 3.9 or higher, - * Highcharts JS 10.2 or higher, - * Jupyter Notebook 6.4 or higher, - * Pandas 1.3 or higher - * PySpark 3.3 or higher - .. include:: _unit_tests_code_coverage.rst .. toctree:: @@ -37,11 +28,23 @@ Highcharts for Python Toolkit Using Highcharts for Python API Reference Error Reference + Getting Help Contributor Guide Testing Reference Release History Glossary - Licensing + License + +.. sidebar:: Version Compatibility + + **Highcharts Core for Python** is designed to be compatible with: + + * Python 3.10 or higher, + * Highcharts JS 10.2 or higher, + * Jupyter Notebook 6.4 or higher, + * IPython 8.10 or higher, + * Pandas 1.3 or higher + * PySpark 3.3 or higher The **Highcharts for Python Toolkit** is a Python library that provides a Python wrapper for the fantastic `Highcharts JS `__ suite of JavaScript data @@ -330,12 +333,11 @@ that will render the chart wherever it is you want it to go: -------------- -********************* -Questions and Issues -********************* +*********************** +Getting Help/Support +*********************** -You can ask questions and report issues on the project's -`Github Issues Page `_ +.. include:: _support.rst ----------------- diff --git a/docs/license.rst b/docs/license.rst index e7ca79b6..7f94e56b 100644 --- a/docs/license.rst +++ b/docs/license.rst @@ -1,7 +1,236 @@ -######################################### -License for Highcharts for Python -######################################### +####################################################################### +Terms and Conditions for the Highcharts for Python Toolkit License +####################################################################### -.. todo:: +.. warning:: - Add details on the licensing terms for **Highcharts for Python**. + The **Highcharts for Python** toolkit as a whole, and the **Highcharts Core for Python** library specifically, + are made available subject to a *paid* commercial license. This means that while the code is open-source, in order + to use it you **must** purchase a license from `Highsoft A/S `__, the + creators of the Highcharts JavaScript library. + + **TO PURCHASE A LICENSE:** `https://shop.highcharts.com/ `__ + +*********************************************** +1. Acceptance of the Terms and Conditions +*********************************************** + +These terms and conditions (the “Wrapper T&Cs”) shall apply to Licensee’s license to and use of the Wrapper (as defined below), a complementary product to the Software owned and delivered by Highsoft AS (“Highsoft”). The Wrapper is owned by HCP LLC (“HCP”) and distributed by Highsoft AS or its partners, resellers or distributors, and these Wrapper T&Cs shall apply to the Licensee’s usage of the Wrapper irrespective of which license type(s) to the Software the Licensee has subscribed to or purchased from Highsoft. + +By installing or using the Wrapper or any part thereof, Licensee agrees to be bound by these Wrapper T&Cs, unless Licensee is using the Software and the Wrapper for evaluation purposes authorized by Highsoft, i.e. during a trial period. + +Without prejudice to the limited right to download and test the Wrapper for evaluation prior to the purchase of a Wrapper License, Licensee is not authorized to install or use the Wrapper unless Licensee pays the applicable Wrapper Fee and fully agrees to all terms and conditions set forth herein and to any terms set forth in related licensing agreements or terms from Highsoft to which these Wrapper T&Cs constitute an addendum. + +*********************************************** +2. Relationship to the Main Agreement +*********************************************** + +A Wrapper License (as defined below) or renewal thereof can only be purchased by a Licensee either already holding a License to the Software, or at the same time as purchasing such a License, as an add-on product to such License, and only by a Licensee holding an active and valid enrolment in the Highcharts Advantage plan. The purchase of, and right to use the Licensed Software shall remain governed by the terms and conditions of the License issued by Highsoft to Licensee, whether this is Highsoft Standard License Agreement, Highsoft Terms and Conditions for Subscription to Annual License to Highsoft Software, or another licensing agreement as agreed between Highsoft and Licensee, as applicable (such terms and conditions between Highsoft and Licensee hereinafter collectively referred to as the “Main Agreement”). + +These Wrapper T&Cs constitute an addendum to the Main Agreement and an integral part thereof and apply to the use of the Wrapper only. + +In the case of any discrepancy between the Main Agreement and these Wrapper T&Cs related to the licensing of the Wrapper, these Wrapper T&Cs shall prevail. + +*********************************************** +3. Definitions +*********************************************** + +Unless otherwise defined below or elsewhere in these Wrapper T&Cs, all capitalized terms used but not otherwise defined herein shall have the same definitions as set out in the Main Agreement. + + * **Agreement** shall mean the Main Agreement, these Wrapper T&Cs and the License Statement; + * **Delivery Date** shall mean the date Licensee is invoiced by Highsoft for the Wrapper License, which will + correspond to the Delivery Date for the Software if purchased together, or at a separate time, if purchased as an + add-on to an existing License; + * **HCP** shall mean HCP LLC, the company behind the Wrapper, a US limited liability corporation registered in the + state of Delaware, with its registered office at 867 Boylston Street, 5th Floor #1674, Boston, MA 02116, United + States.Licensee shall mean the legal entity to which the License (to the Licensed Software) and the Wrapper License + has been granted, as expressly stated in the License Statement; + * **Licensors** shall mean Highsoft and/or HCP collectively; + * **Wrapper** shall mean the proprietary software products distributed by Highsoft and owned by HCP, including + Highcharts for Python – the main product included in all licenses – in addition to Highcharts Stock for Python, + Highcharts Maps for Python, Highcharts Gantt for Python, and other optional additional products or libraries which + may be developed by HCP and offered within the Wrapper by Highsoft. + * **Wrapper** Fee shall mean the fee payable by Licensee to Highsoft for the Wrapper License and for the right to + receive the support services provided by HCP under these Wrapper T&Cs ; + * **Wrapper License** shall mean the right to use the Wrapper in accordance with the Agreement and as set out herein, + whether granted as a perpetual license or in the form of a time-limited subscription (subject to renewal), and as + one or more of the license types as defined in the Main Agreement; + * **Wrapper Term** shall have the meaning set out in section 7. + +*********************************************** +4. Ownership and Copyright +*********************************************** + +The Wrapper is the property of HCP and is protected by copyright law as well as other statutory and non-statutory intellectual property law. All title and copyrights in and to the Wrapper are and shall remain owned fully and solely by HCP. + +Under the Agreement, the Wrapper is licensed to Licensee by Highsoft on behalf of HCP, not sold. + +The Licensors reserve all rights not expressly granted to Licensee under the Agreement. Without limiting the generality of the foregoing, Licensee acknowledges and agrees that: (a) except as specifically set forth herein, the Licensors retains all right, title and interest in and to the Wrapper and the Software, and Licensee does not acquire any right, title or interest to the Wrapper or the Software except as set forth herein; (b) any configuration or deployment of the Wrapper or the Software shall not affect or diminish the Licensor’s rights, title or interest in and to the Wrapper or the Software. The Agreement shall not limit in any way the Licensor’s right to develop, use, license, create derivative works of, or otherwise exploit the Wrapper or the Software, or to permit Third Parties to do so. + +The Licensors acknowledge and agree that (i) Licensee retains all rights, title and interest in and to any Licensee-owned software, and the Licensors do not acquire any right, title, or interest in or to such application; and (ii) any integration of the Wrapper with a Licensee-owned application shall not affect or diminish Licensee’s rights, title, and interest in and to such application. + +*********************************************** +5. Grant of License +*********************************************** + +Subject to Licensee’s full payment of the Wrapper Fee, Highsoft grants to Licensee a right to use the Wrapper during the Wrapper Term (as defined in Section 7 below), on the same terms and conditions as set forth in the Main Agreement and the License Statement as modified by these Wrapper T&Cs. The Main Agreement shall apply accordingly to the Wrapper License insofar as the terms and conditions therein are applicable, whereas all references to the “Licensed Software” in the Main Agreement shall for the purposes of these Wrapper T&Cs to the extent applicable be deemed to include the Wrapper. + +The License type(s) chosen by Licensee for the Licensed Software shall apply to the Wrapper License, and depending on the purchased License type(s), as stated in the Licensed Statement, the relevant section in the Main Agreement detailing the usage rights and limitations for the License shall apply similarly to the Wrapper License. + +The rights granted to Licensee under the Agreement, is strictly limited to the usage rights granted under the chosen License type and with the scope as stated in the License Statement. The number of authorized Developers included in the Wrapper License is the same as the number of authorized Developers included in the License, as set out in the License Statement. The Wrapper may only be used in such Web Application(s), SaaS Application(s) and/or Licensee Product(s) as expressly identified in the License Statement. + +A Wrapper License shall include the components of the Wrapper which correspond to the Licensed Software to which Licensee holds a valid License, i.e. a Wrapper License purchased for Highcharts Stock shall include the Highcharts for Python software and all component libraries needed to implement the Highcharts Stock for Python library, and a Wrapper License purchased for Highcharts Maps shall include the Highcharts for Python software and all component libraries needed to implement the Highcharts Maps for Python, etc. + +5.1 General Grants and Limitations +======================================== + +The Wrapper License includes the support services provided by HCP set forth in Section 6 below. +Irrespective of the chosen License type, the Wrapper License and any support services for the Wrapper shall be subject to renewal, and contingent upon Licensee’s continued enrollment in the Highcharts Advantage plan, as set out in section 7. + +Licensee may obtain the Wrapper source code by downloading the source code from the Highsoft Website or from Github or equivalent source code repository made available by HCP, by downloading and installing the source code from a public repository such as PyPi, and make its own edits, and keep its own repositories with the modified source code; provided, however, any such modifications shall be at Licensee’s own risk and shall void any support obligation of HCP hereunder. + +Licensee shall not modify, delete or obscure any notices of proprietary rights or any Wrapper identification or restrictions on or in the Wrapper found in the source code. + +*********************************************** +6. Wrapper Support +*********************************************** + +A Wrapper License entitles Licensee to the support services and access to new Releases of the Wrapper as set out herein. While support for the Wrapper is contingent upon Licensee’s valid enrollment in the Highcharts Advantage plan and the annual number of hours of support available for support of the Licensed Software for each successive twelve month term during the period that Licensee is enrolled in Highcharts Advantage (each, a “Support Year”) are inclusive of the number of hours of support offered during such Support Year for the Wrapper, support of the Wrapper is not covered under Licensee’s enrollment in Highcharts Advantage, but is offered by Highsoft for a separate fee and provided separately, directly and independently by HCP. + +All support inquiries related to the Wrapper shall be sent to support@highchartspython.com or filed at https://www.highchartspython.com. + +Under a valid and effective Wrapper License, Licensee shall be entitled to receive from HCP: + + i. All new releases or updates of the Wrapper released during the applicable Advantage Period; + ii. Up to ten (10) hours of the personalized technical support for the Wrapper and/or the Licensed Software + (combined) per Developer per Support Year based on the number of Developers stated in the License Statement for + the License. Licensee may freely distribute its included total of ten (10) hours of personalized technical + support between support of the Wrapper and support of the Licensed Software; + iii. Technical support by e-mail; + iv. Priority response; + v. Access to 2nd line support for the Wrapper by core developers; + vi. Online text chat with 1st line support Wrapper engineers; + vii. Investigation of any claimed bug/error/malfunction/nonfunctioning of the Wrapper, and when possible, + suggestions as to corrective or work-around solutions to the problems; + viii. Supply of emergency hot fixes to the Wrapper; + ix. Guidance and advice on implementing the Wrapper with the Software, as well as with any third-party systems and + platforms to the extent such implementation is authorized by Highsoft. The guidance and advice shall include + advice on best practices, limited code review, and guidance on parts of the code that are directly related to + using the Wrapper with the Software; + x. Any bug and error fixing, malfunctioning of the Wrapper is to be delivered outside the personalized technical + support hours. + +Licensee is responsible for downloading and installing major version releases and updates of the Wrapper during the applicable Advantage Period. During each Advantage Period in which Licensee is validly enrolled in Highcharts Advantage, HCP will provide support for the current version and last major version releases of the Wrapper. For the avoidance of doubt, HCP shall have no obligation to provide support for any version of the Wrapper released prior to the major version release which immediately preceded the then current major version release of the Wrapper. + +The support services as set forth in this section (i) do not cover issues arising in connection with implementation of the Wrapper or Licensed Software in/to Licensee Products or Licensee’s own applications or to the Wrapper as modified by Licensee, and (ii) shall not extend to any Third Parties to which Licensee distributes Licensee Products, SaaS Application(s) or Web Application(s) containing the Wrapper, Licensed Software or any part thereof. Support to any Licensee customers shall hence be Licensee’s full and sole responsibility. The Licensors may, at its sole discretion, at any time choose to discontinue the supply of new Releases of the Wrapper. + +*********************************************** +7. Term and Renewal +*********************************************** + +The term of the Wrapper License (the ”Wrapper Term”) shall correspond to the Initial Term of the License as indicated in the License Statement issued by Highsoft, and the provisions of the Main Agreement pertaining to the terms and conditions on the Term and Renewal of the License shall apply similarly to the Wrapper License; provided, however, in all cases, the support services set forth in Section 6 above are co-terminus with and contingent upon the Licensee’s enrollment in the Highsoft Advantage Plan as set forth in the applicable Main Agreement, including any renewal thereof, and payment of the corresponding Wrapper Fee. + +During the term of the Wrapper License, the Wrapper shall be made available by the Licensors and Licensee shall be authorized to download the Wrapper from the Highsoft Website, from Github or comparable source code repository maintained by HCP, or from a public Python library repository such as PyPi. + +*********************************************** +8. Termination +*********************************************** + +The termination and expiration provisions in the Main Agreement shall apply similarly to the Agreement, and a termination or expiration of the Main Agreement, however occasioned, shall be construed as, and entail a termination of this Agreement. + +*********************************************************** +9. Annual License Fee, Renewal Fee, and Payment Terms +*********************************************************** + +Licensee shall upon purchase of the Wrapper License pay the applicable Wrapper License Fee as determined by Highsoft, subject to the provisions on payment of the License Fee and Highcharts Advantage Fee as set out in the Main Agreement. +For avoidance of doubt, the Wrapper License and accompanying rights including any subsequent renewals is granted to Licensee on the condition that all the due fees are paid to Highsoft in full and on time. + +*********************************************************** +10. Warranties and Representations +*********************************************************** + +10.1 Scope +================= + +All warranties and representations given herein are provided by HCP, and HCP’s warranties and representations in this section 10 are limited to the Wrapper provided to Licensee under the Agreement. + +10.2 HCP’s Warranties and Representations +=============================================== + +HCP warrants and represents that: + + i. For a period of ninety (90) days following its Delivery Date, the Wrapper will perform substantially in + accordance with HCP’s written specifications, provided that it has been used in accordance with all documentation + and specifications made available on Highsoft's Website and not modified by Licensee, + ii. HCP will perform its obligations under the Wrapper License and these Wrapper T&Cs in accordance with all + applicable laws and regulations, + iii. HCP has the full and unconditional ownership of the Wrapper, + iv. The Wrapper does not infringe intellectual property rights of any Third Party, + v. When installed in accordance with HCP’s written specifications, Third Party Dependencies, defined as software on + which the Wrapper relies that has been developed and made available by Third Parties, shall be installed. HCP + warrants that at the time of the Wrapper’s Release, such software was available for public distribution in + accordance with its applicable licenses and its bundling with the Wrapper is fully compliant with the licenses of + any and all such Third Party Dependencies. The Licensee can review the details of all such Third Party + Dependencies, including their relevant licensing provisions, by reviewing the Wrapper documentation made + available on Highsoft’s Website. + vi. HCP has the requisite knowledge, personnel, resources and know-how to fully perform and deliver the Wrapper and + associated services as stipulated by these Wrapper T&Cs in a professional manner, + vii. HCP has not intentionally placed and will use its best efforts to avoid the placement of any Harmful Codes into + the Wrapper provided under the Wrapper License. For the purpose of this section 10.2, "Harmful Codes" is + defined as any program that infects, damages and/or impairs another program or data, disables hardware or + software, or permits or assists in the breach of data. + +10.3 Licensee’s Remedies +============================= + +In the event of a breach, or alleged breach of any of the warranties in section 10.2, Licensee shall promptly notify either HCP or Highsoft and delete the Wrapper. Licensee’s sole remedy in such an event shall be that HCP shall re-supply or correct the Wrapper so that it operates according to the warranties set out in section 10.2. The warranties shall not apply if Licensee has modified, or used the Wrapper improperly, or on an operating environment not approved by HCP. Improper use and unapproved operating environments will be as set forth in the documentation provided to Licensee on or prior to Delivery Date. + +*********************************************************** +11. Limitation of Liability +*********************************************************** + +11.1 Highsoft +=================== + +The Licensee understands and accepts that the Wrapper is provided by Highsoft as an Official Wrapper, and are hence not covered by the Warranties and Representations included in the Main Agreement, and is provided “as is” by Highsoft and may have errors and omissions. Highsoft disclaims any and all liability for the Wrapper or Licensee’s usage of or reliance on the Wrapper, and makes no warranties, express or implied, including but not limited to, warranties of merchantability, fitness for purpose, performance, accuracy, or non-infringing nature. + +11.2 HCP +================== + +The Wrapper and all related support services supplied by HCP are provided ‘as is’ and may have errors and omissions. Thus, remedies are only available to Licensee in the event of any breach of the warranties set out in section 10. + +UNDER NO CIRCUMSTANCES, AND EVEN IF INFORMED THEREOF BY LICENSEE OR ANY OTHER PARTY, WILL THE LICENSORS BE LIABLE UNDER OR IN CONNECTION WITH A CLAIM RELATING TO THESE WRAPPER T&CS OR ITS SUBJECT MATTER FOR (i) LOSS OF, OR DAMAGE TO, DATA; (ii) SPECIAL, INCIDENTAL, CONSEQUENTIAL OR INDIRECT DAMAGES; OR (iii) LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS. + +Incorporation of the Wrapper into any application as further described in the Main Agreement shall not in any manner expand HCP’s liabilities under the Annual Wrapper License. Thus, HCP shall not under any circumstance be neither responsible nor liable for any aspects of such Licensee application(s), including but not limited to its reliability, uptime/downtime, functioning or fitness for purpose. Any obligations, liabilities or warranties undertaken by Licensee towards its customers with respect to such application(s) shall apply only between mentioned parties, and Licensee hereby undertakes to indemnify and hold the Licensors harmless from and against any and all losses, clams and damages related to such application(s). + +IN NO EVENT WILL THE LIABILITY OF THE LICENSORS UNDER OR IN CONNECTION WITH THESE WRAPPER T&CS OR ITS SUBJECT MATTER, UNDER ANY LEGAL OR EQUITABLE THEORY, INCLUDING BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY, AND OTHERWISE, EXCEED THE TOTAL WRAPPER FEE PAID BY THE LICENSEE DURING THE LAST TWELVE (12) MONTHS PRIOR TO OCCURRENCE GIVING CAUSE TO SUCH LIABILITY. + +*********************************************************** +12. Confidentiality +*********************************************************** + +As a trusted partner of Highsoft, HCP is bound by the confidentiality provisions of the Main Agreement, which shall apply similarly for the Wrapper T&Cs, and Licensee hereby grants to Highsoft the explicit right to share Confidential Information with HCP as needed. + +*********************************************************** +13. Applicable Law and Venue +*********************************************************** + +The construction, validity and operation of the Wrapper License and these Wrapper T&Cs, and the performance of all obligations hereunder, shall be governed by and construed in accordance with the laws of the Commonwealth of Massachusetts, United States of America, without regard to conflict of law principles that would result in the application of any law other than the law of the Commonwealth of Massachusetts. + +In the event of a dispute, controversy or claim between Licensee and HCP arising out of or relating to the Wrapper License and these Wrapper T&Cs, or the breach, termination, or invalidity thereof the Parties shall meet in an effort to resolve such dispute, controversy or claim amicably through negotiation. If the Parties do not reach an amicable solution within two (2) weeks of such efforts being initiated, either Party may initiate legal proceedings in the United States federal courts and state courts located in the Commonwealth of Massachusetts, which courts shall have sole and exclusive jurisdiction and venue to adjudicate any such dispute, controversy or claim. The Parties consent to the exclusive jurisdiction of the courts specified above, and expressly waive any objection to the jurisdiction or convenience of such courts. + +Any dispute, controversy or claim between Licensee and Highsoft, shall be resolved in accordance with the provisions of the Main Agreement. + +*********************************************************** +14. Processing of Personal Data +*********************************************************** + +To the extent the purchase of the Wrapper License involves processing by either Highsoft and/or HCP of personal data about the Licensee or Licensee’s customers or personnel related to the purchase of the Wrapper License, Highsoft and HCP shall be acting as joint and independent data controllers. The provisions of the Main Agreement pertaining to Highsoft’s processing of personal data shall apply similarly to any processing by Highsoft of personal data in relation to the Agreement. + +To the extent the support services performed by HCP under this Agreement involves processing by HCP of personal data about the Licensee or Licensee’s customers or personnel, HCP shall be acting as a data controller. + +*********************************************************** +15. Miscellaneous +*********************************************************** + +The provisions of the Main Agreement entitled “Miscellaneous” shall apply similarly to these Wrapper T&Cs, as applicable. diff --git a/docs/support.rst b/docs/support.rst new file mode 100644 index 00000000..539b4765 --- /dev/null +++ b/docs/support.rst @@ -0,0 +1,5 @@ +############################################### +Support for Highcharts for Python +############################################### + +.. include:: _support.rst \ No newline at end of file diff --git a/docs/visualizations.rst b/docs/visualizations.rst index a7617f0b..03eb3f27 100644 --- a/docs/visualizations.rst +++ b/docs/visualizations.rst @@ -36,7 +36,7 @@ to visualize your data. .. note:: - The visualizations below are provided by **Highcharts for Python** and + The visualizations below are provided by **Highcharts Core for Python** and `Highcharts JS `__. They are also available in the other libraries within the toolkit. @@ -660,7 +660,7 @@ to visualize your data. :class:`highcharts_maps.options.plot_options.mapline.MapLineOptions` :class:`highcharts_maps.options.series.mapline.MapLineSeries` - * - **Map* * + * - **Map** - .. figure:: _static/mappoint-example.png :alt: Map Point Example Chart :width: 100% @@ -671,9 +671,38 @@ to visualize your data. .. tab:: Gantt - .. todo:: + .. list-table:: + :widths: 10 90 + :header-rows: 1 + + * - Series Type + - Screenshot + Class Links + * - **Gantt Chart** + - .. figure:: _static/gantt-example.png + :alt: Gantt Chart Example + :width: 100% + + :class:`highcharts_gantt.options.plot_options.gantt.GanttOptions` + + :class:`highcharts_gantt.options.series.gantt.GanttSeries` + * - **X-Range** + - .. tabs:: + + .. tab:: Standard + + .. figure:: _static/xrange-example.png + :alt: X-Range Example Chart + :width: 100% + + .. tab:: Inverted + + .. figure:: _static/xrange-example-inverted.png + :alt: Inverted X-Range Example Chart + :width: 100% + + :class:`highcharts_gantt.options.plot_options.bar.XRangeOptions` - Add Gantt visualizations + :class:`highcharts_gantt.options.series.bar.XRangeSeries` -------------- @@ -694,7 +723,7 @@ visualizations. .. error:: - The core **Highcharts for Python** library and the related + The **Highcharts Core for Python** library and the related `Highcharts JS `__ JavaScript library do not support :term:`technical indicators `. @@ -1186,7 +1215,7 @@ visualizations. .. error:: - The core **Highcharts Maps for Python** extension and the related + The **Highcharts Maps for Python** extension and the related `Highcharts Maps `__ JavaScript library do not support :term:`technical indicators `. @@ -1197,6 +1226,13 @@ visualizations. .. tab:: Gantt - .. todo:: + .. error:: + + The **Highcharts Gantt for Python** extension and the related + `Highcharts Gantt `__ JavaScript + library do not support :term:`technical indicators `. - Document Gantt Indicators or equivalent. + Only **Highcharts Stock for Python** and + `Highcharts Stock `__ support + technical indicators. For more information, please see + `here `__. diff --git a/highcharts_core/__version__.py b/highcharts_core/__version__.py index 1f356cc5..943937ba 100644 --- a/highcharts_core/__version__.py +++ b/highcharts_core/__version__.py @@ -1 +1 @@ -__version__ = '1.0.0' +__version__ = '1.0.0-rc1' diff --git a/highcharts_core/chart.py b/highcharts_core/chart.py index 4cbfc09c..6e19ec9c 100644 --- a/highcharts_core/chart.py +++ b/highcharts_core/chart.py @@ -51,7 +51,11 @@ def _jupyter_include_scripts(self): return js_str - def _jupyter_javascript(self, global_options = None, container = None): + def _jupyter_javascript(self, + global_options = None, + container = None, + retries = 3, + interval = 1000): """Return the JavaScript code which Jupyter Labs will need to render the chart. :param global_options: The :term:`shared options` to use when rendering the chart. @@ -63,6 +67,14 @@ def _jupyter_javascript(self, global_options = None, container = None): :obj:`None `, which applies the :meth:`.container ` property if set, and ``'highcharts_target_div'`` if not set. :type container: :class:`str ` or :obj:`None ` + + :param retries: The number of times to retry rendering the chart. Used to avoid race conditions with the + Highcharts script. Defaults to 3. + :type retries: :class:`int ` + + :param interval: The number of milliseconds to wait between retrying rendering the chart. Defaults to 1000 (1 + seocnd). + :type interval: :class:`int ` :rtype: :class:`str ` """ @@ -74,10 +86,15 @@ def _jupyter_javascript(self, global_options = None, container = None): types = SharedOptions) js_str = '' + js_str += utility_functions.get_retryHighcharts() + if global_options: - js_str += '\n' + global_options.to_js_literal() + '\n' + js_str += '\n' + utility_functions.prep_js_for_jupyter(global_options.to_js_literal()) + '\n' - js_str += utility_functions.prep_js_for_jupyter(self.to_js_literal()) + js_str += utility_functions.prep_js_for_jupyter(self.to_js_literal(), + container = self.container, + retries = retries, + interval = interval) self.container = original_container @@ -264,30 +281,32 @@ def to_js_literal(self, container_as_str = '' if self.container: - container_as_str = f"""renderTo = '{self.container}'""" - signature_elements += 1 + container_as_str = f"""'{self.container}'""" + else: + container_as_str = """null""" + signature_elements += 1 options_as_str = '' if self.options: options_as_str = self.options.to_js_literal(encoding = encoding) - options_as_str = f"""options = {options_as_str}""" - signature_elements += 1 + options_as_str = f"""{options_as_str}""" + else: + options_as_str = """null""" + signature_elements += 1 callback_as_str = '' if self.callback: callback_as_str = self.callback.to_js_literal(encoding = encoding) - callback_as_str = f"""callback = {callback_as_str}""" + callback_as_str = f"""{callback_as_str}""" signature_elements += 1 signature = """new Highcharts.chart(""" - if container_as_str: - signature += container_as_str - if signature_elements > 1: - signature += ',\n' - if options_as_str: - signature += options_as_str - if signature_elements > 1: - signature += ',\n' + signature += container_as_str + if signature_elements > 1: + signature += ',\n' + signature += options_as_str + if signature_elements > 1: + signature += ',\n' if callback_as_str: signature += callback_as_str signature += ');' @@ -631,7 +650,11 @@ def from_series(cls, *series, kwargs = None): return instance - def display(self, global_options = None, container = None): + def display(self, + global_options = None, + container = None, + retries = 3, + interval = 1000): """Display the chart in `Jupyter Labs `_ or `Jupyter Notebooks `_. @@ -645,6 +668,14 @@ def display(self, global_options = None, container = None): property if set, and ``'highcharts_target_div'`` if not set. :type container: :class:`str ` or :obj:`None ` + :param retries: The number of times to retry rendering the chart. Used to avoid race conditions with the + Highcharts script. Defaults to 3. + :type retries: :class:`int ` + + :param interval: The number of milliseconds to wait between retrying rendering the chart. Defaults to 1000 (1 + seocnd). + :type interval: :class:`int ` + :raises HighchartsDependencyError: if `ipython `_ is not available in the runtime environment @@ -665,7 +696,10 @@ def display(self, global_options = None, container = None): html_str = self._jupyter_container_html(container) html_display = display_mod.HTML(data = html_str) - chart_js_str = self._jupyter_javascript(global_options = global_options, container = container) + chart_js_str = self._jupyter_javascript(global_options = global_options, + container = container, + retries = retries, + interval = interval) javascript_display = display_mod.Javascript(data = chart_js_str) display(include_display) diff --git a/highcharts_core/constants.py b/highcharts_core/constants.py index 91c2d24d..a2fc28a4 100644 --- a/highcharts_core/constants.py +++ b/highcharts_core/constants.py @@ -33,7 +33,6 @@ def __eq__(self, other): 'https://code.highcharts.com/modules/annotations.js', 'https://code.highcharts.com/modules/boost.js', 'https://code.highcharts.com/modules/broken-axis.js', - 'https://code.highcharts.com/modules/canvas-tools.js', 'https://code.highcharts.com/modules/data.js', 'https://code.highcharts.com/modules/exporting.js', 'https://code.highcharts.com/modules/drilldown.js', @@ -53,7 +52,6 @@ def __eq__(self, other):