1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
from typing import Optional, Type
from dateutil.relativedelta import relativedelta
from psqlextra.models import PostgresPartitionedModel
from .config import PostgresPartitioningConfig
from .current_time_strategy import PostgresCurrentTimePartitioningStrategy
from .time_partition_size import PostgresTimePartitionSize
def partition_by_current_time(
model: Type[PostgresPartitionedModel],
count: int,
years: Optional[int] = None,
months: Optional[int] = None,
weeks: Optional[int] = None,
days: Optional[int] = None,
max_age: Optional[relativedelta] = None,
name_format: Optional[str] = None,
) -> PostgresPartitioningConfig:
"""Short-hand for generating a partitioning config that partitions the
specified model by time.
One specifies one of the `years`, `months`, `weeks`
or `days` parameter to indicate the size of each
partition. These parameters cannot be combined.
Arguments:
count:
The amount of partitions to create ahead of
the current date/time.
years:
The amount of years each partition should contain.
months:
The amount of months each partition should contain.
weeks:
The amount of weeks each partition should contain.
days:
The amount of days each partition should contain.
max_age:
The maximum age of a partition (calculated from the
start of the partition).
Partitions older than this are deleted when running
a delete/cleanup run.
name_format:
The datetime format which is being passed to datetime.strftime
to generate the partition name.
"""
size = PostgresTimePartitionSize(
years=years, months=months, weeks=weeks, days=days
)
return PostgresPartitioningConfig(
model=model,
strategy=PostgresCurrentTimePartitioningStrategy(
size=size,
count=count,
max_age=max_age,
name_format=name_format,
),
)
__all_ = ["partition_by_current_time"]
|