Esempio n. 1
0
def cli():
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers(title="subcommands")
    parser.add_argument(
        "-c",
        "--config",
        required=True,
        help="Tortoise-orm config dict import path,like settings.TORTOISE_ORM.",
    )
    parser.add_argument(
        "--version",
        "-V",
        action="version",
        version=f"fastapi-admin version, {version()}",
        help="show the version",
    )
    parser_register_permissions = subparsers.add_parser("register_permissions")
    parser_register_permissions.add_argument(
        "--clean",
        required=False,
        action="store_true",
        help="Clean up old permissions then renew.")
    parser_register_permissions.set_defaults(func=register_permissions)

    parser_createsuperuser = subparsers.add_parser("createsuperuser")
    parser_createsuperuser.add_argument(
        "-u",
        "--user",
        required=True,
        help="User model name, like User or Admin.")
    parser_createsuperuser.set_defaults(func=createsuperuser)

    parse_args = parser.parse_args()
    run_async(parse_args.func(parse_args))
Esempio n. 2
0
def create_superuser(
        username: str = typer.Option(..., prompt=True),
        email: str = typer.Option(..., prompt=True),
        password: str = typer.Option(...,
                                     prompt=True,
                                     confirmation_prompt=True,
                                     hide_input=True),
        is_test: bool = typer.Option(..., prompt=True),
) -> None:
    """Create super user.

    Args:
        username: prompt user to enter username
        email: prompt user to enter email
        password: prompt user to enter password with confirmation
        is_test: checking if the creation is test env or not
    """
    run_async(
        run_tortoise(
            data={
                "username": username,
                "password": password,
                "email": email,
                "is_superuser": True,
                "is_active": True,
            },
            db_url="sqlite://:memory:" if is_test else settings.DATABASE_URL,
        ))
Esempio n. 3
0
def create_database(_: argparse.Namespace) -> None:
    """
    sets up and creates the database for the Discord.Client.

    :return: None
    """
    run_async(_create_database())
Esempio n. 4
0
def cli():
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers(title='subcommands')
    parser.add_argument(
        '-c',
        '--config',
        required=True,
        help='Tortoise-orm config dict import path,like settings.TORTOISE_ORM.'
    )

    parser_register_permissions = subparsers.add_parser('register_permissions')
    parser_register_permissions.add_argument(
        '--clean',
        required=False,
        action='store_true',
        help='Clean up old permissions then renew.')
    parser_register_permissions.set_defaults(func=register_permissions)

    parser_createsuperuser = subparsers.add_parser('createsuperuser')
    parser_createsuperuser.add_argument(
        '--user-model',
        required=True,
        help='User model import path,like examples.models.User.')
    parser_createsuperuser.set_defaults(func=createsuperuser)

    parse_args = parser.parse_args()
    run_async(parse_args.func(parse_args))
Esempio n. 5
0
 def test_run_async_raised(self):
     self.assertEqual(connections._get_storage(), {})
     self.assertEqual(self.somevalue, 1)
     with self.assertRaises(Exception):
         run_async(self.init_raise())
     self.assertEqual(connections._get_storage(), {})
     self.assertEqual(self.somevalue, 3)
Esempio n. 6
0
def createuser():

    username = typer.prompt("Username")

    password = typer.prompt("Password")

    email = typer.prompt("Email")

    is_superuser = typer.confirm(f"is {username} super user?")

    is_staff = typer.confirm(f"is {username} staff user?")

    is_active = typer.confirm(f"is {username} active user?")

    run_async(
        run(
            data={
                "username": username,
                "password": password,
                "email": email,
                "full_name": " ",
                "is_superuser": is_superuser,
                "is_staff": is_staff,
                "is_active": is_active,
                "phone_number": "0923275406",
            }
        )
    )
Esempio n. 7
0
 def test_run_async_raised(self):
     self.assertEqual(Tortoise._connections, {})
     self.assertEqual(self.somevalue, 1)
     with self.assertRaises(Exception):
         run_async(self.init_raise())
     self.assertEqual(Tortoise._connections, {})
     self.assertEqual(self.somevalue, 3)
Esempio n. 8
0
async def addusertobase():

        await Tortoise.init(db_url="sqlte://DataBase.db", modules={"models": ["__main__"]})
        await Tortoise.generate_schemas()
        a = event = await Event.create(name="Test")
        await Event.filter(id=event.id).update(name="Updated name")
        await Event(name="Test 2").save()
        print(a)
        run_async(addusertobase())
