# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.

[tox]
# See https://tox.wiki/en/latest/faq.html#testing-end-of-life-python-versions
requires = virtualenv<20.22.0
envlist = py27-SQLAlchemy{13,14},
  py35-SQLAlchemy{13},
  py36-SQLAlchemy{13,14},
  py37-SQLAlchemy{13,14,20},
  py38-SQLAlchemy{13,14,20},
  py39-SQLAlchemy{13,14,20},
  py310-SQLAlchemy{13,14,20},
  py311-SQLAlchemy{13,14,20},
  py312-SQLAlchemy{13,14,20}
[testenv]
passenv = PHOENIXDB_TEST_DB_URL
commands =
  flake8 phoenixdb  
  pytest {posargs}
deps = -rrequirements.txt
  pytest
  flake8
  SQLAlchemy13: SQLAlchemy >=1.3.0, < 1.4.0
  SQLAlchemy14: SQLAlchemy >=1.4.0, < 2.0.0
  SQLAlchemy20: SQLAlchemy >= 2.0.0
[pytest]
testpaths =
    phoenixdb/tests