[Checkins] SVN: hurry.yui/ Initial import.

Martijn Faassen faassen at infrae.com
Mon Sep 22 12:06:47 EDT 2008


Log message for revision 91354:
  Initial import.
  

Changed:
  A   hurry.yui/
  A   hurry.yui/trunk/
  A   hurry.yui/trunk/buildout.cfg
  A   hurry.yui/trunk/setup.py
  A   hurry.yui/trunk/src/
  A   hurry.yui/trunk/src/hurry/
  A   hurry.yui/trunk/src/hurry/__init__.py
  A   hurry.yui/trunk/src/hurry/yui/
  A   hurry.yui/trunk/src/hurry/yui/README.txt
  A   hurry.yui/trunk/src/hurry/yui/__init__.py
  A   hurry.yui/trunk/src/hurry/yui/tests.py
  A   hurry.yui/trunk/src/hurry/yui/yui.py
  A   hurry.yui/trunk/src/hurry/yui/yuidepend.py

-=-
Added: hurry.yui/trunk/buildout.cfg
===================================================================
--- hurry.yui/trunk/buildout.cfg	                        (rev 0)
+++ hurry.yui/trunk/buildout.cfg	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1,20 @@
+[buildout]
+develop = . hurry.resource 
+parts = scripts devpython test
+versions = versions
+
+[versions]
+
+[scripts]
+recipe = zc.recipe.egg:scripts
+eggs = hurry.yui
+
+[devpython]
+recipe = zc.recipe.egg
+interpreter = devpython
+eggs = hurry.yui
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = hurry.yui
+defaults = ['--tests-pattern', '^f?tests$', '-v']

Added: hurry.yui/trunk/setup.py
===================================================================
--- hurry.yui/trunk/setup.py	                        (rev 0)
+++ hurry.yui/trunk/setup.py	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1,28 @@
+from setuptools import setup, find_packages
+import sys, os
+
+setup(
+    name='hurry.yui',
+    version='0.1dev',
+    description="YUI for hurry.resource.",
+    classifiers=[],
+    keywords='',
+    author='Martijn Faassen',
+    author_email='faassen at startifact.com',
+    license='ZPL 2.1',
+    packages=find_packages('src'),
+    package_dir={'': 'src'},
+    include_package_data=True,
+    zip_safe=False,
+    install_requires=[
+        'setuptools',
+        'hurry.resource',
+        'simplejson',
+        ],
+    entry_points= {
+    'console_scripts': [
+      'yuidepend = hurry.yui.yuidepend:main',
+      ]
+    },
+
+    )

Added: hurry.yui/trunk/src/hurry/__init__.py
===================================================================
--- hurry.yui/trunk/src/hurry/__init__.py	                        (rev 0)
+++ hurry.yui/trunk/src/hurry/__init__.py	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1,13 @@
+# XXX awful hack to make sure we don't get a warning due to two
+# namespace packages being loaded. Why this is needed I do not know,
+# haven't seen this before :(
+import warnings
+warnings.filterwarnings("ignore", "Module (.*) was already imported (.*)")
+
+# this is a namespace package
+try:
+    import pkg_resources
+    pkg_resources.declare_namespace(__name__)
+except ImportError:
+    import pkgutil
+    __path__ = pkgutil.extend_path(__path__, __name__)

Added: hurry.yui/trunk/src/hurry/yui/README.txt
===================================================================
--- hurry.yui/trunk/src/hurry/yui/README.txt	                        (rev 0)
+++ hurry.yui/trunk/src/hurry/yui/README.txt	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1,14 @@
+hurry.yui
+=========
+
+Introduction
+------------
+
+This library packages YUI for ``hurry.resource``. It is aware of YUI's
+dependency structure and different modes (normal, minified and debug)
+and consolidations.
+
+Let's check the YUI structure::
+
+  >>> from hurry.yui import yui
+ 
\ No newline at end of file

Added: hurry.yui/trunk/src/hurry/yui/__init__.py
===================================================================
--- hurry.yui/trunk/src/hurry/yui/__init__.py	                        (rev 0)
+++ hurry.yui/trunk/src/hurry/yui/__init__.py	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1 @@
+#

Added: hurry.yui/trunk/src/hurry/yui/tests.py
===================================================================
--- hurry.yui/trunk/src/hurry/yui/tests.py	                        (rev 0)
+++ hurry.yui/trunk/src/hurry/yui/tests.py	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1,14 @@
+import unittest, doctest
+
+def test_suite():
+    globs = {}
+    optionflags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS
+
+    suite = unittest.TestSuite()
+    
+    suite.addTest(doctest.DocFileSuite(
+        'README.txt',
+        globs=globs,
+        optionflags=optionflags))
+    return suite
+

