コード例 #1
0
def __reorder_edges(l, item):
    if not l:
        return []
    for elem in l:
        if elem[0] == item[-1]:
            return [elem] + __reorder_edges(utils.remove_from_list(l, elem), elem)
        elif elem[-1] == item[-1]:
            return [elem[::-1]] + __reorder_edges(utils.remove_from_list(l, elem), elem[::-1])
    return []
コード例 #2
0
def __reorder_edges(l, item):
    if not l:
        return []
    for elem in l:
        if elem[0] == item[-1]:
            return [elem] + __reorder_edges(utils.remove_from_list(l, elem),
                                            elem)
        elif elem[-1] == item[-1]:
            return [elem[::-1]] + __reorder_edges(
                utils.remove_from_list(l, elem), elem[::-1])
    return []
コード例 #3
0
ファイル: Circle.py プロジェクト: bendtherules/pyFun
    def collide(self, other_obj, moved_center=(None, None), from_container_obj=False):
        ''' Collision handler for any type of obj'''
        # todo: handle game_class=="all"
        # todo: point class
        if not hasattr(other_obj, "__class__"):
            raise AttributeError(
                "other_obj must be a class or instance")

        # Handle instances
        if isinstance(other_obj, Circle):
            return self.collide_circle(other_obj, moved_center, from_container_obj)
        elif isinstance(other_obj, sprite_types.Rect):
            return self.collide_rect(other_obj, moved_center, from_container_obj)
        elif isinstance(other_obj, sprite_types.Img):
            return self.collide_img(other_obj, moved_center, from_container_obj)
        else:
            pass

        # Handle classes
        if inspect.isclass(other_obj):
            if issubclass(other_obj, Circle):
                return self.collide_list_circle(other_obj.list_instance, moved_center, from_container_obj)
            elif issubclass(other_obj, sprite_types.Rect):
                return self.collide_list_rect(other_obj.list_instance, moved_center, from_container_obj)
            elif issubclass(other_obj, sprite_types.Img):
                return self.collide_list_img(other_obj.list_instance, moved_center, from_container_obj)
            else:
                pass

        # Handle fun_Game and fun_Class or their instances
        if isinstance(other_obj, base.fun_Game) or (inspect.isclass(other_obj) and issubclass(other_obj, base.fun_Game)):
            def instance_collide(other_obj):
                return self.collide(other_obj.sprite, moved_center, from_container_obj=True)
            to_return = other_obj.for_all_instance(
                instance_collide, flatten="level-class")
            remove_from_list(to_return, self.container_obj)
            remove_from_list(to_return, None, recursive=True)
            remove_from_list(to_return, False, recursive=True)
            return to_return
        if inspect.isclass(other_obj) and issubclass(other_obj, base.fun_Class):
            def instance_collide(other_obj):
                return self.collide(other_obj.sprite, moved_center, from_container_obj=True)
            to_return = other_obj.for_all_instance(
                instance_collide, flatten=False)
            remove_from_list(to_return, self.container_obj)
            remove_from_list(to_return, None, recursive=True)
            remove_from_list(to_return, False, recursive=True)
            return to_return
        if isinstance(other_obj, base.fun_Class):
            other_obj_sprite = other_obj.sprite
            to_return = self.collide(
                other_obj_sprite, moved_center, from_container_obj=True)
            # doesnt return list, so prev. case operations not done
            return to_return
