示例#1
0
 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)
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
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)
示例#6
0
 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)