Example #1
0
 def test_individual_url(self):
     """Check that individual URL is correctly generated"""
     packager = Packager()
     filename = os.path.join(settings.COMPRESS_ROOT, u'js/application.js')
     individual_url = packager.individual_url(filename)
     self.assertEqual(individual_url,
                      settings.COMPRESS_URL + "js/application.js")
Example #2
0
 def test_individual_url(self):
     """Check that individual URL is correctly generated"""
     packager = Packager()
     filename = os.path.join(settings.COMPRESS_ROOT, u'js/application.js')
     individual_url = packager.individual_url(filename)
     self.assertEqual(individual_url,
                      settings.COMPRESS_URL + "js/application.js")
Example #3
0
    def handle_noargs(self, **options):
        from compress.packager import Packager
        packager = Packager(force=options.get('force', False),
                            verbose=int(options.get('verbosity', 1)) >= 2)

        for package_name in packager.packages['css']:
            package = packager.package_for('css', package_name)
            if packager.verbose or packager.force:
                print
                message = "CSS Group '%s'" % package_name
                print message
                print len(message) * '-'
            packager.pack(package)

        packager = Packager(force=options.get('force', False),
                            verbose=int(options.get('verbosity', 1)) >= 2)

        for package_name in packager.packages['js']:
            package = packager.package_for('js', package_name)
            if packager.verbose or packager.force:
                print
                message = "JS Group '%s'" % package_name
                print message
                print len(message) * '-'
            packager.pack(package)
Example #4
0
class CompressedCSSNode(template.Node):
    def __init__(self, name):
        self.name = name
        self.packager = Packager()

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for('css', package_name)
        except PackageNotFound:
            return ''  # fail silently, do not return anything if an invalid group is specified

        if settings.COMPRESS:
            compressed_path = self.packager.pack_stylesheets(package)
            return self.render_css(package, compressed_path)
        else:
            package['paths'] = self.packager.compile(package['paths'])
            return self.render_individual(package)

    def render_css(self, package, path):
        context = {}
        if not 'template' in package:
            package['template'] = "compress/css.html"
        if not 'context' in package:
            context = package['context']
        context.update({
            'url': self.packager.individual_url(path)
        })
        return render_to_string(package['template'], context)

    def render_individual(self, package):
        tags = [self.render_css(package, path) for path in package['paths']]
        return '\n'.join(tags)
Example #5
0
class CompressedNode(template.Node):
    def __init__(self, name, aType):
        self.name = name
        self.type = aType
        if aType == 'css':
            self.template = "compress/css.html"
        else:
            self.template = "compress/js.html"
        self.packager = Packager()

    def create_tags(self, package, path):
        context = {}
        if 'context' in package:
            context = package['context']
        context.update({'url': self.packager.individual_url(path)})
        return render_to_string(package['template'], context)

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for(self.type, package_name)
            package['type'] = self.type
        except PackageNotFound:
            # fail silently, do not return anything if an invalid group
            return ''

        if not 'template' in package:
            package['template'] = self.template

        if 'externals' in package:
            out = '\n'.join([self.render_external(package, url) \
                             for url in package['externals']])
        else:
            out = ''
        individual = True

        compressed_path = None
        if settings.COMPRESS:
            compressed_path = self.packager.pack(package)

        # If something wrong with compressing (can't create files) -
        # fallback to individual
        if compressed_path:
            out += self.create_tags(package, compressed_path)
            individual = False

        if individual:
            package['paths'] = self.packager.compile(package['paths'])
            out += self.render_individual(package)

        return out

    def render_external(self, package, url):
        return render_to_string(package['template'], {'url': url})

    def render_individual(self, package):
        tags = [self.create_tags(package, path) \
                for path in package['paths']]
        return '\n'.join(tags)
Example #6
0
 def __init__(self, name, aType):
     self.name = name
     self.type = aType
     if aType == 'css':
         self.template = "compress/css.html"
     else:
         self.template = "compress/js.html"
     self.packager = Packager()
