################################################################
#                 WARNING! THIS FILE IS EVIL.                  #
################################################################
# Previously, this file had a series of                        #
#     from .alts import *                                      #
#     from .award import *                                     #
#     from .badges import *                                    #
# and so on in that fashion. That means that anywhere that     #
#     from files.classes import *                              #
# (and there were a lot of places like that) got anything      #
# was imported for any model imported. So if you, for example, #
# removed                                                      #
#     from secrets import token_hex                            #
# from files/classes/user.py, the registration page would      #
# break because files/routes/login.py did                      #
#     from files.classes import *                              #
# in order to get the token_hex function rather than           #
# importing it with something like                             #
#     from secrets import token_hex                            #
#                                                              #
# Anyway, not fixing that right now, but in order to           #
# what needed to be imported here such that                    #
#     from files.classes import *                              #
# still imported the same stuff as before I ran the following: #
#     $ find files/classes -type f -name '*.py' \              #
#         -exec grep import '{}' ';' \                         #
#         | grep 'import' \                                    #
#         | grep -v 'from [.]\|__init__\|from files.classes' \ #
#         | sed 's/^[^:]*://g' \                               #
#         | sort \                                             #
#         | uniq                                               #
# and then reordered the list such that import * did not stomp #
# over stuff that had been explicitly imported.                #
################################################################

# First the import * from places which don't go circular
from sqlalchemy import *

# Then everything except what's in files.*
import pyotp
import random
import re
import time
from copy import deepcopy
from datetime import datetime
from flask import g, render_template
from json import loads
from math import floor
from os import remove, path
from random import randint
from secrets import token_hex
from sqlalchemy.orm import aliased, deferred, relationship
from urllib.parse import urlencode, urlparse, parse_qs

# It is now safe to define the models
from .alts import Alt
from .award import AwardRelationship
from .badges import BadgeDef, Badge
from .chat_message import ChatMessage
from .clients import OauthApp, ClientAuth
from .comment import Comment
from .domains import BannedDomain
from .flags import Flag, CommentFlag
from .follows import Follow
from .marsey import Marsey
from .mod_logs import ModAction
from .notifications import Notification
from .saves import SaveRelationship, CommentSaveRelationship
from .submission import Submission
from .subscriptions import Subscription
from .user import User
from .userblock import UserBlock
from .usernotes import UserTag, UserNote
from .views import ViewerRelationship
from .votes import Vote, CommentVote
from .volunteer_janitor import VolunteerJanitorRecord
from .cron.tasks import RepeatableTask
from .cron.submission import ScheduledSubmissionTask
from .cron.pycallable import PythonCodeTask

# Then the import * from files.*
from files.helpers.config.const import *
from files.helpers.media import *
from files.helpers.lazy import lazy
from files.helpers.security import *

# Then the specific stuff we don't want stomped on
from files.classes.base import Base, CreatedBase
