# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2017-12-05 00:24
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('dashboard', '0006_request_request_date'),
    ]

    operations = [
        migrations.AlterField(
            model_name='request',
            name='allocation_type',
            field=models.CharField(blank=True, max_length=100),
        ),
        migrations.AlterField(
            model_name='request',
            name='applications_to_be_used',
            field=models.CharField(blank=True, max_length=100),
        ),
        migrations.AlterField(
            model_name='request',
            name='disk_usage_range_per_job',
            field=models.BigIntegerField(blank=True),
        ),
        migrations.AlterField(
            model_name='request',
            name='document',
            field=models.FileField(blank=True, upload_to=b''),
        ),
        migrations.AlterField(
            model_name='request',
            name='field_of_science',
            field=models.CharField(blank=True, max_length=50),
        ),
        migrations.AlterField(
            model_name='request',
            name='keywords',
            field=models.CharField(blank=True, max_length=100),
        ),
        migrations.AlterField(
            model_name='request',
            name='max_memory_per_cpu',
            field=models.BigIntegerField(blank=True),
        ),
        migrations.AlterField(
            model_name='request',
            name='num_cpus_per_job',
            field=models.BigIntegerField(blank=True),
        ),
        migrations.AlterField(
            model_name='request',
            name='request_reviewed_and_funded_by',
            field=models.CharField(blank=True, max_length=100),
        ),
        migrations.AlterField(
            model_name='request',
            name='specific_resource_selection',
            field=models.CharField(blank=True, max_length=100),
        ),
        migrations.AlterField(
            model_name='request',
            name='typical_su_per_job',
            field=models.BigIntegerField(blank=True),
        ),
    ]
