Mods
This commit is contained in:
parent
69acfd0389
commit
a14e36e932
42
ants.py
42
ants.py
|
@ -1,11 +1,13 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
import utils
|
from utils import Utils
|
||||||
from database import Database
|
from database import Database
|
||||||
|
|
||||||
|
|
||||||
class Ant:
|
class Ant:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
now = utils.now()
|
now = Utils.now()
|
||||||
self.id: int
|
self.id: int
|
||||||
self.created = now
|
self.created = now
|
||||||
self.updated = now
|
self.updated = now
|
||||||
|
@ -14,26 +16,27 @@ class Ant:
|
||||||
self.hits = 0
|
self.hits = 0
|
||||||
self.triumph = 0
|
self.triumph = 0
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self) -> str:
|
||||||
return self.name or "Nameless"
|
return self.name or "Nameless"
|
||||||
|
|
||||||
def get_age(self):
|
def get_age(self) -> str:
|
||||||
now = utils.now()
|
now = Utils.now()
|
||||||
return utils.time_ago(self.created, now)
|
return Utils.time_ago(self.created, now)
|
||||||
|
|
||||||
|
def describe(self) -> None:
|
||||||
|
Utils.print(f"Name is {self.get_name()}")
|
||||||
|
Utils.print(f"It hatched {self.get_age()}")
|
||||||
|
|
||||||
def describe(self):
|
|
||||||
print(f"Name is {self.get_name()}")
|
|
||||||
print(f"It hatched {self.get_age()}")
|
|
||||||
|
|
||||||
class Ants:
|
class Ants:
|
||||||
ants: list[Ant] = []
|
ants: ClassVar[list[Ant]] = []
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_all() -> None:
|
def get_all() -> None:
|
||||||
Database.cursor.execute("SELECT id, created, updated, name, status, hits, triumph FROM ants")
|
Database.cursor.execute(
|
||||||
|
"SELECT id, created, updated, name, status, hits, triumph FROM ants"
|
||||||
|
)
|
||||||
rows = Database.cursor.fetchall()
|
rows = Database.cursor.fetchall()
|
||||||
ants = []
|
|
||||||
|
|
||||||
for row in rows:
|
for row in rows:
|
||||||
ant = Ant()
|
ant = Ant()
|
||||||
|
@ -44,14 +47,11 @@ class Ants:
|
||||||
ant.status = row[4]
|
ant.status = row[4]
|
||||||
ant.hits = row[5]
|
ant.hits = row[5]
|
||||||
ant.triumph = row[6]
|
ant.triumph = row[6]
|
||||||
ants.append(ant)
|
Ants.ants.append(ant)
|
||||||
|
|
||||||
Database.connection.commit()
|
|
||||||
return ants
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def hatch() -> None:
|
def hatch() -> None:
|
||||||
now = utils.now()
|
now = Utils.now()
|
||||||
|
|
||||||
Database.cursor.execute(
|
Database.cursor.execute(
|
||||||
"INSERT INTO ants (created, updated) VALUES (?, ?)",
|
"INSERT INTO ants (created, updated) VALUES (?, ?)",
|
||||||
|
@ -65,4 +65,8 @@ class Ants:
|
||||||
ant = Ant()
|
ant = Ant()
|
||||||
ant.id = row[0]
|
ant.id = row[0]
|
||||||
|
|
||||||
print(f"Ant hatched: {ant.id}")
|
Utils.print(f"Ant hatched: {ant.id}")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def terminate() -> None:
|
||||||
|
pass
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
class Config:
|
||||||
|
title = "Cromulant"
|
||||||
|
width = 800
|
||||||
|
height = 600
|
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
class Database:
|
class Database:
|
||||||
connection: sqlite3.Connection
|
connection: sqlite3.Connection
|
||||||
cursor: sqlite3.Cursor
|
cursor: sqlite3.Cursor
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
[lint]
|
||||||
|
|
||||||
|
select = [
|
||||||
|
"T",
|
||||||
|
"Q",
|
||||||
|
"W",
|
||||||
|
"B",
|
||||||
|
"N",
|
||||||
|
"F",
|
||||||
|
"FA",
|
||||||
|
"RET",
|
||||||
|
"PTH",
|
||||||
|
"ERA",
|
||||||
|
"PLW",
|
||||||
|
"PERF",
|
||||||
|
"RUF",
|
||||||
|
"FLY",
|
||||||
|
"PT",
|
||||||
|
"PYI",
|
||||||
|
"PIE",
|
||||||
|
"ICN",
|
||||||
|
"UP",
|
||||||
|
"TRY",
|
||||||
|
"C4",
|
||||||
|
"E401",
|
||||||
|
"E713",
|
||||||
|
"E721",
|
||||||
|
"S101",
|
||||||
|
"S113",
|
||||||
|
"SIM103",
|
||||||
|
"SIM114",
|
||||||
|
"SIM118",
|
||||||
|
"SIM210",
|
||||||
|
"PLR5501",
|
||||||
|
"PLR1711",
|
||||||
|
]
|
||||||
|
|
||||||
|
exclude = [
|
||||||
|
"pyperclip.py",
|
||||||
|
"tests.py",
|
||||||
|
]
|
70
utils.py
70
utils.py
|
@ -1,49 +1,55 @@
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
def now() -> float:
|
class Utils:
|
||||||
return int(time.time())
|
@staticmethod
|
||||||
|
def now() -> float:
|
||||||
|
return int(time.time())
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def singular_or_plural(num: float, singular: str, plural: str) -> str:
|
||||||
|
if num == 1:
|
||||||
|
return singular
|
||||||
|
|
||||||
def singular_or_plural(num: float, singular: str, plural: str) -> str:
|
return plural
|
||||||
if num == 1:
|
|
||||||
return singular
|
|
||||||
|
|
||||||
return plural
|
@staticmethod
|
||||||
|
def time_ago(start_time: float, end_time: float) -> str:
|
||||||
|
diff = end_time - start_time
|
||||||
|
seconds = int(diff)
|
||||||
|
|
||||||
|
if seconds < 60:
|
||||||
|
word = Utils.singular_or_plural(seconds, "second", "seconds")
|
||||||
|
return f"{seconds} {word} ago"
|
||||||
|
|
||||||
def time_ago(start_time: float, end_time: float) -> str:
|
minutes = seconds // 60
|
||||||
diff = end_time - start_time
|
|
||||||
seconds = int(diff)
|
|
||||||
|
|
||||||
if seconds < 60:
|
if minutes < 60:
|
||||||
word = singular_or_plural(seconds, "second", "seconds")
|
word = Utils.singular_or_plural(minutes, "minute", "minutes")
|
||||||
return f"{seconds} {word} ago"
|
return f"{minutes} {word} ago"
|
||||||
|
|
||||||
minutes = seconds // 60
|
hours = minutes / 60
|
||||||
|
|
||||||
if minutes < 60:
|
if hours < 24:
|
||||||
word = singular_or_plural(minutes, "minute", "minutes")
|
word = Utils.singular_or_plural(hours, "hour", "hours")
|
||||||
return f"{minutes} {word} ago"
|
return f"{hours:.1f} {word} ago"
|
||||||
|
|
||||||
hours = minutes / 60
|
days = hours / 24
|
||||||
|
|
||||||
if hours < 24:
|
if days < 30:
|
||||||
word = singular_or_plural(hours, "hour", "hours")
|
word = Utils.singular_or_plural(days, "day", "days")
|
||||||
return f"{hours:.1f} {word} ago"
|
return f"{days:.1f} {word} ago"
|
||||||
|
|
||||||
days = hours / 24
|
months = days / 30
|
||||||
|
|
||||||
if days < 30:
|
if months < 12:
|
||||||
word = singular_or_plural(days, "day", "days")
|
word = Utils.singular_or_plural(months, "month", "months")
|
||||||
return f"{days:.1f} {word} ago"
|
return f"{months:.1f} {word} ago"
|
||||||
|
|
||||||
months = days / 30
|
years = months / 12
|
||||||
|
word = Utils.singular_or_plural(years, "year", "years")
|
||||||
|
return f"{years:.1f} {word} ago"
|
||||||
|
|
||||||
if months < 12:
|
@staticmethod
|
||||||
word = singular_or_plural(months, "month", "months")
|
def print(text: str) -> None:
|
||||||
return f"{months:.1f} {word} ago"
|
print(text) # noqa: T201
|
||||||
|
|
||||||
years = months / 12
|
|
||||||
word = singular_or_plural(years, "year", "years")
|
|
||||||
return f"{years:.1f} {word} ago"
|
|
||||||
|
|
24
window.py
24
window.py
|
@ -1,25 +1,30 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QHBoxLayout, QWidget
|
from PySide6.QtWidgets import QApplication # type: ignore
|
||||||
from PySide6.QtWidgets import QGraphicsView, QGraphicsScene, QVBoxLayout
|
from PySide6.QtWidgets import QMainWindow
|
||||||
|
from PySide6.QtWidgets import QWidget
|
||||||
|
from PySide6.QtWidgets import QGraphicsView
|
||||||
|
from PySide6.QtWidgets import QGraphicsScene
|
||||||
|
from PySide6.QtWidgets import QVBoxLayout
|
||||||
|
from PySide6.QtWidgets import QPushButton
|
||||||
|
from PySide6.QtWidgets import QHBoxLayout
|
||||||
|
|
||||||
|
from config import Config
|
||||||
from ants import Ants
|
from ants import Ants
|
||||||
|
|
||||||
|
|
||||||
class Window:
|
class Window:
|
||||||
title = "Cromulant"
|
|
||||||
width = 800
|
|
||||||
height = 600
|
|
||||||
app: QApplication
|
app: QApplication
|
||||||
window: QMainWindow
|
window: QMainWindow
|
||||||
root: QWidget
|
root: QWidget
|
||||||
|
view: QGraphicsView
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def make() -> None:
|
def make() -> None:
|
||||||
Window.app = QApplication([])
|
Window.app = QApplication([])
|
||||||
Window.window = QMainWindow()
|
Window.window = QMainWindow()
|
||||||
Window.window.setWindowTitle(Window.title)
|
Window.window.setWindowTitle(Config.title)
|
||||||
Window.window.resize(Window.width, Window.height)
|
Window.window.resize(Config.width, Config.height)
|
||||||
Window.root = QWidget()
|
Window.root = QWidget()
|
||||||
Window.window.setCentralWidget(Window.root)
|
Window.window.setCentralWidget(Window.root)
|
||||||
|
|
||||||
|
@ -40,9 +45,8 @@ class Window:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_view() -> None:
|
def add_view() -> None:
|
||||||
Window.view = QGraphicsView()
|
Window.view = QGraphicsView()
|
||||||
Window.scene = QGraphicsScene()
|
scene = QGraphicsScene()
|
||||||
Window.view.setScene(Window.scene)
|
Window.view.setScene(scene)
|
||||||
|
|
||||||
layout = QVBoxLayout(Window.root)
|
layout = QVBoxLayout(Window.root)
|
||||||
layout.addWidget(Window.view)
|
layout.addWidget(Window.view)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue