def move_ansi_enabled(migrator): migrate.migrate(migrator.add_column("certificate", "ansi_enabled", BooleanField(default=False))) for user in User.select(): for cert in user.certificates: cert.ansi_enabled = user.ansi_enabled cert.save()
def test_user_password(): user = user_factory() assert not user.check_password("foobar") user.set_password("foobar") user.save() user = User.get_by_id(user.id) assert not user.check_password("fizzbuzz") assert user.check_password("foobar")
def migrate_certificates(migrator): users = list(User.select()) active_users = {} for user in users: active_users.setdefault(user.username, user) watered_at = active_users[user.username].plant.watered_at if user.plant.watered_at > watered_at: active_users[user.username] = user for user in users: active_user = active_users[user.username] Certificate.create( user=active_user, authorised=not user.user_id.endswith("="), fingerprint=user.user_id, cn=user.username, ) if user == active_user: user.user_id = gen_user_id() user.save() else: user.delete_instance()
def add_santa(migrator): User.create(username="******")
def add_item_fertilizer(migrator): for user in User.select(): ItemSlot.get_or_create( user=user, item_id=items.fertilizer.item_id, defaults={"quantity": 5} )
def add_item_paperclip(migrator): for user in User.select(): ItemSlot.get_or_create(user=user, item_id=items.paperclip.item_id, defaults={"quantity": 1})
def test_user_initialize(): username = gen_id() user = User.initialize(username) assert user.username == username assert user.get_item_quantity(items.paperclip) == 1 assert user.inbox.count() == 1
def test_user_login(): user = user_factory() cert = certificate_factory(user=user) assert User.login("invalid_fingerprint") is None assert User.login(cert.fingerprint) == cert
def user_factory(**kwargs): kwargs.setdefault("username", f"username_{gen_id()}") return User.create(**kwargs)
import argparse import typing from astrobotany import items, settings from astrobotany.models import Inbox, User, init_db parser = argparse.ArgumentParser() parser.add_argument("filename") parser.add_argument("user_from") parser.add_argument("--item") parser.add_argument("--db", default=settings.db) args = parser.parse_args() init_db(args.db) user_from = User.select().where(User.username == args.user_from) users = User.select() subject, body = Inbox.load_mail_file(args.filename) item_id: typing.Optional[int] if args.item: item = items.search(args.item) if not item: raise ValueError(f"Item not found: {args.item}") item_id = item.item_id else: item_id = None for user in users:
from astrobotany import init_db from astrobotany.models import Plant, User parser = argparse.ArgumentParser() parser.add_argument("count", type=int) parser.add_argument("--db-file", default="astrobotany.sqlite") args = parser.parse_args() fake = faker.Faker() init_db(args.db_file) for _ in range(args.count): age = random.randrange(int(timedelta(days=50).total_seconds())) user = User.create( user_id="".join(random.choices("0123456789ABCDEF", k=16)), username=fake.name().lower(), ) plant = Plant( user=user, user_active=user, score=random.randrange(age // 2, age), created_at=datetime.now() - timedelta(seconds=age), watered_at=datetime.now() - timedelta(seconds=random.randrange(2 * 24 * 60 * 60)), ) plant.refresh() plant.save() print(f"Generated {user.username}'s {plant.description}")