exchange-calendars

View on PyPIReverse Dependencies (24)

4.8 exchange_calendars-4.8-py3-none-any.whl

Wheel Details

Project: exchange-calendars
Version: 4.8
Filename: exchange_calendars-4.8-py3-none-any.whl
Download: [link]
Size: 197757
MD5: 9e0a766ac9112848503d8d578bbf9462
SHA256: 98990e1419e6379c22c19e8dff31ab0abf59a0841c24d21953f731b50b4125f9
Uploaded: 2025-01-14 23:28:24 +0000

dist-info

METADATA

Metadata-Version: 2.2
Name: exchange_calendars
Version: 4.8
Summary: Calendars for securities exchanges
Author: Gerry Manoim
Author-Email: gerrymanoim[at]gmail.com
Project-Url: homepage, https://github.com/gerrymanoim/exchange_calendars
Project-Url: documentation, https://github.com/gerrymanoim/exchange_calendars/tree/master/docs
Project-Url: Issue Tracker, https://github.com/gerrymanoim/exchange_calendars/issues
Project-Url: Source Code, https://github.com/gerrymanoim/exchange_calendars
License: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2018 Quantopian, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Keywords: finance,security,calendar,exchange
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Mathematics
Classifier: Operating System :: OS Independent
Requires-Python: ~=3.10
Requires-Dist: numpy
Requires-Dist: pandas
Requires-Dist: pyluach
Requires-Dist: toolz
Requires-Dist: tzdata
Requires-Dist: korean_lunar_calendar
Requires-Dist: flake8; extra == "dev"
Requires-Dist: hypothesis; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-benchmark; extra == "dev"
Requires-Dist: pytest-xdist; extra == "dev"
Requires-Dist: pip-tools; extra == "dev"
Provides-Extra: dev
Description-Content-Type: text/markdown
License-File: LICENSE
[Description omitted; length: 23205 characters]

WHEEL

Wheel-Version: 1.0
Generator: setuptools (75.8.0)
Root-Is-Purelib: true
Tag: py3-none-any

RECORD

