from django.utils.deconstruct import deconstructible
from django.utils import timezone
from django.conf import settings

import os

@deconstructible
class PathAndRename(object):

    def __init__(self, sub_path):
        self.path = sub_path

        full_path = "%s/%s" % (settings.MEDIA_ROOT, sub_path)
        if not os.path.exists(full_path):
            os.makedirs(full_path)

    def __call__(self, instance, filename):
        # set filename as random string
        ext = filename.split('.')[-1]
        t = timezone.now().strftime('%Y%m%d%H%M%S%f')
        # get filename

        if instance.pk:
            filename = '{}-{}.{}'.format(instance.pk, t, ext)
        else:
            # set filename as random string
            filename = '{}.{}'.format(t, ext)
        # return the whole path to the file
        return os.path.join(self.path , filename)