Esempio n. 9
0
def test_app_with_db() -> Generator:
    app = create_application()
    app.dependency_overrides[get_settings] = get_settings_override
    initializer(db_url=os.environ.get("DATABASE_TEST_URL"),
                modules=["app.models.tortoise.users"])
    run_async(add_users())

    with TestClient(app) as test_client:
        yield test_client

    finalizer()
Esempio n. 10
0
def build_app(loop=None):
    app = web.Application(loop=loop, middlewares=get_middlewares())
    run_async(start_database())

    app.on_startup.append(start_plugins)
    app.on_cleanup.append(stop_plugins)

    setup_swagger(
        app,
        swagger_url='/docs',
        swagger_from_file="docs/swagger.yaml"
    )

    register_routes(app)

    return app
Esempio n. 11
0
def poller():
    r = requests.get(POLLED_URL)
    if r.status_code == requests.codes.ok:
        data = r.json()
        logger.info("Fetch from external API successful")
        normalized_data = []
        normalized_data.append(data["Global"])
        normalized_data[0]["Country"] = "Global"
        normalized_data[0]["CountryCode"] = "GLB"
        interested_keys = {}
        for key in normalized_data[0].keys():
            interested_keys[key] = key
        # Changing the column name from reserved postgresql keyword Date
        interested_keys["Date"] = "FetchedDate"
        # Converting datetime to a format the tortoise-orm accepts
        normalized_data[0]["FetchedDate"] = datetime.strptime(
            data["Date"], "%Y-%m-%dT%H:%M:%SZ")
        # Calculating active cases
        normalized_data[0]["TotalActive"] = normalized_data[0][
            "TotalConfirmed"] - (normalized_data[0]["TotalDeaths"] +
                                 normalized_data[0]["TotalRecovered"])
        for country in data["Countries"]:
            new_item = {}
            for key, value in interested_keys.items():
                new_item[value] = country[key]
            new_item["TotalActive"] = new_item["TotalConfirmed"] - (
                new_item["TotalDeaths"] + new_item["TotalRecovered"])
            new_item["FetchedDate"] = datetime.strptime(
                new_item["FetchedDate"], "%Y-%m-%dT%H:%M:%SZ")
            normalized_data.append(new_item)

        normalized_result = map(lambda item: Covid19Cases(**item),
                                normalized_data)
        run_async(
            save_to_db(normalized_result, normalized_data[0]["FetchedDate"]))
    else:
        logger.info("Fetch from external API failed")
Esempio n. 12
0
def client() -> Generator:
    try:
        # create db and create table and create data
        run_async(create_database())

        # set token into environ
        run_async(generate_token())
        with TestClient(create_app()) as test_client:
            yield test_client
    finally:
        # drop db
        run_async(delete_database())
Esempio n. 13
0
from models import init

from tortoise import Tortoise, run_async


async def create_db():
    # Generate the schema
    await init()
    await Tortoise.generate_schemas()


run_async(create_db())
Esempio n. 14
0
def init():
    run_async(main())
Esempio n. 15
0
    print(Fore.GREEN + ret)


async def init_db(args):
    await Tortoise.init(config=settings.TORTOISE_ORM)
    if args.test:
        sql = get_schema_sql(Tortoise.get_connection('default'), safe=False)
        print(sql)
    else:
        await Tortoise.generate_schemas()


if __name__ == '__main__':
    subparsers = parser.add_subparsers(title='subcommands')
    parser_makemigrations = subparsers.add_parser('makemigrations')
    parser_makemigrations.add_argument('-n', '--name', required=True)
    parser_makemigrations.set_defaults(func=makemigrations)

    parser_migrate = subparsers.add_parser('migrate')
    parser_migrate.set_defaults(func=migrate)

    parser_migrate = subparsers.add_parser('rollback')
    parser_migrate.set_defaults(func=rollback)

    parser_init_db = subparsers.add_parser('initdb')
    parser_init_db.add_argument('--test', required=False, action='store_true', help='Print sql without execute.')
    parser_init_db.set_defaults(func=init_db)

    parse_args = parser.parse_args()
    run_async(parse_args.func(parse_args))
Esempio n. 16
0
class HistoryIngester(Consumer):
    async def initialize(self):
        logger.remove()
        logger.add(sys.stderr, level="DEBUG")
        logger.info(f"Initializing {str(self)}")
        await Tortoise.init(db_url=DB_URL,
                            modules={"models": ["historedge_backend.models"]})

    async def finalize(self):
        logger.info(f"Finalizing {str(self)}")

    async def handle_event(self, event: Dict[bytes, bytes]):
        try:
            history_dump = HistoryDumpReceived.deserialize(event)
            logger.info(
                "History dump received {dump} n_items:{n_items}",
                dump=history_dump.id,
                n_items=len(history_dump.items),
            )
        except ValidationError as e:
            if event and "opening" not in event:
                logger.exception(str(e))
        else:
            await history_dump.save()