コード例 #4
0
ファイル: parser.py プロジェクト: AssassinPig/flying_offer
    def run(self):
        parser = etree.HTMLParser()
        tree   = etree.parse(StringIO(self.content), parser)

        #job title
        title = tree.xpath('//td[@class=\'sr_bt\']/text()')
        for t in title:
            print "job title: %s" % t 
            self.extract_content += "%s\n" % t

        #job detail
        detail = tree.xpath('//td[contains(@class, \'txt_4 wordBreakNormal job_detail\')]/div/text()')
        print "job detail: " 
        job_detail = ""
        for d in detail:
            print d
            job_detail += "%s\t" % d
        self.extract_content += "%s\n" % job_detail 

        #welfare
        welfare = tree.xpath('//span[contains(@class, \'Welfare_label\')]/text()')
        #print "job welfare %s " % welfare 
        print "job welfare :" 
        welfare_info = ""
        for w in welfare:
            print w
            welfare_info += "%s\t" % w
        self.extract_content += "%s\n" % welfare_info 

        #l = tree.xpath('//table[contains(@class, \'jobs_1\')]')
        txt1 = tree.xpath('//table[contains(@class, \'jobs_1\')]/tr/td[contains(@class, \'txt_1\')]')
        txt2 = tree.xpath('//table[contains(@class, \'jobs_1\')]/tr/td[contains(@class, \'txt_2\')]')

        #txt1_tag = ['发布日期:', '工作地点:', '招聘人数:', '工作年限:', '薪水范围:' ]
        txt1_tag = ['发布日期:', '工作地点:', '薪水范围:' ]

        print "job info:"
        job_info = ''
        for i, e in enumerate(txt1):
            if len(e.text.lstrip()) == 0:
                break
            if txt1[i].text == '发布日期:':
                job_info += "%s\t" % txt2[i].text
            if txt1[i].text == '工作地点:':
                job_info += "%s\t" % txt2[i].text
            if txt1[i].text == '薪水范围:':
                job_info += "%s\t" % txt2[i].text
        print job_info
        
        self.extract_content += "%s\n" % job_info 

        #company introduction
        l = tree.xpath('//div[contains(@class, \'jobs_txt\')]/p')
        print "company introduction:"
        company_intro = ""
        for i in l:
            if not i.text is None:
                print i.text
                company_intro += "%s\t" % i.text

        self.extract_content += "%s\n" % company_intro 

        #company name
        print 'company name'
        company_name = ""
        l = tree.xpath('//td[@class=\'sr_bt\']')
        for i in l:
            tr = l[0].getparent()
            iters = tr.itersiblings(); 
            for it in iters: 
                a_list = it.xpath('//td/table/tr/td/a')
                for i in a_list:
                    if not i.text is None:
                        print i.text
                        company_name = i.text
                break
            break

        self.extract_content += "%s\n" % company_name 

        #company info
        company_info = ""
        l = tree.xpath('//td/strong')
        txt1_tag = ['公司行业:', '公司性质:', '公司规模:' ]
        remove_from_list(l, txt1_tag)
        #print l
        for i in l:
            td = i.getparent()
            iters = td.itertext()
            index = 0 
            for it in iters:
                it = it.lstrip()
                #if it in txt1_tag:
                print "[%s]" % it
                company_info += "%s\t" % it
                index += 1

            break
        self.extract_content += "%s\n" % company_info
