mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
housekeep: centralize datetime generation
Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
7bcc8d7ce7
commit
7f6c23d4cb
41 changed files with 146 additions and 179 deletions
|
@ -1,6 +1,5 @@
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
|
@ -13,7 +12,7 @@ from starlette.requests import HTTPConnection
|
||||||
|
|
||||||
import aurweb.config
|
import aurweb.config
|
||||||
|
|
||||||
from aurweb import db, filters, l10n, util
|
from aurweb import db, filters, l10n, time, util
|
||||||
from aurweb.models import Session, User
|
from aurweb.models import Session, User
|
||||||
from aurweb.models.account_type import ACCOUNT_TYPE_ID
|
from aurweb.models.account_type import ACCOUNT_TYPE_ID
|
||||||
|
|
||||||
|
@ -110,7 +109,7 @@ class BasicAuthBackend(AuthenticationBackend):
|
||||||
"persistent_cookie_timeout")
|
"persistent_cookie_timeout")
|
||||||
|
|
||||||
# If no session with sid and a LastUpdateTS now or later exists.
|
# If no session with sid and a LastUpdateTS now or later exists.
|
||||||
now_ts = int(datetime.utcnow().timestamp())
|
now_ts = time.utcnow()
|
||||||
record = db.query(Session).filter(Session.SessionID == sid).first()
|
record = db.query(Session).filter(Session.SessionID == sid).first()
|
||||||
if not record:
|
if not record:
|
||||||
return unauthenticated
|
return unauthenticated
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
from sqlalchemy.orm import backref, relationship
|
from sqlalchemy.orm import backref, relationship
|
||||||
|
|
||||||
from aurweb import schema
|
from aurweb import schema, time
|
||||||
from aurweb.models.declarative import Base
|
from aurweb.models.declarative import Base
|
||||||
from aurweb.models.user import User as _User
|
from aurweb.models.user import User as _User
|
||||||
|
|
||||||
|
@ -43,7 +41,7 @@ class PackageBase(Base):
|
||||||
|
|
||||||
# If no SubmittedTS/ModifiedTS is provided on creation, set them
|
# If no SubmittedTS/ModifiedTS is provided on creation, set them
|
||||||
# here to the current utc timestamp.
|
# here to the current utc timestamp.
|
||||||
now = datetime.utcnow().timestamp()
|
now = time.utcnow()
|
||||||
if not self.SubmittedTS:
|
if not self.SubmittedTS:
|
||||||
self.SubmittedTS = now
|
self.SubmittedTS = now
|
||||||
if not self.ModifiedTS:
|
if not self.ModifiedTS:
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
from sqlalchemy.orm import backref, relationship
|
from sqlalchemy.orm import backref, relationship
|
||||||
|
|
||||||
from aurweb import schema
|
from aurweb import schema, time
|
||||||
from aurweb.models.declarative import Base
|
from aurweb.models.declarative import Base
|
||||||
from aurweb.models.user import User as _User
|
from aurweb.models.user import User as _User
|
||||||
|
|
||||||
|
@ -71,7 +69,7 @@ class TUVoteInfo(Base):
|
||||||
return attr
|
return attr
|
||||||
|
|
||||||
def is_running(self):
|
def is_running(self):
|
||||||
return self.End > int(datetime.utcnow().timestamp())
|
return self.End > time.utcnow()
|
||||||
|
|
||||||
def total_votes(self):
|
def total_votes(self):
|
||||||
return self.Yes + self.No + self.Abstain
|
return self.Yes + self.No + self.Abstain
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from typing import List, Set
|
from typing import List, Set
|
||||||
|
|
||||||
import bcrypt
|
import bcrypt
|
||||||
|
@ -14,7 +13,7 @@ import aurweb.config
|
||||||
import aurweb.models.account_type
|
import aurweb.models.account_type
|
||||||
import aurweb.schema
|
import aurweb.schema
|
||||||
|
|
||||||
from aurweb import db, logging, schema, util
|
from aurweb import db, logging, schema, time, util
|
||||||
from aurweb.models.account_type import AccountType as _AccountType
|
from aurweb.models.account_type import AccountType as _AccountType
|
||||||
from aurweb.models.ban import is_banned
|
from aurweb.models.ban import is_banned
|
||||||
from aurweb.models.declarative import Base
|
from aurweb.models.declarative import Base
|
||||||
|
@ -121,7 +120,7 @@ class User(Base):
|
||||||
exc = None
|
exc = None
|
||||||
for i in range(tries):
|
for i in range(tries):
|
||||||
exc = None
|
exc = None
|
||||||
now_ts = datetime.utcnow().timestamp()
|
now_ts = time.utcnow()
|
||||||
try:
|
try:
|
||||||
with db.begin():
|
with db.begin():
|
||||||
self.LastLogin = now_ts
|
self.LastLogin = now_ts
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
from datetime import datetime
|
|
||||||
from typing import List, Optional, Set
|
from typing import List, Optional, Set
|
||||||
|
|
||||||
from fastapi import Request
|
from fastapi import Request
|
||||||
from sqlalchemy import and_, orm
|
from sqlalchemy import and_, orm
|
||||||
|
|
||||||
from aurweb import config, db, l10n, util
|
from aurweb import config, db, l10n, time, util
|
||||||
from aurweb.exceptions import InvariantError
|
from aurweb.exceptions import InvariantError
|
||||||
from aurweb.models import PackageBase, PackageRequest, User
|
from aurweb.models import PackageBase, PackageRequest, User
|
||||||
from aurweb.models.package_request import ACCEPTED_ID, PENDING_ID, REJECTED_ID
|
from aurweb.models.package_request import ACCEPTED_ID, PENDING_ID, REJECTED_ID
|
||||||
|
@ -106,7 +105,7 @@ def verify_orphan_request(user: User, pkgbase: PackageBase):
|
||||||
PackageRequest.ReqTypeID == ORPHAN_ID)
|
PackageRequest.ReqTypeID == ORPHAN_ID)
|
||||||
for pkgreq in requests:
|
for pkgreq in requests:
|
||||||
idle_time = config.getint("options", "request_idle_time")
|
idle_time = config.getint("options", "request_idle_time")
|
||||||
time_delta = int(datetime.utcnow().timestamp()) - pkgreq.RequestTS
|
time_delta = time.utcnow() - pkgreq.RequestTS
|
||||||
is_due = pkgreq.Status == PENDING_ID and time_delta > idle_time
|
is_due = pkgreq.Status == PENDING_ID and time_delta > idle_time
|
||||||
if is_due:
|
if is_due:
|
||||||
# If the requester is the pkgbase maintainer or the
|
# If the requester is the pkgbase maintainer or the
|
||||||
|
@ -128,7 +127,7 @@ def close_pkgreq(pkgreq: PackageRequest, closer: User,
|
||||||
:param target: Optional PackageBase instance to merge into
|
:param target: Optional PackageBase instance to merge into
|
||||||
:param status: `pkgreq`.Status value to update to
|
:param status: `pkgreq`.Status value to update to
|
||||||
"""
|
"""
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
pkgreq.Status = status
|
pkgreq.Status = status
|
||||||
pkgreq.Closer = closer
|
pkgreq.Closer = closer
|
||||||
pkgreq.ClosureComment = (
|
pkgreq.ClosureComment = (
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from fastapi import Request
|
from fastapi import Request
|
||||||
from redis.client import Pipeline
|
from redis.client import Pipeline
|
||||||
|
|
||||||
from aurweb import config, db, logging
|
from aurweb import config, db, logging, time
|
||||||
from aurweb.models import ApiRateLimit
|
from aurweb.models import ApiRateLimit
|
||||||
from aurweb.redis import redis_connection
|
from aurweb.redis import redis_connection
|
||||||
|
|
||||||
|
@ -12,7 +10,7 @@ logger = logging.get_logger(__name__)
|
||||||
|
|
||||||
def _update_ratelimit_redis(request: Request, pipeline: Pipeline):
|
def _update_ratelimit_redis(request: Request, pipeline: Pipeline):
|
||||||
window_length = config.getint("ratelimit", "window_length")
|
window_length = config.getint("ratelimit", "window_length")
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
time_to_delete = now - window_length
|
time_to_delete = now - window_length
|
||||||
|
|
||||||
host = request.client.host
|
host = request.client.host
|
||||||
|
@ -37,7 +35,7 @@ def _update_ratelimit_redis(request: Request, pipeline: Pipeline):
|
||||||
|
|
||||||
def _update_ratelimit_db(request: Request):
|
def _update_ratelimit_db(request: Request):
|
||||||
window_length = config.getint("ratelimit", "window_length")
|
window_length = config.getint("ratelimit", "window_length")
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
time_to_delete = now - window_length
|
time_to_delete = now - window_length
|
||||||
|
|
||||||
records = db.query(ApiRateLimit).filter(
|
records = db.query(ApiRateLimit).filter(
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
from fastapi import APIRouter, Form, HTTPException, Request
|
from fastapi import APIRouter, Form, HTTPException, Request
|
||||||
|
@ -6,7 +5,7 @@ from fastapi.responses import HTMLResponse, RedirectResponse
|
||||||
|
|
||||||
import aurweb.config
|
import aurweb.config
|
||||||
|
|
||||||
from aurweb import cookies, db
|
from aurweb import cookies, db, time
|
||||||
from aurweb.auth import requires_auth, requires_guest
|
from aurweb.auth import requires_auth, requires_guest
|
||||||
from aurweb.l10n import get_translator_for_request
|
from aurweb.l10n import get_translator_for_request
|
||||||
from aurweb.models import User
|
from aurweb.models import User
|
||||||
|
@ -57,8 +56,7 @@ async def login_post(request: Request,
|
||||||
|
|
||||||
login_timeout = aurweb.config.getint("options", "login_timeout")
|
login_timeout = aurweb.config.getint("options", "login_timeout")
|
||||||
|
|
||||||
expires_at = int(datetime.utcnow().timestamp()
|
expires_at = int(time.utcnow() + max(cookie_timeout, login_timeout))
|
||||||
+ max(cookie_timeout, login_timeout))
|
|
||||||
|
|
||||||
response = RedirectResponse(url=next,
|
response = RedirectResponse(url=next,
|
||||||
status_code=HTTPStatus.SEE_OTHER)
|
status_code=HTTPStatus.SEE_OTHER)
|
||||||
|
|
|
@ -3,7 +3,6 @@ decorators in some way; more complex routes should be defined in their
|
||||||
own modules and imported here. """
|
own modules and imported here. """
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
from fastapi import APIRouter, Form, HTTPException, Request, Response
|
from fastapi import APIRouter, Form, HTTPException, Request, Response
|
||||||
|
@ -14,7 +13,7 @@ from sqlalchemy import and_, case, or_
|
||||||
import aurweb.config
|
import aurweb.config
|
||||||
import aurweb.models.package_request
|
import aurweb.models.package_request
|
||||||
|
|
||||||
from aurweb import cookies, db, models, util
|
from aurweb import cookies, db, models, time, util
|
||||||
from aurweb.cache import db_count_cache
|
from aurweb.cache import db_count_cache
|
||||||
from aurweb.models.account_type import TRUSTED_USER_AND_DEV_ID, TRUSTED_USER_ID
|
from aurweb.models.account_type import TRUSTED_USER_AND_DEV_ID, TRUSTED_USER_ID
|
||||||
from aurweb.models.package_request import PENDING_ID
|
from aurweb.models.package_request import PENDING_ID
|
||||||
|
@ -97,7 +96,7 @@ async def index(request: Request):
|
||||||
redis, "trusted_user_count", query, expire=cache_expire)
|
redis, "trusted_user_count", query, expire=cache_expire)
|
||||||
|
|
||||||
# Current timestamp.
|
# Current timestamp.
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
|
|
||||||
seven_days = 86400 * 7 # Seven days worth of seconds.
|
seven_days = 86400 * 7 # Seven days worth of seconds.
|
||||||
seven_days_ago = now - seven_days
|
seven_days_ago = now - seven_days
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
from fastapi import APIRouter, Form, HTTPException, Query, Request, Response
|
from fastapi import APIRouter, Form, HTTPException, Query, Request, Response
|
||||||
from fastapi.responses import JSONResponse, RedirectResponse
|
from fastapi.responses import JSONResponse, RedirectResponse
|
||||||
from sqlalchemy import and_
|
from sqlalchemy import and_
|
||||||
|
|
||||||
from aurweb import config, db, l10n, logging, templates, util
|
from aurweb import config, db, l10n, logging, templates, time, util
|
||||||
from aurweb.auth import creds, requires_auth
|
from aurweb.auth import creds, requires_auth
|
||||||
from aurweb.exceptions import InvariantError, ValidationError
|
from aurweb.exceptions import InvariantError, ValidationError
|
||||||
from aurweb.models import PackageBase
|
from aurweb.models import PackageBase
|
||||||
|
@ -146,7 +145,7 @@ async def pkgbase_flag_post(request: Request, name: str,
|
||||||
|
|
||||||
has_cred = request.user.has_credential(creds.PKGBASE_FLAG)
|
has_cred = request.user.has_credential(creds.PKGBASE_FLAG)
|
||||||
if has_cred and not pkgbase.Flagger:
|
if has_cred and not pkgbase.Flagger:
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase.OutOfDateTS = now
|
pkgbase.OutOfDateTS = now
|
||||||
pkgbase.Flagger = request.user
|
pkgbase.Flagger = request.user
|
||||||
|
@ -170,7 +169,7 @@ async def pkgbase_comments_post(
|
||||||
|
|
||||||
# If the provided comment is different than the record's version,
|
# If the provided comment is different than the record's version,
|
||||||
# update the db record.
|
# update the db record.
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
comment = db.create(PackageComment, User=request.user,
|
comment = db.create(PackageComment, User=request.user,
|
||||||
PackageBase=pkgbase,
|
PackageBase=pkgbase,
|
||||||
|
@ -268,7 +267,7 @@ async def pkgbase_comment_post(
|
||||||
|
|
||||||
# If the provided comment is different than the record's version,
|
# If the provided comment is different than the record's version,
|
||||||
# update the db record.
|
# update the db record.
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
if db_comment.Comments != comment:
|
if db_comment.Comments != comment:
|
||||||
with db.begin():
|
with db.begin():
|
||||||
db_comment.Comments = comment
|
db_comment.Comments = comment
|
||||||
|
@ -316,7 +315,7 @@ async def pkgbase_comment_pin(request: Request, name: str, id: int,
|
||||||
status_code=HTTPStatus.UNAUTHORIZED,
|
status_code=HTTPStatus.UNAUTHORIZED,
|
||||||
detail=_("You are not allowed to pin this comment."))
|
detail=_("You are not allowed to pin this comment."))
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
comment.PinnedTS = now
|
comment.PinnedTS = now
|
||||||
|
|
||||||
|
@ -387,7 +386,7 @@ async def pkgbase_comment_delete(request: Request, name: str, id: int,
|
||||||
status_code=HTTPStatus.UNAUTHORIZED,
|
status_code=HTTPStatus.UNAUTHORIZED,
|
||||||
detail=_("You are not allowed to delete this comment."))
|
detail=_("You are not allowed to delete this comment."))
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
comment.Deleter = request.user
|
comment.Deleter = request.user
|
||||||
comment.DelTS = now
|
comment.DelTS = now
|
||||||
|
@ -446,7 +445,7 @@ async def pkgbase_vote(request: Request, name: str):
|
||||||
).first()
|
).first()
|
||||||
has_cred = request.user.has_credential(creds.PKGBASE_VOTE)
|
has_cred = request.user.has_credential(creds.PKGBASE_VOTE)
|
||||||
if has_cred and not vote:
|
if has_cred and not vote:
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
db.create(PackageVote,
|
db.create(PackageVote,
|
||||||
User=request.user,
|
User=request.user,
|
||||||
|
@ -683,7 +682,7 @@ async def pkgbase_request_post(request: Request, name: str,
|
||||||
return render_template(request, "pkgbase/request.html", context)
|
return render_template(request, "pkgbase/request.html", context)
|
||||||
|
|
||||||
# All good. Create a new PackageRequest based on the given type.
|
# All good. Create a new PackageRequest based on the given type.
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgreq = db.create(PackageRequest,
|
pkgreq = db.create(PackageRequest,
|
||||||
ReqTypeID=types.get(type),
|
ReqTypeID=types.get(type),
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
from fastapi import APIRouter, Form, Query, Request
|
from fastapi import APIRouter, Form, Query, Request
|
||||||
from fastapi.responses import RedirectResponse
|
from fastapi.responses import RedirectResponse
|
||||||
from sqlalchemy import case
|
from sqlalchemy import case
|
||||||
|
|
||||||
from aurweb import db, defaults, util
|
from aurweb import db, defaults, time, util
|
||||||
from aurweb.auth import creds, requires_auth
|
from aurweb.auth import creds, requires_auth
|
||||||
from aurweb.models import PackageRequest, User
|
from aurweb.models import PackageRequest, User
|
||||||
from aurweb.models.package_request import PENDING_ID, REJECTED_ID
|
from aurweb.models.package_request import PENDING_ID, REJECTED_ID
|
||||||
|
@ -78,7 +77,7 @@ async def request_close_post(request: Request, id: int,
|
||||||
context = make_context(request, "Close Request")
|
context = make_context(request, "Close Request")
|
||||||
context["pkgreq"] = pkgreq
|
context["pkgreq"] = pkgreq
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgreq.Closer = request.user
|
pkgreq.Closer = request.user
|
||||||
pkgreq.ClosureComment = comments
|
pkgreq.ClosureComment = comments
|
||||||
|
|
|
@ -2,14 +2,13 @@ import html
|
||||||
import re
|
import re
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
from fastapi import APIRouter, Form, HTTPException, Request
|
from fastapi import APIRouter, Form, HTTPException, Request
|
||||||
from fastapi.responses import RedirectResponse, Response
|
from fastapi.responses import RedirectResponse, Response
|
||||||
from sqlalchemy import and_, or_
|
from sqlalchemy import and_, or_
|
||||||
|
|
||||||
from aurweb import db, l10n, logging, models
|
from aurweb import db, l10n, logging, models, time
|
||||||
from aurweb.auth import creds, requires_auth
|
from aurweb.auth import creds, requires_auth
|
||||||
from aurweb.models import User
|
from aurweb.models import User
|
||||||
from aurweb.models.account_type import TRUSTED_USER_AND_DEV_ID, TRUSTED_USER_ID
|
from aurweb.models.account_type import TRUSTED_USER_AND_DEV_ID, TRUSTED_USER_ID
|
||||||
|
@ -52,7 +51,7 @@ async def trusted_user(request: Request,
|
||||||
context["pp"] = pp = ITEMS_PER_PAGE
|
context["pp"] = pp = ITEMS_PER_PAGE
|
||||||
context["prev_len"] = MAX_AGENDA_LENGTH
|
context["prev_len"] = MAX_AGENDA_LENGTH
|
||||||
|
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
|
|
||||||
if current_by not in {"asc", "desc"}:
|
if current_by not in {"asc", "desc"}:
|
||||||
# If a malicious by was given, default to desc.
|
# If a malicious by was given, default to desc.
|
||||||
|
@ -290,7 +289,7 @@ async def trusted_user_addvote_post(request: Request,
|
||||||
|
|
||||||
# Gather some mapped constants and the current timestamp.
|
# Gather some mapped constants and the current timestamp.
|
||||||
duration, quorum = ADDVOTE_SPECIFICS.get(type)
|
duration, quorum = ADDVOTE_SPECIFICS.get(type)
|
||||||
timestamp = int(datetime.utcnow().timestamp())
|
timestamp = time.utcnow()
|
||||||
|
|
||||||
# TODO: Review this. Is this even necessary?
|
# TODO: Review this. Is this even necessary?
|
||||||
# Remove <script> and <style> tags.
|
# Remove <script> and <style> tags.
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from sqlalchemy import and_
|
from sqlalchemy import and_
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models import PackageBase
|
from aurweb.models import PackageBase
|
||||||
|
|
||||||
|
|
||||||
def _main():
|
def _main():
|
||||||
# One day behind.
|
# One day behind.
|
||||||
limit_to = int(datetime.utcnow().timestamp()) - 86400
|
limit_to = time.utcnow() - 86400
|
||||||
|
|
||||||
query = db.query(PackageBase).filter(
|
query = db.query(PackageBase).filter(
|
||||||
and_(PackageBase.SubmittedTS < limit_to,
|
and_(PackageBase.SubmittedTS < limit_to,
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from sqlalchemy import and_, func
|
from sqlalchemy import and_, func
|
||||||
from sqlalchemy.sql.functions import coalesce
|
from sqlalchemy.sql.functions import coalesce
|
||||||
from sqlalchemy.sql.functions import sum as _sum
|
from sqlalchemy.sql.functions import sum as _sum
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models import PackageBase, PackageVote
|
from aurweb.models import PackageBase, PackageVote
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +19,7 @@ def run_variable(pkgbases: List[PackageBase] = []) -> None:
|
||||||
|
|
||||||
:param pkgbases: List of PackageBase instances
|
:param pkgbases: List of PackageBase instances
|
||||||
"""
|
"""
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
|
|
||||||
# NumVotes subquery.
|
# NumVotes subquery.
|
||||||
votes_subq = db.get_session().query(
|
votes_subq = db.get_session().query(
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from sqlalchemy import and_
|
from sqlalchemy import and_
|
||||||
|
|
||||||
import aurweb.config
|
import aurweb.config
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models import TUVoteInfo
|
from aurweb.models import TUVoteInfo
|
||||||
from aurweb.scripts import notify
|
from aurweb.scripts import notify
|
||||||
|
|
||||||
|
@ -16,7 +14,7 @@ notify_cmd = aurweb.config.get('notifications', 'notify-cmd')
|
||||||
def main():
|
def main():
|
||||||
db.get_engine()
|
db.get_engine()
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
|
|
||||||
start = aurweb.config.getint("tuvotereminder", "range_start")
|
start = aurweb.config.getint("tuvotereminder", "range_start")
|
||||||
filter_from = now + start
|
filter_from = now + start
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from sqlalchemy import update
|
from sqlalchemy import update
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models import User
|
from aurweb.models import User
|
||||||
|
|
||||||
|
|
||||||
def _main():
|
def _main():
|
||||||
limit_to = int(datetime.utcnow().timestamp()) - 86400 * 7
|
limit_to = time.utcnow() - 86400 * 7
|
||||||
|
|
||||||
update_ = update(User).where(
|
update_ = update(User).where(
|
||||||
User.LastLogin < limit_to
|
User.LastLogin < limit_to
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
import copy
|
import copy
|
||||||
import functools
|
import functools
|
||||||
import os
|
import os
|
||||||
import zoneinfo
|
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
|
@ -80,8 +78,8 @@ def make_context(request: Request, title: str, next: str = None):
|
||||||
"timezone": timezone,
|
"timezone": timezone,
|
||||||
"timezones": time.SUPPORTED_TIMEZONES,
|
"timezones": time.SUPPORTED_TIMEZONES,
|
||||||
"title": title,
|
"title": title,
|
||||||
"now": datetime.now(tz=zoneinfo.ZoneInfo(timezone)),
|
"now": time.now(timezone),
|
||||||
"utcnow": int(datetime.utcnow().timestamp()),
|
"utcnow": time.utcnow(),
|
||||||
"config": aurweb.config,
|
"config": aurweb.config,
|
||||||
"creds": aurweb.auth.creds,
|
"creds": aurweb.auth.creds,
|
||||||
"next": next if next else request.url.path,
|
"next": next if next else request.url.path,
|
||||||
|
|
|
@ -3,6 +3,7 @@ import zoneinfo
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from urllib.parse import unquote
|
from urllib.parse import unquote
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
from fastapi import Request
|
from fastapi import Request
|
||||||
|
|
||||||
|
@ -62,3 +63,22 @@ def get_request_timezone(request: Request):
|
||||||
if request.user.is_authenticated():
|
if request.user.is_authenticated():
|
||||||
default_tz = request.user.Timezone
|
default_tz = request.user.Timezone
|
||||||
return unquote(request.cookies.get("AURTZ", default_tz))
|
return unquote(request.cookies.get("AURTZ", default_tz))
|
||||||
|
|
||||||
|
|
||||||
|
def now(timezone: str) -> datetime:
|
||||||
|
"""
|
||||||
|
Get the current timezone-localized timestamp.
|
||||||
|
|
||||||
|
:param timezone: Valid timezone supported by ZoneInfo
|
||||||
|
:return: Current localized datetime
|
||||||
|
"""
|
||||||
|
return datetime.now(tz=ZoneInfo(timezone))
|
||||||
|
|
||||||
|
|
||||||
|
def utcnow() -> int:
|
||||||
|
"""
|
||||||
|
Get the current UTC timestamp.
|
||||||
|
|
||||||
|
:return: Current UTC timestamp
|
||||||
|
"""
|
||||||
|
return int(datetime.utcnow().timestamp())
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
|
|
||||||
from fastapi import Request
|
from fastapi import Request
|
||||||
|
|
||||||
from aurweb import cookies, db, models
|
from aurweb import cookies, db, models, time
|
||||||
from aurweb.models.ssh_pub_key import get_fingerprint
|
from aurweb.models.ssh_pub_key import get_fingerprint
|
||||||
from aurweb.util import strtobool
|
from aurweb.util import strtobool
|
||||||
|
|
||||||
|
@ -14,7 +13,7 @@ def simple(U: str = str(), E: str = str(), H: bool = False,
|
||||||
CN: bool = False, UN: bool = False, ON: bool = False,
|
CN: bool = False, UN: bool = False, ON: bool = False,
|
||||||
S: bool = False, user: models.User = None,
|
S: bool = False, user: models.User = None,
|
||||||
**kwargs) -> None:
|
**kwargs) -> None:
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
user.Username = U or user.Username
|
user.Username = U or user.Username
|
||||||
user.Email = E or user.Email
|
user.Email = E or user.Email
|
||||||
|
|
|
@ -13,7 +13,7 @@ from fastapi.testclient import TestClient
|
||||||
|
|
||||||
import aurweb.models.account_type as at
|
import aurweb.models.account_type as at
|
||||||
|
|
||||||
from aurweb import captcha, db, logging
|
from aurweb import captcha, db, logging, time
|
||||||
from aurweb.asgi import app
|
from aurweb.asgi import app
|
||||||
from aurweb.db import create, query
|
from aurweb.db import create, query
|
||||||
from aurweb.models.accepted_term import AcceptedTerm
|
from aurweb.models.accepted_term import AcceptedTerm
|
||||||
|
@ -155,7 +155,7 @@ def test_post_passreset_user(client: TestClient, user: User):
|
||||||
def test_post_passreset_resetkey(client: TestClient, user: User):
|
def test_post_passreset_resetkey(client: TestClient, user: User):
|
||||||
with db.begin():
|
with db.begin():
|
||||||
user.session = Session(UsersID=user.ID, SessionID="blah",
|
user.session = Session(UsersID=user.ID, SessionID="blah",
|
||||||
LastUpdateTS=datetime.utcnow().timestamp())
|
LastUpdateTS=time.utcnow())
|
||||||
|
|
||||||
# Prepare a password reset.
|
# Prepare a password reset.
|
||||||
with client as request:
|
with client as request:
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import fastapi
|
import fastapi
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from fastapi import HTTPException
|
from fastapi import HTTPException
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb import config, db
|
from aurweb import config, db, time
|
||||||
from aurweb.auth import AnonymousUser, BasicAuthBackend, _auth_required, account_type_required
|
from aurweb.auth import AnonymousUser, BasicAuthBackend, _auth_required, account_type_required
|
||||||
from aurweb.models.account_type import USER, USER_ID
|
from aurweb.models.account_type import USER, USER_ID
|
||||||
from aurweb.models.session import Session
|
from aurweb.models.session import Session
|
||||||
|
@ -55,7 +53,7 @@ async def test_auth_backend_invalid_sid(backend: BasicAuthBackend):
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_auth_backend_invalid_user_id():
|
async def test_auth_backend_invalid_user_id():
|
||||||
# Create a new session with a fake user id.
|
# Create a new session with a fake user id.
|
||||||
now_ts = datetime.utcnow().timestamp()
|
now_ts = time.utcnow()
|
||||||
with pytest.raises(IntegrityError):
|
with pytest.raises(IntegrityError):
|
||||||
Session(UsersID=666, SessionID="realSession",
|
Session(UsersID=666, SessionID="realSession",
|
||||||
LastUpdateTS=now_ts + 5)
|
LastUpdateTS=now_ts + 5)
|
||||||
|
@ -65,7 +63,7 @@ async def test_auth_backend_invalid_user_id():
|
||||||
async def test_basic_auth_backend(user: User, backend: BasicAuthBackend):
|
async def test_basic_auth_backend(user: User, backend: BasicAuthBackend):
|
||||||
# This time, everything matches up. We expect the user to
|
# This time, everything matches up. We expect the user to
|
||||||
# equal the real_user.
|
# equal the real_user.
|
||||||
now_ts = datetime.utcnow().timestamp()
|
now_ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
db.create(Session, UsersID=user.ID, SessionID="realSession",
|
db.create(Session, UsersID=user.ID, SessionID="realSession",
|
||||||
LastUpdateTS=now_ts + 5)
|
LastUpdateTS=now_ts + 5)
|
||||||
|
@ -87,7 +85,7 @@ async def test_expired_session(backend: BasicAuthBackend, user: User):
|
||||||
|
|
||||||
# Set Session.LastUpdateTS to 20 seconds expired.
|
# Set Session.LastUpdateTS to 20 seconds expired.
|
||||||
timeout = config.getint("options", "login_timeout")
|
timeout = config.getint("options", "login_timeout")
|
||||||
now_ts = int(datetime.utcnow().timestamp())
|
now_ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
request.user.session.LastUpdateTS = now_ts - timeout - 20
|
request.user.session.LastUpdateTS = now_ts - timeout - 20
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
|
@ -10,7 +9,7 @@ from fastapi.testclient import TestClient
|
||||||
|
|
||||||
import aurweb.config
|
import aurweb.config
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.asgi import app
|
from aurweb.asgi import app
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.session import Session
|
from aurweb.models.session import Session
|
||||||
|
@ -200,7 +199,7 @@ def test_login_remember_me(client: TestClient, user: User):
|
||||||
|
|
||||||
cookie_timeout = aurweb.config.getint(
|
cookie_timeout = aurweb.config.getint(
|
||||||
"options", "persistent_cookie_timeout")
|
"options", "persistent_cookie_timeout")
|
||||||
now_ts = int(datetime.utcnow().timestamp())
|
now_ts = time.utcnow()
|
||||||
session = db.query(Session).filter(Session.UsersID == user.ID).first()
|
session = db.query(Session).filter(Session.UsersID == user.ID).first()
|
||||||
|
|
||||||
# Expect that LastUpdateTS is not past the cookie timeout
|
# Expect that LastUpdateTS is not past the cookie timeout
|
||||||
|
@ -294,7 +293,7 @@ def test_generate_unique_sid_exhausted(client: TestClient, user: User,
|
||||||
This exercises the bad path of /login, where we can't find a unique
|
This exercises the bad path of /login, where we can't find a unique
|
||||||
SID to assign the user.
|
SID to assign the user.
|
||||||
"""
|
"""
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
# Create a second user; we'll login with this one.
|
# Create a second user; we'll login with this one.
|
||||||
user2 = db.create(User, Username="test2", Email="test2@example.org",
|
user2 = db.create(User, Username="test2", Email="test2@example.org",
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
from aurweb import filters
|
from aurweb import filters, time
|
||||||
|
|
||||||
|
|
||||||
def test_timestamp_to_datetime():
|
def test_timestamp_to_datetime():
|
||||||
ts = datetime.utcnow().timestamp()
|
ts = time.utcnow()
|
||||||
dt = datetime.utcfromtimestamp(int(ts))
|
dt = datetime.utcfromtimestamp(int(ts))
|
||||||
assert filters.timestamp_to_datetime(ts) == dt
|
assert filters.timestamp_to_datetime(ts) == dt
|
||||||
|
|
||||||
|
|
||||||
def test_as_timezone():
|
def test_as_timezone():
|
||||||
ts = datetime.utcnow().timestamp()
|
ts = time.utcnow()
|
||||||
dt = filters.timestamp_to_datetime(ts)
|
dt = filters.timestamp_to_datetime(ts)
|
||||||
assert filters.as_timezone(dt, "UTC") == dt.astimezone(tz=ZoneInfo("UTC"))
|
assert filters.as_timezone(dt, "UTC") == dt.astimezone(tz=ZoneInfo("UTC"))
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
@ -8,7 +7,7 @@ import pytest
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.asgi import app
|
from aurweb.asgi import app
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.package import Package
|
from aurweb.models.package import Package
|
||||||
|
@ -62,7 +61,7 @@ def packages(user):
|
||||||
|
|
||||||
# For i..num_packages, create a package named pkg_{i}.
|
# For i..num_packages, create a package named pkg_{i}.
|
||||||
pkgs = []
|
pkgs = []
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
for i in range(num_packages):
|
for i in range(num_packages):
|
||||||
pkgbase = db.create(PackageBase, Name=f"pkg_{i}",
|
pkgbase = db.create(PackageBase, Name=f"pkg_{i}",
|
||||||
|
@ -184,7 +183,7 @@ def test_homepage_dashboard(redis, packages, user):
|
||||||
|
|
||||||
|
|
||||||
def test_homepage_dashboard_requests(redis, packages, user):
|
def test_homepage_dashboard_requests(redis, packages, user):
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
|
|
||||||
pkg = packages[0]
|
pkg = packages[0]
|
||||||
reqtype = db.query(RequestType, RequestType.ID == DELETION_ID).first()
|
reqtype = db.query(RequestType, RequestType.ID == DELETION_ID).first()
|
||||||
|
@ -210,7 +209,7 @@ def test_homepage_dashboard_flagged_packages(redis, packages, user):
|
||||||
# Set the first Package flagged by setting its OutOfDateTS column.
|
# Set the first Package flagged by setting its OutOfDateTS column.
|
||||||
pkg = packages[0]
|
pkg = packages[0]
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkg.PackageBase.OutOfDateTS = int(datetime.utcnow().timestamp())
|
pkg.PackageBase.OutOfDateTS = time.utcnow()
|
||||||
|
|
||||||
cookies = {"AURSID": user.login(Request(), "testPassword")}
|
cookies = {"AURSID": user.login(Request(), "testPassword")}
|
||||||
with client as request:
|
with client as request:
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
from datetime import datetime
|
|
||||||
from logging import ERROR
|
from logging import ERROR
|
||||||
from typing import List
|
from typing import List
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from aurweb import config, db, models
|
from aurweb import config, db, models, time
|
||||||
from aurweb.models import Package, PackageBase, PackageRequest, User
|
from aurweb.models import Package, PackageBase, PackageRequest, User
|
||||||
from aurweb.models.account_type import TRUSTED_USER_ID, USER_ID
|
from aurweb.models.account_type import TRUSTED_USER_ID, USER_ID
|
||||||
from aurweb.models.request_type import ORPHAN_ID
|
from aurweb.models.request_type import ORPHAN_ID
|
||||||
|
@ -48,7 +47,7 @@ def user2() -> User:
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def pkgbases(user: User) -> List[PackageBase]:
|
def pkgbases(user: User) -> List[PackageBase]:
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
|
|
||||||
output = []
|
output = []
|
||||||
with db.begin():
|
with db.begin():
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.package_base import PackageBase
|
from aurweb.models.package_base import PackageBase
|
||||||
from aurweb.models.package_request import (ACCEPTED, ACCEPTED_ID, CLOSED, CLOSED_ID, PENDING, PENDING_ID, REJECTED,
|
from aurweb.models.package_request import (ACCEPTED, ACCEPTED_ID, CLOSED, CLOSED_ID, PENDING, PENDING_ID, REJECTED,
|
||||||
|
@ -54,7 +52,7 @@ def test_package_request_creation(user: User, pkgbase: PackageBase):
|
||||||
|
|
||||||
|
|
||||||
def test_package_request_closed(user: User, pkgbase: PackageBase):
|
def test_package_request_closed(user: User, pkgbase: PackageBase):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
package_request = db.create(PackageRequest, ReqTypeID=MERGE_ID,
|
package_request = db.create(PackageRequest, ReqTypeID=MERGE_ID,
|
||||||
User=user, PackageBase=pkgbase,
|
User=user, PackageBase=pkgbase,
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.package_base import PackageBase
|
from aurweb.models.package_base import PackageBase
|
||||||
from aurweb.models.package_vote import PackageVote
|
from aurweb.models.package_vote import PackageVote
|
||||||
|
@ -33,7 +31,7 @@ def pkgbase(user: User) -> PackageBase:
|
||||||
|
|
||||||
|
|
||||||
def test_package_vote_creation(user: User, pkgbase: PackageBase):
|
def test_package_vote_creation(user: User, pkgbase: PackageBase):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
|
|
||||||
with db.begin():
|
with db.begin():
|
||||||
package_vote = db.create(PackageVote, User=user,
|
package_vote = db.create(PackageVote, User=user,
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import List
|
from typing import List
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
@ -9,7 +8,7 @@ import pytest
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from aurweb import asgi, db
|
from aurweb import asgi, db, time
|
||||||
from aurweb.models import License, PackageLicense
|
from aurweb.models import License, PackageLicense
|
||||||
from aurweb.models.account_type import USER_ID, AccountType
|
from aurweb.models.account_type import USER_ID, AccountType
|
||||||
from aurweb.models.dependency_type import DependencyType
|
from aurweb.models.dependency_type import DependencyType
|
||||||
|
@ -116,7 +115,7 @@ def tu_user():
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def package(maintainer: User) -> Package:
|
def package(maintainer: User) -> Package:
|
||||||
""" Yield a Package created by user. """
|
""" Yield a Package created by user. """
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase = db.create(PackageBase,
|
pkgbase = db.create(PackageBase,
|
||||||
Name="test-package",
|
Name="test-package",
|
||||||
|
@ -138,7 +137,7 @@ def pkgbase(package: Package) -> PackageBase:
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def target(maintainer: User) -> PackageBase:
|
def target(maintainer: User) -> PackageBase:
|
||||||
""" Merge target. """
|
""" Merge target. """
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase = db.create(PackageBase, Name="target-package",
|
pkgbase = db.create(PackageBase, Name="target-package",
|
||||||
Maintainer=maintainer,
|
Maintainer=maintainer,
|
||||||
|
@ -166,7 +165,7 @@ def pkgreq(user: User, pkgbase: PackageBase) -> PackageRequest:
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def comment(user: User, package: Package) -> PackageComment:
|
def comment(user: User, package: Package) -> PackageComment:
|
||||||
pkgbase = package.PackageBase
|
pkgbase = package.PackageBase
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
comment = db.create(PackageComment,
|
comment = db.create(PackageComment,
|
||||||
User=user,
|
User=user,
|
||||||
|
@ -181,7 +180,7 @@ def comment(user: User, package: Package) -> PackageComment:
|
||||||
def packages(maintainer: User) -> List[Package]:
|
def packages(maintainer: User) -> List[Package]:
|
||||||
""" Yield 55 packages named pkg_0 .. pkg_54. """
|
""" Yield 55 packages named pkg_0 .. pkg_54. """
|
||||||
packages_ = []
|
packages_ = []
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
for i in range(55):
|
for i in range(55):
|
||||||
pkgbase = db.create(PackageBase,
|
pkgbase = db.create(PackageBase,
|
||||||
|
@ -293,7 +292,7 @@ def test_package(client: TestClient, package: Package):
|
||||||
|
|
||||||
|
|
||||||
def test_package_comments(client: TestClient, user: User, package: Package):
|
def test_package_comments(client: TestClient, user: User, package: Package):
|
||||||
now = (datetime.utcnow().timestamp())
|
now = (time.utcnow())
|
||||||
with db.begin():
|
with db.begin():
|
||||||
comment = db.create(PackageComment, PackageBase=package.PackageBase,
|
comment = db.create(PackageComment, PackageBase=package.PackageBase,
|
||||||
User=user, Comments="Test comment", CommentTS=now)
|
User=user, Comments="Test comment", CommentTS=now)
|
||||||
|
@ -847,7 +846,7 @@ def test_packages_sort_by_popularity(client: TestClient,
|
||||||
def test_packages_sort_by_voted(client: TestClient,
|
def test_packages_sort_by_voted(client: TestClient,
|
||||||
maintainer: User,
|
maintainer: User,
|
||||||
packages: List[Package]):
|
packages: List[Package]):
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
db.create(PackageVote, PackageBase=packages[0].PackageBase,
|
db.create(PackageVote, PackageBase=packages[0].PackageBase,
|
||||||
User=maintainer, VoteTS=now)
|
User=maintainer, VoteTS=now)
|
||||||
|
@ -942,7 +941,7 @@ def test_packages_sort_by_maintainer(client: TestClient,
|
||||||
|
|
||||||
def test_packages_sort_by_last_modified(client: TestClient,
|
def test_packages_sort_by_last_modified(client: TestClient,
|
||||||
packages: List[Package]):
|
packages: List[Package]):
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
# Set the first package's ModifiedTS to be 1000 seconds before now.
|
# Set the first package's ModifiedTS to be 1000 seconds before now.
|
||||||
package = packages[0]
|
package = packages[0]
|
||||||
with db.begin():
|
with db.begin():
|
||||||
|
@ -970,7 +969,7 @@ def test_packages_flagged(client: TestClient, maintainer: User,
|
||||||
packages: List[Package]):
|
packages: List[Package]):
|
||||||
package = packages[0]
|
package = packages[0]
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
|
|
||||||
with db.begin():
|
with db.begin():
|
||||||
package.PackageBase.OutOfDateTS = now
|
package.PackageBase.OutOfDateTS = now
|
||||||
|
@ -1100,7 +1099,7 @@ def test_packages_post(client: TestClient, user: User, package: Package):
|
||||||
def test_packages_post_unflag(client: TestClient, user: User,
|
def test_packages_post_unflag(client: TestClient, user: User,
|
||||||
maintainer: User, package: Package):
|
maintainer: User, package: Package):
|
||||||
# Flag `package` as `user`.
|
# Flag `package` as `user`.
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
package.PackageBase.Flagger = user
|
package.PackageBase.Flagger = user
|
||||||
package.PackageBase.OutOfDateTS = now
|
package.PackageBase.OutOfDateTS = now
|
||||||
|
@ -1127,7 +1126,7 @@ def test_packages_post_unflag(client: TestClient, user: User,
|
||||||
assert successes[0].text.strip() == expected
|
assert successes[0].text.strip() == expected
|
||||||
|
|
||||||
# Re-flag `package` as `user`.
|
# Re-flag `package` as `user`.
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
package.PackageBase.Flagger = user
|
package.PackageBase.Flagger = user
|
||||||
package.PackageBase.OutOfDateTS = now
|
package.PackageBase.OutOfDateTS = now
|
||||||
|
@ -1453,7 +1452,7 @@ def test_account_comments(client: TestClient, user: User, package: Package):
|
||||||
""" This test may seem out of place, but it requires packages,
|
""" This test may seem out of place, but it requires packages,
|
||||||
so its being included in the packages routes test suite to
|
so its being included in the packages routes test suite to
|
||||||
leverage existing fixtures. """
|
leverage existing fixtures. """
|
||||||
now = (datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
# This comment's CommentTS is `now + 1`, so it is found in rendered
|
# This comment's CommentTS is `now + 1`, so it is found in rendered
|
||||||
# HTML before the rendered_comment, which has a CommentTS of `now`.
|
# HTML before the rendered_comment, which has a CommentTS of `now`.
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from aurweb import asgi, config, db
|
from aurweb import asgi, config, db, time
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.official_provider import OFFICIAL_BASE, OfficialProvider
|
from aurweb.models.official_provider import OFFICIAL_BASE, OfficialProvider
|
||||||
from aurweb.models.package import Package
|
from aurweb.models.package import Package
|
||||||
|
@ -77,7 +75,7 @@ def test_updated_packages(maintainer: User, package: Package):
|
||||||
|
|
||||||
|
|
||||||
def test_query_voted(maintainer: User, package: Package):
|
def test_query_voted(maintainer: User, package: Package):
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
db.create(PackageVote, User=maintainer, VoteTS=now,
|
db.create(PackageVote, User=maintainer, VoteTS=now,
|
||||||
PackageBase=package.PackageBase)
|
PackageBase=package.PackageBase)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import List
|
from typing import List
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
@ -10,7 +9,7 @@ import pytest
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
from sqlalchemy import and_
|
from sqlalchemy import and_
|
||||||
|
|
||||||
from aurweb import asgi, db
|
from aurweb import asgi, db, time
|
||||||
from aurweb.models.account_type import USER_ID, AccountType
|
from aurweb.models.account_type import USER_ID, AccountType
|
||||||
from aurweb.models.dependency_type import DependencyType
|
from aurweb.models.dependency_type import DependencyType
|
||||||
from aurweb.models.package import Package
|
from aurweb.models.package import Package
|
||||||
|
@ -115,7 +114,7 @@ def tu_user():
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def package(maintainer: User) -> Package:
|
def package(maintainer: User) -> Package:
|
||||||
""" Yield a Package created by user. """
|
""" Yield a Package created by user. """
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase = db.create(PackageBase,
|
pkgbase = db.create(PackageBase,
|
||||||
Name="test-package",
|
Name="test-package",
|
||||||
|
@ -137,7 +136,7 @@ def pkgbase(package: Package) -> PackageBase:
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def target(maintainer: User) -> PackageBase:
|
def target(maintainer: User) -> PackageBase:
|
||||||
""" Merge target. """
|
""" Merge target. """
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase = db.create(PackageBase, Name="target-package",
|
pkgbase = db.create(PackageBase, Name="target-package",
|
||||||
Maintainer=maintainer,
|
Maintainer=maintainer,
|
||||||
|
@ -165,7 +164,7 @@ def pkgreq(user: User, pkgbase: PackageBase) -> PackageRequest:
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def comment(user: User, package: Package) -> PackageComment:
|
def comment(user: User, package: Package) -> PackageComment:
|
||||||
pkgbase = package.PackageBase
|
pkgbase = package.PackageBase
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
comment = db.create(PackageComment,
|
comment = db.create(PackageComment,
|
||||||
User=user,
|
User=user,
|
||||||
|
@ -180,7 +179,7 @@ def comment(user: User, package: Package) -> PackageComment:
|
||||||
def packages(maintainer: User) -> List[Package]:
|
def packages(maintainer: User) -> List[Package]:
|
||||||
""" Yield 55 packages named pkg_0 .. pkg_54. """
|
""" Yield 55 packages named pkg_0 .. pkg_54. """
|
||||||
packages_ = []
|
packages_ = []
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
for i in range(55):
|
for i in range(55):
|
||||||
pkgbase = db.create(PackageBase,
|
pkgbase = db.create(PackageBase,
|
||||||
|
@ -258,7 +257,7 @@ def test_pkgbase_voters(client: TestClient, tu_user: User, package: Package):
|
||||||
pkgbase = package.PackageBase
|
pkgbase = package.PackageBase
|
||||||
endpoint = f"/pkgbase/{pkgbase.Name}/voters"
|
endpoint = f"/pkgbase/{pkgbase.Name}/voters"
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
db.create(PackageVote, User=tu_user, PackageBase=pkgbase, VoteTS=now)
|
db.create(PackageVote, User=tu_user, PackageBase=pkgbase, VoteTS=now)
|
||||||
|
|
||||||
|
@ -279,7 +278,7 @@ def test_pkgbase_voters_unauthorized(client: TestClient, user: User,
|
||||||
pkgbase = package.PackageBase
|
pkgbase = package.PackageBase
|
||||||
endpoint = f"/pkgbase/{pkgbase.Name}/voters"
|
endpoint = f"/pkgbase/{pkgbase.Name}/voters"
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
db.create(PackageVote, User=user, PackageBase=pkgbase, VoteTS=now)
|
db.create(PackageVote, User=user, PackageBase=pkgbase, VoteTS=now)
|
||||||
|
|
||||||
|
@ -303,7 +302,7 @@ def test_pkgbase_comment_not_found(client: TestClient, maintainer: User,
|
||||||
|
|
||||||
def test_pkgbase_comment_form_unauthorized(client: TestClient, user: User,
|
def test_pkgbase_comment_form_unauthorized(client: TestClient, user: User,
|
||||||
maintainer: User, package: Package):
|
maintainer: User, package: Package):
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
comment = db.create(PackageComment, PackageBase=package.PackageBase,
|
comment = db.create(PackageComment, PackageBase=package.PackageBase,
|
||||||
User=maintainer, Comments="Test",
|
User=maintainer, Comments="Test",
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models import Package, PackageBase, User
|
from aurweb.models import Package, PackageBase, User
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.scripts import pkgmaint
|
from aurweb.scripts import pkgmaint
|
||||||
|
@ -26,7 +25,7 @@ def user() -> User:
|
||||||
def packages(user: User) -> List[Package]:
|
def packages(user: User) -> List[Package]:
|
||||||
output = []
|
output = []
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
pkgbase = db.create(PackageBase, Name=f"pkg_{i}",
|
pkgbase = db.create(PackageBase, Name=f"pkg_{i}",
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from aurweb import config, db, logging
|
from aurweb import config, db, logging, time
|
||||||
from aurweb.models import Package, PackageBase, PackageComment, User
|
from aurweb.models import Package, PackageBase, PackageComment, User
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.scripts import rendercomment
|
from aurweb.scripts import rendercomment
|
||||||
|
@ -39,7 +38,7 @@ def user() -> User:
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def pkgbase(user: User) -> PackageBase:
|
def pkgbase(user: User) -> PackageBase:
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase = db.create(PackageBase, Packager=user, Name="pkgbase_0",
|
pkgbase = db.create(PackageBase, Packager=user, Name="pkgbase_0",
|
||||||
SubmittedTS=now, ModifiedTS=now)
|
SubmittedTS=now, ModifiedTS=now)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from logging import DEBUG
|
from logging import DEBUG
|
||||||
from typing import List
|
from typing import List
|
||||||
|
@ -10,7 +9,7 @@ import pytest
|
||||||
from fastapi import HTTPException
|
from fastapi import HTTPException
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from aurweb import asgi, config, db, defaults
|
from aurweb import asgi, config, db, defaults, time
|
||||||
from aurweb.models import Package, PackageBase, PackageRequest, User
|
from aurweb.models import Package, PackageBase, PackageRequest, User
|
||||||
from aurweb.models.account_type import TRUSTED_USER_ID, USER_ID
|
from aurweb.models.account_type import TRUSTED_USER_ID, USER_ID
|
||||||
from aurweb.models.package_notification import PackageNotification
|
from aurweb.models.package_notification import PackageNotification
|
||||||
|
@ -94,7 +93,7 @@ def maintainer() -> User:
|
||||||
def packages(maintainer: User) -> List[Package]:
|
def packages(maintainer: User) -> List[Package]:
|
||||||
""" Yield 55 packages named pkg_0 .. pkg_54. """
|
""" Yield 55 packages named pkg_0 .. pkg_54. """
|
||||||
packages_ = []
|
packages_ = []
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
for i in range(55):
|
for i in range(55):
|
||||||
pkgbase = db.create(PackageBase,
|
pkgbase = db.create(PackageBase,
|
||||||
|
@ -148,7 +147,7 @@ def create_pkgbase(user: User, name: str) -> PackageBase:
|
||||||
:param name: PackageBase.Name
|
:param name: PackageBase.Name
|
||||||
:return: PackageBase instance
|
:return: PackageBase instance
|
||||||
"""
|
"""
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase = db.create(PackageBase, Name=name,
|
pkgbase = db.create(PackageBase, Name=name,
|
||||||
Maintainer=user, Packager=user,
|
Maintainer=user, Packager=user,
|
||||||
|
@ -185,7 +184,7 @@ def create_request(reqtype_id: int, user: User, pkgbase: PackageBase,
|
||||||
:param comments: PackageRequest.Comments
|
:param comments: PackageRequest.Comments
|
||||||
:return: PackageRequest instance
|
:return: PackageRequest instance
|
||||||
"""
|
"""
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgreq = db.create(PackageRequest, ReqTypeID=reqtype_id,
|
pkgreq = db.create(PackageRequest, ReqTypeID=reqtype_id,
|
||||||
User=user, PackageBase=pkgbase,
|
User=user, PackageBase=pkgbase,
|
||||||
|
@ -274,7 +273,7 @@ def test_request_post_deletion_autoaccept(client: TestClient, auser: User,
|
||||||
""" Test the request route for deletion as maintainer. """
|
""" Test the request route for deletion as maintainer. """
|
||||||
caplog.set_level(DEBUG)
|
caplog.set_level(DEBUG)
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
auto_delete_age = config.getint("options", "auto_delete_age")
|
auto_delete_age = config.getint("options", "auto_delete_age")
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase.ModifiedTS = now - auto_delete_age + 100
|
pkgbase.ModifiedTS = now - auto_delete_age + 100
|
||||||
|
@ -503,7 +502,7 @@ def test_orphan_request(client: TestClient, user: User, tu_user: User,
|
||||||
pkgbase: PackageBase, pkgreq: PackageRequest):
|
pkgbase: PackageBase, pkgreq: PackageRequest):
|
||||||
""" Test the standard orphan request route. """
|
""" Test the standard orphan request route. """
|
||||||
idle_time = config.getint("options", "request_idle_time")
|
idle_time = config.getint("options", "request_idle_time")
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgreq.ReqTypeID = ORPHAN_ID
|
pkgreq.ReqTypeID = ORPHAN_ID
|
||||||
# Set the request time so it's seen as due (idle_time has passed).
|
# Set the request time so it's seen as due (idle_time has passed).
|
||||||
|
@ -532,7 +531,7 @@ def test_request_post_orphan_autogenerated_closure(client: TestClient,
|
||||||
pkgbase: PackageBase,
|
pkgbase: PackageBase,
|
||||||
pkgreq: PackageRequest):
|
pkgreq: PackageRequest):
|
||||||
idle_time = config.getint("options", "request_idle_time")
|
idle_time = config.getint("options", "request_idle_time")
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgreq.ReqTypeID = ORPHAN_ID
|
pkgreq.ReqTypeID = ORPHAN_ID
|
||||||
# Set the request time so it's seen as due (idle_time has passed).
|
# Set the request time so it's seen as due (idle_time has passed).
|
||||||
|
@ -559,7 +558,7 @@ def test_request_post_orphan_autoaccept(client: TestClient, auser: User,
|
||||||
caplog: pytest.LogCaptureFixture):
|
caplog: pytest.LogCaptureFixture):
|
||||||
""" Test the standard pkgbase request route GET method. """
|
""" Test the standard pkgbase request route GET method. """
|
||||||
caplog.set_level(DEBUG)
|
caplog.set_level(DEBUG)
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
auto_orphan_age = config.getint("options", "auto_orphan_age")
|
auto_orphan_age = config.getint("options", "auto_orphan_age")
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase.OutOfDateTS = now - auto_orphan_age - 100
|
pkgbase.OutOfDateTS = now - auto_orphan_age - 100
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import List
|
from typing import List
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
@ -14,7 +13,7 @@ from redis.client import Pipeline
|
||||||
import aurweb.models.dependency_type as dt
|
import aurweb.models.dependency_type as dt
|
||||||
import aurweb.models.relation_type as rt
|
import aurweb.models.relation_type as rt
|
||||||
|
|
||||||
from aurweb import asgi, config, db, rpc, scripts
|
from aurweb import asgi, config, db, rpc, scripts, time
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.license import License
|
from aurweb.models.license import License
|
||||||
from aurweb.models.package import Package
|
from aurweb.models.package import Package
|
||||||
|
@ -112,7 +111,7 @@ def packages(user: User, user2: User, user3: User) -> List[Package]:
|
||||||
PackageBase=output[0].PackageBase,
|
PackageBase=output[0].PackageBase,
|
||||||
Keyword=keyword)
|
Keyword=keyword)
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
for user_ in [user, user2, user3]:
|
for user_ in [user, user2, user3]:
|
||||||
db.create(PackageVote, User=user_,
|
db.create(PackageVote, User=user_,
|
||||||
PackageBase=output[0].PackageBase, VoteTS=now)
|
PackageBase=output[0].PackageBase, VoteTS=now)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
import lxml.etree
|
import lxml.etree
|
||||||
|
@ -6,7 +5,7 @@ import pytest
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from aurweb import db, logging
|
from aurweb import db, logging, time
|
||||||
from aurweb.asgi import app
|
from aurweb.asgi import app
|
||||||
from aurweb.models.account_type import AccountType
|
from aurweb.models.account_type import AccountType
|
||||||
from aurweb.models.package import Package
|
from aurweb.models.package import Package
|
||||||
|
@ -40,7 +39,7 @@ def user():
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def packages(user):
|
def packages(user):
|
||||||
pkgs = []
|
pkgs = []
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
|
|
||||||
# Create 101 packages; we limit 100 on RSS feeds.
|
# Create 101 packages; we limit 100 on RSS feeds.
|
||||||
with db.begin():
|
with db.begin():
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
""" Test our Session model. """
|
""" Test our Session model. """
|
||||||
from datetime import datetime
|
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.session import Session, generate_unique_sid
|
from aurweb.models.session import Session, generate_unique_sid
|
||||||
from aurweb.models.user import User
|
from aurweb.models.user import User
|
||||||
|
@ -30,7 +29,7 @@ def user() -> User:
|
||||||
def session(user: User) -> Session:
|
def session(user: User) -> Session:
|
||||||
with db.begin():
|
with db.begin():
|
||||||
session = db.create(Session, User=user, SessionID="testSession",
|
session = db.create(Session, User=user, SessionID="testSession",
|
||||||
LastUpdateTS=datetime.utcnow().timestamp())
|
LastUpdateTS=time.utcnow())
|
||||||
yield session
|
yield session
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,7 +47,7 @@ def test_session_cs():
|
||||||
|
|
||||||
with db.begin():
|
with db.begin():
|
||||||
session_cs = db.create(Session, User=user2, SessionID="TESTSESSION",
|
session_cs = db.create(Session, User=user2, SessionID="TESTSESSION",
|
||||||
LastUpdateTS=datetime.utcnow().timestamp())
|
LastUpdateTS=time.utcnow())
|
||||||
|
|
||||||
assert session_cs.SessionID == "TESTSESSION"
|
assert session_cs.SessionID == "TESTSESSION"
|
||||||
assert session_cs.SessionID != "testSession"
|
assert session_cs.SessionID != "testSession"
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import aurweb.filters # noqa: F401
|
import aurweb.filters # noqa: F401
|
||||||
|
|
||||||
from aurweb import config, db, templates
|
from aurweb import config, db, templates, time
|
||||||
from aurweb.filters import as_timezone, number_format
|
from aurweb.filters import as_timezone, number_format
|
||||||
from aurweb.filters import timestamp_to_datetime as to_dt
|
from aurweb.filters import timestamp_to_datetime as to_dt
|
||||||
from aurweb.models import Package, PackageBase, User
|
from aurweb.models import Package, PackageBase, User
|
||||||
|
@ -59,7 +58,7 @@ def user(db_test) -> User:
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def pkgbase(user: User) -> PackageBase:
|
def pkgbase(user: User) -> PackageBase:
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
pkgbase = db.create(PackageBase, Name="test-pkg", Maintainer=user,
|
pkgbase = db.create(PackageBase, Name="test-pkg", Maintainer=user,
|
||||||
SubmittedTS=now, ModifiedTS=now)
|
SubmittedTS=now, ModifiedTS=now)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
@ -10,7 +9,7 @@ import pytest
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from aurweb import config, db, filters
|
from aurweb import config, db, filters, time
|
||||||
from aurweb.models.account_type import DEVELOPER_ID, AccountType
|
from aurweb.models.account_type import DEVELOPER_ID, AccountType
|
||||||
from aurweb.models.tu_vote import TUVote
|
from aurweb.models.tu_vote import TUVote
|
||||||
from aurweb.models.tu_voteinfo import TUVoteInfo
|
from aurweb.models.tu_voteinfo import TUVoteInfo
|
||||||
|
@ -111,7 +110,7 @@ def user():
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def proposal(user, tu_user):
|
def proposal(user, tu_user):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
agenda = "Test proposal."
|
agenda = "Test proposal."
|
||||||
start = ts - 5
|
start = ts - 5
|
||||||
end = ts + 1000
|
end = ts + 1000
|
||||||
|
@ -165,7 +164,7 @@ def test_tu_empty_index(client, tu_user):
|
||||||
|
|
||||||
|
|
||||||
def test_tu_index(client, tu_user):
|
def test_tu_index(client, tu_user):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
|
|
||||||
# Create some test votes: (Agenda, Start, End).
|
# Create some test votes: (Agenda, Start, End).
|
||||||
votes = [
|
votes = [
|
||||||
|
@ -258,7 +257,7 @@ def test_tu_index(client, tu_user):
|
||||||
|
|
||||||
|
|
||||||
def test_tu_index_table_paging(client, tu_user):
|
def test_tu_index_table_paging(client, tu_user):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
|
|
||||||
with db.begin():
|
with db.begin():
|
||||||
for i in range(25):
|
for i in range(25):
|
||||||
|
@ -366,7 +365,7 @@ def test_tu_index_table_paging(client, tu_user):
|
||||||
|
|
||||||
|
|
||||||
def test_tu_index_sorting(client, tu_user):
|
def test_tu_index_sorting(client, tu_user):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
|
|
||||||
with db.begin():
|
with db.begin():
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
|
@ -436,7 +435,7 @@ def test_tu_index_sorting(client, tu_user):
|
||||||
|
|
||||||
|
|
||||||
def test_tu_index_last_votes(client, tu_user, user):
|
def test_tu_index_last_votes(client, tu_user, user):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
|
|
||||||
with db.begin():
|
with db.begin():
|
||||||
# Create a proposal which has ended.
|
# Create a proposal which has ended.
|
||||||
|
@ -584,7 +583,7 @@ def test_tu_running_proposal(client: TestClient,
|
||||||
def test_tu_ended_proposal(client, proposal):
|
def test_tu_ended_proposal(client, proposal):
|
||||||
tu_user, user, voteinfo = proposal
|
tu_user, user, voteinfo = proposal
|
||||||
|
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
voteinfo.End = ts - 5 # 5 seconds ago.
|
voteinfo.End = ts - 5 # 5 seconds ago.
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models.account_type import TRUSTED_USER_ID
|
from aurweb.models.account_type import TRUSTED_USER_ID
|
||||||
from aurweb.models.tu_vote import TUVote
|
from aurweb.models.tu_vote import TUVote
|
||||||
from aurweb.models.tu_voteinfo import TUVoteInfo
|
from aurweb.models.tu_voteinfo import TUVoteInfo
|
||||||
|
@ -27,7 +25,7 @@ def user() -> User:
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def tu_voteinfo(user: User) -> TUVoteInfo:
|
def tu_voteinfo(user: User) -> TUVoteInfo:
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
tu_voteinfo = db.create(TUVoteInfo, Agenda="Blah blah.",
|
tu_voteinfo = db.create(TUVoteInfo, Agenda="Blah blah.",
|
||||||
User=user.Username,
|
User=user.Username,
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.db import create, rollback
|
from aurweb.db import create, rollback
|
||||||
from aurweb.models.account_type import TRUSTED_USER_ID
|
from aurweb.models.account_type import TRUSTED_USER_ID
|
||||||
from aurweb.models.tu_voteinfo import TUVoteInfo
|
from aurweb.models.tu_voteinfo import TUVoteInfo
|
||||||
|
@ -26,7 +24,7 @@ def user() -> User:
|
||||||
|
|
||||||
|
|
||||||
def test_tu_voteinfo_creation(user: User):
|
def test_tu_voteinfo_creation(user: User):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
tu_voteinfo = create(TUVoteInfo,
|
tu_voteinfo = create(TUVoteInfo,
|
||||||
Agenda="Blah blah.",
|
Agenda="Blah blah.",
|
||||||
|
@ -50,7 +48,7 @@ def test_tu_voteinfo_creation(user: User):
|
||||||
|
|
||||||
|
|
||||||
def test_tu_voteinfo_is_running(user: User):
|
def test_tu_voteinfo_is_running(user: User):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
tu_voteinfo = create(TUVoteInfo,
|
tu_voteinfo = create(TUVoteInfo,
|
||||||
Agenda="Blah blah.",
|
Agenda="Blah blah.",
|
||||||
|
@ -66,7 +64,7 @@ def test_tu_voteinfo_is_running(user: User):
|
||||||
|
|
||||||
|
|
||||||
def test_tu_voteinfo_total_votes(user: User):
|
def test_tu_voteinfo_total_votes(user: User):
|
||||||
ts = int(datetime.utcnow().timestamp())
|
ts = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
tu_voteinfo = create(TUVoteInfo,
|
tu_voteinfo = create(TUVoteInfo,
|
||||||
Agenda="Blah blah.",
|
Agenda="Blah blah.",
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
from datetime import datetime
|
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from aurweb import config, db
|
from aurweb import config, db, time
|
||||||
from aurweb.models import TUVote, TUVoteInfo, User
|
from aurweb.models import TUVote, TUVoteInfo, User
|
||||||
from aurweb.models.account_type import TRUSTED_USER_ID
|
from aurweb.models.account_type import TRUSTED_USER_ID
|
||||||
from aurweb.scripts import tuvotereminder as reminder
|
from aurweb.scripts import tuvotereminder as reminder
|
||||||
|
@ -56,7 +55,7 @@ def user3() -> User:
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def voteinfo(user: User) -> TUVoteInfo:
|
def voteinfo(user: User) -> TUVoteInfo:
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
start = config.getint("tuvotereminder", "range_start")
|
start = config.getint("tuvotereminder", "range_start")
|
||||||
with db.begin():
|
with db.begin():
|
||||||
voteinfo = db.create(TUVoteInfo, Agenda="Lorem ipsum.",
|
voteinfo = db.create(TUVoteInfo, Agenda="Lorem ipsum.",
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from aurweb import db
|
from aurweb import db, time
|
||||||
from aurweb.models import User
|
from aurweb.models import User
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.scripts import usermaint
|
from aurweb.scripts import usermaint
|
||||||
|
@ -24,7 +22,7 @@ def user() -> User:
|
||||||
def test_usermaint_noop(user: User):
|
def test_usermaint_noop(user: User):
|
||||||
""" Last[SSH]Login isn't expired in this test: usermaint is noop. """
|
""" Last[SSH]Login isn't expired in this test: usermaint is noop. """
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
with db.begin():
|
with db.begin():
|
||||||
user.LastLoginIPAddress = "127.0.0.1"
|
user.LastLoginIPAddress = "127.0.0.1"
|
||||||
user.LastLogin = now - 10
|
user.LastLogin = now - 10
|
||||||
|
@ -45,7 +43,7 @@ def test_usermaint(user: User):
|
||||||
its code path.
|
its code path.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
now = int(datetime.utcnow().timestamp())
|
now = time.utcnow()
|
||||||
limit_to = now - 86400 * 7
|
limit_to = now - 86400 * 7
|
||||||
with db.begin():
|
with db.begin():
|
||||||
user.LastLoginIPAddress = "127.0.0.1"
|
user.LastLoginIPAddress = "127.0.0.1"
|
||||||
|
|
Loading…
Add table
Reference in a new issue