if __name__ == "__main__":
    ingester = HistoryIngester.create("history_chunks", "group", REDIS_HOST,
                                      REDIS_PORT)
    run_async(ingester.run())
Esempio n. 17
0
def add_user(name, email, password):
    run_async(_add_user(name=name, password=password, email=email))
Esempio n. 18
0
    keys = [
        ('id', 0),
        ('title', ''),
        ('url', ''),
        ('score', 0),
        ('by', ''),
        ('time', 0),
    ]

    await Tortoise.init(db_url=db_url, modules=modules)
    await models.Story.all().delete()

    for item in p.iterdir():
        if not item.suffix == '.json':
            continue

        with item.open() as f:
            story = json.load(f)
        record = {key: story.get(key, default) for (key, default) in keys}
        # try:
        await models.Story.create(**record)
        # except...

    await Tortoise.close_connections()

if __name__ == '__main__':
    db_url = 'sqlite://db.sqlite3'
    modules = {'models': ['lib.models']}
    data = './data'
    run_async(insert_all(db_url, modules, data))
    # print(entry_date, data['date'])
    entry = CoffeeEntry(user=user,
                        text=data['text'],
                        channel_id=data['channel_id'],
                        channel_name=data['channel_name'],
                        date=int(entry_date.timestamp() * 1000))
    await entry.save()


async def import_entries():
    async with aiofiles.open('log.json', mode='r',
                             encoding='utf8') as log_file:
        async for line in log_file:
            await make_entry(json.loads(line.strip()))


async def import_old_data():
    await init_db()

    # create users
    print('IMPORTING USERS')
    await import_users()

    # create entries, connecting them to users
    print('IMPORTING ENTRIES')
    await import_entries()


if __name__ == '__main__':
    run_async(import_old_data())
Esempio n. 20
0
from tortoise.models import Model
from tortoise import fields
from tortoise import run_async

from database import init
from enums import Mood


class MoodModel(Model):
    mood = fields.CharField(
        max_length=255,
        null=False,
        description=f"Mood being recorded: {[m.value for m in Mood]}")

    ts = fields.IntField(null=False, description=f"Epoch time")

    def __str__(self):
        return f"Mood: {self.mood} Time: {self.ts}"


if __name__ == "__main__":
    run_async(init())
Esempio n. 21
0
 def test_run_async(self):
     self.assertEqual(Tortoise._connections, {})
     self.assertEqual(self.somevalue, 1)
     run_async(self.init())
     self.assertEqual(Tortoise._connections, {})
     self.assertEqual(self.somevalue, 2)
Esempio n. 22
0
                PageVisit.filter(is_processed=False)
                .prefetch_related("page")
                .order_by("visited_at")
                .limit(SCRAPER_DISTRIBUTOR_CHUNK_LENGTH)
                .offset(offset)
                .values(id="page__id", url="page__url")
            )

            if page_visits:
                pages = {
                    "id": uuid4(),
                    "items": [
                        {"id": str(page["id"]), "url": page["url"]}
                        for page in page_visits
                    ],
                }

                await self.redis.xadd(
                    self.publish_stream, {"data": orjson.dumps(pages)}
                )
                logger.info(
                    "Batch of pages sent {batch} n_items:{n_items}",
                    batch=pages["id"],
                    n_items=len(pages["items"]),
                )


if __name__ == "__main__":
    distributor = ScraperDistributor.create("pages_to_scrape", REDIS_HOST, REDIS_PORT)
    run_async(distributor.run())
Esempio n. 23
0
def initdb():
    run_async(init())
    click.echo('Init Finished!')
Esempio n. 24
0
log = logging.getLogger("uvicorn")


def init_db(app: FastAPI) -> None:

    register_tortoise(
        app,
        db_url=os.environ.get("DATABASE_URL"),
        modules={"models": ["app.models.tortoiseORM"]},
        generate_schemas=False,
        add_exception_handlers=False,
    )
    Tortoise.init_models(['app.models.tortoiseORM'], 'models')

