Пример #1
0
def uninstall_packages():
    '''
    Removes all records in all tables, from all modules.
    Set installed to False in all records in CMSPackages
    '''
    cms_settings = CMSSettings.objects.get_settings()
    if not cms_settings.packages.filter(selected=False, installed=True).count() and \
        not cms_settings.packages.filter(selected=True, installed=False).count():
        return
    for model in CMSCreatedModel.objects.all():
        try:
            importpath(model.name).objects.all().delete()
        except:
            pass
    for package in cms_settings.packages.installed():
        package.installed = False
        package.save()
Пример #2
0
def custom(request):
    """
    User can go to detail settings for packages or can ask to make project.
    Make files for new project.
    """
    cms_settings = CMSSettings.objects.get_settings()
    if request.method == 'POST':
        entry_points = ['redsolutioncms']
        cms_settings.base_template = 'base_template.html'
        cms_settings.save()
        # handle frontpage
        frontpage_form = FrontpageForm(request.POST)
        if frontpage_form.is_valid():
            frontpage_form.save()
            for package in cms_settings.packages.installed():
                for entry_point in package.entry_points.all():
                    entry_points.append(entry_point.module)
            make_objects = []
            for entry_point in entry_points:
                try:
                    make_object = importpath('.'.join([entry_point, 'make', 'make']))
                except ImportError, error:
                    print 'Entry point %s has no make object.' % entry_point
                    continue
                else:
                    make_objects.append(make_object)

            for make_object in make_objects:
                make_object.flush()
            for make_object in make_objects:
                try:
                    make_object.premake()
                except AlreadyMadeException:
                    pass
            for make_object in make_objects:
                try:
                    make_object.make()
                except AlreadyMadeException:
                    pass
            for make_object in make_objects:
                try:
                    make_object.postmake()
                except AlreadyMadeException:
                    pass
            return HttpResponseRedirect(reverse('build'))
Пример #3
0
def load_packages():
    """
    Downloads packages to eggs and imports them to sys.path
    TODO: Raise download error if download failed
    """
    cms_settings = CMSSettings.objects.get_settings()
    # delete all old entry points, because we reset all settings at step 2
    CMSEntryPoint.objects.all().delete()
    selected_packages = cms_settings.packages.filter(selected=True)
    # prepare modules...
    modules_to_download = [{'name': package.package, 'version': package.version, }
        for package in selected_packages]
    workset = install(modules_to_download, os.path.join(home_dir, 'eggs'))
    # Now fetch entry points and import modules
    for package in selected_packages:
        distr = workset.by_key[package.package]
        distr.activate()

        package.path = distr.location
        entry_points = distr.get_entry_info(None, 'redsolutioncms')

        installed = True
        if entry_points:
            for _, entry_point in entry_points.iteritems():
                try:
                    importpath(entry_point.module_name)
                except ImportError:
                    installed = False
                    break
                # Interactive setup feature
                try:
                    importpath(entry_point.module_name + '.urls')
                except ImportError:
                    has_urls = False
                else:
                    has_urls = True
                # Frontpage handler feature
                try:
                    importpath(entry_point.module_name + '.frontpage_handler')
                except ImportError:
                    frontpage_handler = False
                else:
                    frontpage_handler = True

                CMSEntryPoint.objects.create(
                    package=package,
                    module=entry_point.module_name,
                    has_urls=has_urls,
                    frontpage_handler=frontpage_handler)

        package.installed = installed
        package.save()