1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-03-09 18:39:04 +08:00

Compare commits

...

8 Commits

Author SHA1 Message Date
sui-feng-cb
2eec1333ad Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-02-28 05:33:05 +08:00
LmeSzinc
2a2901d218
Merge pull request #5533 from LmeSzinc/dev
Add: Event Springtide Inn Online (event_20260226_cn)
2026-02-28 04:43:01 +08:00
LmeSzinc
66fa598e75 Fix: Abyssal combat with handle_map_event (#5328) 2026-02-28 04:37:52 +08:00
LmeSzinc
bfe67e2922 Opt: swipe multiply in event_20260226_cn 2026-02-28 04:17:37 +08:00
LmeSzinc
bd108dc35f Fix: Clicking BACK_ARROW at combat loading 2026-02-28 04:09:49 +08:00
LmeSzinc
07bf9d9947 Fix: Handle wrong OCR error like "I4-4" (#5532) 2026-02-28 03:42:27 +08:00
guoh064
c8e8d0b2fe Add: Event Springtide Inn Online (event_20260226_cn) 2026-02-28 02:50:22 +08:00
LmeSzinc
5c7f57f3b2 Fix: patch_mimetype 2026-02-19 10:19:42 +08:00
16 changed files with 85 additions and 89 deletions

View File

@ -55,13 +55,17 @@ class Config:
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725'] STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.179, 1.201)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.140, 1.161)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.107, 1.127)
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -6,7 +6,7 @@ from .a1 import Config as ConfigBase
MAP = CampaignMap('A2') MAP = CampaignMap('A2')
MAP.shape = 'J7' MAP.shape = 'J7'
MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] MAP.camera_data = ['D2', 'D5', 'E4']
MAP.camera_data_spawn_point = ['D5'] MAP.camera_data_spawn_point = ['D5']
MAP.map_data = """ MAP.map_data = """
-- ME -- -- ME ++ ++ -- -- -- -- ME -- -- ME ++ ++ -- -- --
@ -53,13 +53,9 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left'
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -6,8 +6,8 @@ from .a1 import Config as ConfigBase
MAP = CampaignMap('A3') MAP = CampaignMap('A3')
MAP.shape = 'H8' MAP.shape = 'H8'
MAP.camera_data = ['D2', 'D6', 'E2', 'E6'] MAP.camera_data = ['D4', 'D6', 'E3']
MAP.camera_data_spawn_point = ['D2'] MAP.camera_data_spawn_point = ['D4']
MAP.map_data = """ MAP.map_data = """
++ ++ -- -- ME -- -- ME ++ ++ -- -- ME -- -- ME
++ ++ MS -- -- -- ME -- ++ ++ MS -- -- -- ME --
@ -56,13 +56,7 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -56,13 +56,17 @@ class Config:
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725'] STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.138, 1.160)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.101, 1.121)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.069, 1.088)
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -57,13 +57,7 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -6,8 +6,8 @@ from .b1 import Config as ConfigBase
MAP = CampaignMap('B3') MAP = CampaignMap('B3')
MAP.shape = 'I10' MAP.shape = 'I10'
MAP.camera_data = ['D2', 'D6', 'D8', 'F2', 'F6', 'F8'] MAP.camera_data = ['D4', 'D6', 'D8', 'F4', 'F6', 'F8']
MAP.camera_data_spawn_point = ['F2', 'D2'] MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """ MAP.map_data = """
++ ++ ++ SP -- SP ++ ++ ++ ++ ++ ++ SP -- SP ++ ++ ++
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
@ -63,13 +63,7 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -55,13 +55,17 @@ class Config:
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725'] STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.179, 1.201)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.140, 1.161)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.107, 1.127)
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -6,7 +6,7 @@ from .c1 import Config as ConfigBase
MAP = CampaignMap('C2') MAP = CampaignMap('C2')
MAP.shape = 'J7' MAP.shape = 'J7'
MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] MAP.camera_data = ['D2', 'D5', 'E4']
MAP.camera_data_spawn_point = ['D5'] MAP.camera_data_spawn_point = ['D5']
MAP.map_data = """ MAP.map_data = """
-- ME -- -- ME ++ ++ -- -- -- -- ME -- -- ME ++ ++ -- -- --
@ -53,13 +53,9 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left'
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -6,8 +6,8 @@ from .c1 import Config as ConfigBase
MAP = CampaignMap('C3') MAP = CampaignMap('C3')
MAP.shape = 'H8' MAP.shape = 'H8'
MAP.camera_data = ['D2', 'D6', 'E2', 'E6'] MAP.camera_data = ['D4', 'D6', 'E3']
MAP.camera_data_spawn_point = ['D2'] MAP.camera_data_spawn_point = ['D4']
MAP.map_data = """ MAP.map_data = """
++ ++ -- -- ME -- -- ME ++ ++ -- -- ME -- -- ME
++ ++ MS -- -- -- ME -- ++ ++ MS -- -- -- ME --
@ -57,13 +57,7 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -56,13 +56,17 @@ class Config:
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725'] STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.138, 1.160)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.101, 1.121)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.069, 1.088)
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -58,13 +58,7 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -6,8 +6,8 @@ from .d1 import Config as ConfigBase
MAP = CampaignMap('D3') MAP = CampaignMap('D3')
MAP.shape = 'I10' MAP.shape = 'I10'
MAP.camera_data = ['D2', 'D6', 'D8', 'F2', 'F6', 'F8'] MAP.camera_data = ['D4', 'D6', 'D8', 'F4', 'F6', 'F8']
MAP.camera_data_spawn_point = ['F2', 'D2'] MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """ MAP.map_data = """
++ ++ ++ SP -- SP ++ ++ ++ ++ ++ ++ SP -- SP ++ ++ ++
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
@ -64,13 +64,7 @@ class Config(ConfigBase):
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
# ===== End of generated config ===== # ===== End of generated config =====
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -5,7 +5,7 @@ from module.logger import logger
MAP = CampaignMap('SP') MAP = CampaignMap('SP')
MAP.shape = 'H7' MAP.shape = 'H7'
MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] MAP.camera_data = ['D5', 'E2', 'E5']
MAP.camera_data_spawn_point = ['D2'] MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """ MAP.map_data = """
-- -- -- -- ++ -- ME -- -- -- -- -- ++ -- ME --
@ -55,16 +55,21 @@ class Config:
MAP_HAS_FLEET_STEP = True MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False MAP_HAS_MYSTERY = False
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
STAR_REQUIRE_1 = 0 STAR_REQUIRE_1 = 0
STAR_REQUIRE_2 = 0 STAR_REQUIRE_2 = 0
STAR_REQUIRE_3 = 0 STAR_REQUIRE_3 = 0
# ===== End of generated config ===== # ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = False
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
MAP_IS_ONE_TIME_STAGE = True
MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.162, 1.184)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.124, 1.145)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.091, 1.111)
class Campaign(CampaignBase): class Campaign(CampaignBase):

