Exemple #1
0
def home(req):
    main = fs.FileSystemStorage()
    dirs, files = main.listdir("")
    des = []
    for file in files:
        des.append(Desc(file, str(file).replace(".", "_dot_")))
    return render(req, 'camtest.html', {'data': des})
Exemple #2
0
def get_photos(username):
    photos = []
    fs = storage.FileSystemStorage(location=settings.MEDIA_ROOT)
    for short_code, url in _get_photo_list(username):
        if not fs.exists(short_code):
            response = requests.get(url)
            if not response.ok:
                LOGGER.error('Error fetching image: %r', response.status_code)
                continue
            fs.save(short_code, io.BytesIO(response.content))
        photos.append(fs.url(short_code))
    return photos
Exemple #3
0
    def update(self, uploaded_file):
        """uploaded_file is an instance of
        django UploadedFile object
        """
        #1) come up with a file name

        file_storage = storage.FileSystemStorage(
            location=self.upload_directory, base_url=self.upload_url)

        #todo: need better function here to calc name
        file_name = file_storage.get_available_name(uploaded_file.name)
        file_storage.save(file_name, uploaded_file)
        url = file_storage.url(file_name)

        old_file = self.value
        old_file = old_file.replace(self.upload_url, '', 1)
        old_file_path = os.path.join(self.upload_directory, old_file)
        if os.path.isfile(old_file_path):
            os.unlink(old_file_path)

        #saved file path is relative to the upload_directory
        #so that things could be easily relocated
        super(ImageValue, self).update(url)
