Exemplo n.º 1
0
    def _parse_flags(self, cmd_flag_map, args):
        """Expects arguments after the initial command and subcommands (i.e.,
        the second item returned from _parse_subcmds)

        Returns a tuple of (multidict of flag names to parsed and validated values, remaining_args).

        Raises on unknown subcommands.
        """
        flag_value_map = OMD()
        ff_path_res_map = OrderedDict()
        ff_path_seen = set()

        orig_args = args
        while args:
            arg = args[0]
            if not arg or arg[0] != '-' or arg == '-' or arg == '--':
                # posargs or post_posargs beginning ('-' is a conventional pos arg for stdin)
                break
            flag, value, args = self._parse_single_flag(cmd_flag_map, args)
            flag_value_map.add(flag.name, value)

            if flag is self.flagfile_flag:
                self._parse_flagfile(cmd_flag_map,
                                     value,
                                     res_map=ff_path_res_map)
                for path, ff_flag_value_map in ff_path_res_map.items():
                    if path in ff_path_seen:
                        continue
                    flag_value_map.update_extend(ff_flag_value_map)
                    ff_path_seen.add(path)

        return flag_value_map, ff_path_res_map, args
Exemplo n.º 2
0
class EventEmitter2(object):

    def __init__(self):
        """
        """
        self.events = OrderedMultiDict()
        self.on = self.add_listener
        self.off = self.remove_listener
        # TODO: Add listener to remove

    def add_listener(self, event, listener, count=0):
        if not (isinstance(listener, FunctionType)) or (isinstance(listener, BuiltinFunctionType)):
            raise Exception("Invalid Listener: %s" % (str(listener)))
        _event = re.compile(event)
        _listener = {"handler": listener, "calls": 0, "calls_left": count}
        self.events.add(_event, _listener)
        return True

    def emit(self, event, kwargs):
        for pattern, listener in self.events.iteritems(multi=True):
            if pattern.match(event):
                if not listener["calls_left"]:
                    log.debug("Removing Listener: %s on Pattern: %s") % (
                        listener, pattern)
                    self.remove_listener(pattern, listener)
                listener["calls"] += 1
                listener["calls_left"] -= 1
                yield listener["handler"](**kwargs)

    def remove_listener(self, pattern, listener):
        pattern = re.compile(pattern)
        listeners = self.events.getlist(pattern)
        for pattern, _listener in self.events.iteritems(multi=True):
            if _listener['handler'] == listener:
                listener = _listener
                break
        listeners = self.events.getlist(pattern)
        listeners.remove(listener)
        if len(listeners):
            self.events.update({pattern: listeners})
        else:
            self.events._remove(pattern)
        return True

    def on_any(self, listener):
        raise NotImplementedError

    def off_any(self, listener):
        raise NotImplementedError

    def once(self, event, listener):
        self.add_listener(event, listener, left=1)

    def many(self, event, listener, left):
        self.add_listener(event, listener, left)
Exemplo n.º 3
0
class EventEmitter2(object):
    def __init__(self):
        """
        """
        self.events = OrderedMultiDict()
        self.on = self.add_listener
        self.off = self.remove_listener
        # TODO: Add listener to remove

    def add_listener(self, event, listener, count=0):
        if (isinstance(listener, BuiltinFunctionType)):
            raise Exception("Invalid Listener: %s" % (str(listener)))
        _event = re.compile(event)
        _listener = {"handler": listener, "calls": 0, "calls_left": count}
        self.events.add(_event, _listener)
        return True

    def emit(self, event, kwargs):
        for pattern, listener in self.events.iteritems(multi=True):
            if pattern.match(event):
                if not listener["calls_left"]:
                    log.debug("Removing Listener: %s on Pattern: %s") % (
                        listener, pattern)
                    self.remove_listener(pattern, listener)
                listener["calls"] += 1
                listener["calls_left"] -= 1
                yield listener["handler"](**kwargs)

    def remove_listener(self, pattern, listener):
        pattern = re.compile(pattern)
        listeners = self.events.getlist(pattern)
        for pattern, _listener in self.events.iteritems(multi=True):
            if _listener['handler'] == listener:
                listener = _listener
                break
        listeners = self.events.getlist(pattern)
        listeners.remove(listener)
        if len(listeners):
            self.events.update({pattern: listeners})
        else:
            self.events._remove(pattern)
        return True

    def on_any(self, listener):
        raise NotImplementedError

    def off_any(self, listener):
        raise NotImplementedError

    def once(self, event, listener):
        self.add_listener(event, listener, left=1)

    def many(self, event, listener, left):
        self.add_listener(event, listener, left)
