Skip to content

Commit

Permalink
added output folder for external assets
Browse files Browse the repository at this point in the history
  • Loading branch information
eadmundo committed May 19, 2012
1 parent 952c151 commit 19b2e54
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
5 changes: 4 additions & 1 deletion src/webassets/exceptions.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
__all__ = ('BundleError', 'BuildError', 'FilterError',
'EnvironmentError', 'ImminentDeprecationWarning')
'EnvironmentError', 'ImminentDeprecationWarning', 'ExternalAssetsError')


class EnvironmentError(Exception):
pass

class ExternalAssetsError(Exception):
pass


class BundleError(Exception):
pass
Expand Down
25 changes: 21 additions & 4 deletions src/webassets/externalassets.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from os import path
from merge import FileHunk

from exceptions import ExternalAssetsError

try:
# Current version of glob2 does not let us access has_magic :/
import glob2 as glob
Expand All @@ -25,13 +27,19 @@ def get_versioned_file(self, file_name):
bits.insert(len(bits)-1, version)
return '.'.join(bits)

def versioned_folder(self, file_name):
output_folder = self.env.config.get('external_assets_output_folder', None)
if output_folder is None:
raise ExternalAssetsError('You must set the external_assets_output_folder config value')
versioned = self.get_versioned_file(file_name)
return path.join(output_folder, path.basename(versioned))

def get_output_path(self, file_name):
return self.env.abspath(self.get_versioned_file(file_name))
return self.env.abspath(self.versioned_folder(file_name))

def write_file(self, file_name):
output_path = self.get_output_path(file_name)
hunk = FileHunk(self.env.abspath(file_name))
output_path = output_path.replace('img/','genimg/')
output_dir = path.dirname(output_path)
if not path.exists(output_dir):
os.makedirs(output_dir)
Expand All @@ -50,7 +58,16 @@ def show_manifest(self):
print self.env.manifest.get_manifest()

def url(self, file_name):
return self.env.absurl(self.get_versioned_file(file_name))
versioned = self.versioned_folder(file_name)
url = self.env.absurl(versioned)
if not path.exists(self.env.abspath(versioned)):
self.write_file(file_name)
return url

def get_version(self, file_name):
return self.env.versions.determine_file_version(file_name, self.env)
version = None
if self.env.manifest:
version = self.env.manifest.query_file(file_name, self.env)
if version is None:
version = self.env.versions.determine_file_version(file_name, self.env)
return version
12 changes: 8 additions & 4 deletions src/webassets/filter/cssrewrite/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,17 @@ def replace_url(self, url):
if self.env.manifest:
file_path = urlpath.pathjoin(self.source_path, url)
if self.env.external_assets:
file_name = self.env.external_assets.get_versioned_file(file_path)
replacement = urlpath.relpathto(self.env.directory, self.output_path, file_name)

versioned_folder = self.env.external_assets.versioned_folder(file_path)
self.env.external_assets.write_file(file_path)
if self.env.url:
replacement = urlparse.urljoin(self.env.url, versioned_folder)
else:
replacement = urlpath.relpathto(self.env.directory, self.output_path, versioned_folder)

if replacement is None:
url = urlpath.relpath(self.output_url,
urlparse.urljoin(self.source_url, url))
else:
url = replacement.replace('img/','genimg/')
url = replacement

return url

0 comments on commit 19b2e54

Please sign in to comment.