Exemple #4
0
class ImportPackageWizard(views.ModalFormMixin,
                          wizard_views.SessionWizardView):
    file_storage = storage.FileSystemStorage(location=consts.CACHE_DIR)
    template_name = 'packages/upload.html'
    condition_dict = {'add_category': is_app}

    def get_context_data(self, **kwargs):
        context = super(ImportPackageWizard, self).get_context_data(**kwargs)
        context['murano_repo_url'] = packages_consts.MURANO_REPO_URL
        return context

    def done(self, form_list, **kwargs):
        data = self.get_all_cleaned_data()
        app_id = self.storage.get_step_data('upload')['package'].id
        # Remove package file from result data
        for key in ('package', 'import_type', 'url', 'repo_version',
                    'repo_name'):
            del data[key]

        dep_pkgs = self.storage.get_step_data('upload').get('dependencies', [])

        redirect = reverse('horizon:murano:packages:index')
        dep_data = {'enabled': data['enabled'], 'is_public': data['is_public']}
        murano_client = api.muranoclient(self.request)
        for dep_pkg in dep_pkgs:
            try:
                murano_client.packages.update(dep_pkg.id, dep_data)
            except Exception as e:
                msg = _("Couldn't update package {0} parameters. Error: {1}")\
                    .format(dep_pkg.fully_qualified_name, e)
                LOG.warning(msg)
                messages.warning(self.request, msg)

        try:
            data['tags'] = [t.strip() for t in data['tags'].split(',')]
            murano_client.packages.update(app_id, data)
        except exc.HTTPForbidden:
            msg = _("You are not allowed to change"
                    " this properties of the package")
            LOG.exception(msg)
            exceptions.handle(
                self.request,
                msg,
                redirect=reverse('horizon:murano:packages:index'))
        except (exc.HTTPException, Exception):
            LOG.exception(_('Modifying package failed'))
            exceptions.handle(self.request,
                              _('Unable to modify package'),
                              redirect=redirect)
        else:
            msg = _('Package parameters successfully updated.')
            LOG.info(msg)
            messages.success(self.request, msg)
            return http.HttpResponseRedirect(redirect)

    def _handle_exception(self, original_e):
        exc_info = sys.exc_info()
        reason = ''
        if hasattr(original_e, 'details'):
            try:
                error = json.loads(original_e.details).get('error')
                if error:
                    reason = error.get('message')
            except ValueError:
                # Let horizon operate with original exception
                raise exc_info[0], exc_info[1], exc_info[2]
        msg = _('Uploading package failed. {0}').format(reason)
        LOG.exception(msg)
        exceptions.handle(self.request,
                          msg,
                          redirect=reverse('horizon:murano:packages:index'))

    def process_step(self, form):
        @catalog_views.update_latest_apps
        def _update_latest_apps(request, app_id):
            LOG.info('Adding {0} application to the'
                     ' latest apps list'.format(app_id))

        step_data = self.get_form_step_data(form)
        if self.steps.current == 'upload':
            import_type = form.cleaned_data['import_type']
            data = {}
            f = None
            base_url = packages_consts.MURANO_REPO_URL

            if import_type == 'upload':
                pkg = form.cleaned_data['package']
                f = pkg.file
            elif import_type == 'by_url':
                f = form.cleaned_data['url']
            elif import_type == 'by_name':
                name = form.cleaned_data['repo_name']
                version = form.cleaned_data['repo_version']
                f = muranoclient_utils.to_url(
                    name,
                    version=version,
                    path='/apps/',
                    extension='.zip',
                    base_url=base_url,
                )

            try:
                package = muranoclient_utils.Package.from_file(f)
                name = package.manifest['FullName']
            except Exception as e:
                msg = _("Package creation failed" "Reason: {0}").format(e)
                LOG.exception(msg)
                messages.error(self.request, msg)
                raise exceptions.Http302(
                    reverse('horizon:murano:packages:index'))

            def _ensure_images(name, package):
                try:
                    imgs = muranoclient_utils.ensure_images(
                        glance_client=glance_client,
                        image_specs=package.images(),
                        base_url=base_url)
                    for img in imgs:
                        msg = _("Added {0}, {1} image to glance").format(
                            img['name'],
                            img['id'],
                        )
                        messages.success(self.request, msg)
                        LOG.info(msg)
                except Exception as e:
                    msg = _("Error {0} occurred while installing "
                            "images for {1}").format(e, name)
                    messages.error(self.request, msg)
                    LOG.exception(msg)

            reqs = package.requirements(base_url=base_url)
            glance_client = glance.glanceclient(self.request, version='1')
            original_package = reqs.pop(name)
            step_data['dependencies'] = []
            for dep_name, dep_package in reqs.iteritems():
                _ensure_images(dep_name, dep_package)
                try:
                    files = {dep_name: dep_package.file()}
                    package = api.muranoclient(self.request).packages.create(
                        data, files)
                    messages.success(
                        self.request,
                        _('Package {0} uploaded').format(dep_name))
                    _update_latest_apps(request=self.request,
                                        app_id=package.id)
                    step_data['dependencies'].append(package)
                except exc.HTTPConflict:
                    msg = _("Package {0} already registered.").format(dep_name)
                    messages.warning(self.request, msg)
                    LOG.exception(msg)
                except Exception as e:
                    msg = _("Error {0} occurred while "
                            "installing package {1}").format(e, dep_name)
                    messages.error(self.request, msg)
                    LOG.exception(msg)
                    continue

            # add main packages images
            _ensure_images(name, original_package)

            # import main package itself
            try:
                files = {name: original_package.file()}
                package = api.muranoclient(self.request).packages.create(
                    data, files)
                messages.success(self.request,
                                 _('Package {0} uploaded').format(name))
                _update_latest_apps(request=self.request, app_id=package.id)

                step_data['package'] = package

            except exc.HTTPConflict:
                msg = _("Package with specified name already exists")
                LOG.exception(msg)
                exceptions.handle(
                    self.request,
                    msg,
                    redirect=reverse('horizon:murano:packages:index'))
            except exc.HTTPInternalServerError as e:
                self._handle_exception(e)

            except exc.HTTPException as e:
                reason = muranodashboard_utils.parse_api_error(
                    getattr(e, 'details', ''))
                if not reason:
                    raise
                LOG.exception(reason)
                exceptions.handle(
                    self.request,
                    reason,
                    redirect=reverse('horizon:murano:packages:index'))

            except Exception as original_e:
                self._handle_exception(original_e)

        return step_data

    def get_form_kwargs(self, step=None):
        kwargs = {}
        if step == 'add_category':
            kwargs.update({'request': self.request})
        if step == 'modify':
            package = self.storage.get_step_data('upload').get('package')
            kwargs.update({'package': package})
        return kwargs
Exemple #5
0
def upload(req):
    myfile = req.FILES['myfile']
    main = fs.FileSystemStorage()
    name = main.save(myfile.name, myfile)
    return HttpResponse("ok {0}".format(len))