Added: hurry.yui/trunk/src/hurry/yui/yui.py
===================================================================
--- hurry.yui/trunk/src/hurry/yui/yui.py	                        (rev 0)
+++ hurry.yui/trunk/src/hurry/yui/yui.py	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1,51 @@
+from hurry.resource import Library, Inclusion, ResourceSpec
+
+yui = Library('yui')
+
+yahoo = Inclusion([ResourceSpec(yui, "yahoo/yahoo.js")], debug="yahoo/yahoo-debug.js", minified="yahoo/yahoo-min.js")
+event = Inclusion([ResourceSpec(yui, "event/event.js")], depends_on=[yahoo], debug="event/event-debug.js", minified="event/event-min.js")
+dom = Inclusion([ResourceSpec(yui, "dom/dom.js")], depends_on=[yahoo], debug="dom/dom-debug.js", minified="dom/dom-min.js")
+element = Inclusion([ResourceSpec(yui, "element/element-beta.js")], depends_on=[dom, event], debug="element/element-beta-debug.js", minified="element/element-beta-min.js")
+dragdrop = Inclusion([ResourceSpec(yui, "dragdrop/dragdrop.js")], depends_on=[dom, event], debug="dragdrop/dragdrop-debug.js", minified="dragdrop/dragdrop-min.js")
+containercore = Inclusion([ResourceSpec(yui, "container/container_core.js")], depends_on=[dom, event], debug="container/container_core-debug.js", minified="container/container_core-min.js")
+history = Inclusion([ResourceSpec(yui, "history/history.js")], depends_on=[event], debug="history/history-debug.js", minified="history/history-min.js")
+treeview = Inclusion([ResourceSpec(yui, "treeview/treeview.js")], depends_on=[event], debug="treeview/treeview-debug.js", minified="treeview/treeview-min.js")
+datasource = Inclusion([ResourceSpec(yui, "datasource/datasource-beta.js")], depends_on=[event], debug="datasource/datasource-beta-debug.js", minified="datasource/datasource-beta-min.js")
+connection = Inclusion([ResourceSpec(yui, "connection/connection.js")], depends_on=[event], debug="connection/connection-debug.js", minified="connection/connection-min.js")
+autocomplete = Inclusion([ResourceSpec(yui, "autocomplete/autocomplete.js")], depends_on=[dom, event], debug="autocomplete/autocomplete-debug.js", minified="autocomplete/autocomplete-min.js")
+fonts = Inclusion([ResourceSpec(yui, "fonts/fonts.css")], minified="fonts/fonts-min.css")
+button = Inclusion([ResourceSpec(yui, "button/button.js")], depends_on=[element], debug="button/button-debug.js", minified="button/button-min.js")
+tabview = Inclusion([ResourceSpec(yui, "tabview/tabview.js")], depends_on=[element], debug="tabview/tabview-debug.js", minified="tabview/tabview-min.js")
+yuiloader = Inclusion([ResourceSpec(yui, "yuiloader/yuiloader-beta.js")], debug="yuiloader/yuiloader-beta-debug.js", minified="yuiloader/yuiloader-beta-min.js")
+reset = Inclusion([ResourceSpec(yui, "reset/reset.css")], minified="reset/reset-min.css")
+simpleeditor = Inclusion([ResourceSpec(yui, "editor/simpleeditor-beta.js")], depends_on=[element], debug="editor/simpleeditor-beta-debug.js", minified="editor/simpleeditor-beta-min.js")
+resize = Inclusion([ResourceSpec(yui, "resize/resize-beta.js")], depends_on=[dom, event, dragdrop, element], debug="resize/resize-beta-debug.js", minified="resize/resize-beta-min.js")
+datatable = Inclusion([ResourceSpec(yui, "datatable/datatable-beta.js")], depends_on=[element, datasource], debug="datatable/datatable-beta-debug.js", minified="datatable/datatable-beta-min.js")
+profilerviewer = Inclusion([ResourceSpec(yui, "profilerviewer/profilerviewer-beta.js")], depends_on=[profiler, yuiloader, element], debug="profilerviewer/profilerviewer-beta-debug.js", minified="profilerviewer/profilerviewer-beta-min.js")
+layout = Inclusion([ResourceSpec(yui, "layout/layout-beta.js")], depends_on=[dom, event, element], debug="layout/layout-beta-debug.js", minified="layout/layout-beta-min.js")
+uploader = Inclusion([ResourceSpec(yui, "uploader/uploader-experimental.js")], depends_on=[element], debug="uploader/uploader-experimental-debug.js", minified="uploader/uploader-experimental-min.js")
+cookie = Inclusion([ResourceSpec(yui, "cookie/cookie-beta.js")], depends_on=[yahoo], debug="cookie/cookie-beta-debug.js", minified="cookie/cookie-beta-min.js")
+base = Inclusion([ResourceSpec(yui, "base/base.css")], minified="base/base-min.css")
+slider = Inclusion([ResourceSpec(yui, "slider/slider.js")], depends_on=[dragdrop], debug="slider/slider-debug.js", minified="slider/slider-min.js")
+selector = Inclusion([ResourceSpec(yui, "selector/selector-beta.js")], depends_on=[yahoo, dom], debug="selector/selector-beta-debug.js", minified="selector/selector-beta-min.js")
+utilities = Inclusion([ResourceSpec(yui, "utilities/utilities.js")], debug="utilities/utilities-debug.js", minified="utilities/utilities-min.js")
+yuitest = Inclusion([ResourceSpec(yui, "yuitest/yuitest.js")], depends_on=[logger], debug="yuitest/yuitest-debug.js", minified="yuitest/yuitest-min.js")
+yuiloader_dom_event = Inclusion([ResourceSpec(yui, "yuiloader-dom-event/yuiloader-dom-event.js")], debug="yuiloader-dom-event/yuiloader-dom-event-debug.js", minified="yuiloader-dom-event/yuiloader-dom-event-min.js")
+get = Inclusion([ResourceSpec(yui, "get/get.js")], depends_on=[yahoo], debug="get/get-debug.js", minified="get/get-min.js")
+colorpicker = Inclusion([ResourceSpec(yui, "colorpicker/colorpicker.js")], depends_on=[slider, element], debug="colorpicker/colorpicker-debug.js", minified="colorpicker/colorpicker-min.js")
+logger = Inclusion([ResourceSpec(yui, "logger/logger.js")], depends_on=[event, dom], debug="logger/logger-debug.js", minified="logger/logger-min.js")
+imagecropper = Inclusion([ResourceSpec(yui, "imagecropper/imagecropper-beta.js")], depends_on=[dom, event, dragdrop, element, resize], debug="imagecropper/imagecropper-beta-debug.js", minified="imagecropper/imagecropper-beta-min.js")
+editor = Inclusion([ResourceSpec(yui, "editor/editor-beta.js")], depends_on=[menu, element, button], debug="editor/editor-beta-debug.js", minified="editor/editor-beta-min.js")
+animation = Inclusion([ResourceSpec(yui, "animation/animation.js")], depends_on=[dom, event], debug="animation/animation-debug.js", minified="animation/animation-min.js")
+json = Inclusion([ResourceSpec(yui, "json/json.js")], depends_on=[yahoo], debug="json/json-debug.js", minified="json/json-min.js")
+charts = Inclusion([ResourceSpec(yui, "charts/charts-experimental.js")], depends_on=[element, json, datasource], debug="charts/charts-experimental-debug.js", minified="charts/charts-experimental-min.js")
+menu = Inclusion([ResourceSpec(yui, "menu/menu.js")], depends_on=[containercore], debug="menu/menu-debug.js", minified="menu/menu-min.js")
+reset_fonts_grids = Inclusion([ResourceSpec(yui, "reset-fonts-grids/reset-fonts-grids.css")], minified="reset-fonts-grids/reset-fonts-grids-min.css")
+container = Inclusion([ResourceSpec(yui, "container/container.js")], depends_on=[dom, event], debug="container/container-debug.js", minified="container/container-min.js")
+profiler = Inclusion([ResourceSpec(yui, "profiler/profiler-beta.js")], depends_on=[yahoo], debug="profiler/profiler-beta-debug.js", minified="profiler/profiler-beta-min.js")
+calendar = Inclusion([ResourceSpec(yui, "calendar/calendar.js")], depends_on=[event, dom], debug="calendar/calendar-debug.js", minified="calendar/calendar-min.js")
+imageloader = Inclusion([ResourceSpec(yui, "imageloader/imageloader.js")], depends_on=[event, dom], debug="imageloader/imageloader-debug.js", minified="imageloader/imageloader-min.js")
+reset_fonts = Inclusion([ResourceSpec(yui, "reset-fonts/reset-fonts.css")], minified="reset-fonts/reset-fonts-min.css")
+grids = Inclusion([ResourceSpec(yui, "grids/grids.css")], depends_on=[fonts], minified="grids/grids-min.css")
+yahoo_dom_event = Inclusion([ResourceSpec(yui, "yahoo-dom-event/yahoo-dom-event.js")], debug="yahoo-dom-event/yahoo-dom-event-debug.js", minified="yahoo-dom-event/yahoo-dom-event-min.js")
+