View File

@ -41,11 +41,21 @@ class CampaignOcr(ModuleBase):
@staticmethod @staticmethod
def _campaign_ocr_result_process(result): def _campaign_ocr_result_process(result):
# The result will be like '7--2', because tha dash in game is '' not '-' # The result will be like '7--2', because tha dash in game is '' not '-'
result = result.lower().replace('--', '-').replace('--', '-') result = result.replace('--', '-').replace('--', '-').lstrip('-')
if result.startswith('-'):
result = result[1:] # Replace wrong 'I' from results like 'I1-1', '1I-1', 'I-I', '11-I', 'I4-4', to '1'
# while keeping results like 'isp-2', 'sp1'
def replace_func(match):
segment = match.group(0)
return segment.replace('I', '1')
result = re.sub(r'[0-9I]+-[0-9I]+', replace_func, result, count=1)
# Convert '72' to '7-2'
if len(result) == 2 and result[0].isdigit(): if len(result) == 2 and result[0].isdigit():
result = '-'.join(result) result = '-'.join(result)
result = result.lower()
return result return result
@staticmethod @staticmethod

View File

@ -20,7 +20,7 @@ from module.os.assets import FLEET_EMP_DEBUFF, MAP_EXIT, MAP_GOTO_GLOBE, STRONGH
from module.os.camera import OSCamera from module.os.camera import OSCamera
from module.os.map_base import OSCampaignMap from module.os.map_base import OSCampaignMap
from module.os_ash.ash import OSAsh from module.os_ash.ash import OSAsh
from module.os_combat.combat import Combat from module.os_combat.combat import Combat, BATTLE_PREPARATION, SIREN_PREPARATION
from module.os_handler.assets import AUTO_SEARCH_REWARD, CLICK_SAFE_AREA, IN_MAP, PORT_ENTER from module.os_handler.assets import AUTO_SEARCH_REWARD, CLICK_SAFE_AREA, IN_MAP, PORT_ENTER
from module.os_shop.assets import PORT_SUPPLY_CHECK from module.os_shop.assets import PORT_SUPPLY_CHECK
from module.ui.assets import BACK_ARROW from module.ui.assets import BACK_ARROW
@ -319,6 +319,13 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
clicked_story_count = 0 clicked_story_count = 0
stuck_timer = Timer(20, count=5).start() stuck_timer = Timer(20, count=5).start()
confirm_timer.reset() confirm_timer.reset()
def abyssal_expected_end():
# add handle_map_event() because OSCombat.combat_status() removes get_items
if self.handle_map_event(drop=drop):
return False
return self.is_in_map()
for _ in self.loop(skip_first=skip_first_screenshot): for _ in self.loop(skip_first=skip_first_screenshot):
# Map event # Map event
event = self.handle_map_event(drop=drop) event = self.handle_map_event(drop=drop)
@ -395,7 +402,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
if self.combat_appear(): if self.combat_appear():
# Use ui_back() for testing, because there are too few abyssal loggers every month. # Use ui_back() for testing, because there are too few abyssal loggers every month.
# self.ui_back(check_button=self.is_in_map) # self.ui_back(check_button=self.is_in_map)
self.combat(expected_end=self.is_in_map, fleet_index=self.fleet_show_index, save_get_items=drop) self.combat(expected_end=abyssal_expected_end, fleet_index=self.fleet_show_index, save_get_items=drop)
confirm_timer.reset() confirm_timer.reset()
stuck_timer.reset() stuck_timer.reset()
result.add('event') result.add('event')
@ -760,6 +767,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
logger.hr('BOSS leave') logger.hr('BOSS leave')
# Update local view # Update local view
self.update_os() self.update_os()
self.predict()
click_timer = Timer(3) click_timer = Timer(3)
pause_interval = Timer(0.5, count=1) pause_interval = Timer(0.5, count=1)
@ -773,8 +781,13 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
# Re-enter boss accidentally # Re-enter boss accidentally
if pause_interval.reached(): if pause_interval.reached():
if self.combat_appear(): if self.appear(BATTLE_PREPARATION):
logger.info(f'combat_appear -> {BACK_ARROW}') logger.info(f'{BATTLE_PREPARATION} -> {BACK_ARROW}')
self.device.click(BACK_ARROW)
pause_interval.reset()
continue
if self.appear(SIREN_PREPARATION, offset=(20, 20)):
logger.info(f'{SIREN_PREPARATION} -> {BACK_ARROW}')
self.device.click(BACK_ARROW) self.device.click(BACK_ARROW)
pause_interval.reset() pause_interval.reset()
continue continue

View File

@ -50,20 +50,16 @@ def patch_mimetype():
all deployment, we use the builtin mimetype table only. all deployment, we use the builtin mimetype table only.
""" """
import mimetypes import mimetypes
if mimetypes.inited: # lock as inited
# ohno mimetypes already inited mimetypes.inited = True
db = mimetypes.MimeTypes() # create a new clean instance
mimetypes._db = db db = mimetypes.MimeTypes(filenames=())
# override global variable mimetypes._db = db
mimetypes.encodings_map = db.encodings_map # override global variable
mimetypes.suffix_map = db.suffix_map mimetypes.encodings_map = db.encodings_map
mimetypes.types_map = db.types_map[True] mimetypes.suffix_map = db.suffix_map
mimetypes.common_types = db.types_map[False] mimetypes.types_map = db.types_map[True]
else: mimetypes.common_types = db.types_map[False]
# init db with the default table
db = mimetypes.MimeTypes()
mimetypes._db = db
mimetypes.inited = True
def fix_py37_subprocess_communicate(): def fix_py37_subprocess_communicate():