From ef1da88bbf1bb363fdead371baf47f3c4d9c3d46 Mon Sep 17 00:00:00 2001 From: dsc Date: Sun, 26 Feb 2012 16:05:08 -0800 Subject: [PATCH] Script I used to manipulate tags in data.yaml --- msc/dygraph-options/dygraph_options.py | 112 ++++++++++++++++++++++++++++++++ 1 files changed, 112 insertions(+), 0 deletions(-) create mode 100644 msc/dygraph-options/dygraph_options.py diff --git a/msc/dygraph-options/dygraph_options.py b/msc/dygraph-options/dygraph_options.py new file mode 100644 index 0000000..886457d --- /dev/null +++ b/msc/dygraph-options/dygraph_options.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import json +from operator import itemgetter, attrgetter, methodcaller, concat, iconcat +try: + from bunch import * + from lessly import * + from lessly.data.yaml_omap import yaml, OrderedDict + from lessly.misc import keystringer + from lessly.strings import split_camel +except ImportError: + print "You'll need to install some stuff. Try:" + print " pip install bunch" + print " pip install git://github.com/dsc/py-lessly.git" + print + raise + + +class Options(Bunch): + + def __init__(self, data): + self.ordered_data = bunchify(data) + for o in self.ordered_data: + self[o.name] = o + + + def pluck(self, key, default=None): + return pluck(self.ordered_data, key, default) + + def pluckattr(self, attr, default=None): + return pluckattr(self.ordered_data, key, default) + + def invoke(self, attr, *args, **kwargs): + return invoke(self.ordered_data, attr, *args, **kwargs) + + @property + def all_tags(self): + return set(reduce(concat, self.pluck('tags', []), [])) + + def update_tags(self): + TAG_ADD_BY_NAME = { + # match... add tag... + 'label' : ['labels'], + 'color' : ['color'], + 'axis' : ['axes'], + 'grid' : ['grid'], + 'pan' : ['pan'], + 'zoom' : ['zoom'], + 'range' : ['range'], + } + TAG_REPLACEMENTS = { + 'csv parsing' : ['csv'], + + 'overall display' : ['display'], + 'chart labels' : ['labels', 'display'], + 'legend' : ['legend', 'labels', 'display'], + 'value display/formatting' : ['formatting', 'display'], + 'data series colors' : ['data', 'color', 'display'], + 'data line display' : ['data', 'lines', 'display'], + + 'interactive elements' : ['interactivity'], + 'zooming' : ['zoom'], + } + TAG_PREPEND = { + 'csv' : 'source', + # 'label' : 'display', + # 'color' : 'display', + # 'formatting' : 'display', + 'zoom' : 'interactivity', + 'pan' : 'interactivity', + 'range' : 'interactivity', + } + + for o in self.ordered_data: + name = o.name.lower() + otags = o.tags + for tag, tests in TAG_ADD_BY_NAME.iteritems(): + if any(test in name for test in tests): + otags.append(tag) + + for tag, repls in TAG_REPLACEMENTS.iteritems(): + otags = reduce(lambda acc, t: acc+(repls if t == tag else [t]), otags, []) + # i = 0 + # while i < len(otags): + # if otags[i] == tag: + # otags[i:i+1] = repls + # i += len(repls) - 1 + # i += 1 + + for tag, ptag in TAG_PREPEND.iteritems(): + otags = reduce(lambda acc, t: acc+([ptag, t] if t == tag else [t]), otags, []) + + o.tags = list(set(otags)) + + + + + + def save(self, outpath='data.yaml'): + with open(outpath, 'w') as f: + yaml.safe_dump(self.ordered_data, f, indent=4, default_flow_style=False, width=80) + + @classmethod + def fromFile(Cls, optspath='data.yaml'): + with open(optspath, 'rU') as f: + return Cls(yaml.load(f)) + + + + + -- 1.7.0.4