コード例 #1
0
def load_static(map_container, src_path):
    txt_files = sorted([x for x in os.listdir(src_path) if get_file_ext(x) == 'txt'])

    map_container.images = []
    for txt_file in txt_files:
        ini = deserialize_ini(os.path.join(src_path, txt_file))

        txt_caption = get_ini_attr(ini, 'Options', 'Caption')
        txt_type = get_ini_attr(ini, 'Options', 'Type')
        if txt_type == 'Image':
            __load_images(map_container.images, txt_caption, ini)
コード例 #2
0
    def __extract_map_id(self, map_folder, map_item):
        ini = deserialize_ini(find_file_by_extension(map_folder, '.cty'))
        name = get_ini_attr(ini, 'Options', 'Name')

        if name is None:
            name = uuid.uuid1().hex
            self.__logger.warning('Empty NAME map property in file \'%s\', used UID %s' % (ini['__FILE_NAME__'], name))

        map_item['map_id'] = name
コード例 #3
0
    def __import_lines(self, ini):
        sections = get_ini_sections(ini, 'Line')
        if not any(sections):
            return []

        lines = []
        for section_name in sorted(sections):
            line_name = get_ini_attr(ini, section_name, 'Name')
            line_display_name = get_ini_attr(ini, section_name, 'Alias',
                                             line_name)
            line_map = get_ini_attr(ini, section_name, 'LineMap')
            stations_text = get_ini_attr(ini, section_name, 'Stations')
            drivings_text = get_ini_attr(ini, section_name, 'Driving')
            aliases_text = get_ini_attr(ini, section_name, 'Aliases')
            line_delays = get_ini_attr_collection(ini, section_name, 'Delay')

            stations = self.__get_stations(line_name, stations_text,
                                           as_dict(aliases_text))
            segments = self.__get_segments(stations, stations_text,
                                           drivings_text)

            lines.append(
                MapTransportLine(
                    line_name,
                    self.__text_index_table.as_text_id(line_display_name),
                    get_file_name_without_ext(line_map).lower()
                    if line_map is not None else None, stations, segments,
                    parse_line_delays(line_name, line_delays)))

        return lines
コード例 #4
0
    def __load_scheme_line(self, ini, line_name, scheme_line_width,
                           additional_nodes):

        text_id = self.__line_index[line_name].text_id
        line_color = self.__get_line_color(
            line_name, get_ini_attr(ini, line_name, 'Color'))
        line_width = get_ini_attr_int(ini, line_name, 'Width',
                                      scheme_line_width)
        labels_color = get_ini_attr(ini, line_name, 'LabelsColor',
                                    PmzSchemeImporter.default_labels_color)
        labels_bg_color = get_ini_attr(
            ini, line_name, 'LabelsBColor',
            PmzSchemeImporter.default_labels_background_color)

        stations, segments = self.__load_stations_and_segments(
            line_name,
            as_int_point_list(get_ini_attr(ini, line_name, 'Coordinates', '')),
            as_int_rect_list(get_ini_attr(ini, line_name, 'Rects', '')),
            additional_nodes)

        return MapSchemeLine(line_name, text_id, line_color, line_width,
                             labels_color, labels_bg_color, stations, segments)
コード例 #5
0
def load_metadata(map_container, path, text_index_table):
    metadata_files = find_files_by_extension(path, '.cty')
    if not any(metadata_files):
        raise FileNotFoundError('Cannot found .cty file in %s' % path)

    metadata = deserialize_ini(sorted(metadata_files)[0])

    delays = as_list(
        get_ini_attr(metadata, 'Options', 'DelayNames', 'Day,Night'))
    map_container.meta.delays = __parse_delays(delays, text_index_table)
    map_container.meta.transport_types = list(
        set([trp.type_name for trp in map_container.transports]))
    map_container.meta.transports = list(
        [__get_transport_meta(trp) for trp in map_container.transports])

    child_schemes = __get_child_schemes(map_container)
    map_container.meta.schemes = list([
        __get_scheme_meta(scheme, child_schemes)
        for scheme in map_container.schemes
    ])
