Този вид проблем е такова минно поле от крайни случаи, че винаги бих делегирал логиката на нещо като IceCube (https://github.com/seejohnrun/ice_cube ). Създаден е да се справя с тези видове повтарящи се графици и идва с лесна поддръжка за сериализиране и т.н. Дори и да изисква малко преосмисляне на начина, по който правите нещата, силно препоръчвам да го използвате.