import openbabel

convertor = openbabel.OBConversion()
convertor.SetInAndOutFormats("smi", "smi")

def methane():
    mol = openbabel.OBMol()
    convertor.ReadString(mol, "C")
    return mol

def ob2smi(obmol):
    return convertor.WriteString(obmol)

def addMethaneFragment(obmol):
    newmol = methane()
    obmol += newmol
    return obmol

def thisworks():
    m1 = methane()
    m2 = methane()
    m1 += m2
    print "Added fragment, converting to smi"
    print ob2smi(m1)
    
def thisalsoworks():
    m1 = methane()
    m2 = addMethaneFragment(m1)
    print "Added fragment, converting to smi"
    print ob2smi(m1)

def thissegfaults():
    m1 = methane()
    addMethaneFragment(m1)
    print "Added fragment, converting to smi"
    print ob2smi(m1)

if __name__ == "__main__":
    print "Calling 'thisworks':"
    thisworks()
    print "Calling 'thisalsoworks':"
    thisalsoworks()
    print "Calling 'thissegfaults':"
    thissegfaults()
