def test_load_all(self): self.assertEqual(0, Page.objects.count()) self.assertEqual(Site.objects.get(pk=1).name, 'example.com') count = load_fixtures([p('..', 'smuggler_fixtures', 'all_dump.json')]) self.assertEqual(count, 2) self.assertEqual('test', Page.objects.get(pk=1).title) self.assertEqual('test.com', Site.objects.get(pk=1).name)
def test_load_all(self): self.assertEqual(0, Page.objects.count()) self.assertEqual(Site.objects.get(pk=1).name, 'example.com') count = load_fixtures([ p('..', 'smuggler_fixtures', 'all_dump.json') ]) self.assertEqual(count, 2) self.assertEqual('test', Page.objects.get(pk=1).title) self.assertEqual('test.com', Site.objects.get(pk=1).name)
def form_valid(self, form): uploads = form.cleaned_data.get('uploads', []) store = form.cleaned_data.get('store', False) picked_files = form.cleaned_data.get('picked_files', []) fixtures = [] tmp_fixtures = [] for upload in uploads: file_name = upload.name if store: # Store the file in SMUGGLER_FIXTURE_DIR destination_path = os.path.join( settings.SMUGGLER_FIXTURE_DIR, file_name) save_uploaded_file_on_disk(upload, destination_path) else: # Store the file in a tmp file prefix, suffix = os.path.splitext(file_name) destination_path = tempfile.mkstemp( suffix=suffix, prefix=prefix + '_')[1] save_uploaded_file_on_disk(upload, destination_path) tmp_fixtures.append(destination_path) fixtures.append(destination_path) for file_name in picked_files: fixtures.append(file_name) try: obj_count = load_fixtures(fixtures) user_msg = ' '.join([ ungettext_lazy( 'Successfully imported %(count)d file.', 'Successfully imported %(count)d files.', len(fixtures) ) % {'count': len(fixtures)}, ungettext_lazy( 'Loaded %(count)d object.', 'Loaded %(count)d objects.', obj_count ) % {'count': obj_count}]) messages.info(self.request, user_msg) except (IntegrityError, ObjectDoesNotExist, DeserializationError, CommandError) as e: messages.error( self.request, _('An exception occurred while loading data: %s') % str(e)) finally: # Remove our tmp files for tmp_file in tmp_fixtures: os.unlink(tmp_file) return super(LoadDataView, self).form_valid(form)
def test_load_page(self): self.assertEqual(0, Page.objects.count()) count = load_fixtures([p('..', 'smuggler_fixtures', 'page_dump.json')]) self.assertEqual(count, 1) self.assertEqual('test', Page.objects.get(pk=1).title)
def load_dump(fixtures, tmp_fixtures=None): cache.set('BACKUP_LOAD_IN_PROGRESS', True) from common.models import BackupLoadTime from django.contrib.contenttypes.models import ContentType backup_load = BackupLoadTime() backup_load.start = localtime(now()) reserve_backup_file = make_dump() reserve_backup_file.pk = None reserve_backup_file_path = reserve_backup_file.backup_file_path ContentType.objects.clear_cache() # clear cache is needed for properly run of django commands try: output = StringIO() call_command('flush', format='json', indent=2, stdout=output, interactive=False) output.close() for app in settings.INSTALLED_APPS: label = app.split('.')[-1] # Get SQL commands from sqlsequencereset output = StringIO() call_command('sqlsequencereset', label, stdout=output, interactive=False) sql = output.getvalue() # Remove terminal color codes from sqlsequencereset output ansi_escape = re.compile(r'\x1b[^m]*m') sql = ansi_escape.sub('', sql) if(sql): with connection.cursor() as cursor: cursor.execute(sql) output.close() result = load_fixtures(fixtures) message = "Восстановление из бекапа было сделано успешно. " mail_admins( subject="Бекап системы", message=message, fail_silently=False, html_message=None) except Exception as e: output = StringIO() call_command('flush', format='json', indent=2, stdout=output, interactive=False) output.close() for app in settings.INSTALLED_APPS: label = app.split('.')[-1] # Get SQL commands from sqlsequencereset output = StringIO() call_command('sqlsequencereset', label, stdout=output, interactive=False) sql = output.getvalue() # Remove terminal color codes from sqlsequencereset output ansi_escape = re.compile(r'\x1b[^m]*m') sql = ansi_escape.sub('', sql) if(sql): with connection.cursor() as cursor: cursor.execute(sql) output.close() load_fixtures((reserve_backup_file_path,)) message = 'Восстановление из бекапа не удалось' logger.exception(message) mail_admins( subject="Бекап системы", message=message, fail_silently=False, html_message=None) reserve_backup_file.save() if tmp_fixtures: for tmp_file in tmp_fixtures: os.unlink(tmp_file) backup_load.end = localtime(now()) backup_load.save() cache.set('BACKUP_LOAD_IN_PROGRESS', False)
def test_load_page(self): self.assertEqual(0, Page.objects.count()) count = load_fixtures([ p('..', 'smuggler_fixtures', 'page_dump.json')]) self.assertEqual(count, 1) self.assertEqual('test', Page.objects.get(pk=1).title)