Esempio n. 1
0
class ObjectTreeTests(unittest.TestCase):
    def setUp(self):
        from byond.objtree import ObjectTree
        self.tree = ObjectTree()
        
    def test_consumeVariable_basics(self):
        test_string = 'var/obj/item/weapon/chainsaw = new'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name, 'chainsaw')
        self.assertEqual(data.type, '/obj/item/weapon')
        self.assertEqual(data.value, 'new')
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited, False)
        self.assertEqual(data.special, None)

    def test_consumeVariable_alternate_array_declaration_01(self):
        test_string = 'var/appearance_keylist[0]'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,       'appearance_keylist')
        self.assertEqual(data.type,  '/list')
        self.assertEqual(data.value, None)
        self.assertEqual(data.size,  0)
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited, False)
        self.assertEqual(data.special, None)
        
    def test_consumeVariable_alternate_array_declaration_02(self):
        test_string = 'var/medical[] = list()'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,       'medical')
        self.assertEqual(data.type,  '/list')
        self.assertEqual(data.value, 'list()')
        self.assertEqual(data.size,  -1)
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited, False)
        self.assertEqual(data.special, None)
        
    def test_consumeVariable_complex_types(self):
        test_string = 'var/datum/gas_mixture/air_temporary'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,             'air_temporary')
        self.assertEqual(data.type,        '/datum/gas_mixture')
        self.assertEqual(data.value,       None)
        self.assertEqual(data.size,        None)
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited,   False)
        self.assertEqual(data.special,     None)
        
    def test_consumeVariable_file_ref(self):
        test_string = 'icon = \'butts.dmi\''
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,             'icon')
        self.assertEqual(data.type,        '/icon')
        self.assertEqual(str(data.value),  'butts.dmi')
        self.assertEqual(data.size,        None)
        self.assertEqual(data.declaration, False)
        self.assertEqual(data.inherited,   False)
        self.assertEqual(data.special,     None)
Esempio n. 2
0
 def setUp(self):
     from byond.objtree import ObjectTree
     self.tree = ObjectTree()
Esempio n. 3
0
                 help="Specify an area to restrict rendering to.")
opt.add_argument(
    '-O',
    '--out',
    dest='outfile',
    type=str,
    default=None,
    help="What to name the file ({z} will be replaced with z-level)")
opt.add_argument('--area-list',
                 dest='areas',
                 type=str,
                 default=None,
                 help="A file with area_file.png = /area/path on each line")
args = opt.parse_args()
if os.path.isfile(args.project):
    tree = ObjectTree()
    tree.ProcessFilesFromDME(args.project)
    dmm = Map(tree)
    dmm.Load(args.map)
    renderflags = 0
    if args.render_stars:
        renderflags |= MapRenderFlags.RENDER_STARS
    if args.render_areas:
        renderflags |= MapRenderFlags.RENDER_AREAS
    kwargs = {}
    if args.areas:
        with open(args.areas) as f:
            for line in f:
                if line.startswith("#"):
                    continue
                if '=' not in line:
Esempio n. 4
0
        ProcessTechLevels(child, path + '/' + key)


def prettify(tree, indent=0):
    prefix = ' ' * indent
    for key in tree.keys():
        atom = tree[key]
        print('{}{}/'.format(prefix, key))
        prettify(atom.children, indent + len(key))
        for propkey, value in atom.properties.items():
            print('{}var/{} = {}'.format(' ' * (indent + len(key)), propkey,
                                         repr(value)))


if os.path.isfile(sys.argv[1]):
    tree = ObjectTree()
    tree.ProcessFilesFromDME(sys.argv[1])
    ProcessTechLevels(tree.Tree)
    with open(
            os.path.join(os.path.dirname(sys.argv[1]), 'tech_origin_list.csv'),
            'w') as w:
        with open(
                os.path.join(os.path.dirname(sys.argv[1]),
                             'max_tech_origins.txt'), 'w') as mto:
            tech_columns = []
            mto.write(
                'Calculated Max Tech Levels:\n  These tech levels have been determined by parsing ALL origin_tech variables in code included by {0}.\n'
                .format(sys.argv[1]))
            for tech in sorted(CMTLs.keys()):
                tech_columns.append(tech)
                mto.write('{:>15}: {}\n'.format(tech, CMTLs[tech]))
Esempio n. 5
0
opt.add_argument('dme',
                 nargs='?',
                 default='baystation12.dme',
                 type=str,
                 help='Project file.',
                 metavar='environment.dme')
opt.add_argument('map', type=str, help='Map to fix.', metavar='map.dmm')

args = opt.parse_args()

actions = []

mapfixes.Load()
actions += mapfixes.GetFixesForNS(args.namespaces, not args.no_dependencies)

