##
# 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.

##
# 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 = http://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