コード例 #5
0
    def run(self):
        self.slotsStartWatch.start()
        self.slotsEndWatch.start()

        while not self.stopped_thread():
            self.check_timeouts()
            new_timeout = self.get_next_timeout()
            readable, writable, exceptional = select.select(
                self.inputs, [], self.inputs, new_timeout)

            for s in readable:
                if s is self.sock_tcp:
                    (connection, address) = self.sock_tcp.accept()
                    connection.setblocking(False)
                    self.logger.info('TCP CON (%s, %d)' %
                                     (address[0], address[1]))
                    self.inputs.append(connection)
                else:
                    buffer = utils.read_data_from_socket(s)
                    if buffer:
                        self.logger.debug(
                            'Req_data = %s\t client = (%s, %d)' %
                            (buffer, s.getpeername()[0], s.getpeername()[1]))
                        action, data = utils.segment_packet(buffer)

                        if action == utils.GATEWAY_NODES_FLASH:
                            image_name = self.get_image_name(s)
                            result = []
                            for node in data[db_utils.NODES]:
                                if node['status'] == utils.FLASHED:
                                    gateway_id = self.dbConnector.find_gateway_by_addr(
                                        s.getpeername())
                                    node_uid = self.dbConnector.get_node_uid_by_gateway_id_and_node_id(
                                        gateway_id, node['node_id'])
                                    self.dbConnector.node_update_flash_info(
                                        node_uid, 'FINISHED', image_name)
                                    _node = {
                                        '_id': node_uid,
                                        'status': node['status']
                                    }
                                else:  # node['status'] = utils.ERROR
                                    gateway_id = self.dbConnector.find_gateway_by_addr(
                                        s.getpeername())
                                    node_uid = self.dbConnector.get_node_uid_by_gateway_id_and_node_id(
                                        gateway_id, node['node_id'])
                                    _node = {
                                        '_id': node_uid,
                                        'status': node['status']
                                    }
                                result.append(_node)

                            self.handle_gateway_request(s, result)
                            self.inputs.remove(s)
                            s.close()

                        elif action == utils.GATEWAY_NODES_ERASE:
                            result = []
                            for node in data[db_utils.NODES]:
                                if node['status'] == utils.ERASED:
                                    gateway_id = self.dbConnector.find_gateway_by_addr(
                                        s.getpeername())
                                    node_uid = self.dbConnector.get_node_uid_by_gateway_id_and_node_id(
                                        gateway_id, node['node_id'])
                                    self.dbConnector.node_update_flash_info(
                                        node_uid, 'NOT_STARTED', None)
                                    _node = {
                                        '_id': node_uid,
                                        'status': node['status']
                                    }
                                else:  # node['status'] = utils.ERROR
                                    gateway_id = self.dbConnector.find_gateway_by_addr(
                                        s.getpeername())
                                    node_uid = self.dbConnector.get_node_uid_by_gateway_id_and_node_id(
                                        gateway_id, node['node_id'])
                                    _node = {
                                        '_id': node_uid,
                                        'status': node['status']
                                    }
                                result.append(_node)

                            self.handle_gateway_request(s, result)
                            self.inputs.remove(s)
                            s.close()

                        elif action == utils.GATEWAY_NODES_RESET:
                            result = []
                            for node in data[db_utils.NODES]:
                                gateway_id = self.dbConnector.find_gateway_by_addr(
                                    s.getpeername())
                                node_uid = self.dbConnector.get_node_uid_by_gateway_id_and_node_id(
                                    gateway_id, node['node_id'])
                                _node = {
                                    '_id': node_uid,
                                    'status': node['status']
                                }
                                result.append(_node)

                            self.handle_gateway_request(s, result)
                            self.inputs.remove(s)
                            s.close()

                        elif action == utils.IMAGES_GET:  # { token }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                nodetypes_images = utils.get_nodetypes_images(
                                    decoded_token[db_utils.USER])
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'data': nodetypes_images,
                                        'status': 200
                                    }).encode())

                                # OnSuccess: { data, status: 200 }
                                s.sendall(pck)

                        elif action == utils.IMAGE_SAVE:  # { token, image_name, image_data, nodetype_id }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                utils.save_image(decoded_token[db_utils.USER],
                                                 data[db_utils.NODETYPE_ID],
                                                 data[db_utils.IMAGE_NAME],
                                                 data[db_utils.IMAGE_DATA])
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'status': 200
                                    }).encode())

                                # OnSuccess: { status: 200 }
                                s.sendall(pck)

                        elif action == utils.IMAGE_DELETE:  # { token, image_name }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                nodetype_id = utils.get_nodetype_by_user_and_image_name(
                                    decoded_token[db_utils.USER],
                                    data[db_utils.IMAGE_NAME])
                                res = utils.delete_image(
                                    decoded_token[db_utils.USER],
                                    data[db_utils.IMAGE_NAME], nodetype_id)
                                pck = utils.create_response_packet(
                                    json.dumps(res).encode())

                                # OnSuccess: { status: 204 }
                                # OnError  : { status: 404 }
                                s.sendall(pck)

                        elif action == utils.NODES_GET:  # { token }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                nodes = self.dbConnector.get_nodes()
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'nodes': nodes,
                                        'status': 200
                                    }).encode())

                                # OnSuccess: { nodes, status: 200 }
                                s.sendall(pck)

                        elif action == utils.NODES_FLASH:  # { token, slot_id, image_name, node_uids}
                            token = data[db_utils.TOKEN]
                            slot_id = data[db_utils.TIMESLOT_ID]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            elif not self.dbConnector.get_slot_by_id(slot_id):
                                utils.send_invalid_slot_error(s)
                            else:
                                gateway_socks = self.send_flash_request(
                                    decoded_token[db_utils.USER],
                                    data[db_utils.IMAGE_NAME],
                                    data[db_utils.NODE_UIDS])
                                self.inputs.extend(gateway_socks)
                                self.gateway_sockets.append(gateway_socks)
                                self.gateway_sockets_info.append({
                                    'web_socket':
                                    s,
                                    'data': [],
                                    db_utils.IMAGE_NAME:
                                    data[db_utils.IMAGE_NAME]
                                })

                        elif action == utils.NODES_ERASE:  # { token, slot_id, node_uids }
                            token = data[db_utils.TOKEN]
                            slot_id = data[db_utils.TIMESLOT_ID]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            elif not self.dbConnector.get_slot_by_id(slot_id):
                                utils.send_invalid_slot_error(s)
                            else:
                                gateway_socks = self.send_erase_request(
                                    data[db_utils.NODE_UIDS])
                                self.inputs.extend(gateway_socks)
                                self.gateway_sockets.append(gateway_socks)
                                self.gateway_sockets_info.append({
                                    'web_socket':
                                    s,
                                    'data': [],
                                    db_utils.IMAGE_NAME:
                                    ''
                                })

                        elif action == utils.NODES_RESET:  # { token, slot_id, node_uids }
                            token = data[db_utils.TOKEN]
                            slot_id = data[db_utils.TIMESLOT_ID]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            elif not self.dbConnector.get_slot_by_id(slot_id):
                                utils.send_invalid_slot_error(s)
                            else:
                                gateway_socks = self.send_reset_request(
                                    data[db_utils.NODE_UIDS])
                                self.inputs.extend(gateway_socks)
                                self.gateway_sockets.append(gateway_socks)
                                self.gateway_sockets_info.append({
                                    'web_socket':
                                    s,
                                    'data': [],
                                    db_utils.IMAGE_NAME:
                                    ''
                                })

                        elif action == utils.TIMESLOTS_SAVE:  # { token, slots: [{start, end}] }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                slots = db_utils.convert_isoformat_to_datetime(
                                    data[db_utils.SLOTS])
                                slots_saved = self.dbConnector.save_timeslots(
                                    decoded_token[db_utils.USER], slots)
                                slots = db_utils.convert_datetime_to_isoformat(
                                    slots_saved)
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'slots': slots,
                                        'status': 200
                                    }).encode())

                                # OnSuccess: { slots: [{start, end}], status: 200 }
                                s.sendall(pck)

                        elif action == utils.TIMESLOTS_GET_DAYSLOTS:  # { token, date }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                slots_day = self.dbConnector.get_day_slots(
                                    data[db_utils.DATE])
                                slots = db_utils.convert_datetime_to_isoformat(
                                    slots_day)
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'slots': slots,
                                        'status': 200
                                    }).encode())

                                # OnSuccess: { slots: [{start, end, user_id}], status: 200 }
                                s.sendall(pck)

                        elif action == utils.TIMESLOTS_GET_USERSLOTS:  # { token }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                user_slots = self.dbConnector.get_user_slots(
                                    decoded_token[db_utils.USER])
                                slots = db_utils.convert_datetime_to_isoformat(
                                    user_slots)
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'slots': slots,
                                        'status': 200
                                    }).encode())

                                # OnSuccess: { slots: [{slot_id, start, end}], status: 200 }
                                s.sendall(pck)

                        elif action == utils.NODETYPES_GET:  # { token }
                            token = data[db_utils.TOKEN]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            else:
                                nodetypes = self.dbConnector.get_nodetypes()
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'nodetypes': nodetypes,
                                        'status': 200
                                    }).encode())

                                # OnSuccess: { nodetypes, status: 201 }
                                s.sendall(pck)

                        elif action == utils.USERS_SIGNUP:  # { email, username, password }
                            res = self.dbConnector.create_user(data)
                            pck = utils.create_response_packet(
                                json.dumps(res).encode())

                            # OnSuccess: { status: 201 }
                            # OnError  : { message, status: 403 }
                            s.sendall(pck)

                        elif action == utils.USERS_LOGIN:  # { email, username }
                            res = self.dbConnector.login_user(data)
                            pck = utils.create_response_packet(
                                json.dumps(res).encode())

                            # OnSuccess: { token, status: 200}
                            # OnError  : { message, status: 401 }
                            s.sendall(pck)

                        elif action == utils.DEBUG_START:  # { token, slot_id }
                            token = data[db_utils.TOKEN]
                            slot_id = data[db_utils.TIMESLOT_ID]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            elif not self.dbConnector.get_slot_by_id(slot_id):
                                utils.send_invalid_slot_error(s)
                            else:
                                if self.sock_debug:
                                    utils.remove_from_list(
                                        self.inputs, self.sock_debug)
                                    self.sock_debug.close()
                                log_data = [
                                    '=== DEBUG CHANNEL START ===\n===========================\n'
                                ]
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'data': log_data
                                    }).encode())
                                self.sock_debug = s
                                self.sock_debug.sendall(pck)

                        elif action == utils.DEBUG_END:  # { token, slot_id }
                            token = data[db_utils.TOKEN]
                            slot_id = data[db_utils.TIMESLOT_ID]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            elif not self.dbConnector.get_slot_by_id(slot_id):
                                utils.send_invalid_slot_error(s)
                            else:
                                log_data = [
                                    '=== DEBUG CHANNEL END ===\n=========================\n'
                                ]
                                if self.sock_debug:
                                    self.experiment_info = {}
                                    pck = utils.create_response_packet(
                                        json.dumps({
                                            'data': log_data,
                                            'message': 'STOP DEBUG'
                                        }).encode())
                                    self.sock_debug.sendall(pck)

                                    utils.remove_from_list(
                                        self.inputs, self.sock_debug)
                                    self.sock_debug.close()
                                    self.sock_debug = None

                                    # { status: 204 }
                                    pck = utils.create_response_packet(
                                        json.dumps({
                                            'status': 204
                                        }).encode())
                                    s.sendall(pck)

                        elif action == utils.DEBUG_CLEAR_LOG:  # { token, slot_id }
                            token = data[db_utils.TOKEN]
                            slot_id = data[db_utils.TIMESLOT_ID]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            elif not self.dbConnector.get_slot_by_id(slot_id):
                                utils.send_invalid_slot_error(s)
                            else:
                                self.clear_debug_log(
                                    decoded_token[db_utils.USER], slot_id)
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'status': 204
                                    }).encode())

                                # OnSuccess: { status: 204 }
                                s.sendall(pck)

                        elif action == utils.DEBUG_GET_LOG:  # { token, slot_id }
                            token = data[db_utils.TOKEN]
                            slot_id = data[db_utils.TIMESLOT_ID]
                            decoded_token = utils.decode_auth_token(token)
                            if not decoded_token:
                                utils.send_invalid_token_error(s)
                            elif not self.dbConnector.get_slot_by_id(slot_id):
                                utils.send_invalid_slot_error(s)
                            else:
                                self.send_debug_log(
                                    s, decoded_token[db_utils.USER], slot_id)

                        elif action == utils.DEBUG_GATEWAY:  # [ TIMESTAMP, NODE_ID, DATA ]
                            print(data[0], '|', data[1], '|', data[2])
                            if self.experiment_info:
                                self.write_debug_log(data)
                            if self.sock_debug:
                                pck = utils.create_response_packet(
                                    json.dumps({
                                        'data': data
                                    }).encode())
                                self.sock_debug.sendall(pck)

                    else:
                        self.logger.info(
                            'TCP DISCON (%s, %d)' %
                            (s.getpeername()[0], s.getpeername()[1]))
                        self.inputs.remove(s)
                        s.close()

            for s in exceptional:
                self.inputs.remove(s)
                s.close()

        for sock in self.inputs:
            self.logger.debug('Exiting. . . Closing [%s]' % sock)
            sock.close()
        self.log_timer.cancel()
        self.sock_tcp.close()
        sys.exit('Exiting. . .')