コード例 #6
0
def get_transport_type(file_name, trp_name, ini):
    if not any(__TRANSPORT_TYPE_DICT):
        assets_path = os.path.join(os.path.dirname(__file__), 'assets')
        with codecs.open(os.path.join(assets_path, 'transports.csv'),
                         'rU',
                         encoding='utf-8') as f:
            for line in f:
                _file_name, _trp_name, _trp_type = as_quoted_list(line)
                __TRANSPORT_TYPE_DICT[_file_name.lower().strip() + '.zip.' +
                                      _trp_name.lower().strip(
                                      )] = _trp_type.strip('\r\n').strip()

    trp_type = get_ini_attr(ini, 'Options', 'Type', None)
    if trp_type is not None:
        return trp_type

    dict_id = file_name.lower() + '.' + trp_name.lower()
    if dict_id in __TRANSPORT_TYPE_DICT:
        return __TRANSPORT_TYPE_DICT[dict_id]
    else:
        LOG.error(
            'Unknown transport type for \'%s.trp\' in \'%s\', used defaults' %
            (trp_name, file_name))
        return __TRANSPORT_TYPE_DEFAULT
コード例 #7
0
    def __import_scheme(self, file):
        ini = deserialize_ini(file)
        name = get_file_name_without_ext(file).lower()
        map_files = get_ini_attr(ini, 'Options', 'ImageFileName', '')
        line_width = get_ini_attr_int(ini, 'Options', 'LinesWidth',
                                      PmzSchemeImporter.default_lines_width)
        diameter = get_ini_attr_float(ini, 'Options', 'StationDiameter',
                                      PmzSchemeImporter.default_diameter)
        is_upper_case = get_ini_attr_bool(ini, 'Options', 'UpperCase', True)
        is_word_wrap = get_ini_attr_bool(ini, 'Options', 'WordWrap', True)
        is_vector = get_ini_attr(ini, 'Options', 'IsVector', '1') == '1'
        additional_node_section = get_ini_section(ini, 'AdditionalNodes')

        transports = default_if_empty(
            as_nullable_list_stripped(
                get_ini_attr(ini, 'Options', 'Transports')), ['Metro'])

        default_transports = default_if_empty(
            as_nullable_list_stripped(
                get_ini_attr(ini, 'Options', 'CheckedTransports', None)),
            ['Metro'])

        display_name, type_name = \
            suggest_scheme_display_name_and_type(
                name,
                self.__transport_index,
                self.__scheme_index,
                self.__text_index_table)

        scheme = MapScheme()
        scheme.name = name

        scheme.name_text_id = self.__text_index_table.as_text_id(display_name)
        scheme.type_text_id = self.__text_index_table.as_text_id(
            type_name, TEXT_AS_COMMON_LANGUAGE)
        scheme.type_name = type_name

        scheme.images = self.__get_images_links(file,
                                                as_quoted_list(map_files))
        scheme.lines_width = line_width
        scheme.stations_diameter = diameter
        scheme.upper_case = is_upper_case
        scheme.word_wrap = is_word_wrap
        scheme.is_vector = is_vector
        scheme.transports = [
            get_file_name_without_ext(x).lower() for x in transports
        ]
        scheme.default_transports = [
            get_file_name_without_ext(x).lower() for x in default_transports
        ]
        additional_nodes = self.__load_additional_nodes(
            file, additional_node_section)

        scheme.lines = []
        for name in ini:
            if name not in self.__line_index:
                continue

            scheme.lines.append(
                self.__load_scheme_line(ini, name, line_width,
                                        additional_nodes))

        scheme.transfers = self.__create_scheme_transfers(scheme.lines)
        scheme.width, scheme.height = get_scheme_size(
            scheme, PmzSchemeImporter.default_scheme_gap_size)

        return scheme