Exemple #6
0
class ImportPackageWizard(horizon_views.PageTitleMixin, views.ModalFormMixin,
                          wizard_views.SessionWizardView):
    file_storage = storage.FileSystemStorage(location=consts.CACHE_DIR)
    template_name = 'packages/upload.html'
    condition_dict = {'add_category': is_app}
    page_title = _("Import Package")

    def get_form_initial(self, step):
        initial_dict = self.initial_dict.get(step, {})
        if step == 'upload':
            for name in ['url', 'repo_name', 'repo_version', 'import_type']:
                if name in self.request.GET:
                    initial_dict[name] = self.request.GET[name]
        return initial_dict

    def get_context_data(self, **kwargs):
        context = super(ImportPackageWizard, self).get_context_data(**kwargs)
        repo_url = urlparse.urlparse(packages_consts.MURANO_REPO_URL)
        context['murano_repo_url'] = "{}://{}".format(repo_url.scheme,
                                                      repo_url.netloc)
        return context

    def done(self, form_list, **kwargs):
        data = self.get_all_cleaned_data()
        app_id = self.storage.get_step_data('upload')['package'].id
        # Remove package file from result data
        for key in ('package', 'import_type', 'url', 'repo_version',
                    'repo_name'):
            del data[key]

        dep_pkgs = self.storage.get_step_data('upload').get('dependencies', [])

        installed_images = self.storage.get_step_data('upload').get(
            'images', [])

        redirect = reverse('horizon:app-catalog:packages:index')
        dep_data = {'enabled': data['enabled'], 'is_public': data['is_public']}
        murano_client = api.muranoclient(self.request)
        for dep_pkg in dep_pkgs:
            try:
                murano_client.packages.update(dep_pkg.id, dep_data)
                LOG.debug('Success update for package {0}.'.format(dep_pkg.id))
            except Exception as e:
                msg = _("Couldn't update package {0} parameters. Error: {1}")\
                    .format(dep_pkg.fully_qualified_name, e)
                LOG.warning(msg)
                messages.warning(self.request, msg)

        # Images have been imported as private images during the 'upload' step
        # If the package is public, make the required images public
        if data['is_public']:
            try:
                glance_client = glance.glanceclient(self.request, '1')
            except Exception:
                glance_client = None

            if glance_client:
                for img in installed_images:
                    try:
                        glance_client.images.update(img['id'], is_public=True)
                        LOG.debug('Success update for image {0}'.format(
                            img['id']))
                    except Exception as e:
                        msg = _("Error {0} occurred while setting image {1}, "
                                "{2} public").format(e, img['name'], img['id'])
                        messages.error(self.request, msg)
                        LOG.exception(msg)
            elif len(installed_images):
                msg = _("Couldn't initialise glance v1 client, "
                        "therefore could not make the following images "
                        "public: {0}").format(' '.join(
                            [img['name'] for img in installed_images]))
                messages.warning(self.request, msg)
                LOG.warning(msg)

        try:
            data['tags'] = [t.strip() for t in data['tags'].split(',')]
            murano_client.packages.update(app_id, data)
        except exc.HTTPForbidden:
            msg = _("You are not allowed to change"
                    " this properties of the package")
            LOG.exception(msg)
            exceptions.handle(
                self.request,
                msg,
                redirect=reverse('horizon:app-catalog:packages:index'))
        except (exc.HTTPException, Exception):
            LOG.exception(_('Modifying package failed'))
            exceptions.handle(self.request,
                              _('Unable to modify package'),
                              redirect=redirect)
        else:
            msg = _('Package parameters successfully updated.')
            LOG.info(msg)
            messages.success(self.request, msg)
            return http.HttpResponseRedirect(redirect)

    def _handle_exception(self, original_e):
        exc_info = sys.exc_info()
        reason = ''
        if hasattr(original_e, 'details'):
            try:
                error = json.loads(original_e.details).get('error')
                if error:
                    reason = error.get('message')
            except ValueError:
                # Let horizon operate with original exception
                six.reraise(original_e.__class__,
                            original_e.__class__(original_e), exc_info[2])
        msg = _('Uploading package failed. {0}').format(reason)
        LOG.exception(msg)
        exceptions.handle(
            self.request,
            msg,
            redirect=reverse('horizon:app-catalog:packages:index'))

    def process_step(self, form):
        @catalog_views.update_latest_apps
        def _update_latest_apps(request, app_id):
            LOG.info('Adding {0} application to the'
                     ' latest apps list'.format(app_id))

        step_data = self.get_form_step_data(form).copy()
        if self.steps.current == 'upload':
            import_type = form.cleaned_data['import_type']
            data = {}
            f = None
            base_url = packages_consts.MURANO_REPO_URL

            if import_type == 'upload':
                pkg = form.cleaned_data['package']
                f = pkg.file
            elif import_type == 'by_url':
                f = form.cleaned_data['url']
            elif import_type == 'by_name':
                name = form.cleaned_data['repo_name']
                version = form.cleaned_data['repo_version']
                f = muranoclient_utils.to_url(
                    name,
                    version=version,
                    path='apps/',
                    extension='.zip',
                    base_url=base_url,
                )

            try:
                package = muranoclient_utils.Package.from_file(f)
                name = package.manifest['FullName']
            except Exception as e:
                if '(404)' in e.message:
                    msg = _("Package creation failed."
                            "Reason: Can't find Package name from repository.")
                else:
                    msg = _("Package creation failed." "Reason: {0}").format(e)
                LOG.exception(msg)
                messages.error(self.request, msg)
                raise exceptions.Http302(
                    reverse('horizon:app-catalog:packages:index'))

            reqs = package.requirements(base_url=base_url)
            original_package = reqs.pop(name)
            step_data['dependencies'] = []
            step_data['images'] = []
            for dep_name, dep_package in six.iteritems(reqs):
                _ensure_images(dep_name, dep_package, self.request, step_data)

                try:
                    files = {dep_name: dep_package.file()}
                    package = api.muranoclient(self.request).packages.create(
                        data, files)
                    messages.success(
                        self.request,
                        _('Package {0} uploaded').format(dep_name))
                    _update_latest_apps(request=self.request,
                                        app_id=package.id)
                    step_data['dependencies'].append(package)
                except exc.HTTPConflict:
                    msg = _("Package {0} already registered.").format(dep_name)
                    messages.warning(self.request, msg)
                    LOG.exception(msg)
                except Exception as e:
                    msg = _("Error {0} occurred while "
                            "installing package {1}").format(e, dep_name)
                    messages.error(self.request, msg)
                    LOG.exception(msg)
                    continue

            # add main packages images
            _ensure_images(name, original_package, self.request, step_data)

            # import main package itself
            try:
                files = {name: original_package.file()}
                package = api.muranoclient(self.request).packages.create(
                    data, files)
                messages.success(self.request,
                                 _('Package {0} uploaded').format(name))
                _update_latest_apps(request=self.request, app_id=package.id)

                step_data['package'] = package

            except exc.HTTPConflict:
                msg = _("Package with specified name already exists")
                LOG.exception(msg)
                exceptions.handle(
                    self.request,
                    msg,
                    redirect=reverse('horizon:app-catalog:packages:index'))
            except exc.HTTPInternalServerError as e:
                self._handle_exception(e)

            except exc.HTTPException as e:
                reason = muranodashboard_utils.parse_api_error(
                    getattr(e, 'details', ''))
                if not reason:
                    raise
                LOG.exception(reason)
                exceptions.handle(
                    self.request,
                    reason,
                    redirect=reverse('horizon:app-catalog:packages:index'))

            except Exception as original_e:
                self._handle_exception(original_e)

        return step_data

    def get_form_kwargs(self, step=None):
        kwargs = {}
        if step == 'add_category':
            kwargs.update({'request': self.request})
        if step == 'modify':
            package = self.storage.get_step_data('upload').get('package')
            kwargs.update({'package': package, 'request': self.request})
        return kwargs
