diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 5ffa075..f52fc63 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -9,36 +9,13 @@ on: branches: [ "master" ] jobs: - build-pre37: - - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python-version: ["2.7"] - - steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - if [ -f requirements-t-pre37.txt ]; then pip install -r requirements-t-pre37.txt; fi - - name: Test with nosetests - run: | - ./scripts/testing.sh - build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12.0-rc.1"] steps: - uses: actions/checkout@v3 diff --git a/setup.py b/setup.py index db8e562..da9894f 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup -__version__ = "1.6.5" +__version__ = "1.7.0" setup( @@ -9,21 +9,19 @@ url="https://github.com/caesar0301/treelib", author="Xiaming Chen", author_email="chenxm35@gmail.com", - description="A Python 2/3 implementation of tree structure.", + description="A Python implementation of tree structure.", long_description="""This is a simple tree data structure implementation in python.""", license="Apache License, Version 2.0", packages=["treelib"], keywords=["data structure", "tree", "tools"], install_requires=["six"], classifiers=[ - "Development Status :: 4 - Beta", + "Development Status :: 5 - Production", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", diff --git a/tests/test_plugins.py b/tests/test_plugins.py deleted file mode 100644 index 0f04fbf..0000000 --- a/tests/test_plugins.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -import codecs -import os -import unittest - -from treelib import Tree -from treelib.plugins import export_to_dot - - -class DotExportCase(unittest.TestCase): - """Test class for the export to dot format function""" - - def setUp(self): - tree = Tree() - tree.create_node("Hárry", "hárry") - tree.create_node("Jane", "jane", parent="hárry") - tree.create_node("Bill", "bill", parent="hárry") - tree.create_node("Diane", "diane", parent="jane") - tree.create_node("George", "george", parent="bill") - self.tree = tree - - def read_generated_output(self, filename): - output = codecs.open(filename, "r", "utf-8") - generated = output.read() - output.close() - - return generated - - def test_export_to_dot(self): - export_to_dot(self.tree, "tree.dot") - expected = """\ -digraph tree { -\t"hárry" [label="Hárry", shape=circle] -\t"bill" [label="Bill", shape=circle] -\t"jane" [label="Jane", shape=circle] -\t"george" [label="George", shape=circle] -\t"diane" [label="Diane", shape=circle] - -\t"hárry" -> "jane" -\t"hárry" -> "bill" -\t"bill" -> "george" -\t"jane" -> "diane" -}""" - - self.assertTrue( - os.path.isfile("tree.dot"), "The file tree.dot could not be found." - ) - generated = self.read_generated_output("tree.dot") - - self.assertEqual( - generated, expected, "Generated dot tree is not the expected one" - ) - os.remove("tree.dot") - - def test_export_to_dot_empty_tree(self): - empty_tree = Tree() - export_to_dot(empty_tree, "tree.dot") - - expected = """\ -digraph tree { -}""" - self.assertTrue( - os.path.isfile("tree.dot"), "The file tree.dot could not be found." - ) - generated = self.read_generated_output("tree.dot") - - self.assertEqual( - expected, generated, "The generated output for an empty tree is not empty" - ) - os.remove("tree.dot") - - def test_unicode_filename(self): - tree = Tree() - tree.create_node("Node 1", "node_1") - export_to_dot(tree, "ŕʩϢ.dot") - - expected = """\ -digraph tree { -\t"node_1" [label="Node 1", shape=circle] -}""" - self.assertTrue( - os.path.isfile("ŕʩϢ.dot"), "The file ŕʩϢ.dot could not be found." - ) - generated = self.read_generated_output("ŕʩϢ.dot") - self.assertEqual( - expected, generated, "The generated file content is not the expected one" - ) - os.remove("ŕʩϢ.dot") - - def test_export_with_minus_in_filename(self): - tree = Tree() - tree.create_node("Example Node", "example-node") - expected = """\ -digraph tree { -\t"example-node" [label="Example Node", shape=circle] -}""" - - export_to_dot(tree, "id_with_minus.dot") - self.assertTrue( - os.path.isfile("id_with_minus.dot"), - "The file id_with_minus.dot could not be found.", - ) - generated = self.read_generated_output("id_with_minus.dot") - self.assertEqual( - expected, generated, "The generated file content is not the expected one" - ) - os.remove("id_with_minus.dot") - - def tearDown(self): - self.tree = None diff --git a/treelib/plugins.py b/treelib/plugins.py deleted file mode 100644 index 0736c73..0000000 --- a/treelib/plugins.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2011 -# Brett Alistair Kromkamp - brettkromkamp@gmail.com -# Copyright (C) 2012-2017 -# Xiaming Chen - chenxm35@gmail.com -# and other contributors. -# All rights reserved. -# -# Licensed 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. -""" -This is a public location to maintain contributed -utilities to extend the basic Tree class. - -Deprecated! We prefer a unified processing of Tree object. -""" -from __future__ import unicode_literals - -from .misc import deprecated - - -@deprecated(alias="tree.to_graphviz()") -def export_to_dot(tree, filename=None, shape="circle", graph="digraph"): - """Exports the tree in the dot format of the graphviz software""" - tree.to_graphviz(filename=filename, shape=shape, graph=graph)