async def logs_page(request): """Show Nginx access.log""" access_logs = [] known_user_agents = { "GoogleStackdriverMonitoring-UptimeChecks(https://cloud.google.com/monitoring)", } known_ips = { SERVER_IP, (request.headers.get("x-forwarded-for") or "").split(",")[0], } known_referees = set((get_env_var("KNOWN_REFEREES") or "").split(",")) async with aiofiles.open( get_env_var("ACCESS_LOG"), "r", encoding="ISO-8859-1" ) as f: async for line in f: line = json.loads(line) if ( line[2] == "GET" and line[4] == "200" and any( ( line[1] in known_ips, line[7] in known_referees, line[8] in known_user_agents, ) ) ): continue # skip this line[0] = datetime.strptime(line[0], "%d/%b/%Y:%H:%M:%S %z") line[4] = int(line[4]) access_logs.append(line) return await jinja.render_async( "access_log.html", request, logs=access_logs, known_ips=known_ips, bad_user_agents={"msnbot", "scrapbot", "Go-http-client"}, )
async def update_requirements(repo_name: str, packages: set[str] = None) -> None: """Update requirements for the given repository.""" folder_name = get_env_var("REPO_PREFIX") + (repo_name.replace( "%20", " ").lower().replace("-", "_").replace(" ", "_").replace( "/", "").replace(".", "")) await update_requirements_txt(packages, folder_name) update_remote(folder_name)
async def check_black_status(site: str) -> bool: """Check if code is black.""" folder = get_env_var("REPO_PREFIX") + get_process_name(site) proc = await asyncio.create_subprocess_shell( f'cd {folder} && black --check . --exclude "(migrations|alembic|node_modules)"', stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) _, stderr = await proc.communicate() return "All done!" in stderr.decode()
async def check_supervisor_status(process: str) -> str: """Check supervisor status of given process.""" proc = await asyncio.create_subprocess_shell( get_env_var("SUPERVISOR_CMD").format(process=quote(process)), stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, ) stdout, stderr = await proc.communicate() if stderr: logger.warning("Error getting supervisor status: " + stderr.decode()) return stdout.decode().strip()
async def get_requirements_statuses( title: str, ) -> dict[str, tuple[str, Optional[str], Optional[str]]]: folder = get_env_var("REPO_PREFIX") + get_process_name(title) requirements_status, requirements_dev_status = await asyncio.gather( *[ get_requirements_status(folder, "requirements.txt", True), get_requirements_status(folder, "requirements-dev.txt", True), ], return_exceptions=True, ) requirements_statuses = {} if requirements_status and not issubclass(type(requirements_status), Exception): requirements_statuses["requirements.txt"] = requirements_status if requirements_dev_status and not issubclass( type(requirements_dev_status), Exception): requirements_statuses["requirements-dev.txt"] = requirements_dev_status return requirements_statuses
from sqlalchemy.ext.asyncio import create_async_engine import pytest # Set test DB. if os.environ.get("ADMIN_DB_NAME") is None: os.environ["ADMIN_DB_NAME"] = "test_admin" from admin.models import Base, hash_password, User from admin.views import app from admin.settings import get_env_var test_username = "******" test_password = os.urandom(16).hex() app.config["WTF_CSRF_ENABLED"] = False DB_URL = "postgresql+asyncpg://{}:{}@{}:5432/{}".format( get_env_var("DB_USER", "admin_admin"), get_env_var("DB_PASSWORD", "admin_admin_pasWQ27$"), get_env_var("DB_HOST", "127.0.0.1"), get_env_var("DB_NAME", "test_admin"), ) def _test_page(url: str) -> None: """Test given page that should be not accessible for anonymous.""" # Anonymous user - redirect to login page. request, response = app.test_client.get(url, allow_redirects=False) assert response.status == 302 assert response.headers["Location"] == "/login" assert request.ctx.session.get("user") is None