async def generate_schema() -> None:
    log.info("Initializing Tortoise...")

    await Tortoise.init(
        db_url=os.environ.get("DATABASE_URL"),
        modules={"models": ["app.models.tortoiseORM"]},
    )
    log.info("Generating database schema via Tortoise...")
    await Tortoise.generate_schemas()
    await Tortoise.close_connections()


# run_async(generate_schema())
if __name__ == "__main__":
    run_async(generate_schema())
Esempio n. 25
0
def init_db():
    run_async(_init_db(_create_db=True))
    click.echo('数据库初始化成功!')
Esempio n. 26
0
from discord import Embed, Intents
from discord.ext import commands

import config
from exceptions.exceptions import EntityExistsException, EntityNotFoundException
from model.models import *
from tortoise import run_async

run_async(init_db())

allowedRoles = [
    'tBTC Contributors (Team)', 'Admin', 'relay admin',
    ':european_castle: keep team', ':european_castle: keep admins',
    'NuCypher Admin'
]

intents = Intents.default()
intents.members = True
bot = commands.Bot(command_prefix="!relay.",
                   help_command=None,
                   intents=intents)


@commands.has_any_role(*allowedRoles)
@bot.command(name='help')
async def relay_help(ctx):
    """
    Function displays list of all available commands for Bridge-Bot
    :param ctx: Discord Context Object
    """
    widget = Embed(description="Available commands for Bridge-Bot",
Esempio n. 27
0
                title = i.split(':')[1].strip().replace('"', '')
            elif 'date:' in i:
                date = i.split(':')[1].strip()
            elif 'tags' in i:
                i = i.split(':')[1].strip()[1:-1] if '[' in i else i.split(
                    ':')[1]  # noqa
                tags = filter(None, map(lambda x: x.strip(), i.split(',')))
        content = ''.join(f.readlines())

        try:
            await Post.create(title=title,
                              content=content,
                              tags=tags,
                              author_id=args.uid,
                              slug='',
                              summary='',
                              status=Post.STATUS_ONLINE,
                              created_at=date)
        except IntegrityError:
            ...


async def main():
    await init_db()
    for f in files:
        await write_post(f)


if __name__ == '__main__':
    run_async(main())
            "models": ["app.models.tortoise", "aerich.models"],
            "default_connection": "default",
        },
    },
}


def init_db(app: FastAPI) -> None:
    register_tortoise(
        app,
        config=TORTOISE_ORM,
        add_exception_handlers=True,
        generate_schemas=os.environ.get("GENERATE_SCHEMAS", default=False),
    )


async def generate_test_schema() -> None:
    log.info("Initializing Tortoise...")

    await Tortoise.init(
        db_url=os.environ.get("DATABASE_TEST_URL"),
        modules={"models": ["models.tortoise"]},
    )
    log.info("Generating database schema via Tortoise...")
    await Tortoise.generate_schemas()
    await Tortoise.close_connections()


if __name__ == "__main__":
    run_async(generate_test_schema())
Esempio n. 29
0
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=100)
    #: The date-time the Tournament record was created at
    created_at = fields.DatetimeField(auto_now_add=True)


Tournament_Pydantic = pydantic_model_creator(Tournament)
# Print JSON-schema
print(Tournament_Pydantic.schema_json(indent=4))


async def run():
    await Tortoise.init(db_url="sqlite://:memory:",
                        modules={"models": ["__main__"]})
    await Tortoise.generate_schemas()

    # Create object
    tournament = await Tournament.create(name="New Tournament")
    # Serialise it
    tourpy = await Tournament_Pydantic.from_tortoise_orm(tournament)

    # As Python dict with Python objects (e.g. datetime)
    print(tourpy.dict())
    # As serialised JSON (e.g. datetime is ISO8601 string representation)
    print(tourpy.json(indent=4))


if __name__ == "__main__":
    run_async(run())
Esempio n. 30
0
    #  also specify the app name of "models"
    #  which contain models from "app.models"
    await Tortoise.init(
        db_url=db_url,
        modules={'models': ['models']}
    )


async def create_db():
    # Generate the schema
    await init()
    await Tortoise.generate_schemas()


async def run_benchmarks():
    await create_db()
    await test_a.runtest(loopstr)
    await test_b.runtest(loopstr)
    await test_c.runtest(loopstr)
    await test_d.runtest(loopstr)
    await test_e.runtest(loopstr)
    await test_f.runtest(loopstr)
    await test_g.runtest(loopstr)
    await test_h.runtest(loopstr)
    await test_i.runtest(loopstr)
    await test_j.runtest(loopstr)
    await test_k.runtest(loopstr)


run_async(run_benchmarks())