Example #7
0
class CompressedJSNode(template.Node):
    def __init__(self, name):
        self.name = name
        self.packager = Packager()

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for('js', package_name)
        except PackageNotFound:
            return ''  # fail silently, do not return anything if an invalid group is specified

        if 'externals' in package:
            return '\n'.join([self.render_external(package, url) for url in package['externals']])

        if settings.COMPRESS:
            compressed_path = self.packager.pack_javascripts(package)
            return self.render_js(package, compressed_path)
        else:
            package['paths'] = self.packager.compile(package['paths'])
            templates = self.packager.pack_templates(package)
            return self.render_individual(package, templates)

    def render_js(self, package, path):
        context = {}
        if not 'template' in package:
            package['template'] = "compress/js.html"
        if not 'context' in package:
            context = package['context']
        context.update({
            'url': self.packager.individual_url(path)
        })
        return render_to_string(package['template'], context)

    def render_external(self, package, url):
        if not 'template' in package:
            package['template'] = "compress/js.html"
        return render_to_string(package['template'], {
            'url': url
        })

    def render_inline(self, package, js):
        context = {}
        if not 'context' in package:
            context = package['context']
        context.update({
            'source': js
        })
        return render_to_string("compress/inline_js.html", context)

    def render_individual(self, package, templates=None):
        tags = [self.render_js(package, js) for js in package['paths']]
        if templates:
            tags.append(self.render_inline(package, templates))
        return '\n'.join(tags)
Example #8
0
    def handle_noargs(self, **options):
        from compress.packager import Packager
        packager = Packager(
            force=options.get('force', False),
            verbose=int(options.get('verbosity', 1)) >= 2
        )

        for package_name in packager.packages['css']:
            package = packager.package_for('css', package_name)
            if packager.verbose or packager.force:
                print
                message = "CSS Group '%s'" % package_name
                print message
                print len(message) * '-'
            packager.pack(package)

        packager = Packager(
            force=options.get('force', False),
            verbose=int(options.get('verbosity', 1)) >= 2
        )

        for package_name in packager.packages['js']:
            package = packager.package_for('js', package_name)
            if packager.verbose or packager.force:
                print
                message = "JS Group '%s'" % package_name
                print message
                print len(message) * '-'
            packager.pack(package)
Example #9
0
 def __init__(self, name, aType):
     self.name = name
     self.type = aType
     if aType == 'css':
         self.template = "compress/css.html"
     else:
         self.template = "compress/js.html"
     self.packager = Packager()
