示例#1
0
def molconvert_chemaxon(data):
    """
    molconvert wrapper
    :param data: buffer or string or path to file
    :return: array of molecules of reactions
    """
    if isinstance(data, Path):
        with data.open('rb') as f:
            data = f.read()
    elif isinstance(data, StringIO):
        data = data.read().encode()
    elif isinstance(data, BytesIO):
        data = data.read()
    elif hasattr(data, 'read'):  # check if data is open(filename, mode)
        data = data.read()
        if isinstance(data, str):
            data = data.encode()
    elif isinstance(data, str):
        data = data.encode()
    elif not isinstance(data, bytes):
        raise ValueError('invalid input')

    try:
        p = run(['molconvert', '-g', 'mrv'], input=data, stdout=PIPE)
    except FileNotFoundError as e:
        raise ConfigurationError from e

    if p.returncode != 0:
        raise ConfigurationError(p.stderr.decode())

    with BytesIO(p.stdout) as f, MRVRead(f) as r:
        return iter2array(r)
示例#2
0
    def __processor_s(self, structure):
        with StringIO() as f:
            with MRVWrite(f) as w:
                w.write(structure)
            data = dict(
                structure=f.getvalue(),
                parameters='mrv',
                filterChain=[
                    dict(filter='standardizer',
                         parameters=dict(standardizerDefinition=self.rules))
                ])
        try:
            q = post(f'{CHEMAXON_REST}/rest-v0/util/calculate/molExport',
                     json=data,
                     timeout=20)
        except RequestException as e:
            raise ConfigurationError from e

        if q.status_code not in (201, 200):
            raise ValueError('invalid data')

        res = q.json()
        if not res:
            raise ValueError('invalid data')

        with BytesIO(res['structure'].encode()) as f, MRVRead(f) as r:
            return r.read()
示例#3
0
def display_output(value):
    if value:  # data from `download` attr of widget
        with BytesIO(value.encode()) as f, MRVRead(f) as i:
            s = next(i)
            s.standardize()
            s.thiele()
        with StringIO() as f:
            with MRVWrite(f) as o:
                o.write(s)
            value = f.getvalue()
    return value  # send to `upload` attr of widget
示例#4
0
def molconvert_chemaxon(data):
    """
    ChemAxon molconvert wrapper.

    Parameters
    ----------
    data : Buffer or string or path to file
        All supported by molconvert formats for chemical data storing.

    Returns
    -------
    array : Array of molecules of reactions
        CGRtools data types for Reactions and Molecules storing.
    """
    if isinstance(data, Path):
        with data.open('rb') as f:
            data = f.read()
    elif isinstance(data, StringIO):
        data = data.read().encode()
    elif isinstance(data, BytesIO):
        data = data.read()
    elif hasattr(data, 'read'):  # check if data is open(filename, mode)
        data = data.read()
        if isinstance(data, str):
            data = data.encode()
    elif isinstance(data, str):
        data = data.encode()
    elif not isinstance(data, bytes):
        raise ValueError('invalid input')

    try:
        p = run(['molconvert', '-g', 'mrv'], input=data, stdout=PIPE)
    except FileNotFoundError as e:
        raise ConfigurationError from e

    if p.returncode != 0:
        raise ConfigurationError(p.stderr.decode())

    with BytesIO(p.stdout) as f, MRVRead(f) as r:
        return iter2array(r)
示例#5
0
    def __processor_m(self, structures):
        with StringIO() as f:
            with MRVWrite(f) as w:
                for s in structures:
                    w.write(s)
            tmp = f.getvalue().encode()
        try:
            p = run(
                ['standardize', '-c',
                 str(self.__config), '-f', 'mrv', '-g'],
                input=tmp,
                stdout=PIPE,
                stderr=PIPE)
        except FileNotFoundError as e:
            raise ConfigurationError from e

        if p.returncode != 0:
            raise ConfigurationError(p.stderr.decode())

        with BytesIO(p.stdout) as f, MRVRead(f) as r:
            res = r.read()
            if len(res) != len(structures):
                raise ValueError('invalid data')
            return res