summaryrefslogtreecommitdiff
path: root/docs/python-api.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/python-api.rst')
-rw-r--r--docs/python-api.rst147
1 files changed, 147 insertions, 0 deletions
diff --git a/docs/python-api.rst b/docs/python-api.rst
new file mode 100644
index 0000000..a22ed2a
--- /dev/null
+++ b/docs/python-api.rst
@@ -0,0 +1,147 @@
+Python API
+==========
+
+Compiling files
+---------------
+
+Very basic usage is simple enough::
+
+ from scss import Scss
+ css = Scss()
+ css.compile("a { color: red + green; }")
+
+
+Configuration
+-------------
+
+There are several configuration variables in the ``scss.config`` module that
+you may wish to change.
+
+``PROJECT_ROOT``: Root of your entire project. Used only to construct defaults
+for other variables. Defaults to the root of the pyScss installation, which is
+probably not what you want.
+
+``LOAD_PATHS``: An iterable of paths to search when using``@import``.
+
+``STATIC_ROOT``: Used for finding sprite files. Defaults to
+``$PROJECT_ROOT/static``.
+
+``ASSETS_ROOT``: Generated sprites are saved here. Defaults to
+``$STATIC_ROOT/assets``.
+
+``CACHE_ROOT``: Used for storing cached sprite information. Defaults to
+``ASSETS_ROOT``.
+
+``STATIC_URL``: URL equivalent to ``STATIC_ROOT``. Defaults to ``static/``.
+
+``ASSETS_URL``: URL equivalent to ``ASSETS_ROOT``. Defaults to ``static/assets/``.
+
+``SPRTE_MAP_DIRECTION``: Direction in which to arrange sprites in a
+spritesheet. Defaults to ``vertical``; may be changed to ``horizontal``,
+``diagonal``, or ``smart``.
+
+``VERBOSITY``: Increase spew from the compiler. Defaults to ``1``.
+
+``DEBUG``: Set to true to make parse errors fatal. Defaults to false.
+
+.. warning::
+
+ Configuration via monkeypatching is fraught with issues. If you don't need
+ the Compass sprite functionality, stick with passing ``search_paths`` to
+ the ``Scss`` constructor, and don't touch these variables at all.
+
+ The current plan is to introduce a new mechanism for Compass configuration
+ in 1.3 with deprecation warnings, and remove ``scss.config`` entirely in
+ 2.0.
+
+
+Django example
+--------------
+
+A rough example of using pyScss with Django::
+
+ import os
+ import fnmatch
+
+ import scss
+
+ from django.conf import settings
+ from django.utils.datastructures import SortedDict
+ from django.contrib.staticfiles import finders
+
+
+ def finder(glob):
+ """
+ Finds all files in the django finders for a given glob,
+ returns the file path, if available, and the django storage object.
+ storage objects must implement the File storage API:
+ https://docs.djangoproject.com/en/dev/ref/files/storage/
+ """
+ for finder in finders.get_finders():
+ for path, storage in finder.list([]):
+ if fnmatch.fnmatchcase(path, glob):
+ yield path, storage
+
+
+ # STATIC_ROOT is where pyScss looks for images and static data.
+ # STATIC_ROOT can be either a fully qualified path name or a "finder"
+ # iterable function that receives a filename or glob and returns a tuple
+ # of the file found and its file storage object for each matching file.
+ # (https://docs.djangoproject.com/en/dev/ref/files/storage/)
+ scss.config.STATIC_ROOT = finder
+ scss.config.STATIC_URL = settings.STATIC_URL
+
+ # ASSETS_ROOT is where the pyScss outputs the generated files such as spritemaps
+ # and compile cache:
+ scss.config.ASSETS_ROOT = os.path.join(settings.MEDIA_ROOT, 'assets/')
+ scss.config.ASSETS_URL = settings.MEDIA_URL + 'assets/'
+
+ # These are the paths pyScss will look ".scss" files on. This can be the path to
+ # the compass framework or blueprint or compass-recepies, etc.
+ scss.config.LOAD_PATHS = [
+ '/usr/local/www/sass/frameworks/',
+ '/Library/Ruby/Gems/1.8/gems/compass-0.11.5/frameworks/compass/stylesheets/',
+ '/Library/Ruby/Gems/1.8/gems/compass-0.11.5/frameworks/blueprint/stylesheets/',
+ ]
+
+ # This creates the Scss object used to compile SCSS code. In this example,
+ # _scss_vars will hold the context variables:
+ _scss_vars = {}
+ _scss = scss.Scss(
+ scss_vars=_scss_vars,
+ scss_opts={
+ 'compress': True,
+ 'debug_info': True,
+ }
+ )
+
+ # 1. Compile from a string:
+ compiled_css_from_string = _scss.compile('@import "file2"; a {color: red + green; }')
+
+ # 2. Compile from a file:
+ compiled_css_from_file = _scss.compile(scss_file='file1.scss')
+
+ # 3. Compile from a set of files (use SortedDict or collections.OrderedDict to
+ # maintain the compile order):
+ _scss._scss_files = SortedDict((
+ ('file2.scss', open('file2.scss').read()),
+ ('file3.scss', open('file3.scss').read()),
+ ('file4.scss', open('file4.scss').read()),
+ ))
+ compiled_css_from_files = _scss.compile()
+
+.. note::
+
+ The API here is likely to be improved in 1.3, to avoid the need for calling
+ underscored functions.
+
+
+Extending pyScss
+----------------
+
+There is some support for adding custom functions from Python, but the API is
+explicitly undocumented and subject to change. Watch this space.
+
+.. todo::
+
+ Document the extension API once it's final.