Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove Python 2 crumbs #653

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions tests/test_nesting.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
# -*- coding: utf-8 -*-
try:
from builtins import object
except ImportError:
pass

import sys
import tempfile
Expand Down Expand Up @@ -36,7 +32,7 @@
default_separator = NestedState.separator


class Dummy(object):
class Dummy:
pass


Expand Down
23 changes: 3 additions & 20 deletions transitions/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,7 @@
and transition concepts.
"""


try:
from builtins import object
except ImportError: # pragma: no cover
# python2
pass

try:
# Enums are supported for Python 3.4+ and Python 2.7 with enum34 package installed
from enum import Enum, EnumMeta
except ImportError: # pragma: no cover
# If enum is not available, create dummy classes for type checks
class Enum: # type:ignore
"""This is just an Enum stub for Python 2 and Python 3.3 and before without Enum support."""

class EnumMeta: # type:ignore
"""This is just an EnumMeta stub for Python 2 and Python 3.3 and before without Enum support."""
from enum import Enum, EnumMeta

import inspect
import itertools
Expand All @@ -31,7 +15,6 @@ class EnumMeta: # type:ignore

from collections import OrderedDict, defaultdict, deque
from functools import partial
from six import string_types

_LOGGER = logging.getLogger(__name__)
_LOGGER.addHandler(logging.NullHandler())
Expand Down Expand Up @@ -838,7 +821,7 @@ def add_states(self, states, on_enter=None, on_exit=None,
states = listify(states)

for state in states:
if isinstance(state, (string_types, Enum)):
if isinstance(state, (str, Enum)):
state = self._create_state(
state, on_enter=on_enter, on_exit=on_exit,
ignore_invalid_triggers=ignore, **kwargs)
Expand Down Expand Up @@ -1204,7 +1187,7 @@ def resolve_callable(func, event_data):
Returns:
callable function resolved from string or func
"""
if isinstance(func, string_types):
if isinstance(func, str):
try:
func = getattr(event_data.model, func)
if not callable(func): # if a property or some other not callable attribute was passed
Expand Down
4 changes: 1 addition & 3 deletions transitions/extensions/diagrams_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@
import copy
import abc
import logging
import six

_LOGGER = logging.getLogger(__name__)
_LOGGER.addHandler(logging.NullHandler())


@six.add_metaclass(abc.ABCMeta)
class BaseGraph(object):
class BaseGraph(metaclass=abc.ABCMeta):
"""Provides the common foundation for graphs generated either with pygraphviz or graphviz. This abstract class
should not be instantiated directly. Use .(py)graphviz.(Nested)Graph instead.
Attributes:
Expand Down
5 changes: 2 additions & 3 deletions transitions/extensions/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

from functools import partial
import itertools
from six import iteritems

from ..core import Machine, Transition

Expand All @@ -34,7 +33,7 @@ class NestedAsyncTransition(NestedTransition): # type: ignore
"""A mock of NestedAsyncTransition for Python 3.6 and earlier."""


class MachineFactory(object):
class MachineFactory:
"""Convenience factory for machine class retrieval."""

# get one of the predefined classes which fulfill the criteria
Expand Down Expand Up @@ -78,7 +77,7 @@ def format_references(func):
", ".join(itertools.chain(
(str(_) for _ in func.args[1:]),
("%s=%s" % (key, value)
for key, value in iteritems(func.keywords if func.keywords else {})))))
for key, value in (func.keywords.items() if func.keywords else {}.items())))))
return GraphMachine.format_references(func)


Expand Down
21 changes: 4 additions & 17 deletions transitions/extensions/markup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,12 @@
also be used to store and transfer machines.
"""

from enum import Enum, EnumMeta
from functools import partial
import importlib
import itertools
import numbers

from six import string_types, iteritems

try:
# Enums are supported for Python 3.4+ and Python 2.7 with enum34 package installed
from enum import Enum, EnumMeta
except ImportError: # pragma: no cover
# If enum is not available, create dummy classes for type checks
# typing must be prevented redefinition issues with mypy
class Enum: # type:ignore
"""This is just an Enum stub for Python 2 and Python 3.3 and before without Enum support."""

class EnumMeta: # type:ignore
"""This is just an EnumMeta stub for Python 2 and Python 3.3 and before without Enum support."""

from ..core import Machine
from .nesting import HierarchicalMachine