Example #10
0
    def test_create_package(self):
        packager = Packager()
        self.assertEqual(packager.create_packages({}), {})

        with self.assertRaises(PackageNotFound):
          packager.package_for('css', 'test_package')

        old_root = settings.COMPRESS_ROOT
        settings.COMPRESS_ROOT = os.path.join(os.path.dirname(__file__), "testdata/")
        packages = {'data': {'jquery': {'external_urls': ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',) }
                             , 'main': { 'source_filenames': ( 'js/application.js'
                                                             , 'js/application1.js'
                                                             , )
                                       , 'output_filename': 'application.r?.js' }
                             , 'mixed': { 'external_urls': ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',)
                                        , 'source_filenames': ('js/application.js'
                                                             , 'js/application1.js'
                                                             , )
                                        , 'output_filename': 'application.r?.js' }
                             , 'test': { 'source_filenames': ( 'css/abs*.css'
                                                             , )
                                       , 'output_filename': 'application.r?.css'
                                       , 'template_name': 'test/template.html'
                                       , 'extra_context': { 'a': 'a', } }
                             }
                   , 'expected': { 'jquery': { 'context': {}
                                             , 'externals': ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',)
                                             , 'output': ''
                                             , 'paths': [] }
                                 , 'main': { 'context': {}
                                           , 'output': 'application.r?.js'
                                           , 'paths': ['js/application1.js'] }
                                 , 'mixed': { 'context': {}
                                            , 'externals': ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',)
                                            , 'output': 'application.r?.js'
                                            , 'paths': ['js/application1.js'] }
                                 , 'test': { 'context': { 'a': 'a' }
                                           , 'paths': [ 'css/absolute.css' ]
                                           , 'output': 'application.r?.css'
                                           , 'template': 'test/template.html' }
                                 }
                   }
        out = packager.create_packages( packages['data'] )
        self.assertEqual(out, packages['expected'] )
        settings.COMPRESS_ROOT = old_root
Example #11
0
 def test_external_urls(self):
     packager = Packager()
     packages = packager.create_packages({
         'jquery': {
             'external_urls': ('//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js',)
         },
         'application': {
             'source_filenames': ('js/application.js',),
             'output_filename': 'application.r?.js'
         }
     })
     self.assertEqual(packages, {
         'jquery': {
             'externals': ('//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js',)
         },
         'application': {
             'context': {},
             'output': 'application.r?.js',
             'paths': ['js/application.js']
         }
     })
Example #12
0
class CompressedNode(template.Node):
    def __init__(self, name, aType):
        self.name = name
        self.type = aType
        if aType == 'css':
            self.template = "compress/css.html"
        else:
            self.template = "compress/js.html"
        self.packager = Packager()

    def create_tags(self, package, path):
        context = {}
        if 'context' in package:
            context = package['context']
        context.update({
            'url': self.packager.individual_url(path)
            })
        return render_to_string(package['template'], context)

    def render(self, context):
        package_name = template.Variable(self.name).resolve(context)
        try:
            package = self.packager.package_for(self.type, package_name)
            package['type'] = self.type
        except PackageNotFound:
            # fail silently, do not return anything if an invalid group
            return ''

        if not 'template' in package:
            package['template'] = self.template

        if 'externals' in package:
            out = '\n'.join([self.render_external(package, url) \
                             for url in package['externals']])
        else:
            out = ''
        individual = True

        compressed_path = None
        if settings.COMPRESS:
            compressed_path = self.packager.pack(package)

        # If something wrong with compressing (can't create files) -
        # fallback to individual
        if compressed_path:
            out += self.create_tags(package, compressed_path)
            individual = False

        if individual:
            package['paths'] = self.packager.compile(package['paths'])
            out += self.render_individual(package)

        return out

    def render_external(self, package, url):
        return render_to_string(package['template'], { 'url': url })

    def render_individual(self, package):
        tags = [self.create_tags(package, path) \
                for path in package['paths']]
        return '\n'.join(tags)
Example #13
0
    def test_create_package(self):
        packager = Packager()
        self.assertEqual(packager.create_packages({}), {})

        with self.assertRaises(PackageNotFound):
            packager.package_for('css', 'test_package')

        old_root = settings.COMPRESS_ROOT
        settings.COMPRESS_ROOT = os.path.join(os.path.dirname(__file__),
                                              "testdata/")
        packages = {
            'data': {
                'jquery': {
                    'external_urls':
                    ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',
                     )
                },
                'main': {
                    'source_filenames': (
                        'js/application.js',
                        'js/application1.js',
                    ),
                    'output_filename':
                    'application.r?.js'
                },
                'mixed': {
                    'external_urls':
                    ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',
                     ),
                    'source_filenames': (
                        'js/application.js',
                        'js/application1.js',
                    ),
                    'output_filename':
                    'application.r?.js'
                },
                'test': {
                    'source_filenames': ('css/abs*.css', ),
                    'output_filename': 'application.r?.css',
                    'template_name': 'test/template.html',
                    'extra_context': {
                        'a': 'a',
                    }
                }
            },
            'expected': {
                'jquery': {
                    'context': {},
                    'externals':
                    ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',
                     ),
                    'output':
                    '',
                    'paths': []
                },
                'main': {
                    'context': {},
                    'output': 'application.r?.js',
                    'paths': ['js/application1.js']
                },
                'mixed': {
                    'context': {},
                    'externals':
                    ('http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js',
                     ),
                    'output':
                    'application.r?.js',
                    'paths': ['js/application1.js']
                },
                'test': {
                    'context': {
                        'a': 'a'
                    },
                    'paths': ['css/absolute.css'],
                    'output': 'application.r?.css',
                    'template': 'test/template.html'
                }
            }
        }
        out = packager.create_packages(packages['data'])
        self.assertEqual(out, packages['expected'])
        settings.COMPRESS_ROOT = old_root
Example #14
0
 def __init__(self, name):
     self.name = name
     self.packager = Packager()