##
# 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
#
#     https://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.

##
# https://setuptools.readthedocs.io/en/latest/setuptools.html#configuring-setup-using-setup-cfg-files
[metadata]
name = avro-python3
version = file: avro/VERSION.txt
description = Avro is a serialization and RPC framework.
long_description = file: README.txt
keywords =
    avro
    serialization
    rpc
author = Apache Avro
author_email = dev@avro.apache.org
url = https://avro.apache.org/
license = Apache License 2.0
classifiers =
    License :: OSI Approved :: Apache Software License
    Programming Language :: Python :: 3 :: Only
    Programming Language :: Python :: 3.5
    Programming Language :: Python :: 3.6
    Programming Language :: Python :: 3.7
    Programming Language :: Python :: 3.8

[options]
package_dir =
    avro = avro
include_package_data = true
packages = avro
setup_requires =
  isort
  pycodestyle
install_requires =
zip_safe = true
scripts =
    scripts/avro
python_requires = >=3.5
test_suite = avro.tests.run_tests

[options.package_data]
avro =
    HandshakeRequest.avsc
    HandshakeResponse.avsc
    VERSION.txt
    LICENSE
    NOTICE

[options.extras_require]
snappy = python-snappy
zstandard = zstandard

[aliases]
dist = sdist --dist-dir ../../dist/py3

[isort]
line_length = 150
known_third_party=zope

[pycodestyle]
exclude = .eggs,build
ignore = E111,E114,E121,E122,E124,E127,E128,E129,E201,E202,E203,E221,E225,E231,E241,E261,E301,E302,E303,E305,E402,E701,E703,W503,W504
max-line-length = 150
statistics = True