Expand Down Expand Up @@ -143,7 +130,7 @@ def format_references(func):
", ".join(itertools.chain(
(str(_) for _ in func.args),
("%s=%s" % (key, value)
for key, value in iteritems(func.keywords if func.keywords else {})))))
for key, value in (func.keywords.items() if func.keywords else {}.items())))))
return str(func)

def _convert_states_and_transitions(self, root):
Expand Down Expand Up @@ -236,7 +223,7 @@ class HierarchicalMarkupMachine(MarkupMachine, HierarchicalMachine):

def rep(func, format_references=None):
"""Return a string representation for `func`."""
if isinstance(func, string_types):
if isinstance(func, str):
return func
if isinstance(func, numbers.Number):
return str(func)
Expand All @@ -249,7 +236,7 @@ def _convert(obj, attributes, format_references):
val = getattr(obj, key, False)
if not val:
continue
if isinstance(val, string_types):
if isinstance(val, str):
definition[key] = val
elif val is True:
definition[key] = True
Expand Down
28 changes: 8 additions & 20 deletions transitions/extensions/nesting.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,11 @@

from collections import OrderedDict
import copy
from enum import Enum, EnumMeta
from functools import partial, reduce
import inspect
import logging

try:
# Enums are supported for Python 3.4+ and Python 2.7 with enum34 package installed
from enum import Enum, EnumMeta
except ImportError: # pragma: no cover
# If enum is not available, create dummy classes for type checks
class Enum: # type: ignore
"""This is just an Enum stub for Python 2 and Python 3.3 and before without Enum support."""

class EnumMeta: # type: ignore
"""This is just an EnumMeta stub for Python 2 and Python 3.3 and before without Enum support."""

from six import string_types

from ..core import State, Machine, Transition, Event, listify, MachineError, EventData

_LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -414,7 +402,7 @@ def __init__(self, model=Machine.self_literal, states=None, initial='initial', t
)

def __call__(self, to_scope=None):
if isinstance(to_scope, string_types):
if isinstance(to_scope, str):
state_name = to_scope.split(self.state_cls.separator)[0]
state = self.states[state_name]
to_scope = (state, state.states, state.events, self.prefix_path + [state_name])
Expand Down Expand Up @@ -448,7 +436,7 @@ def add_model(self, model, initial=None):
if hasattr(initial_name, 'name'):
initial_name = initial_name.name
# initial states set by add_model or machine might contain initial states themselves.
if isinstance(initial_name, string_types):
if isinstance(initial_name, str):
initial_states = self._resolve_initial(models, initial_name.split(self.state_cls.separator))
# when initial is set to a (parallel) state, we accept it as it is
else:
Expand Down Expand Up @@ -513,7 +501,7 @@ def add_states(self, states, on_enter=None, on_exit=None, ignore_invalid_trigger
state = {'name': state, 'children': state.value}
elif isinstance(state.value, dict):
state = dict(name=state, **state.value)
if isinstance(state, string_types):
if isinstance(state, str):
self._add_string_state(state, on_enter, on_exit, ignore, remap, **kwargs)
elif isinstance(state, Enum):
self._add_enum_state(state, on_enter, on_exit, ignore, remap, **kwargs)
Expand Down Expand Up @@ -640,7 +628,7 @@ def get_state(self, state, hint=None):
"""
if isinstance(state, Enum):
state = self._get_enum_path(state)
elif isinstance(state, string_types):
elif isinstance(state, str):
state = state.split(self.state_cls.separator)
if not hint:
state = copy.copy(state)
Expand Down Expand Up @@ -692,11 +680,11 @@ def get_transitions(self, trigger="", source="*", dest="*", delegate=False):
"""
with self():
source_path = [] if source == "*" \
else source.split(self.state_cls.separator) if isinstance(source, string_types) \
else source.split(self.state_cls.separator) if isinstance(source, str) \
else self._get_enum_path(source) if isinstance(source, Enum) \
else self._get_state_path(source)
dest_path = [] if dest == "*" \
else dest.split(self.state_cls.separator) if isinstance(dest, string_types) \
else dest.split(self.state_cls.separator) if isinstance(dest, str) \
else self._get_enum_path(dest) if isinstance(dest, Enum) \
else self._get_state_path(dest)
matches = self.get_nested_transitions(trigger, source_path, dest_path)
Expand Down Expand Up @@ -1166,7 +1154,7 @@ def _init_state(self, state):
self._init_state(substate)

def _recursive_initial(self, value):
if isinstance(value, string_types):
if isinstance(value, str):
path = value.split(self.state_cls.separator, 1)
if len(path) > 1:
state_name, suffix = path
Expand Down