Added: hurry.yui/trunk/src/hurry/yui/yuidepend.py
===================================================================
--- hurry.yui/trunk/src/hurry/yui/yuidepend.py	                        (rev 0)
+++ hurry.yui/trunk/src/hurry/yui/yuidepend.py	2008-09-22 16:06:47 UTC (rev 91354)
@@ -0,0 +1,132 @@
+import sys, os
+import urllib2
+import simplejson
+
+YUILOADER_URL_TEMPLATE = ('http://yui.yahooapis.com/%s/build/yuiloader'
+                          '/yuiloader-beta.js')
+
+def main():
+    try:
+        version = sys.argv[1]
+    except IndexError:
+        print "Usage: yuidepend <YUI version>"
+        return
+    d = load_json(version)
+
+    items = sorted_dependencies(d)
+    
+    resources_text = []
+    for key, value in items:
+        path = deminize(value['path'])
+        name = normalize_name(key)
+        resource = '%s_resource = ResourceSpec(yui,\n    "%s"' % (
+            name, path)
+        
+        modes = get_modes(path)
+        if modes:
+            for key, mode_path in sorted(modes.items()):
+                resource += ',\n    %s="%s"' % (key, mode_path)
+        resource += ')'
+        resources_text.append(resource)
+
+    resources_text = '\n'.join(resources_text)
+    
+    inclusions_text = []
+    for key, value in items:
+        name = normalize_name(key)
+        inclusion = '%s = Inclusion([%s_resource]' % (
+            name, name)
+        requires = value.get('requires', [])
+        if requires:
+            requires = [normalize_name(n) for n in requires]
+            depends_on = '[%s]' % (', '.join(requires))
+            inclusion += ', depends_on=%s' % depends_on
+        
+        inclusion += ')'
+        inclusions_text.append(inclusion)
+        
+    inclusions_text = '\n'.join(inclusions_text)
+
+    python = """\
+from hurry.resource import Library, Inclusion, ResourceSpec
+
+yui = Library('yui')
+
+%s
+
+%s
+""" % (resources_text, inclusions_text)
+    print python
+
+def normalize_name(n):
+    return n.replace('-', '_')
+
+def deminize(path):
+    rest, ext = os.path.splitext(path)
+    if rest.endswith('-min'):
+        rest = rest[:-len('-min')]
+    return rest + ext
+
+def get_modes(path):
+    rest, ext = os.path.splitext(path)
+    if ext == '.css':
+        return {'minified': rest + '-min' + ext}
+    elif ext == '.js':
+        return {'minified': rest + '-min' + ext,
+                'debug': rest + '-debug' + ext}
+    else:
+        return {}
+    
+def sorted_dependencies(d):
+    """Given dictionary created sorted list of items.
+
+    Sort by how much we depend.
+    """
+    # count dependencies of each item
+    depend_sortkey = {}
+    for key, value in d.items():
+        for r in value.get('requires', []):
+            c = depend_sortkey.get(r, 0)
+            c += 1
+            depend_sortkey[r] = c
+
+    # add up numbers of dependencies
+    depend_sortkey2 = {}
+    for key, value in d.items():
+        v = depend_sortkey.get(key, 0)
+        for r in value.get('requires', []):
+            c = depend_sortkey2.get(r, 0)
+            c += v
+            depend_sortkey2[r] = c
+
+    # sort items by consolidated sort key
+    items = d.items()
+    items = sorted(items, key=lambda (key, value):
+                   depend_sortkey2.get(key, 0))
+    # reverse result so that things depended on most appear first
+    return list(reversed(items))
+
+def load_json(version):
+    f = urllib2.urlopen(YUILOADER_URL_TEMPLATE % version)
+    data = f.read()
+    f.close()
+    s = "'moduleInfo': "
+    i = data.find(s)
+    i = i + len(s)
+    j = data.find("'yuitest': {", i)
+    j = data.find('}', j)
+    j = data.find('}', j + 1)
+    text = data[i:j + 1]
+    json = normalize_json(text)
+    return simplejson.loads(json)
+
+def normalize_json(text):
+    # proper json has doubly quoted strings
+    text = text.replace("'", '"')
+    result = []
+    for line in text.splitlines():
+        i = line.find('//')
+        if i != -1:
+            line = line[:i] + '\n'
+        result.append(line)
+    return ''.join(result)



More information about the Checkins mailing list