Skip to content

Commit

Permalink
enh: use configuration from settings.ini (#560)
Browse files Browse the repository at this point in the history
  • Loading branch information
jmoralez authored Dec 6, 2024
1 parent 445a46c commit 164ea51
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 58 deletions.
23 changes: 23 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,26 @@ jobs:

- name: Run tests
run: nbdev_test --timing --do_print --n_workers 0 --skip_file_re "computing_at_scale|distributed"

run-minimal-tests:
runs-on: ${{ matrix.os }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
os: [macos-13, macos-14, ubuntu-latest, windows-latest]
python-version: ["3.9", "3.13"]
steps:
- name: Clone repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

- name: Set up python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # 5.3.0
with:
python-version: ${{ matrix.python-version }}

- name: Install pip requirements
run: pip install uv && uv pip install --system . matplotlib nbdev python-dotenv

- name: Run tests
run: nbdev_test --n_workers 0 --path nbs/docs/getting-started/2_quickstart.ipynb
3 changes: 1 addition & 2 deletions nixtla/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
__all__ = ["NixtlaClient"]
__version__ = "0.6.4"

__all__ = ["NixtlaClient"]
from .nixtla_client import NixtlaClient
11 changes: 7 additions & 4 deletions settings.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
host = github
lib_name = nixtla
user = Nixtla
description = Time series forecasting suite using TimeGPT
description = Python SDK for Nixtla API (TimeGPT)
keywords = time-series forecasting gpt
author = Nixtla
author_email = [email protected]
Expand All @@ -14,9 +14,12 @@ audience = Developers
language = English
custom_sidebar = True
license = apache2
status = 2
requirements = requests pandas tenacity
dev_requirements = nbdev plotly statsforecast python-dotenv
status = 4
requirements = annotated-types httpx[zstd] orjson pandas tenacity tqdm utilsforecast>=0.2.8
dev_requirements = black datasetsforecast fire hierarchicalforecast jupyterlab nbdev neuralforecast numpy<2 plotly polars pre-commit pyreadr python-dotenv pyyaml setuptools<70 statsforecast tabulate
distributed_requirements = fugue[dask,ray,spark]>=0.8.7 pandas<2.2 ray<2.6.3
plotting_requirements = utilsforecast[plotting]
date_extra_requirements = holidays
nbs_path = nbs
doc_path = _docs
recursive = True
Expand Down
111 changes: 59 additions & 52 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,58 +1,65 @@
from pkg_resources import parse_version
from configparser import ConfigParser
import setuptools
assert parse_version(setuptools.__version__)>=parse_version('36.2')

with open("README.md", "r", encoding="utf8") as fh:
long_description = fh.read()
# note: all settings are in settings.ini; edit there, not here
config = ConfigParser(delimiters=['='])
config.read('settings.ini')
cfg = config['DEFAULT']

dev = [
"black",
"datasetsforecast",
"fire",
"hierarchicalforecast",
"jupyterlab",
"nbdev",
"neuralforecast",
"numpy<2",
"plotly",
"polars",
"pre-commit",
"pyreadr",
"python-dotenv",
"pyyaml",
"setuptools<70",
"statsforecast",
"tabulate",
]
distributed = ["fugue[dask,ray,spark]>=0.8.7", "pandas<2.2", "ray<2.6.3"]
plotting = ["utilsforecast[plotting]"]
date_extras = ["holidays"]
cfg_keys = 'version description keywords author author_email'.split()
expected = cfg_keys + "lib_name user branch license status min_python audience language".split()
for o in expected: assert o in cfg, "missing expected setting: {}".format(o)
setup_cfg = {o:cfg[o] for o in cfg_keys}

licenses = {
'apache2': ('Apache Software License 2.0','OSI Approved :: Apache Software License'),
'mit': ('MIT License', 'OSI Approved :: MIT License'),
'gpl2': ('GNU General Public License v2', 'OSI Approved :: GNU General Public License v2 (GPLv2)'),
'gpl3': ('GNU General Public License v3', 'OSI Approved :: GNU General Public License v3 (GPLv3)'),
'bsd3': ('BSD License', 'OSI Approved :: BSD License'),
}
statuses = [ '1 - Planning', '2 - Pre-Alpha', '3 - Alpha',
'4 - Beta', '5 - Production/Stable', '6 - Mature', '7 - Inactive' ]
py_versions = '3.9 3.10 3.11 3.12 3.13'.split()

requirements = cfg['requirements'].split()
distributed_requirements = cfg['distributed_requirements'].split()
plotting_requirements = cfg['plotting_requirements'].split()
date_extra_requirements = cfg['date_extra_requirements'].split()
dev_requirements = cfg['dev_requirements'].split()
dev_requirements.extend(plotting_requirements)
dev_requirements.extend(date_extra_requirements)

min_python = cfg['min_python']
lic = licenses.get(cfg['license'].lower(), (cfg['license'], None))

setuptools.setup(
name="nixtla",
version="0.6.4",
description="Python SDK for Nixtla API (TimeGPT)",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/Nixtla/nixtla",
packages=setuptools.find_packages(exclude=["action_files"]),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires=">=3.9",
install_requires=[
"annotated-types",
"httpx[zstd]",
"orjson",
"pandas",
"tenacity",
"tqdm",
"utilsforecast>=0.2.8",
],
extras_require={
"dev": dev + plotting + date_extras,
"distributed": distributed,
"plotting": plotting,
"date_extras": date_extras,
name = cfg['lib_name'],
license = lic[0],
classifiers = [
'Development Status :: ' + statuses[int(cfg['status'])],
'Intended Audience :: ' + cfg['audience'].title(),
'Natural Language :: ' + cfg['language'].title(),
] + ['Programming Language :: Python :: '+o for o in py_versions[py_versions.index(min_python):]] + (['License :: ' + lic[1] ] if lic[1] else []),
url = cfg['git_url'],
packages = setuptools.find_packages(exclude=['action_files']),
include_package_data = True,
install_requires = requirements,
extras_require = {
"dev": dev_requirements,
"distributed": distributed_requirements,
"plotting": plotting_requirements,
"date_extras": date_extra_requirements,
},
dependency_links = cfg.get('dep_links','').split(),
python_requires = '>=' + cfg['min_python'],
long_description = open('README.md', encoding='utf-8').read(),
long_description_content_type = 'text/markdown',
zip_safe = False,
entry_points = {
'console_scripts': cfg.get('console_scripts','').split(),
'nbdev': [f'{cfg.get("lib_path")}={cfg.get("lib_path")}._modidx:d']
},
)
**setup_cfg)

0 comments on commit 164ea51

Please sign in to comment.