Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-agate-excel for openSUSE:Factory checked in at 2023-12-03 20:49:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-agate-excel (Old) and /work/SRC/openSUSE:Factory/.python-agate-excel.new.25432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-agate-excel" Sun Dec 3 20:49:11 2023 rev:8 rq:1130507 version:0.4.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-agate-excel/python-agate-excel.changes 2023-03-10 22:07:16.941105848 +0100 +++ /work/SRC/openSUSE:Factory/.python-agate-excel.new.25432/python-agate-excel.changes 2023-12-03 20:49:30.403304330 +0100 @@ -1,0 +2,22 @@ +Sat Dec 2 19:39:42 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 0.4.1: + * fix: :meth:`.Table.from_xlsx` no longer errors on unsized + sheets. + * The ``reset_dimensions`` argument to :meth:`.Table.from_xlsx` + defaults to ``None`` instead of ``False``. If + ``reset_dimensions`` is ``None``, and if the worksheet's + dimensions are ``A1:A1``, recalculate the worksheet's + dimensions. To disable this behavior, set + ``reset_dimensions`` to ``False``. + * If the ``reset_dimensions`` argument to + :meth:`.Table.from_xlsx` is set, recalculate the worksheet's + dimensions, instead of assuming that the table's width + matches the first row's. + * The ``reset_dimensions`` argument to :meth:`.Table.from_xlsx` + is ignored if the ``read_only`` argument is false. + * Add Python 3.8, 3.9, 3.10, 3.11, 3.12 support. + * Drop support for 3.5 (2020-09-13), 3.6 (2021-12-23), 3.7 +- drop python-agate-excel-no-python2.patch (upstream) + +------------------------------------------------------------------- Old: ---- 0.2.5.tar.gz python-agate-excel-no-python2.patch New: ---- 0.4.1.tar.gz BETA DEBUG BEGIN: Old: * Drop support for 3.5 (2020-09-13), 3.6 (2021-12-23), 3.7 - drop python-agate-excel-no-python2.patch (upstream) BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-agate-excel.spec ++++++ --- /var/tmp/diff_new_pack.giEW6Z/_old 2023-12-03 20:49:33.195406891 +0100 +++ /var/tmp/diff_new_pack.giEW6Z/_new 2023-12-03 20:49:33.203407186 +0100 @@ -16,29 +16,26 @@ # -%define skip_python2 1 Name: python-agate-excel -Version: 0.2.5 +Version: 0.4.1 Release: 0 Summary: Read support for Excel files (xls and xlsx) for agate License: MIT URL: https://github.com/wireservice/agate-excel Source: https://github.com/wireservice/agate-excel/archive/%{version}.tar.gz -# https://github.com/wireservice/agate-excel/commit/833dc6d39dda3e4b025e3e4dc61533622d65cc5f -Patch0: python-agate-excel-no-python2.patch BuildRequires: %{python_module agate >= 1.5.0} +BuildRequires: %{python_module numpy} BuildRequires: %{python_module olefile} BuildRequires: %{python_module openpyxl >= 2.3.0} BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} -BuildRequires: %{python_module six} BuildRequires: %{python_module xlrd >= 0.9.4} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-agate >= 1.5.0 +Requires: python-numpy Requires: python-olefile Requires: python-openpyxl >= 2.3.0 -Requires: python-six Requires: python-xlrd >= 0.9.4 BuildArch: noarch %python_subpackages ++++++ 0.2.5.tar.gz -> 0.4.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/.github/workflows/ci.yml new/agate-excel-0.4.1/.github/workflows/ci.yml --- old/agate-excel-0.2.5/.github/workflows/ci.yml 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/.github/workflows/ci.yml 2023-11-20 21:13:29.000000000 +0100 @@ -2,28 +2,21 @@ on: [push, pull_request] jobs: build: + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, windows-latest, ubuntu-latest] - python-version: [2.7, 3.6, 3.7, 3.8, 3.9, pypy-2.7, pypy-3.6, pypy-3.7] + python-version: [3.8, 3.9, '3.10', '3.11', '3.12', pypy-3.9] steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - # https://github.com/actions/cache/blob/main/examples.md#using-a-script-to-get-cache-location - - id: pip-cache - run: python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)" - - uses: actions/cache@v1 - with: - path: ${{ steps.pip-cache.outputs.dir }} - key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip- - - run: pip install --upgrade check-manifest flake8 isort setuptools - - run: check-manifest - - run: flake8 . - - run: isort . --check-only - - run: pip install .[test] - - run: nosetests + cache: pip + cache-dependency-path: setup.py + - run: pip install .[test] coveralls + - run: pytest --cov agateexcel + - env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: coveralls --service=github diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/.github/workflows/lint.yml new/agate-excel-0.4.1/.github/workflows/lint.yml --- old/agate-excel-0.2.5/.github/workflows/lint.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/agate-excel-0.4.1/.github/workflows/lint.yml 2023-11-20 21:13:29.000000000 +0100 @@ -0,0 +1,19 @@ +name: Lint +on: [push, pull_request] +env: + BASEDIR: https://raw.githubusercontent.com/open-contracting/standard-maintenance-scripts/main +jobs: + build: + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + cache: pip + cache-dependency-path: setup.py + - run: pip install --upgrade check-manifest flake8 isort setuptools + - run: check-manifest + - run: flake8 . + - run: isort . --check-only diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/.github/workflows/pypi.yml new/agate-excel-0.4.1/.github/workflows/pypi.yml --- old/agate-excel-0.2.5/.github/workflows/pypi.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/agate-excel-0.4.1/.github/workflows/pypi.yml 2023-11-20 21:13:29.000000000 +0100 @@ -0,0 +1,23 @@ +name: Publish to PyPI +on: push +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - run: pip install --upgrade build + - run: python -m build --sdist --wheel + - name: Publish to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.TEST_PYPI_API_TOKEN }} + repository-url: https://test.pypi.org/legacy/ + skip-existing: true + - name: Publish to PyPI + if: startsWith(github.ref, 'refs/tags') + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_API_TOKEN }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/.readthedocs.yaml new/agate-excel-0.4.1/.readthedocs.yaml --- old/agate-excel-0.2.5/.readthedocs.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/agate-excel-0.4.1/.readthedocs.yaml 2023-11-20 21:13:29.000000000 +0100 @@ -0,0 +1,11 @@ +version: 2 +build: + os: ubuntu-20.04 + tools: + python: "3.9" +python: + install: + - path: . + - requirements: docs/requirements.txt +sphinx: + fail_on_warning: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/CHANGELOG.rst new/agate-excel-0.4.1/CHANGELOG.rst --- old/agate-excel-0.2.5/CHANGELOG.rst 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/CHANGELOG.rst 2023-11-20 21:13:29.000000000 +0100 @@ -1,3 +1,21 @@ +0.4.1 - November 20, 2023 +------------------------- + +* fix: :meth:`.Table.from_xlsx` no longer errors on unsized sheets. + +0.4.0 - November 7, 2023 +------------------------ + +* The ``reset_dimensions`` argument to :meth:`.Table.from_xlsx` defaults to ``None`` instead of ``False``. If ``reset_dimensions`` is ``None``, and if the worksheet's dimensions are ``A1:A1``, recalculate the worksheet's dimensions. To disable this behavior, set ``reset_dimensions`` to ``False``. + +0.3.0 - October 30, 2023 +------------------------ + +* If the ``reset_dimensions`` argument to :meth:`.Table.from_xlsx` is set, recalculate the worksheet's dimensions, instead of assuming that the table's width matches the first row's. +* The ``reset_dimensions`` argument to :meth:`.Table.from_xlsx` is ignored if the ``read_only`` argument is false. +* Add Python 3.8, 3.9, 3.10, 3.11, 3.12 support. +* Drop support for 3.5 (2020-09-13), 3.6 (2021-12-23), 3.7 (2023-06-27). + 0.2.5 - August 8, 2021 ---------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/MANIFEST.in new/agate-excel-0.4.1/MANIFEST.in --- old/agate-excel-0.2.5/MANIFEST.in 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/MANIFEST.in 2023-11-20 21:13:29.000000000 +0100 @@ -3,7 +3,9 @@ include COPYING recursive-include docs *.py recursive-include docs *.rst +recursive-include docs *.txt recursive-include docs Makefile recursive-include examples *.xls recursive-include examples *.xlsx recursive-include tests *.py +exclude .readthedocs.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/README.rst new/agate-excel-0.4.1/README.rst --- old/agate-excel-0.2.5/README.rst 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/README.rst 2023-11-20 21:13:29.000000000 +0100 @@ -2,6 +2,10 @@ :target: https://github.com/wireservice/agate-excel/actions :alt: Build status +.. image:: https://coveralls.io/repos/wireservice/agate-excel/badge.svg?branch=master + :target: https://coveralls.io/r/wireservice/agate-excel + :alt: Coverage status + .. image:: https://img.shields.io/pypi/dm/agate-excel.svg :target: https://pypi.python.org/pypi/agate-excel :alt: PyPI downloads @@ -22,7 +26,7 @@ Important links: -* agate http://agate.rtfd.org -* Documentation: http://agate-excel.rtfd.org +* agate https://agate.rtfd.org +* Documentation: https://agate-excel.rtfd.org * Repository: https://github.com/wireservice/agate-excel * Issues: https://github.com/wireservice/agate-excel/issues diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/agateexcel/__init__.py new/agate-excel-0.4.1/agateexcel/__init__.py --- old/agate-excel-0.2.5/agateexcel/__init__.py 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/agateexcel/__init__.py 2023-11-20 21:13:29.000000000 +0100 @@ -1,4 +1,2 @@ -#!/usr/bin/env python - import agateexcel.table_xls import agateexcel.table_xlsx diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/agateexcel/table_xls.py new/agate-excel-0.4.1/agateexcel/table_xls.py --- old/agate-excel-0.2.5/agateexcel/table_xls.py 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/agateexcel/table_xls.py 2023-11-20 21:13:29.000000000 +0100 @@ -1,5 +1,3 @@ -#!/usr/bin/env python - """ This module contains the XLS extension to :class:`Table <agate.table.Table>`. """ @@ -9,7 +7,6 @@ import agate import olefile -import six import xlrd EXCEL_TO_AGATE_TYPE = { @@ -53,7 +50,7 @@ d = ole.openstream('Workbook') book = xlrd.open_workbook(file_contents=d.read(), on_demand=True) else: - raise IOError('No Workbook stream found in OLE file') + raise OSError('No Workbook stream found in OLE file') return book if hasattr(path, 'read'): @@ -72,7 +69,7 @@ tables = OrderedDict() for i, sheet in enumerate(sheets): - if isinstance(sheet, six.string_types): + if isinstance(sheet, str): sheet = book.sheet_by_name(sheet) elif isinstance(sheet, int): sheet = book.sheet_by_index(sheet) @@ -109,7 +106,7 @@ agate_type = agate.Date() if header: - name = six.text_type(sheet.cell_value(skip_lines, i)) or None + name = str(sheet.cell_value(skip_lines, i)) or None column_names.append(name) columns.append(values) @@ -137,8 +134,7 @@ if multiple: return agate.MappedSequence(tables.values(), tables.keys()) - else: - return tables.popitem()[1] + return tables.popitem()[1] def determine_agate_type(excel_type): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/agateexcel/table_xlsx.py new/agate-excel-0.4.1/agateexcel/table_xlsx.py --- old/agate-excel-0.2.5/agateexcel/table_xlsx.py 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/agateexcel/table_xlsx.py 2023-11-20 21:13:29.000000000 +0100 @@ -1,5 +1,3 @@ -#!/usr/bin/env python - """ This module contains the XLSX extension to :class:`Table <agate.table.Table>`. """ @@ -9,13 +7,12 @@ import agate import openpyxl -import six NULL_TIME = datetime.time(0, 0, 0) def from_xlsx(cls, path, sheet=None, skip_lines=0, header=True, read_only=True, - reset_dimensions=False, row_limit=None, **kwargs): + reset_dimensions=None, row_limit=None, **kwargs): """ Parse an XLSX file. @@ -28,6 +25,9 @@ The number of rows to skip from the top of the sheet. :param header: If :code:`True`, the first row is assumed to contain column names. + :param read_only: + If :code:`True`, the XLSX file is opened in read-only mode, to reduce + memory consumption. :param reset_dimensions: If :code:`True`, do not trust the dimensions in the file's properties, and recalculate them based on the data in the file. @@ -53,7 +53,7 @@ tables = OrderedDict() for i, sheet in enumerate(sheets): - if isinstance(sheet, six.string_types): + if isinstance(sheet, str): try: sheet = book[sheet] except KeyError: @@ -72,12 +72,20 @@ offset = 0 rows = [] - if reset_dimensions: - sheet.reset_dimensions() + if ( + read_only + and (reset_dimensions or (reset_dimensions is None and sheet.max_column == 1 and sheet.max_row == 1)) + ): + try: + sheet.reset_dimensions() + sheet.calculate_dimension(force=True) + # https://foss.heptapod.net/openpyxl/openpyxl/-/issues/2111 + except UnboundLocalError: + pass if header: sheet_header = sheet.iter_rows(min_row=1 + skip_lines, max_row=1 + skip_lines) - column_names = [None if c.value is None else six.text_type(c.value) for row in sheet_header for c in row] + column_names = [None if c.value is None else str(c.value) for row in sheet_header for c in row] offset = 1 if row_limit is None: @@ -117,8 +125,7 @@ if multiple: return agate.MappedSequence(tables.values(), tables.keys()) - else: - return tables.popitem()[1] + return tables.popitem()[1] def normalize_datetime(dt): @@ -129,7 +136,7 @@ if ms < 1000: return dt.replace(microsecond=0) - elif ms > 999000: + if ms > 999000: return dt.replace(microsecond=0) + datetime.timedelta(seconds=1) return dt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/docs/conf.py new/agate-excel-0.4.1/docs/conf.py --- old/agate-excel-0.2.5/docs/conf.py 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/docs/conf.py 2023-11-20 21:13:29.000000000 +0100 @@ -1,225 +1,45 @@ -# -*- coding: utf-8 -*- +# Configuration file for the Sphinx documentation builder. # -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html import os import sys -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('..')) -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx'] -autodoc_member_order = 'bysource' - -intersphinx_mapping = { - 'python': ('http://docs.python.org/3.5/', None), - 'agate': ('http://agate.readthedocs.org/en/latest/', None) -} - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'agate-excel' -copyright = u'2017, Christopher Groskopf' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.2.5' -# The full version, including alpha/beta/rc tags. +project = 'agate-excel' +copyright = '2017, Christopher Groskopf' +version = '0.4.1' release = version -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' - -if not on_rtd: # only import and set the theme if we're building docs locally - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# "<project> v<release> documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a <link> tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'agateexceldoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'agate-excel.tex', u'agate-excel Documentation', - u'Christopher Groskopf', 'manual'), +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.intersphinx' ] -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] -# Documents to append as an appendix to all manuals. -#latex_appendices = [] +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -# If false, no module index is generated. -#latex_domain_indices = True +html_theme = 'furo' +htmlhelp_basename = 'agateexceldoc' -# -- Options for manual page output -------------------------------------------- +autodoc_default_options = { + 'members': None, + 'member-order': 'bysource', + 'show-inheritance': True, +} -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ -] +intersphinx_mapping = { + 'python': ('https://docs.python.org/3', None), + 'agate': ('https://agate.readthedocs.org/en/latest/', None) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/docs/index.rst new/agate-excel-0.4.1/docs/index.rst --- old/agate-excel-0.2.5/docs/index.rst 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/docs/index.rst 2023-11-20 21:13:29.000000000 +0100 @@ -13,7 +13,7 @@ pip install agate-excel -For details on development or supported platforms see the `agate documentation <http://agate.readthedocs.org>`_. +For details on development or supported platforms see the `agate documentation <https://agate.readthedocs.org>`_. Usage ===== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/docs/requirements.txt new/agate-excel-0.4.1/docs/requirements.txt --- old/agate-excel-0.2.5/docs/requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/agate-excel-0.4.1/docs/requirements.txt 2023-11-20 21:13:29.000000000 +0100 @@ -0,0 +1,3 @@ +furo +sphinx>2 +docutils>=0.18 Binary files old/agate-excel-0.2.5/examples/covid_19-iss.xlsx and new/agate-excel-0.4.1/examples/covid_19-iss.xlsx differ Binary files old/agate-excel-0.2.5/examples/ne_1033_data.xlsx and new/agate-excel-0.4.1/examples/ne_1033_data.xlsx differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/setup.cfg new/agate-excel-0.4.1/setup.cfg --- old/agate-excel-0.2.5/setup.cfg 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/setup.cfg 2023-11-20 21:13:29.000000000 +0100 @@ -4,8 +4,6 @@ # imported but unused agateexcel/__init__.py: F401 example.py: F401 - # block comment should start with '# ' - docs/conf.py: E265 [isort] line_length = 119 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/setup.py new/agate-excel-0.4.1/setup.py --- old/agate-excel-0.2.5/setup.py 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/setup.py 2023-11-20 21:13:29.000000000 +0100 @@ -5,13 +5,13 @@ setup( name='agate-excel', - version='0.2.5', + version='0.4.1', description='agate-excel adds read support for Excel files (xls and xlsx) to agate.', long_description=long_description, long_description_content_type='text/x-rst', author='Christopher Groskopf', author_email='chrisgrosk...@gmail.com', - url='http://agate-excel.readthedocs.org/', + url='https://agate-excel.readthedocs.org/', license='MIT', classifiers=[ 'Development Status :: 4 - Beta', @@ -21,11 +21,11 @@ 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Scientific/Engineering :: Information Analysis', @@ -36,16 +36,12 @@ 'agate>=1.5.0', 'olefile', 'openpyxl>=2.3.0', - 'six', 'xlrd>=0.9.4', ], extras_require={ 'test': [ - 'nose>=1.1.2', - ], - 'docs': [ - 'Sphinx>=1.2.2', - 'sphinx_rtd_theme>=0.1.6', + 'pytest', + 'pytest-cov', ], } ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/tests/test_table_xls.py new/agate-excel-0.4.1/tests/test_table_xls.py --- old/agate-excel-0.2.5/tests/test_table_xls.py 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/tests/test_table_xls.py 2023-11-20 21:13:29.000000000 +0100 @@ -1,6 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf8 -*- - import datetime import agate @@ -12,7 +9,7 @@ def setUp(self): self.rows = ( (1, 'a', True, '11/4/2015', '11/4/2015 12:22 PM'), - (2, u'ð', False, '11/5/2015', '11/4/2015 12:45 PM'), + (2, 'ð', False, '11/5/2015', '11/4/2015 12:45 PM'), (None, 'b', None, None, None), ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-excel-0.2.5/tests/test_table_xlsx.py new/agate-excel-0.4.1/tests/test_table_xlsx.py --- old/agate-excel-0.2.5/tests/test_table_xlsx.py 2021-08-09 00:07:03.000000000 +0200 +++ new/agate-excel-0.4.1/tests/test_table_xlsx.py 2023-11-20 21:13:29.000000000 +0100 @@ -1,10 +1,6 @@ -#!/usr/bin/env python -# -*- coding: utf8 -*- - import datetime import agate -import six import agateexcel # noqa: F401 @@ -13,7 +9,7 @@ def setUp(self): self.rows = ( (1, 'a', True, '11/4/2015', '11/4/2015 12:22 PM'), - (2, u'ð', False, '11/5/2015', '11/4/2015 12:45 PM'), + (2, 'ð', False, '11/5/2015', '11/4/2015 12:45 PM'), (None, 'b', None, None, None), ) @@ -106,16 +102,10 @@ def test_ambiguous_date(self): table = agate.Table.from_xlsx('examples/test_ambiguous_date.xlsx') - # openpyxl >= 3 fixes a bug, but Python 2 is constrained to openpyxl < 3. - if six.PY2: - expected = datetime.date(1899, 12, 31) - else: - expected = datetime.date(1900, 1, 1) - self.assertColumnNames(table, ['s']) self.assertColumnTypes(table, [agate.Date]) self.assertRows(table, [ - [expected], + [datetime.date(1900, 1, 1)], ]) def test_empty(self): @@ -147,3 +137,16 @@ self.assertColumnNames(table, self.column_names) self.assertColumnTypes(table, [agate.Number, agate.Text, agate.Boolean, agate.Date, agate.DateTime]) self.assertRows(table, [r.values() for r in self.table.rows]) + + def test_from_xlsx_unsized(self): + table = agate.Table.from_xlsx('examples/ne_1033_data.xlsx') + + self.assertEqual(len(table.columns), 14) + self.assertEqual(len(table.rows), 1036) + + def test_from_xlsx_size_1(self): + # https://github.com/wireservice/csvkit/issues/1129 + table = agate.Table.from_xlsx('examples/covid_19-iss.xlsx') + + self.assertEqual(len(table.columns), 18) + self.assertEqual(len(table.rows), 46)