def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) self.num_copied_files = 0 self.tasks: List[Task] = [] self.collectfast_enabled = settings.enabled self.strategy: Strategy = DisabledStrategy(Storage()) self.found_files: Dict[str, Tuple[Storage, str]] = {}
def __init__(self, *args, **kwargs): # type: (Any, Any) -> None super().__init__(*args, **kwargs) self.num_copied_files = 0 self.tasks = [] # type: List[Task] self.collectfast_enabled = settings.enabled self.strategy = DisabledStrategy(Storage()) # type: Strategy
def directory_path(instance, filename): """.""" # In COR_PARAMETER, add a new parameter by company, in this repo is a dict base_folder_by_company = {1: 'ftpettc', 5: 'ftpnrcc'} # Concat filename with time for generate new_name filename_new = '{}{}'.format(filename, instance.date.strftime('%H:%M:%S')) filename_new = hashlib.md5(filename_new.encode()).hexdigest() company = base_folder_by_company[instance.company.id] file_path = '{}/{}/'.format(company, instance.document_type.folder_path) sub_folder_list_conf = instance.document_type.sub_folder_path.split(',') \ if instance.document_type.sub_folder_path else [] sub_folder_list = instance.folder_params.split(',') \ if instance.folder_params else [] sub_folder = '' # validate sub_folder structure if sub_folder_list_conf and len(sub_folder_list) == len( sub_folder_list_conf): storage = Storage() for sub_folder_item in sub_folder_list: valid_sub_folder = storage.get_valid_name(sub_folder_item) if valid_sub_folder != '': sub_folder += '{}/'.format(valid_sub_folder) else: # if not is a valid subfolder, dicard subfolder sub_folder = '' break file_path += sub_folder file_path += filename_new return file_path
def test_storage_methods(self): """ Make sure that QueuedStorage implements all the methods """ storage = QueuedStorage('django.core.files.storage.FileSystemStorage', 'django.core.files.storage.FileSystemStorage') file_storage = Storage() for attr in dir(file_storage): method = getattr(file_storage, attr) if not callable(method): continue method = getattr(storage, attr, False) self.assertTrue(callable(method), "QueuedStorage has no method '%s'" % attr)
def get(self, request, event, *args, **kwargs): netloc = urlparse(settings.SITE_URL).netloc speaker = self.get_object() slots = self.request.event.current_schedule.talks.filter( submission__speakers=speaker.user, is_visible=True) cal = vobject.iCalendar() cal.add( 'prodid' ).value = f'-//pretalx//{netloc}//{request.event.slug}//{speaker.code}' for slot in slots: slot.build_ical(cal) resp = HttpResponse(cal.serialize(), content_type='text/calendar') speaker_name = Storage().get_valid_name(name=speaker.user.name) resp[ 'Content-Disposition'] = f'attachment; filename="{request.event.slug}-{speaker_name}.ics"' return resp
def get(self, request, event, *args, **kwargs): netloc = urlparse(settings.SITE_URL).netloc speaker = self.get_object() slots = self.request.event.current_schedule.talks.filter( submission__speakers=speaker.user, is_visible=True ).select_related("room", "submission") cal = vobject.iCalendar() cal.add( "prodid" ).value = f"-//pretalx//{netloc}//{request.event.slug}//{speaker.code}" for slot in slots: slot.build_ical(cal) speaker_name = Storage().get_valid_name(name=speaker.user.name) return HttpResponse( cal.serialize(), content_type="text/calendar", headers={ "Content-Disposition": f'attachment; filename="{request.event.slug}-{safe_filename(speaker_name)}.ics"' }, )
# Storage location for uploaded images depends on environment. if not settings.IN_PRODUCTION: # Local development environment upload upload_storage = FileSystemStorage( location=os.path.join(settings.MEDIA_ROOT, 'upload_images'), base_url=urlparse.urljoin(settings.MEDIA_URL, 'upload_images/')) elif settings.IS_AWS_AUTHENTICATED: # Direct upload to S3 upload_storage = S3BotoStorage(location='/upload_images', bucket=getattr(settings, 'AWS_STORAGE_BUCKET_NAME', 'newfs')) else: # Direct upload to S3 upload_storage = Storage() def rename_image_by_type(instance, filename): user_name = instance.uploaded_by.username.lower() image_type = instance.image_type.lower() # Create and update a hash object for getting a unique name. md5 = hashlib.md5() md5.update(filename) md5.update(user_name) md5.update(image_type) md5.update(str(datetime.datetime.now())) new_name = '{0}_{1}.jpg'.format(user_name, md5.hexdigest()) return os.path.join(image_type, new_name)
import os, sys from django.conf import settings from django.core.files.storage import Storage DIRNAME = os.path.dirname(__file__) settings.configure( DEBUG=True, DATABASES={'default': { 'ENGINE': 'django.db.backends.sqlite3', }}, DATABASE_NAME=os.path.join('database.db'), INSTALLED_APPS=( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.admin', 'filemignon', 'tests', ), FILEMIGNON_STORAGE=Storage(), ) from django.test.simple import DjangoTestSuiteRunner test_runner = DjangoTestSuiteRunner(verbosity=1) failures = test_runner.run_tests([ 'tests', ]) if failures: sys.exit(failures)