move time-related functionality out of views.general
This commit is contained in:
parent
645ffa0dad
commit
98c9c1faee
|
@ -1,5 +1,13 @@
|
||||||
import re
|
import re
|
||||||
from datetime import timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
dateformat: str = "%d/%m/%Y"
|
||||||
|
datetimeformat: str = "%d/%m/%Y %H:%M"
|
||||||
|
timeformat: str = "%H:%M"
|
||||||
|
durationformat: str = "%2.1H hours"
|
||||||
|
durationformat_manual: str = "%H hours"
|
||||||
|
|
||||||
|
|
||||||
def _safe_timedelta(duration: timedelta | int | None):
|
def _safe_timedelta(duration: timedelta | int | None):
|
||||||
|
@ -70,3 +78,9 @@ def format_duration(
|
||||||
rf"%\d*\.?\d*{pattern}", replacement, formatted_string
|
rf"%\d*\.?\d*{pattern}", replacement, formatted_string
|
||||||
)
|
)
|
||||||
return formatted_string
|
return formatted_string
|
||||||
|
|
||||||
|
|
||||||
|
def local_strftime(datetime: datetime, format: str = datetimeformat) -> str:
|
||||||
|
return timezone.localtime(datetime).strftime(format)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,10 +7,10 @@ from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from common.time import dateformat, local_strftime
|
||||||
from common.utils import A, Button
|
from common.utils import A, Button
|
||||||
from games.forms import DeviceForm
|
from games.forms import DeviceForm
|
||||||
from games.models import Device
|
from games.models import Device
|
||||||
from games.views.general import dateformat
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -47,7 +47,7 @@ def list_devices(request: HttpRequest) -> HttpResponse:
|
||||||
[
|
[
|
||||||
device.name,
|
device.name,
|
||||||
device.get_type_display(),
|
device.get_type_display(),
|
||||||
device.created_at.strftime(dateformat),
|
local_strftime(device.created_at, dateformat),
|
||||||
render_to_string(
|
render_to_string(
|
||||||
"cotton/button_group_sm.html",
|
"cotton/button_group_sm.html",
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,10 +7,10 @@ from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from common.time import dateformat, local_strftime
|
||||||
from common.utils import A, Button, truncate_with_popover
|
from common.utils import A, Button, truncate_with_popover
|
||||||
from games.forms import EditionForm
|
from games.forms import EditionForm
|
||||||
from games.models import Edition, Game
|
from games.models import Edition, Game
|
||||||
from games.views.general import dateformat
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -75,7 +75,7 @@ def list_editions(request: HttpRequest) -> HttpResponse:
|
||||||
truncate_with_popover(str(edition.platform)),
|
truncate_with_popover(str(edition.platform)),
|
||||||
edition.year_released,
|
edition.year_released,
|
||||||
edition.wikidata,
|
edition.wikidata,
|
||||||
edition.created_at.strftime(dateformat),
|
local_strftime(edition.created_at, dateformat),
|
||||||
render_to_string(
|
render_to_string(
|
||||||
"cotton/button_group_sm.html",
|
"cotton/button_group_sm.html",
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,18 +8,18 @@ from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from common.time import format_duration
|
from common.time import (
|
||||||
|
dateformat,
|
||||||
|
durationformat,
|
||||||
|
durationformat_manual,
|
||||||
|
format_duration,
|
||||||
|
local_strftime,
|
||||||
|
timeformat,
|
||||||
|
)
|
||||||
from common.utils import A, Button, safe_division, truncate_with_popover
|
from common.utils import A, Button, safe_division, truncate_with_popover
|
||||||
from games.forms import GameForm
|
from games.forms import GameForm
|
||||||
from games.models import Edition, Game, Purchase, Session
|
from games.models import Edition, Game, Purchase, Session
|
||||||
from games.views.general import (
|
from games.views.general import use_custom_redirect
|
||||||
dateformat,
|
|
||||||
datetimeformat,
|
|
||||||
durationformat,
|
|
||||||
durationformat_manual,
|
|
||||||
timeformat,
|
|
||||||
use_custom_redirect,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -75,7 +75,7 @@ def list_games(request: HttpRequest) -> HttpResponse:
|
||||||
),
|
),
|
||||||
game.year_released,
|
game.year_released,
|
||||||
game.wikidata,
|
game.wikidata,
|
||||||
game.created_at.strftime(dateformat),
|
local_strftime(game.created_at, dateformat),
|
||||||
render_to_string(
|
render_to_string(
|
||||||
"cotton/button_group_sm.html",
|
"cotton/button_group_sm.html",
|
||||||
{
|
{
|
||||||
|
@ -175,9 +175,9 @@ def view_game(request: HttpRequest, game_id: int) -> HttpResponse:
|
||||||
)
|
)
|
||||||
|
|
||||||
if sessions:
|
if sessions:
|
||||||
playrange_start = sessions.earliest().timestamp_start.strftime("%b %Y")
|
playrange_start = local_strftime(sessions.earliest().timestamp_start, "%b %Y")
|
||||||
latest_session = sessions.latest()
|
latest_session = sessions.latest()
|
||||||
playrange_end = latest_session.timestamp_start.strftime("%b %Y")
|
playrange_end = local_strftime(latest_session.timestamp_start, "%b %Y")
|
||||||
|
|
||||||
playrange = (
|
playrange = (
|
||||||
playrange_start
|
playrange_start
|
||||||
|
@ -269,7 +269,7 @@ def view_game(request: HttpRequest, game_id: int) -> HttpResponse:
|
||||||
"columns": ["Date", "Duration", "Duration (manual)", "Actions"],
|
"columns": ["Date", "Duration", "Duration (manual)", "Actions"],
|
||||||
"rows": [
|
"rows": [
|
||||||
[
|
[
|
||||||
f"{session.timestamp_start.strftime(datetimeformat)}{f" — {session.timestamp_end.strftime(timeformat)}" if session.timestamp_end else ""}",
|
f"{local_strftime(session.timestamp_start)}{f" — {session.timestamp_end.strftime(timeformat)}" if session.timestamp_end else ""}",
|
||||||
(
|
(
|
||||||
format_duration(session.duration_calculated, durationformat)
|
format_duration(session.duration_calculated, durationformat)
|
||||||
if session.duration_calculated
|
if session.duration_calculated
|
||||||
|
|
|
@ -12,12 +12,6 @@ from common.time import format_duration
|
||||||
from common.utils import safe_division
|
from common.utils import safe_division
|
||||||
from games.models import Edition, Game, Platform, Purchase, Session
|
from games.models import Edition, Game, Platform, Purchase, Session
|
||||||
|
|
||||||
dateformat: str = "%d/%m/%Y"
|
|
||||||
datetimeformat: str = "%d/%m/%Y %H:%M"
|
|
||||||
timeformat: str = "%H:%M"
|
|
||||||
durationformat: str = "%2.1H hours"
|
|
||||||
durationformat_manual: str = "%H hours"
|
|
||||||
|
|
||||||
|
|
||||||
def model_counts(request: HttpRequest) -> dict[str, bool]:
|
def model_counts(request: HttpRequest) -> dict[str, bool]:
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -7,10 +7,11 @@ from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from common.time import dateformat, local_strftime
|
||||||
from common.utils import A, Button
|
from common.utils import A, Button
|
||||||
from games.forms import PlatformForm
|
from games.forms import PlatformForm
|
||||||
from games.models import Platform
|
from games.models import Platform
|
||||||
from games.views.general import dateformat, use_custom_redirect
|
from games.views.general import use_custom_redirect
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -47,7 +48,7 @@ def list_platforms(request: HttpRequest) -> HttpResponse:
|
||||||
[
|
[
|
||||||
platform.name,
|
platform.name,
|
||||||
platform.group,
|
platform.group,
|
||||||
platform.created_at.strftime(dateformat),
|
local_strftime(platform.created_at, dateformat),
|
||||||
render_to_string(
|
render_to_string(
|
||||||
"cotton/button_group_sm.html",
|
"cotton/button_group_sm.html",
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,10 +13,11 @@ from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from common.time import dateformat, local_strftime
|
||||||
from common.utils import A, Button, truncate_with_popover
|
from common.utils import A, Button, truncate_with_popover
|
||||||
from games.forms import PurchaseForm
|
from games.forms import PurchaseForm
|
||||||
from games.models import Edition, Purchase
|
from games.models import Edition, Purchase
|
||||||
from games.views.general import dateformat, use_custom_redirect
|
from games.views.general import use_custom_redirect
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -80,23 +81,23 @@ def list_purchases(request: HttpRequest) -> HttpResponse:
|
||||||
purchase.price,
|
purchase.price,
|
||||||
purchase.price_currency,
|
purchase.price_currency,
|
||||||
purchase.infinite,
|
purchase.infinite,
|
||||||
purchase.date_purchased.strftime(dateformat),
|
local_strftime(purchase.date_purchased, dateformat),
|
||||||
(
|
(
|
||||||
purchase.date_refunded.strftime(dateformat)
|
local_strftime(purchase.date_refunded, dateformat)
|
||||||
if purchase.date_refunded
|
if purchase.date_refunded
|
||||||
else "-"
|
else "-"
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
purchase.date_finished.strftime(dateformat)
|
local_strftime(purchase.date_finished, dateformat)
|
||||||
if purchase.date_finished
|
if purchase.date_finished
|
||||||
else "-"
|
else "-"
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
purchase.date_dropped.strftime(dateformat)
|
local_strftime(purchase.date_dropped, dateformat)
|
||||||
if purchase.date_dropped
|
if purchase.date_dropped
|
||||||
else "-"
|
else "-"
|
||||||
),
|
),
|
||||||
purchase.created_at.strftime(dateformat),
|
local_strftime(purchase.created_at, dateformat),
|
||||||
render_to_string(
|
render_to_string(
|
||||||
"cotton/button_group_sm.html",
|
"cotton/button_group_sm.html",
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,18 +8,18 @@ from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from common.time import format_duration
|
from common.time import (
|
||||||
|
dateformat,
|
||||||
|
durationformat,
|
||||||
|
durationformat_manual,
|
||||||
|
format_duration,
|
||||||
|
local_strftime,
|
||||||
|
timeformat,
|
||||||
|
)
|
||||||
from common.utils import A, Button, truncate_with_popover
|
from common.utils import A, Button, truncate_with_popover
|
||||||
from games.forms import SessionForm
|
from games.forms import SessionForm
|
||||||
from games.models import Purchase, Session
|
from games.models import Purchase, Session
|
||||||
from games.views.general import (
|
from games.views.general import use_custom_redirect
|
||||||
dateformat,
|
|
||||||
datetimeformat,
|
|
||||||
durationformat,
|
|
||||||
durationformat_manual,
|
|
||||||
timeformat,
|
|
||||||
use_custom_redirect,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -64,7 +64,7 @@ def list_sessions(request: HttpRequest) -> HttpResponse:
|
||||||
args=[session.purchase.edition.game.pk],
|
args=[session.purchase.edition.game.pk],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
f"{session.timestamp_start.strftime(datetimeformat)}{f" — {session.timestamp_end.strftime(timeformat)}" if session.timestamp_end else ""}",
|
f"{local_strftime(session.timestamp_start)}{f" — {local_strftime(session.timestamp_end, timeformat)}" if session.timestamp_end else ""}",
|
||||||
(
|
(
|
||||||
format_duration(session.duration_calculated, durationformat)
|
format_duration(session.duration_calculated, durationformat)
|
||||||
if session.duration_calculated
|
if session.duration_calculated
|
||||||
|
|
Loading…
Reference in New Issue