# Copyright 2019 Katteli Inc.
# TestFlows.com Open-Source Software Testing Framework (http://testflows.com)
#
# 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.
import testflows._core.contrib.schema as config
from testflows._core.test import Module, Suite, Test, Step, NullStep
from testflows._core.test import (
    TestStep,
    TestCase,
    TestSuite,
    TestModule,
    TestBackground,
    TestOutline,
    TestSketch,
)
from testflows._core.test import Context, SharedContext
from testflows._core.test import (
    Feature,
    Background,
    Scenario,
    Example,
    Outline,
    Sketch,
    Combination,
)
from testflows._core.test import (
    Critical,
    Major,
    Minor,
    Check,
    Given,
    When,
    Then,
    And,
    But,
    By,
    Finally,
    Cleanup,
)
from testflows._core.test import TestFeature, TestScenario, TestCheck
from testflows._core.test import (
    loads,
    ordered,
    retry,
    retries,
    repeat,
    repeats,
    define,
    choose,
    either,
)
from testflows._core.has import has
from testflows._core.flags import Flags
from testflows._core.objects import (
    OK,
    XOK,
    Fail,
    XFail,
    Skip,
    Error,
    XError,
    Null,
    XNull,
)
from testflows._core.objects import (
    Name,
    Description,
    Uid,
    Tags,
    Args,
    Setup,
    Parallel,
    Executor,
)
from testflows._core.objects import (
    XFails,
    XFlags,
    XArgs,
    Repeats,
    Repeat,
    Retries,
    Retry,
    Onlys,
    Skips,
)
from testflows._core.objects import OnlyTags, SkipTags, Maps
from testflows._core.objects import (
    FFails,
    Skipped,
    Failed,
    XFailed,
    XErrored,
    Okayed,
    XOkayed,
)
from testflows._core.objects import (
    Attributes,
    Requirements,
    Specifications,
    Examples,
    ArgumentParser,
    Timeouts,
)
from testflows._core.objects import (
    Node,
    Tag,
    Argument,
    Attribute,
    Requirement,
    Specification,
    Metric,
    Value,
    Ticket,
    Timeout,
)
from testflows._core.objects import Secret, RSASecret
from testflows._core.baseobject import Table
from testflows._core.filters import The
from testflows._core.funcs import load, append_path, cleanup
from testflows._core.funcs import main, args, private_key
from testflows._core.funcs import metric, ticket, value, note, debug, trace, text
from testflows._core.funcs import attribute, requirement, tag
from testflows._core.funcs import input, current_time
from testflows._core.funcs import message, exception, ok, fail, skip, err
from testflows._core.funcs import (
    result,
    null,
    xok,
    xfail,
    xerr,
    xnull,
    pause,
    getsattr,
    always,
    Timer,
    timer,
)
from testflows._core.funcs import (
    current_dir,
    current_module,
    load_module,
    load_submodules,
)
from testflows._core.funcs import aslice, chunks
from testflows._core.flags import TE, UT, SKIP, EOK, EFAIL, EERROR, ESKIP
from testflows._core.flags import XOK, XFAIL, XERROR, XNULL
from testflows._core.flags import FAIL_NOT_COUNTED, ERROR_NOT_COUNTED, NULL_NOT_COUNTED
from testflows._core.flags import (
    PAUSE,
    PAUSE_BEFORE,
    PAUSE_AFTER,
    REPORT,
    DOCUMENT,
    MANUAL,
    AUTO,
)
from testflows._core.flags import MANDATORY, CLEAR, NOT_REPEATABLE
from testflows._core.flags import EANY, ERESULT, XRESULT
from testflows._core.flags import PARALLEL, NO_PARALLEL
from testflows._core import __author__, __version__, __license__
from testflows._core.parallel import join, top, current, previous
from testflows._core.parallel.executor.thread import (
    ThreadPoolExecutor as Pool,
    ThreadPoolExecutor as ThreadPool,
    SharedThreadPoolExecutor as SharedThreadPool,
)
from testflows._core.parallel.executor.asyncio import (
    AsyncPoolExecutor as AsyncPool,
    SharedAsyncPoolExecutor as SharedAsyncPool,
)
from testflows._core.parallel.executor.process import (
    ProcessPoolExecutor as ProcessPool,
    SharedProcessPoolExecutor as SharedProcessPool,
    process_service,
)

import testflows.core.parallel as parallel
import testflows.core.objects as objects
import testflows.core.name as name

import testflows._core.utils as utils
import testflows._core.contrib.rsa as rsa
