示例#1
0
文件: tools.py 项目: remram44/Unipath
def dict2dir(dir, dic, mode="w"):
    dir = Path(dir)
    if not dir.exists():
        dir.mkdir()
    for filename, content in dic.items():
        p = Path(dir, filename)
        if isinstance(content, dict):
            dict2dir(p, content)
            continue
        f = open(p, mode)
        f.write(content)
        f.close()
示例#2
0
def import_olap_task(self, course_id, filename, just_clear=False):
    course_offering = CourseOffering.objects.get(id=course_id)
    file_path = Path(settings.DATA_PROCESSING_DIR, filename)

    try:
        with transaction.atomic():
            importer = ImportLmsData(course_offering,
                                     file_path,
                                     just_clear=just_clear)
            importer.process()
    finally:
        file_path.remove()
        course_offering.is_importing = False
        course_offering.save()
示例#3
0
def folder_source_clean_path(folder_source):
    if folder_source.path is not None:
        path = Path(folder_source.path)
        if not path.exists():
            raise ValidationError({
                "path": "The folder does not exist."
                })
        elif path.islink():
            raise ValidationError({
                "path": "Symbolic links not allowed."
                })
        elif not path.isdir():
            raise ValidationError({
                "path": "Not a folder."
                })
示例#4
0
def parse_rar_archive(filename, sha256sum=False):
    print("Creating infolist for %s" % filename)
    with rarfile.RarFile(filename, 'r') as afile:
        infolist = afile.infolist()
    print("Infolist created for %s" % filename)
    tmpdir = tempfile.mkdtemp(prefix='extracted-rar-')
    cmd = ['rar', 'x', filename, tmpdir]
    subprocess.check_call(cmd)
    here = path.cwd()
    os.chdir(tmpdir)
    td = path(tmpdir)
    print("Parsing info")
    entries = list()
    for ainfo in infolist:
        if ainfo.isdir():
            print("Skipping directory %s" % ainfo.filename)
            continue
        parsed = parse_archive_info(ainfo, 'rar')
        parsed['bytesize'] = ainfo.file_size
        size, cksum = get_extracted_info(td, ainfo, sha256sum=sha256sum)
        if size != ainfo.file_size:
            raise RuntimeError("Sizes don't match %s" % ainfo.filename)
        parsed['sha256sum'] = cksum
        entries.append(parsed)
    cmd = ['rm', '-fr', tmpdir]
    subprocess.check_call(cmd)
    os.chdir(here)
    return entries
示例#5
0
def parse_rar_archive(filename, sha256sum=False):
    print("Creating infolist for %s" % filename)
    with rarfile.RarFile(filename, 'r') as afile:
        infolist = afile.infolist()
    print("Infolist created for %s" % filename)
    tmpdir = tempfile.mkdtemp(prefix='extracted-rar-')
    cmd = ['rar', 'x', filename, tmpdir]
    subprocess.check_call(cmd)
    here = path.cwd()
    os.chdir(tmpdir)
    td = path(tmpdir)
    print("Parsing info")
    entries = list()
    for ainfo in infolist:
        if ainfo.isdir():
            print("Skipping directory %s" % ainfo.filename)
            continue
        parsed = parse_archive_info(ainfo, 'rar')
        parsed['bytesize'] = ainfo.file_size
        size, cksum = get_extracted_info(td, ainfo, sha256sum=sha256sum)
        if size != ainfo.file_size:
            raise RuntimeError("Sizes don't match %s" % ainfo.filename)
        parsed['sha256sum'] = cksum
        entries.append(parsed)
    cmd = ['rm', '-fr', tmpdir]
    subprocess.check_call(cmd)
    os.chdir(here)
    return entries
示例#6
0
def get_files(directory):
    here = path.cwd()
    directory = path(directory)
    os.chdir(directory)
    walker = directory.walk(filter=FILES)
    files = [p.relative() for p in walker if not p.relative().startswith(".")]
    os.chdir(here)
    return files
示例#7
0
def file_source_clean_path(file_source):
    if file_source.path is not None:
        path = Path(file_source.path)
        if not path.exists():
            raise ValidationError({
                "path": "The file does not exist."
                })
        elif path.islink():
            raise ValidationError({
                "path": "Symbolic links not allowed."
                })
        elif not path.isfile():
            raise ValidationError({
                "path": "Not a file."
                })
        elif not is_valid_file(path):
            raise ValidationError({
                "path": "Not a valid file."
                })
示例#8
0
def preprocess_data_imports(self):
    processing_data_folder = settings.DATA_PROCESSING_DIR
    import_metadata = get_course_import_metadata()

    import_metadata_mapping = {
        course_offering['filename']: course_offering['id']
        for course_offering in import_metadata['courses'].values()
    }

    import_files = Path(import_metadata['import_location']).listdir()

    for import_file in import_files:
        try:
            course_offering = CourseOffering.objects.get(
                id=import_metadata_mapping[import_file.name])
            import_file.move(processing_data_folder)
            course_offering.is_importing = True
            course_offering.save()

            import_olap_task.delay(course_offering.id, import_file.name)
        except KeyError:
            # File is unrecognised so remove it
            import_file.remove()
示例#9
0
def clear_thumbnails_cache(queryset, field, time_create=0):

    now = datetime.now()
    for r in queryset:
        assert hasattr(r, field), _(
            'Objeto da listagem não possui o campo informado')

        if not getattr(r, field):
            continue

        path = Path(getattr(r, field).path)
        cache_files = path.parent.walk()

        for cf in cache_files:
            if cf == path:
                continue

            if time_create:
                data_arquivo = datetime.fromtimestamp(cf.mtime())

                if now - data_arquivo < timedelta(time_create):
                    continue
            cf.remove()
示例#10
0
class Migration(migrations.Migration):

    dependencies = [
        ('ouvidoria', '0006_auto_20190514_0944'),
    ]

    operations = [
        migrations.AlterField(
            model_name='mensagemsolicitacao',
            name='anexo',
            field=models.FileField(blank=True, help_text='Envie um arquivo em anexo a sua mensagem.', null=True, storage=django.core.files.storage.FileSystemStorage(base_url='DO_NOT_USE', location=Path(
                '/home/leandro/desenvolvimento/envs/cmj_media/media_protected')), upload_to=cmj.ouvidoria.models.anexo_ouvidoria_path, validators=[cmj.utils.restringe_tipos_de_arquivo_midias], verbose_name='Anexo'),
        ),
    ]
示例#11
0
from unipath.path import Path

# Django root path where manage.py resides.
BASE_DIR = Path(__file__).ancestor(4)

# The project path which has BASE_DIR, .gitignore, and etc.
PROJECT_DIR = BASE_DIR.parent
示例#12
0
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'djangor.urls'

ALLOWED_HOSTS = ['*']
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [Path(__file__).ancestor(1).child('templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'djangor.wsgi.application'

示例#13
0
def location_exists(location):
    path = Path(location)
    return path.exists()