Path Digest Size
exchange_calendars/__init__.py sha256=2MsxG8esL4UUAwU8GFALZQYuCetOm3UM30l1TJUizE8 1678
exchange_calendars/_version.py sha256=jdLMkDGWhmOCDXqMGvA6wqRCVHm1u0R_C1P5m3iapVE 406
exchange_calendars/always_open.py sha256=bNcsOwb1sbFB5nyA0bMeY9cZWlec1-oEbFfolDovJaE 411
exchange_calendars/calendar_helpers.py sha256=XyL6ukGiVCDPeRApp0kdeMx-rGnKCtscjn4Lu5OgiB4 24735
exchange_calendars/calendar_utils.py sha256=TzegChZ7MfvH-jSvU5uTMAc1AN5fd0ObfOcw9zCJ20M 20640
exchange_calendars/common_holidays.py sha256=XGK-RhiPHJoS1kXJLRfEwyEFGvrtML3oGWsShU-JyrY 10626
exchange_calendars/ecal.py sha256=fGj_wrX_jz-ldZVQotWu9E1lSizVUTHC94uzCPqh990 3867
exchange_calendars/errors.py sha256=gIo2z0MNbYT3U3jfhPzmMJTVrzNP29dzceOvgSGDPNY 10861
exchange_calendars/exchange_calendar.py sha256=rCVZyeeALhw0VnhtPkp4XLntyojnEFQDEMijDiuAXCE 104892
exchange_calendars/exchange_calendar_aixk.py sha256=KqJO9KnOhG4Nv0_Cwa98XBqURmQ_PejCCElkOPGbXi0 5977
exchange_calendars/exchange_calendar_asex.py sha256=YShHa_TTxDEl0tSJBT1HeNgnUsVO5H482IrDn2xLeIs 4383
exchange_calendars/exchange_calendar_bvmf.py sha256=Yetze_EDMxBvmyLc9lrN0WoqvEQYwhdWy5onbZxqzWI 5862
exchange_calendars/exchange_calendar_cmes.py sha256=ou0QGhlTGQ3-EBOmnd8nnsa6hFqpzJ6B40mQdSgK7R8 3252
exchange_calendars/exchange_calendar_iepa.py sha256=KLYYHdU09-4fEQ5p-QPFfct3fHRz8x3HrcacMJ7AbAI 2036
exchange_calendars/exchange_calendar_xams.py sha256=XrxwTkiNMHq9nkw3q1QDavk4sPeLobM0r5yEF3ryDSI 2923
exchange_calendars/exchange_calendar_xasx.py sha256=XFSa0D6EDYK7P5dpamlyboN2xZTFwIOb_HFllhfntac 6946
exchange_calendars/exchange_calendar_xbkk.py sha256=JYMJziroLRz9DybcDim88CSHcoo1u_7YzoCpZTV09dI 3391
exchange_calendars/exchange_calendar_xbog.py sha256=o5WMfnZ6K3I0in54Kx02Gxd0wQA6bhzaz9aOe6jBHR8 4720
exchange_calendars/exchange_calendar_xbom.py sha256=uEYQ0e0xIJoXYWqNICey0iFK8I5WRzPJd5QV5-bPytc 10743
exchange_calendars/exchange_calendar_xbru.py sha256=Vie23hH7W89G4lxU7MiLxFWPtYghcQ9K4_Z3s4blXeg 2970
exchange_calendars/exchange_calendar_xbse.py sha256=5yL6smDR1i8F5U92CxF9ksn4xBrhjSqwdoWG-n6krqM 2642
exchange_calendars/exchange_calendar_xbud.py sha256=w1ODrdwvCmFW46eJUEN_UdY24bWLvPiIfafpKzeTzsI 5927
exchange_calendars/exchange_calendar_xbue.py sha256=I2oeaNv-kus6cKx88T2siicxxHU81zTBCf7kJ4y5SgI 9061
exchange_calendars/exchange_calendar_xcbf.py sha256=-D7SWwm2ht5kGSOZTKkv2lz7uCRmpb7uXPyvY4l1D_U 1948
exchange_calendars/exchange_calendar_xcse.py sha256=x2DTq4zm8RQnkm79v63AcBplFzprv0Tr1SeB1TJ8NsM 2777
exchange_calendars/exchange_calendar_xdub.py sha256=1uHlbM_iYphqKdiou8OZ3pR2e5Iv9Tz1UmYp9wc_zNw 4353
exchange_calendars/exchange_calendar_xdus.py sha256=CKREUx0F2tssZSey2SpQirQVKNwie8RXQXBoLMKvyDY 3220
exchange_calendars/exchange_calendar_xeee.py sha256=8n1uBHGn6yAAzXjfduY9BO34CWgyQTOD9OVb9tTuodY 1546
exchange_calendars/exchange_calendar_xetr.py sha256=fok_XB-7NCBhKJQ_AhWYrNYkGU05a9NVpTLTnrHLle4 3710
exchange_calendars/exchange_calendar_xfra.py sha256=R5Dq9vHJRelxpmB-qDqgyEcUS7a6AurnAr9MWOlzrjE 3666
exchange_calendars/exchange_calendar_xham.py sha256=gY9C2EfwsypyBfEMPJXovYGCVTZX4KnUVAZbutQWS_U 3220
exchange_calendars/exchange_calendar_xhel.py sha256=POmWe8dUs96UDs1-ogzGrNTjRSEhTTK5RDCnugWLrts 2458
exchange_calendars/exchange_calendar_xhkg.py sha256=VbBehyWGgn4RhgIcn46x5LyzUQh4DLlIb0dYWo0u9XE 16816
exchange_calendars/exchange_calendar_xice.py sha256=--R1xBlCs0vyCN-akvoz0r4PyS6B_MIE0ECD56AXg0U 2904
exchange_calendars/exchange_calendar_xidx.py sha256=uSdifBbuWvXOvBjmrR1ZwnYwdvUjsAP5oC4yrPHUVZY 12605
exchange_calendars/exchange_calendar_xist.py sha256=qDIur6cIZZQTapH5M2k6DVA73W9rPWiTrvLQMIXoq30 5351
exchange_calendars/exchange_calendar_xjse.py sha256=Joh2VYVW-Mn8jEzabszBrYNSp-59FQEbDIzM7VdwHI8 5170
exchange_calendars/exchange_calendar_xkar.py sha256=AY-Q59xW50Mnm9SRgtS_lq3hfhqCMBWhSlRKrBhYEBA 11007
exchange_calendars/exchange_calendar_xkls.py sha256=8jy631zdYpLVgzdyAJzzcef09A1vosStpR6EMQ_MX3s 3223
exchange_calendars/exchange_calendar_xkrx.py sha256=AYv7jS43d5Mw1Fe12q8PYmM4DAst5bNXKnC7KunJniE 13003
exchange_calendars/exchange_calendar_xlim.py sha256=NTh8lbtsfQf38gzE_rOsg-J-X8FYclrimRz4N2x8AVI 3682
exchange_calendars/exchange_calendar_xlis.py sha256=-tuIvdb_mwr3DcDqY47cg5NL69kgMYjRNMK70O_wLvM 3887
exchange_calendars/exchange_calendar_xlon.py sha256=igt-s60NwSn2ha5Q9w4NlUkjBREJJyTRsC5autsXc-o 7304
exchange_calendars/exchange_calendar_xlux.py sha256=pqYg4yzFUh5rSAL8y8RclTZn9MbSmuaNih1tEED-PKw 1829
exchange_calendars/exchange_calendar_xmad.py sha256=D5YxzmbyilYpnEM1tMYwNgDdL22HazV8d3jlszvX5lw 4134
exchange_calendars/exchange_calendar_xmex.py sha256=ADN6dpVpuFbuGMg5auWe0ydCR7HnHBA4m5YyiOaSD_Q 3683
exchange_calendars/exchange_calendar_xmil.py sha256=hoHwO6hMgFw6piN1hW3b4jHL-IPrp8gbwngCmBCzGAk 2177
exchange_calendars/exchange_calendar_xmos.py sha256=wBAy_02p0PQnhFdiqutRDYpZ7G3xMcPfft88z6ypmJM 12466
exchange_calendars/exchange_calendar_xnys.py sha256=uqOfBxY6uvzygAtp7cXZIMPbCmT4u7MNx9UiiD0LW9c 9403
exchange_calendars/exchange_calendar_xnze.py sha256=iiU9cNnFhQHY9VIpireEHhiHJs9OiM33DW1WglZTEps 6941
exchange_calendars/exchange_calendar_xosl.py sha256=wsH66KIsjmQftux7IGZXQnEIAvfouuhFi-eKQhZ1roc 2731
exchange_calendars/exchange_calendar_xpar.py sha256=9-sb-ph_vicyOLpQL740pFhruHEZ_gNYHblhSsSrTVM 2832
exchange_calendars/exchange_calendar_xphs.py sha256=41eJtq9Wg7D1oepzIGzqSyFREewdZlidoaTO9m8Tbso 10770
exchange_calendars/exchange_calendar_xpra.py sha256=ii6F_pPzFg9OTL_BxHK00rp7Mb--gMyc-KnXdPldmZM 3561
exchange_calendars/exchange_calendar_xsau.py sha256=ltGnlx2pHxYlzuyuXbv7ddGmVmzR38f3WTmBGSpUeUE 2123
exchange_calendars/exchange_calendar_xses.py sha256=dwht-3JSxKFOBfw7LTR2_dcxc1RID45z_Zb4Bnh4DJk 11120
exchange_calendars/exchange_calendar_xsgo.py sha256=FymI5qXiY1lkVkjJq7ENcVszeNeUI_DdaLN2FwHvDRA 7461
exchange_calendars/exchange_calendar_xshg.py sha256=DD62FMvA-JeS5OFHoH6wl4DgxvsRs0b7Vabxf3fS77Y 14023
exchange_calendars/exchange_calendar_xsto.py sha256=JeBJ3koxY3FGz-WllV6hJWmtr35es-wxor0yJt6lU84 3918
exchange_calendars/exchange_calendar_xswx.py sha256=8bBhY4WtQADPDFzC4Qrkj5z0zQ4k02tGSiO1zhgYCGc 2476
exchange_calendars/exchange_calendar_xtae.py sha256=9ZSKckgXFM5A9So_XeHjaOiSXeWYnKXSIC_KpsCRRAA 4682
exchange_calendars/exchange_calendar_xtai.py sha256=49GQWIzocX__yUJZ-Y4Dpu2XWS8pByQVbjbLvbEikjA 13182
exchange_calendars/exchange_calendar_xtks.py sha256=JDDtV1rzRezVW3Bly7Ri_x4OhIut606Bz4cnkkI4tww 4583
exchange_calendars/exchange_calendar_xtse.py sha256=XP9JjAL1fim-wKv9QUIWgBbyDIZq0g9FeYceR2zs2Fc 3796
exchange_calendars/exchange_calendar_xwar.py sha256=isih5qynyGCADskKXfZudFl_zSuuSIvazrdrK1uLwVY 3664
exchange_calendars/exchange_calendar_xwbo.py sha256=GeOXDfphec7UPfzw13Z5dpwm82E9xf0xesKS-oHJqAI 4277
exchange_calendars/lunisolar_holidays.py sha256=ftlq7NOQg5IkELq_ChpzCp18ZU5YGaoCQOdwyOZWT1k 13602
exchange_calendars/precomputed_exchange_calendar.py sha256=-A8OsoVj5W6_OzNpGyfRyhPV4wdewSvhZEx1v5kFfOE 1745
exchange_calendars/tase_holidays.py sha256=3VBrl2dZlas5pFY6GiUBk4nJ83TvdWYr3YKWKtPhFos 11751
exchange_calendars/us_futures_calendar.py sha256=iRtrd5OZpWbfP9znJ25aMIyp8awYiILurZL-xsyLV4I 2795
exchange_calendars/us_holidays.py sha256=E92_M1qe0q0RmO4PTKDrFU3-aeddz9vPKK7NbCPbXE0 10189
exchange_calendars/weekday_calendar.py sha256=PgZf2ovF6ceQ3whegFrbLDNp6yTXvtfauAmVuQkNQUk 399
exchange_calendars/xbkk_holidays.py sha256=PBJYt0mINUonHEoU1pQOlYIQvNtTJkEy1MmGuAP8pIw 7712
exchange_calendars/xkls_holidays.py sha256=m48ALKVidsRMo5GI_xglGeilAUNGI66vgaIGG0IYTJ8 12755
exchange_calendars/xkrx_holidays.py sha256=EdaJ9dZITpdDsKK4StL6D6b69K09u6Eu7g-9cqoajWo 36071
exchange_calendars/xtks_holidays.py sha256=rTd7VFAUbyZNOtj8T8S3SNHKGeGbM9IBV4JdE-IyUws 9363
exchange_calendars/pandas_extensions/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
exchange_calendars/pandas_extensions/holiday.py sha256=SQ6ELKRke4wyrJt-7k__3p9vwdQ_LarzpHIsoMiGTFg 6316
exchange_calendars/pandas_extensions/korean_holiday.py sha256=LwVDlM4AN3PA1Um8GHgpOIeOzwDPNBuCR0ER6_7gsqo 7810
exchange_calendars/pandas_extensions/offsets.py sha256=0s-Ux7VgXXp_Z29viv7Z2GR1gWJ_hAm1Ll0X0diAiIo 10188
exchange_calendars/utils/__init__.py sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU 0
exchange_calendars/utils/pandas_utils.py sha256=S2nlBjO8nc_Q7Fw_NgRwHpluDZyzcYok-tJdcczCom4 4720
exchange_calendars-4.8.dist-info/LICENSE sha256=41xFePfbRJjmLieJePbELg_ObyH5mToGCwijNUnNMEQ 11347
exchange_calendars-4.8.dist-info/METADATA sha256=vKalY2__tbahisKW224Es93Ajv4YFC27bB-YpVST_M4 37818
exchange_calendars-4.8.dist-info/WHEEL sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8 91
exchange_calendars-4.8.dist-info/entry_points.txt sha256=WMDzWscHGwYo_-dv02XdBy6us39LZfiby68k7i6NE8E 54
exchange_calendars-4.8.dist-info/top_level.txt sha256=-Mn0Y4dEHer_UH_YFtpUgNZzH1ink4oq7Oh2KBUU2dM 19
exchange_calendars-4.8.dist-info/RECORD

top_level.txt

exchange_calendars

entry_points.txt

ecal = exchange_calendars.ecal:main