tree = ObjectTree()
tree.ProcessFilesFromDME(args.dme)

for fixscript in args.fixscripts:
    with open(fixscript, 'r') as repl:
        ln = 0
        errors = 0
        for line in repl:
            ln += 1
            if line.startswith('#'):
                continue
            if line.strip() == '':
                continue
            # PROPERTY: step_x > pixel_x
            # TYPE: /obj/item/key > /obj/item/weapon/key/janicart
            subject, action = line.split(':')
'''
Created on Apr 29, 2014

@author: Rob
'''
import argparse, os

from byond.objtree import ObjectTree
from byond.basetypes import Proc


def dumpSubTypes(atom):
    print('{}:{}: {}'.format(atom.filename, atom.line, atom.path))
    for rpath, catom in atom.children.items():
        if not isinstance(catom, Proc):
            dumpSubTypes(catom)


if __name__ == '__main__':
    opt = argparse.ArgumentParser()
    opt.add_argument('project', metavar="project.dme")
    opt.add_argument('--subtypes',
                     type=str,
                     help="List all subtypes of the given type")
    args = opt.parse_args()
    if os.path.isfile(args.project):
        tree = ObjectTree()
        tree.ProcessFilesFromDME(args.project)
        if args.subtypes:
            atom = tree.GetAtom(args.subtypes)
            dumpSubTypes(atom)
Esempio n. 7
0
 def setUp(self):
     from byond.objtree import ObjectTree
     self.tree = ObjectTree()
Esempio n. 8
0
class ObjectTreeTests(unittest.TestCase):
    def setUp(self):
        from byond.objtree import ObjectTree
        self.tree = ObjectTree()
        
    def test_consumeVariable_basics(self):
        test_string = 'var/obj/item/weapon/chainsaw = new'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name, 'chainsaw')
        self.assertEqual(data.type, '/obj/item/weapon')
        self.assertEqual(data.value, 'new')
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited, False)
        self.assertEqual(data.special, None)

    def test_consumeVariable_alternate_array_declaration_01(self):
        test_string = 'var/appearance_keylist[0]'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,       'appearance_keylist')
        self.assertEqual(data.type,  '/list')
        self.assertEqual(data.value, None)
        self.assertEqual(data.size,  0)
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited, False)
        self.assertEqual(data.special, None)
        
    def test_consumeVariable_alternate_array_declaration_02(self):
        test_string = 'var/medical[] = list()'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,       'medical')
        self.assertEqual(data.type,  '/list')
        self.assertEqual(data.value, 'list()')
        self.assertEqual(data.size,  -1)
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited, False)
        self.assertEqual(data.special, None)
        
    def test_consumeVariable_complex_types(self):
        test_string = 'var/datum/gas_mixture/air_temporary'
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,             'air_temporary')
        self.assertEqual(data.type,        '/datum/gas_mixture')
        self.assertEqual(data.value,       None)
        self.assertEqual(data.size,        None)
        self.assertEqual(data.declaration, True)
        self.assertEqual(data.inherited,   False)
        self.assertEqual(data.special,     None)
        
    def test_consumeVariable_file_ref(self):
        test_string = 'icon = \'butts.dmi\''
        name, data = self.tree.consumeVariable(test_string, '', 0)
        
        self.assertEqual(name,             'icon')
        self.assertEqual(data.type,        '/icon')
        self.assertEqual(str(data.value),  'butts.dmi')
        self.assertEqual(data.size,        None)
        self.assertEqual(data.declaration, False)
        self.assertEqual(data.inherited,   False)
        self.assertEqual(data.special,     None)
Esempio n. 9
0
                 warning='sleep() should not be used in process().',
                 regex=re.compile(r'\bsleep\(([0-9]+)\)\b'),
                 in_procnames=('process')),
    RegexScanner(id='spawn-in-process',
                 warning='spawn() should not be used in process().',
                 regex=re.compile(r'\bspawn(\(([0-9]*)\))?\b'),
                 in_procnames=('process')),
    RegexScanner(
        id='del-in-ex_act',
        warning=
        'del() should not be used in ex_act(). Consider replacing with qdel.',
        regex=re.compile(r'\bdel(\(.*\))?\b'),
        in_procnames=('ex_act')),
]

otr = ObjectTree()
otr.ProcessFilesFromDME(sys.argv[1], '.dm')
procs = 0
alerts = 0
for path in otr.Atoms:
    atom = otr.GetAtom(path)
    if isinstance(atom, Proc): continue
    proceed = False
    skipping = []
    for rule in rules:
        if rule.MatchAtom(atom):
            proceed = True
        else:
            skipping += [rule]
    if not proceed: continue
    for childName in atom.children: