move_media_to_s3.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:fieldsight-kobocat 作者: awemulya 项目源码 文件源码
def handle(self, *args, **kwargs):
        try:
            fs = get_storage_class(
                'django.core.files.storage.FileSystemStorage')()
            s3 = get_storage_class('storages.backends.s3boto.S3BotoStorage')()
        except:
            print _(u"Missing necessary libraries. Try running: pip install -r"
                    "requirements/s3.pip")
            sys.exit(1)

        default_storage = get_storage_class()()
        if default_storage.__class__ != s3.__class__:
            print _(u"You must first set your default storage to s3 in your "
                    "local_settings.py file.")
            sys.exit(1)

        classes_to_move = [
            (Attachment, 'media_file', attachment_upload_to),
            (XForm, 'xls', xform_upload_to),
        ]

        for cls, file_field, upload_to in classes_to_move:
            print _("Moving %(class)ss to s3...") % {'class': cls.__name__}
            for i in cls.objects.all():
                f = getattr(i, file_field)
                old_filename = f.name
                if f.name and fs.exists(f.name) and not s3.exists(
                        upload_to(i, f.name)):
                    f.save(fs.path(f.name), fs.open(fs.path(f.name)))
                    print (_("\t+ '%(fname)s'\n\t---> '%(url)s'")
                           % {'fname': fs.path(old_filename), 'url': f.url})
                else:
                    print "\t- (f.name=%s, fs.exists(f.name)=%s, not s3.exist"\
                          "s(upload_to(i, f.name))=%s)" % (
                              f.name, fs.exists(f.name),
                              not s3.exists(upload_to(i, f.name)))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号