Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-agate-sql for openSUSE:Factory checked in at 2023-12-03 20:49:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-agate-sql (Old) and /work/SRC/openSUSE:Factory/.python-agate-sql.new.25432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-agate-sql" Sun Dec 3 20:49:02 2023 rev:12 rq:1130497 version:0.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-agate-sql/python-agate-sql.changes 2023-05-10 16:18:51.547093475 +0200 +++ /work/SRC/openSUSE:Factory/.python-agate-sql.new.25432/python-agate-sql.changes 2023-12-03 20:49:21.890991647 +0100 @@ -1,0 +2,9 @@ +Sat Dec 2 17:21:27 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 0.7.0: + * Use Fast Executemany Mode + * Add Python 3.12 support. + * Drop support for Python 3.6 (2021-12-23), 3.7 (2023-06-27). + * Allow SQLAlchemy 2. Disallow SQLAlchemy < 1.4. + +------------------------------------------------------------------- Old: ---- 0.5.9.tar.gz New: ---- 0.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-agate-sql.spec ++++++ --- /var/tmp/diff_new_pack.T2PWPR/_old 2023-12-03 20:49:22.411010749 +0100 +++ /var/tmp/diff_new_pack.T2PWPR/_new 2023-12-03 20:49:22.415010896 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-agate-sql -Version: 0.5.9 +Version: 0.7.0 Release: 0 Summary: SQL read/write support for agate License: MIT @@ -32,11 +32,11 @@ BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros +Requires: python-SQLAlchemy Requires: python-agate >= 1.5.0 -Requires: (python-sqlalchemy >= 1.0.8 with python-sqlalchemy < 2) BuildArch: noarch # SECTION test requirements -BuildRequires: %{python_module sqlalchemy >= 1.0.8 with %python-sqlalchemy < 2} +BuildRequires: %{python_module SQLAlchemy} BuildRequires: %{python_module agate >= 1.5.0} BuildRequires: %{python_module pytest} # /SECTION ++++++ 0.5.9.tar.gz -> 0.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/.github/workflows/ci.yml new/agate-sql-0.7.0/.github/workflows/ci.yml --- old/agate-sql-0.5.9/.github/workflows/ci.yml 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/.github/workflows/ci.yml 2023-10-18 06:41:37.000000000 +0200 @@ -7,7 +7,7 @@ strategy: matrix: os: [macos-latest, windows-latest, ubuntu-latest] - python-version: [3.7, 3.8, 3.9, '3.10', '3.11', pypy-3.7] + python-version: [3.8, 3.9, '3.10', '3.11', '3.12', pypy-3.9] steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 @@ -15,5 +15,8 @@ python-version: ${{ matrix.python-version }} cache: pip cache-dependency-path: setup.py - - run: pip install .[test] + - run: pip install .[test] coveralls - run: pytest --cov agatesql + - env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: coveralls --service=github diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/.github/workflows/pypi.yml new/agate-sql-0.7.0/.github/workflows/pypi.yml --- old/agate-sql-0.5.9/.github/workflows/pypi.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/agate-sql-0.7.0/.github/workflows/pypi.yml 2023-10-18 06:41:37.000000000 +0200 @@ -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-sql-0.5.9/.readthedocs.yaml new/agate-sql-0.7.0/.readthedocs.yaml --- old/agate-sql-0.5.9/.readthedocs.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/agate-sql-0.7.0/.readthedocs.yaml 2023-10-18 06:41:37.000000000 +0200 @@ -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-sql-0.5.9/AUTHORS.rst new/agate-sql-0.7.0/AUTHORS.rst --- old/agate-sql-0.5.9/AUTHORS.rst 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/AUTHORS.rst 2023-10-18 06:41:37.000000000 +0200 @@ -9,3 +9,4 @@ * `Jake Zimmerman <https://github.com/jez>`_ * `Shige Takeda <https://github.com/smtakeda>`_ * `Roger Webb <https://github.com/RogerWebb>`_ +* `Steve Kowalik <https://github.com/s-t-e-v-e-n-k>`_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/CHANGELOG.rst new/agate-sql-0.7.0/CHANGELOG.rst --- old/agate-sql-0.5.9/CHANGELOG.rst 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/CHANGELOG.rst 2023-10-18 06:41:37.000000000 +0200 @@ -1,3 +1,15 @@ +0.7.0 - Oct 18, 2023 +-------------------- + +* feat: Use `Fast Executemany Mode <https://docs.sqlalchemy.org/en/20/dialects/mssql.html#fast-executemany-mode>`_ when using the PyODBC SQL Server dialect. +* Add Python 3.12 support. +* Drop support for Python 3.6 (2021-12-23), 3.7 (2023-06-27). + +0.6.0 - Sep 26, 2023 +-------------------- + +* Allow SQLAlchemy 2. Disallow SQLAlchemy < 1.4. + 0.5.9 - Jan 28, 2023 -------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/MANIFEST.in new/agate-sql-0.7.0/MANIFEST.in --- old/agate-sql-0.5.9/MANIFEST.in 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/MANIFEST.in 2023-10-18 06:41:37.000000000 +0200 @@ -4,5 +4,7 @@ include COPYING recursive-include docs *.py recursive-include docs *.rst +recursive-include docs *.txt recursive-include docs Makefile recursive-include tests *.py +exclude .readthedocs.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/README.rst new/agate-sql-0.7.0/README.rst --- old/agate-sql-0.5.9/README.rst 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/README.rst 2023-10-18 06:41:37.000000000 +0200 @@ -2,6 +2,10 @@ :target: https://github.com/wireservice/agate-sql/actions :alt: Build status +.. image:: https://coveralls.io/repos/wireservice/agate-sql/badge.svg?branch=master + :target: https://coveralls.io/r/wireservice/agate-sql + :alt: Coverage status + .. image:: https://img.shields.io/pypi/dm/agate-sql.svg :target: https://pypi.python.org/pypi/agate-sql :alt: PyPI downloads @@ -22,7 +26,7 @@ Important links: -* agate http://agate.rtfd.org -* Documentation: http://agate-sql.rtfd.org +* agate https://agate.rtfd.org +* Documentation: https://agate-sql.rtfd.org * Repository: https://github.com/wireservice/agate-sql * Issues: https://github.com/wireservice/agate-sql/issues diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/agatesql/__init__.py new/agate-sql-0.7.0/agatesql/__init__.py --- old/agate-sql-0.5.9/agatesql/__init__.py 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/agatesql/__init__.py 2023-10-18 06:41:37.000000000 +0200 @@ -1,3 +1 @@ -#!/usr/bin/env python - import agatesql.table diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/agatesql/table.py new/agate-sql-0.7.0/agatesql/table.py --- old/agate-sql-0.5.9/agatesql/table.py 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/agatesql/table.py 2023-10-18 06:41:37.000000000 +0200 @@ -1,5 +1,3 @@ -#!/usr/bin/env python - """ This module contains the agatesql extensions to :class:`Table <agate.table.Table>`. @@ -7,6 +5,7 @@ import datetime import decimal +from urllib.parse import urlsplit import agate from sqlalchemy import Column, MetaData, Table, UniqueConstraint, create_engine, dialects @@ -60,7 +59,11 @@ connection = connection_or_string return None, connection - engine = create_engine(connection_or_string) + kwargs = {} + if urlsplit(connection_or_string).scheme == 'mssql+pyodbc': + kwargs = {'fast_executemany': True} + + engine = create_engine(connection_or_string, **kwargs) connection = engine.connect() return engine, connection @@ -79,8 +82,8 @@ """ engine, connection = get_engine_and_connection(connection_or_string) - metadata = MetaData(connection) - sql_table = Table(table_name, metadata, autoload=True, autoload_with=connection) + metadata = MetaData() + sql_table = Table(table_name, metadata, autoload_with=connection) column_names = [] column_types = [] @@ -110,7 +113,7 @@ else: raise ValueError('Unsupported sqlalchemy column type: %s' % type(sql_column.type)) - s = select([sql_table]) + s = select(sql_table) rows = connection.execute(s) @@ -179,7 +182,7 @@ """ Generates a SQL alchemy table from an agate table. """ - metadata = MetaData(connection) + metadata = MetaData() sql_table = Table(table_name, metadata, schema=db_schema) SQL_TYPE_MAP[agate.Boolean] = BOOLEAN_MAP.get(dialect, BOOLEAN) @@ -216,7 +219,7 @@ sql_type_kwargs['scale'] = table.aggregate(agate.MaxPrecision(column_name)) # Avoid errors due to NO_ZERO_DATE. - # @see http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date + # @see https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_date if not isinstance(column.data_type, agate.DateTime): sql_column_kwargs['nullable'] = table.aggregate(agate.HasNulls(column_name)) @@ -254,15 +257,15 @@ Add prefixes to the insert query. :param db_schema: Create table in the specified database schema. - :param constraints + :param constraints: Generate constraints such as ``nullable`` for table columns. - :param unique_constraint + :param unique_constraint: The names of the columns to include in a UNIQUE constraint. - :param chunk_size + :param chunk_size: Write rows in batches of this size. If not set, rows will be written at once. - :param col_min_len + :param col_min_len: The minimum length of text columns. - :param col_len_multiplier + :param col_len_multiplier: Multiply the maximum column length by this multiplier to accomodate larger values in later runs. """ engine, connection = get_engine_and_connection(connection_or_string) @@ -273,25 +276,30 @@ min_col_len=min_col_len, col_len_multiplier=col_len_multiplier) if create: - if overwrite: - sql_table.drop(checkfirst=True) + with connection.begin_nested() as conn: + if overwrite: + sql_table.drop(bind=connection, checkfirst=True) - sql_table.create(checkfirst=create_if_not_exists) + sql_table.create(bind=connection, checkfirst=create_if_not_exists) + conn.commit() if insert: - insert = sql_table.insert() - for prefix in prefixes: - insert = insert.prefix_with(prefix) - if chunk_size is None: - connection.execute(insert, [dict(zip(self.column_names, row)) for row in self.rows]) - else: - number_of_rows = len(self.rows) - for index in range((number_of_rows - 1) // chunk_size + 1): - end_index = (index + 1) * chunk_size - if end_index > number_of_rows: - end_index = number_of_rows - connection.execute(insert, [dict(zip(self.column_names, row)) for row in - self.rows[index * chunk_size:end_index]]) + with connection.begin_nested() as conn: + insert = sql_table.insert() + for prefix in prefixes: + insert = insert.prefix_with(prefix) + if chunk_size is None: + connection.execute(insert, [dict(zip(self.column_names, row)) for row in self.rows]) + else: + number_of_rows = len(self.rows) + for index in range((number_of_rows - 1) // chunk_size + 1): + end_index = (index + 1) * chunk_size + if end_index > number_of_rows: + end_index = number_of_rows + connection.execute(insert, [dict(zip(self.column_names, row)) for row in + self.rows[index * chunk_size:end_index]]) + + conn.commit() try: return sql_table @@ -312,9 +320,9 @@ The dialect of SQL to use for the table statement. :param db_schema: Create table in the specified database schema. - :param constraints + :param constraints: Generate constraints such as ``nullable`` for table columns. - :param unique_constraint + :param unique_constraint: The names of the columns to include in a UNIQUE constraint. """ sql_table = make_sql_table(self, table_name, dialect=dialect, db_schema=db_schema, constraints=constraints, @@ -351,7 +359,7 @@ for q in queries: if q: - rows = connection.execute(q) + rows = connection.exec_driver_sql(q) table = agate.Table(list(rows), column_names=rows._metadata.keys) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/docs/conf.py new/agate-sql-0.7.0/docs/conf.py --- old/agate-sql-0.5.9/docs/conf.py 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/docs/conf.py 2023-10-18 06:41:37.000000000 +0200 @@ -1,224 +1,45 @@ +# 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 = 'agate-sql' copyright = '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.5.8' -# The full version, including alpha/beta/rc tags. +version = '0.7.0' 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 = 'agatesqldoc' - - -# -- 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-sql.tex', 'agate-sql Documentation', - '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 = 'agatesqldoc' -# -- 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-sql-0.5.9/docs/index.rst new/agate-sql-0.7.0/docs/index.rst --- old/agate-sql-0.5.9/docs/index.rst 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/docs/index.rst 2023-10-18 06:41:37.000000000 +0200 @@ -13,11 +13,11 @@ pip install agate-sql -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>`_. .. warning:: - You'll need to have the correct `sqlalchemy drivers <http://docs.sqlalchemy.org/en/rel_1_0/dialects/index.html>`_ installed for whatever database you plan to access. For instance, in order to read/write tables in a Postgres database, you'll also need to ``pip install psycopg2``. + You'll need to have the correct `sqlalchemy drivers <https://docs.sqlalchemy.org/en/rel_1_0/dialects/index.html>`_ installed for whatever database you plan to access. For instance, in order to read/write tables in a Postgres database, you'll also need to ``pip install psycopg2``. Usage ===== @@ -41,7 +41,7 @@ new_table.to_sql('postgresql:///hospitals', 'doctors') -The first argument to either function can be any valid `sqlalchemy connection string <http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html>`_. The second argument must be a database name. (Arbitrary SQL queries are not supported.) +The first argument to either function can be any valid `sqlalchemy connection string <https://docs.sqlalchemy.org/en/rel_1_0/core/engines.html>`_. The second argument must be a database name. (Arbitrary SQL queries are not supported.) That's all there is to it. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/docs/requirements.txt new/agate-sql-0.7.0/docs/requirements.txt --- old/agate-sql-0.5.9/docs/requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/agate-sql-0.7.0/docs/requirements.txt 2023-10-18 06:41:37.000000000 +0200 @@ -0,0 +1,3 @@ +furo +sphinx>2 +docutils>=0.18 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/setup.cfg new/agate-sql-0.7.0/setup.cfg --- old/agate-sql-0.5.9/setup.cfg 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/setup.cfg 2023-10-18 06:41:37.000000000 +0200 @@ -4,8 +4,6 @@ # imported but unused agatesql/__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-sql-0.5.9/setup.py new/agate-sql-0.7.0/setup.py --- old/agate-sql-0.5.9/setup.py 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/setup.py 2023-10-18 06:41:37.000000000 +0200 @@ -5,13 +5,13 @@ setup( name='agate-sql', - version='0.5.9', + version='0.7.0', description='agate-sql adds SQL read/write support to agate.', long_description=long_description, long_description_content_type='text/x-rst', author='Christopher Groskopf', author_email='chrisgrosk...@gmail.com', - url='http://agate-sql.readthedocs.org/', + url='https://agate-sql.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 :: 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', @@ -34,7 +34,7 @@ packages=find_packages(exclude=['tests', 'tests.*']), install_requires=[ 'agate>=1.5.0', - 'sqlalchemy<2', + 'sqlalchemy>=1.4', ], extras_require={ 'test': [ @@ -43,9 +43,5 @@ 'pytest', 'pytest-cov', ], - 'docs': [ - 'Sphinx>=1.2.2', - 'sphinx_rtd_theme>=0.1.6', - ], } ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/agate-sql-0.5.9/tests/test_agatesql.py new/agate-sql-0.7.0/tests/test_agatesql.py --- old/agate-sql-0.5.9/tests/test_agatesql.py 2023-01-28 20:54:48.000000000 +0100 +++ new/agate-sql-0.7.0/tests/test_agatesql.py 2023-10-18 06:41:37.000000000 +0200 @@ -1,5 +1,3 @@ -#!/usr/bin/env python - from decimal import Decimal from textwrap import dedent