예제 #1
0
    def test_datfile_mindmeld(self):
        meld = s_mindmeld.MindMeld()
        meld.addPyPath(syndir, datfiles=True)

        with meld.openDatFile('synapse.tests/test.dat') as fd:
            self.nn(fd)
            self.eq(fd.read(), b'woot\n')
예제 #2
0
def main(argv):
    '''
    Command line tool for MindMeld construction/manipulation.
    '''

    p = argparse.ArgumentParser(prog='melder')
    p.add_argument('meldfile', help='meld file path')

    p.add_argument('--add-pypath',
                   dest='pypaths',
                   default=[],
                   action='append',
                   help='add a python path to the meld')
    p.add_argument('--add-datfiles',
                   dest='datfiles',
                   action='store_true',
                   help='when adding pypath, include datfiles')

    p.add_argument('--dump-info',
                   dest='dumpinfo',
                   action='store_true',
                   help='dump the entire meld info dictionary to stdout')

    p.add_argument('--set-name',
                   dest='name',
                   default=None,
                   help='set meld name (ie, "foolib")')
    p.add_argument('--set-version',
                   dest='version',
                   default=None,
                   help='set meld version (ie, 8.2.30)')

    opts = p.parse_args(argv)

    meldinfo = {}
    if os.path.isfile(opts.meldfile):
        with open(opts.meldfile, 'rb') as fd:
            meldinfo = msgpack.load(fd, encoding='utf8')

    meld = s_mindmeld.MindMeld(**meldinfo)

    if opts.version:
        meld.setVersion(s_common.vertup(opts.version))

    if opts.name:
        meld.setName(opts.name)

    for pypath in opts.pypaths:
        meld.addPyPath(pypath, datfiles=opts.datfiles)

    meldinfo = meld.getMeldDict()
    if opts.dumpinfo:
        print(repr(meldinfo))

    meldbyts = msgpack.dumps(meld.getMeldDict(),
                             encoding='utf8',
                             use_bin_type=True)
    with open(opts.meldfile, 'wb') as fd:
        fd.write(meldbyts)
예제 #3
0
    def test_mindmeld_addpymod(self):
        meld = s_mindmeld.MindMeld()
        meld.addPyMod('synapse')

        self.assertIsNone(meld.getMeldMod('newp'))
        self.assertIsNone(meld.getMeldMod('binascii'))
        self.assertIsNotNone(meld.getMeldMod('synapse'))
        self.assertIsNotNone(meld.getMeldMod('synapse.mindmeld'))
예제 #4
0
    def test_mindmeld_base64(self):
        meld = s_mindmeld.MindMeld()
        meld.addPySource('hehehahaaaa', 'x = 40')

        s_mindmeld.loadMeldBase64(meld.getMeldBase64())

        import hehehahaaaa
        self.assertEqual(hehehahaaaa.x, 40)
예제 #5
0
    def test_mindmeld_pycall(self):

        meld = s_mindmeld.MindMeld()
        meld.addPyCall(foobar)

        self.assertIsNone(meld.getMeldMod('newp'))
        self.assertIsNone(meld.getMeldMod('binascii'))
        self.assertIsNotNone(meld.getMeldMod('synapse'))
        self.assertIsNotNone(meld.getMeldMod('synapse.mindmeld'))
예제 #6
0
    def test_mindmeld_loader(self):
        meld = s_mindmeld.MindMeld()
        meld.addPySource('hehehahahoho', 'x = 30')

        meldinfo = meld.getMeldDict()
        s_mindmeld.loadMindMeld(meldinfo)

        import hehehahahoho
        self.assertEqual(hehehahahoho.x, 30)
예제 #7
0
    def test_httpapi_meld(self):
        meld = s_mindmeld.MindMeld()
        meld.setName('ziza')
        meld.setVersion((1, 2, 3))
        meld.addPySource('ziza', 'class ZiZa:pass')

        b64 = meld.getMeldBase64()

        api = s_httpapi.HttpApi()
        api.loadMeldBase64(b64)

        api.addApiObject('ziza', 'ziza.ZiZa')
        melds = api.getMindMelds()

        self.assertEqual(len(melds), 1)
        self.assertEqual(melds[0].get('name'), 'ziza')
        self.assertEqual(melds[0].get('version'), (1, 2, 3))

        api.fini()
예제 #8
0
 def genHiveMeld(self):
     if self.meld is None:
         self.meld = s_mindmeld.MindMeld()
     return self.meld
예제 #9
0
 def test_mindmeld_badsrc(self):
     meld = s_mindmeld.MindMeld()
     badsrc = 'some --<<== shit'
     self.assertRaises(s_mindmeld.BadPySource, meld.addPySource, 'woot',
                       badsrc)
예제 #10
0
 def test_mindmeld_nosuch(self):
     meld = s_mindmeld.MindMeld()
     self.assertRaises(NoSuchPath, meld.addPyPath, '/newp')
예제 #11
0
    def test_mindmeld_pkgwalk(self):
        meld = s_mindmeld.MindMeld()
        meld.addPyPath(syndir)

        moddef = meld.getMeldMod('synapse.tests.test_mindmeld')
        self.assertIsNotNone(moddef)