def __init__(self, appobj, aetes): if not self._codecs: self.__class__._codecs = aem.Codecs() self.__class__._terminology = TerminologyTableBuilder( 'rb-appscript') self.appobj = appobj self.typebycode, typebyname, self.referencebycode, referencebyname = \ self._terminology.tablesforaetes(aetes) f = _Formatter(self.typebycode, self.referencebycode, codecs=self._codecs) constructor = appobj.AS_appdata.constructor identity = appobj.AS_appdata.identifier if constructor == 'path': self.root = 'app(%s)' % f.format(identity) elif constructor == 'pid': self.root = 'app.by_pid(%s)' % f.format(identity) elif constructor == 'url': self.root = 'app.by_url(%s)' % f.format(identity) elif constructor == 'current': self.root = 'app.current' else: # note: 'aemapp' constructor is unsupported raise RuntimeError, 'Unknown constructor: %r' % constructor
""" eventformatter -- creates custom sendprocs to render Apple events in appscript syntax """ import traceback from Foundation import NSBundle from aem import kae, ae import appscript, aem, mactypes import appscript.reference import pythonrenderer, rubyrenderer, objcrenderer from constants import * _standardCodecs = aem.Codecs() _appCache = {} ####### def _unpackEventAttributes(event): atts = [] for code in [ kae.keyEventClassAttr, kae.keyEventIDAttr, kae.keyAddressAttr ]: atts.append( _standardCodecs.unpack(event.getattr(code, kae.typeWildCard))) return atts[0].code + atts[1].code, atts[2] def makeCustomSendProc(addResultFn, isLive):
from aem import kae from aem.ae import newlist, newrecord, newdesc, MacOSError from aem.aemreference import InsertionSpecifier, Test from genericreference import GenericReference import terminology from terminology import kProperty, kElement from referencerenderer import renderreference from keywordwrapper import Keyword ###################################################################### # PRIVATE ###################################################################### # Codecs _lowlevelcodecs = aem.Codecs() ################################### # Application-specific data/codecs class AppData(aem.Codecs): """Provides application-specific: - aem.Application instance - name-code terminology translation tables - pack/unpack methods - help system """ ####### # constants, etc.
#!/usr/bin/python import types, datetime, os.path, re import aem, appscript from appscript import mactypes from osaterminology import makeidentifier from osaterminology.tables.tablebuilder import * ####### _formatterCache = {} _self = aem.Application() _codecs = aem.Codecs() _convert = makeidentifier.getconverter('objc-appscript') _terminology = TerminologyTableBuilder('objc-appscript') ###################################################################### # PRIVATE ###################################################################### class _Formatter: def __init__(self, typebycode, referencebycode, appvar, prefix, indent=''): self._referencebycode = referencebycode self._typebycode = typebycode self._prefix = prefix self._indent = indent self._valueFormatters = { types.NoneType: self.formatNone,
def setUp(self): self.c = aem.Codecs()
#!/usr/local/bin/python import unittest import aem DefaultCodecs = aem.Codecs() class TC_AEMReferences(unittest.TestCase): def test_referenceForms(self): for val, res, unpackedVersion in [ [aem.app.property("ctxt"), "app.property('ctxt')", None], [aem.app.elements("docu"), "app.elements('docu')", None], [aem.app.elements("docu").byindex(1), "app.elements('docu').byindex(1)", None], [aem.app.elements("docu").byname("foo"), "app.elements('docu').byname('foo')", None], [aem.app.elements("docu").byid(300), "app.elements('docu').byid(300)", None], [aem.app.elements("docu").next("docu"), "app.elements('docu').next('docu')", None], [aem.app.elements("docu").previous("docu"), "app.elements('docu').previous('docu')", None], [aem.app.elements("docu").first, "app.elements('docu').first", None], [aem.app.elements("docu").middle, "app.elements('docu').middle", None], [aem.app.elements("docu").last, "app.elements('docu').last", None], [aem.app.elements("docu").any, "app.elements('docu').any", None],
from CarbonX import kAE from CarbonX.AE import AECreateList, AECreateDesc import aem from genericreference import GenericReference from terminology import tablesforapp, tablesfordata, kProperty, kElement, kCommand from referencerenderer import renderreference from keywordwrapper import Keyword ###################################################################### # PRIVATE ###################################################################### # Codecs _lowLevelCodecs = aem.Codecs() # Terminology-aware pack/unpack functions used by the AppData class. # These replace the default aem pack/unpack functions, which don't understand appscript Keyword and Reference objects. def _packDict(val, codec): # Pack dictionary whose keys are strings (e.g. 'foo'), Keywords (e.g. k.name) or AETypes (e.g. AEType('pnam'). record = AECreateList('', True) usrf = None for key, value in val.items(): if isinstance(key, Keyword): try: keyCode = codec.typebyname[key.AS_name].code except KeyError: raise KeyError, "Unknown Keyword: k.%s" % key.AS_name
class _Base: _aemCodecs = _aem.Codecs() def _encfmt(self, *args): return _fmt(*[self._aemCodecs.unpack(self._codecs.pack(arg)) for arg in args])