Exemplo n.º 4
0
def read_instructions() -> OrderedMultiDict[str, str]:
    instructions = OrderedMultiDict()
    instruction_regex = re.compile(r"\s(\w)\s")
    with open(INPUT_FILE, "r") as f_handle:
        for line in f_handle:
            if line:
                key, value = instruction_regex.findall(line.rstrip())
                if key not in instructions:
                    instructions[key] = value
                else:
                    instructions.add(key, value)
    return instructions
Exemplo n.º 5
0
def analyze_samples():
    outcome = OrderedMultiDict()
    opcode = Opcode()
    methods = [
        func
        for func in getmembers(Opcode, predicate=isfunction)
        if func[0] != "__init__"
    ]
    count = 0
    for before, instruction, after in read_inputs():
        outcome.clear()
        for opcode_method in methods:
            if getattr(opcode, opcode_method[0])(before, instruction) == after:
                outcome.add(instruction[0], opcode_method[0])
        if len(outcome.getlist(instruction[0])) >= 3:
            count += 1
    #print(outcome)
    print(count)
Exemplo n.º 6
0
def epi_suite_values(epi_blob):
    '''Extracts some information as key-value pairs from EPI Suite output.
    Pretty rough (work in progress).'''
    data = OMD()
    try:
        lines = epi_blob.split('\n')
        for i in lines:
            j = i.strip()
            if j.startswith('Log Kow (') or j.startswith('Log BCF'):
                data.update(dict_from_line(i, '='))
            if j.startswith('Henrys LC') or\
               j.startswith('Log Koa (KOAWIN') or\
               j.startswith('Log Koa (experimental') or\
               j.startswith('Ready Biodegradability Prediction'):
                data.update(dict_from_line(i))
        if 'Fugacity' in epi_blob:
            model_table = epi_blob.split('Level III Fugacity Model:', 1)[1]
            data.add('Level III Fugacity Model', model_table)
    except:
        pass
    return data
Exemplo n.º 7
0
def cs_scrape_properties(csid, props=None):
    '''Retrieve some of the experimental and predicted chemical properties that
    are not surfaced in the ChemSpider web API.'''
    try:
        r = requests.get('http://www.chemspider.com/Chemical-Structure.{0}.html'.format(csid))
        r.raise_for_status()
    except Exception as e:
        print(e)
        return None
    data = OMD([('CSID', csid)])
    doc = BeautifulSoup(r.text, 'lxml')
    # Experimental and predicted properties ("Experimental data" tab):
    props_tabs = doc.find(id='suppInfoTab')
    try:
        props_found = props_tabs.find_all(class_='user_data_property_name')
        for p in props_found:
            prop_name = p.get_text().strip(': \r\n')
            if props is not None and prop_name not in props:
                continue
            li = p.find_parent('li')
            values = li.find_all('td')
            for i in values:
                value = i.get_text().strip()
                data.add(prop_name, value)
    except AttributeError:
        pass
    # ACD/Labs predicted properties:
    acd_tab = doc.find(id='acdLabsTab')
    try:
        acd_props = acd_tab.find_all(class_='prop_title')
        for p in acd_props:
            prop_name = p.get_text().strip(': \r\n')
            v = p.find_next_sibling('td')
            value = v.get_text().strip()
            if props is not None and prop_name not in props:
                continue
            # Make sure all predicted properties are obviously named 
            if prop_name.startswith('ACD/') is False:
                prop_name = 'ACD/' + prop_name
            data.add(prop_name, value)
    except AttributeError:
        pass
    # EPI Suite results, as a blob to process later:
    #   Sometimes only returns part of the text, for some reason.
    if props is not None and 'EPI Suite' not in props:
        pass
    else:
        epi_tab = doc.find(id='epiTab')
        epi_blob = epi_tab.get_text().strip() if epi_tab else None
        data.add('EPI Suite', epi_blob)
    return data