Exemple #7
0
from settings_locale import *

if DEBUG:
    LOGGING['loggers']['django.request']['handlers'].append('console')
# files under SECURE_MEDIA_BOOT must be served by django, this if
# is needed to avoid they end up in a subdir of MEDIA_ROOT that is
# normally served by an external webserver
import os.path

check = os.path.commonprefix((MEDIA_ROOT, SECURE_MEDIA_ROOT))
if check.startswith(MEDIA_ROOT):
    if not DEBUG:
        raise RuntimeError(
            'SECURE_MEDIA_ROOT cannot be a subdir of MEDIA_ROOT')
    else:
        print
        'WARN, SECURE_MEDIA_ROOT is a subdir of MEDIA_ROOT'

from django.core.files import storage

SECURE_STORAGE = storage.FileSystemStorage(location=SECURE_MEDIA_ROOT,
                                           base_url=SECURE_MEDIA_URL)

if not SECRET_KEY:
    if not DEBUG:
        raise RuntimeError('SECRET_KEY not set')
    else:
        print
        'WARN, SECRET_KEY not set'
Exemple #8
0
def get_secure_storage():
    return storage.FileSystemStorage(
        location=settings.SECURE_MEDIA_ROOT,
        base_url=settings.SECURE_MEDIA_URL,
    )
Exemple #9
0
from datetime import date

# TODO implement proper slicing

# TODO ALL create data and metadata connection

# TODO make nicer upload paths?


def make_upload_path(self, filename):
    """ Generates upload path for FileField """
    today = date.today().strftime("%Y/%m/%d")
    return "%s/%s/%s" % (self.owner.username, today, filename)


fs = storage.FileSystemStorage(location=settings.FILE_MEDIA_ROOT)

DEFAULTS = {
    "name_max_length": 100,
    "description_max_length": 2048,
    "label_max_length": 100,
    "unit_max_length": 10,
    "default_time_unit": "ms",
    "default_data_unit": "mV",
    "default_samp_unit": "Hz"
}


# 1 (of 15)
class Block(BasePermissionsMixin, BaseGnodeObject):
    """