py2ls 0.2.4.39__py3-none-any.whl → 0.2.4.40__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
py2ls/ips.py CHANGED
@@ -6330,6 +6330,7 @@ def format_excel(
6330
6330
  protect=None, # dict
6331
6331
  number_format=None, # dict: e.g., {1:"0.00", 2:"#,##0",3:"0%",4:"$#,##0.00"}
6332
6332
  data_validation=None, # dict
6333
+ apply_filter=True, # add filter
6333
6334
  conditional_format=None, # dict
6334
6335
  **kwargs,
6335
6336
  ):
@@ -6340,7 +6341,7 @@ def format_excel(
6340
6341
  from openpyxl.utils import get_column_letter
6341
6342
  from openpyxl.worksheet.datavalidation import DataValidation
6342
6343
  from openpyxl.comments import Comment
6343
- from openpyxl.formatting.rule import ColorScaleRule
6344
+ from openpyxl.formatting.rule import ColorScaleRule, DataBarRule, IconSetRule,IconSet
6344
6345
 
6345
6346
  def convert_indices_to_range(row_slice, col_slice):
6346
6347
  """Convert numerical row and column slices to Excel-style range strings."""
@@ -6705,159 +6706,159 @@ def format_excel(
6705
6706
  filename = str(datetime.now().strftime("%y%m%d_%H.xlsx"))
6706
6707
  # !show usage:
6707
6708
  func_xample = """
6708
- # Example usage
6709
- data = {
6710
- "Header 1": [10, 2000000, 30],
6711
- "Header 2": [
6712
- 40000,
6713
- '"start_color": "4F81BD", "end_color","start_color": "a1cd1e","start_color": "4F81BD", "end_color","start_color": "a1cd1e"',
6714
- 60,
6715
- ],
6716
- "Header 3": [70, 80, 90],
6717
- }
6718
- df = pd.DataFrame(data)
6719
-
6720
-
6721
- format_excel(
6722
- df,
6723
- filename="example.xlsx",
6724
- sheet_name="Sheet1",
6725
- cell=[
6726
- {
6727
- (slice(0, 1), slice(0, len(df.columns))): {
6728
- "font": {
6729
- "name": "Calibri", # Font name
6730
- "size": 14, # Font size
6731
- "bold": True, # Bold text
6732
- "italic": False, # Italic text
6733
- "underline": "single", # Underline (single, double)
6734
- "color": "#FFFFFF", # Font color
6735
- },
6736
- "fill": {
6737
- "start_color": "a1cd1e", # Starting color
6738
- "end_color": "4F81BD", # Ending color (useful for gradients)
6739
- "fill_type": "solid", # Fill type (solid, gradient, etc.)
6740
- },
6741
- "alignment": {
6742
- "horizontal": "center", # Horizontal alignment (left, center, right)
6743
- "vertical": "center", # Vertical alignment (top, center, bottom)
6744
- "wrap_text": True, # Wrap text in the cell
6745
- "shrink_to_fit": True, # Shrink text to fit within cell
6746
- "text_rotation": 0, # Text rotation angle
6747
- },
6748
- "border": {
6749
- "left": "thin",
6750
- "right": "thin",
6751
- "top": "thin",
6752
- "bottom": "thin",
6753
- "color": "000000", # Border color
6754
- },
6709
+ # Example usage
6710
+ data = {
6711
+ "Header 1": [10, 2000000, 30],
6712
+ "Header 2": [
6713
+ 40000,
6714
+ '"start_color": "4F81BD", "end_color","start_color": "a1cd1e","start_color": "4F81BD", "end_color","start_color": "a1cd1e"',
6715
+ 60,
6716
+ ],
6717
+ "Header 3": [70, 80, 90],
6755
6718
  }
6756
- },
6757
- {
6758
- (slice(0, 3), slice(1, 3)): {
6759
- "font": {
6760
- "name": "Arial", # Font name
6761
- "size": 12, # Font size
6762
- "bold": False, # Bold text
6763
- "italic": True, # Italic text
6764
- "underline": None, # No underline
6765
- "color": "#000000", # Font color
6719
+ df = pd.DataFrame(data)
6720
+
6721
+
6722
+ format_excel(
6723
+ df,
6724
+ filename="example.xlsx",
6725
+ sheet_name="Sheet1",
6726
+ cell=[
6727
+ {
6728
+ (slice(0, 1), slice(0, len(df.columns))): {
6729
+ "font": {
6730
+ "name": "Calibri", # Font name
6731
+ "size": 14, # Font size
6732
+ "bold": True, # Bold text
6733
+ "italic": False, # Italic text
6734
+ "underline": "single", # Underline (single, double)
6735
+ "color": "#FFFFFF", # Font color
6736
+ },
6737
+ "fill": {
6738
+ "start_color": "a1cd1e", # Starting color
6739
+ "end_color": "4F81BD", # Ending color (useful for gradients)
6740
+ "fill_type": "solid", # Fill type (solid, gradient, etc.)
6741
+ },
6742
+ "alignment": {
6743
+ "horizontal": "center", # Horizontal alignment (left, center, right)
6744
+ "vertical": "center", # Vertical alignment (top, center, bottom)
6745
+ "wrap_text": True, # Wrap text in the cell
6746
+ "shrink_to_fit": True, # Shrink text to fit within cell
6747
+ "text_rotation": 0, # Text rotation angle
6748
+ },
6749
+ "border": {
6750
+ "left": "thin",
6751
+ "right": "thin",
6752
+ "top": "thin",
6753
+ "bottom": "thin",
6754
+ "color": "000000", # Border color
6755
+ },
6756
+ }
6757
+ },
6758
+ {
6759
+ (slice(0, 3), slice(1, 3)): {
6760
+ "font": {
6761
+ "name": "Arial", # Font name
6762
+ "size": 12, # Font size
6763
+ "bold": False, # Bold text
6764
+ "italic": True, # Italic text
6765
+ "underline": None, # No underline
6766
+ "color": "#000000", # Font color
6767
+ },
6768
+ "fill": {
6769
+ "start_color": "#c61313", # Background color
6770
+ "end_color": "#490606", # End color
6771
+ "fill_type": "solid", # Fill type
6772
+ },
6773
+ "alignment": {
6774
+ "horizontal": "left", # Horizontal alignment
6775
+ "vertical": "top", # Vertical alignment
6776
+ "wrap_text": True, # Enable text wrapping
6777
+ "shrink_to_fit": False, # Disable shrink to fit
6778
+ "indent": 1, # Indentation level
6779
+ "text_rotation": 0, # Text rotation angle
6780
+ },
6781
+ "border": {
6782
+ "left": "thin", # Left border style
6783
+ "right": "thin", # Right border style
6784
+ "top": "thin", # Top border style
6785
+ "bottom": "thin", # Bottom border style
6786
+ "color": "000000", # Border color
6787
+ },
6788
+ }
6789
+ # * border settings
6790
+ # "thin": Thin border line
6791
+ # "medium": Medium border line
6792
+ # "thick": Thick border line
6793
+ # "dotted": Dotted border line
6794
+ # "dashed": Dashed border line
6795
+ # "hair": Hairline border (very thin)
6796
+ # "mediumDashed": Medium dashed border line
6797
+ # "dashDot": Dash-dot border line
6798
+ # "dashDotDot": Dash-dot-dot border line
6799
+ # "slantDashDot": Slant dash-dot border line
6800
+ },
6801
+ ],
6802
+ width={2: 30}, # when it is None, it will automatic adjust width
6803
+ height={2: 50, 3: 25}, # keys are columns
6804
+ merge=(slice(0, 1), slice(1, 3)),
6805
+ shade={
6806
+ (slice(1, 4), slice(1, 3)): {
6807
+ "bg_color": "FFFF00", # Background color
6808
+ "pattern_type": "solid", # Fill pattern (e.g., solid, darkGrid, lightGrid)
6809
+ "fg_color": "#0000FF", # Foreground color, used in patterns
6810
+ "end_color": "0000FF", # End color, useful for gradients
6811
+ "fill_type": "solid", # Type of fill (solid, gradient, etc.)
6812
+ }
6766
6813
  },
6767
- "fill": {
6768
- "start_color": "#c61313", # Background color
6769
- "end_color": "#490606", # End color
6770
- "fill_type": "solid", # Fill type
6814
+ comment={(2, 4): "This is a comment"},
6815
+ link={(2, 2): "https://example.com"},
6816
+ protect={
6817
+ "password": "123", # Password for sheet protection
6818
+ "sheet": False, # True, # Protect the sheet
6819
+ "objects": False, # True, # Protect objects
6820
+ "scenarios": False, # True, # Protect scenarios
6821
+ "formatCells": False, # Disable formatting cells
6822
+ "formatColumns": False, # Disable formatting columns
6823
+ "formatRows": False, # Disable formatting rows
6824
+ "insertColumns": False, # Disable inserting columns
6825
+ "insertRows": False, # Disable inserting rows
6826
+ "deleteColumns": False, # Disable deleting columns
6827
+ "deleteRows": False, # Disable deleting rows
6771
6828
  },
6772
- "alignment": {
6773
- "horizontal": "left", # Horizontal alignment
6774
- "vertical": "top", # Vertical alignment
6775
- "wrap_text": True, # Enable text wrapping
6776
- "shrink_to_fit": False, # Disable shrink to fit
6777
- "indent": 1, # Indentation level
6778
- "text_rotation": 0, # Text rotation angle
6829
+ number_format={
6830
+ 1: "0.00", # Two decimal places for column index 1
6831
+ 2: "#,##0", # Thousands separator
6832
+ 3: "0%", # Percentage format
6833
+ 4: "$#,##0.00", # Currency format
6779
6834
  },
6780
- "border": {
6781
- "left": "thin", # Left border style
6782
- "right": "thin", # Right border style
6783
- "top": "thin", # Top border style
6784
- "bottom": "thin", # Bottom border style
6785
- "color": "000000", # Border color
6835
+ data_validation={
6836
+ (slice(1, 2), slice(2, 10)): {
6837
+ "type": "list",
6838
+ "formula1": '"Option1,Option2,Option3"', # List of options
6839
+ "allow_blank": True,
6840
+ "showDropDown": True,
6841
+ "showErrorMessage": True,
6842
+ "errorTitle": "Invalid input",
6843
+ "error": "Please select a valid option.",
6844
+ }
6786
6845
  },
6787
- }
6788
- # * border settings
6789
- # "thin": Thin border line
6790
- # "medium": Medium border line
6791
- # "thick": Thick border line
6792
- # "dotted": Dotted border line
6793
- # "dashed": Dashed border line
6794
- # "hair": Hairline border (very thin)
6795
- # "mediumDashed": Medium dashed border line
6796
- # "dashDot": Dash-dot border line
6797
- # "dashDotDot": Dash-dot-dot border line
6798
- # "slantDashDot": Slant dash-dot border line
6799
- },
6800
- ],
6801
- width={2: 30}, # when it is None, it will automatic adjust width
6802
- height={2: 50, 3: 25}, # keys are columns
6803
- merge=(slice(0, 1), slice(1, 3)),
6804
- shade={
6805
- (slice(1, 4), slice(1, 3)): {
6806
- "bg_color": "FFFF00", # Background color
6807
- "pattern_type": "solid", # Fill pattern (e.g., solid, darkGrid, lightGrid)
6808
- "fg_color": "#0000FF", # Foreground color, used in patterns
6809
- "end_color": "0000FF", # End color, useful for gradients
6810
- "fill_type": "solid", # Type of fill (solid, gradient, etc.)
6811
- }
6812
- },
6813
- comment={(2, 4): "This is a comment"},
6814
- link={(2, 2): "https://example.com"},
6815
- protect={
6816
- "password": "123", # Password for sheet protection
6817
- "sheet": False, # True, # Protect the sheet
6818
- "objects": False, # True, # Protect objects
6819
- "scenarios": False, # True, # Protect scenarios
6820
- "formatCells": False, # Disable formatting cells
6821
- "formatColumns": False, # Disable formatting columns
6822
- "formatRows": False, # Disable formatting rows
6823
- "insertColumns": False, # Disable inserting columns
6824
- "insertRows": False, # Disable inserting rows
6825
- "deleteColumns": False, # Disable deleting columns
6826
- "deleteRows": False, # Disable deleting rows
6827
- },
6828
- number_format={
6829
- 1: "0.00", # Two decimal places for column index 1
6830
- 2: "#,##0", # Thousands separator
6831
- 3: "0%", # Percentage format
6832
- 4: "$#,##0.00", # Currency format
6833
- },
6834
- data_validation={
6835
- (slice(1, 2), slice(2, 10)): {
6836
- "type": "list",
6837
- "formula1": '"Option1,Option2,Option3"', # List of options
6838
- "allow_blank": True,
6839
- "showDropDown": True,
6840
- "showErrorMessage": True,
6841
- "errorTitle": "Invalid input",
6842
- "error": "Please select a valid option.",
6843
- }
6844
- },
6845
- conditional_format={
6846
- (slice(1, 2), slice(2, 10)): [
6847
- {
6848
- "color_scale": {
6849
- "start_type": "min", # Type of start point (min, max, percent)
6850
- "start_color": "#FF0000", # Starting color
6851
- "end_type": "max", # End type (min, max, percent)
6852
- "end_color": "00FF00", # Ending color
6853
- "mid_type": "percentile", # Midpoint type (optional)
6854
- "mid_value": 50, # Midpoint value (optional)
6855
- "mid_color": "FFFF00", # Midpoint color (optional)
6856
- }
6857
- }
6858
- ]
6859
- },
6860
- )
6846
+ conditional_format={
6847
+ (slice(1, 2), slice(2, 10)): [
6848
+ {
6849
+ "color_scale": {
6850
+ "start_type": "min", # Type of start point (min, max, percent)
6851
+ "start_color": "#FF0000", # Starting color
6852
+ "end_type": "max", # End type (min, max, percent)
6853
+ "end_color": "00FF00", # Ending color
6854
+ "mid_type": "percentile", # Midpoint type (optional)
6855
+ "mid_value": 50, # Midpoint value (optional)
6856
+ "mid_color": "FFFF00", # Midpoint color (optional)
6857
+ }
6858
+ }
6859
+ ]
6860
+ },
6861
+ )
6861
6862
  """
6862
6863
  if usage:
6863
6864
  print(func_xample)
@@ -6917,17 +6918,49 @@ format_excel(
6917
6918
  col_letter = get_column_letter(col_idx)
6918
6919
  for cell in ws[col_letter][1:]: # Skip the header
6919
6920
  cell.number_format = fmt
6920
-
6921
+
6922
+ if apply_filter:
6923
+ if isinstance(apply_filter, bool):
6924
+ # Default: Apply filter to the entire first row (header)
6925
+ filter_range = f"A1:{get_column_letter(ws.max_column)}1"
6926
+ ws.auto_filter.ref = filter_range
6927
+
6928
+ elif isinstance(apply_filter, tuple):
6929
+ row_slice, col_slice = apply_filter
6930
+
6931
+ # Extract the start and end indices for rows and columns
6932
+ start_row, end_row = row_slice.start, row_slice.stop
6933
+ start_col_idx, end_col_idx = col_slice.start, col_slice.stop
6934
+
6935
+ # Ensure valid row and column indices
6936
+ if start_row < 1: start_row = 1 # Row should not be less than 1
6937
+ if end_row > ws.max_row: end_row = ws.max_row # Ensure within sheet's row limits
6938
+ if start_col_idx < 1: start_col_idx = 1 # Column should not be less than 1
6939
+ if end_col_idx > ws.max_column: end_col_idx = ws.max_column # Ensure within sheet's column limits
6940
+
6941
+ # Get column letters based on indices
6942
+ start_col = get_column_letter(start_col_idx)
6943
+ end_col = get_column_letter(end_col_idx)
6944
+
6945
+ # Define the filter range based on specific rows and columns
6946
+ filter_range = f"{start_col}{start_row}:{end_col}{end_row}"
6947
+
6948
+ # Apply the filter
6949
+ ws.auto_filter.ref = filter_range
6921
6950
  # !widths
6922
6951
  if width is None: # automatic adust width
6923
6952
  for col in ws.columns:
6924
- len_ = [len(str(cell.value)) for cell in col if cell.value]
6925
- if len_:
6926
- # scaling_factor = 1.2
6927
- max_length = max(len_) # * scaling_factor
6928
- ws.column_dimensions[get_column_letter(col[0].column)].width = (
6929
- max_length
6930
- )
6953
+ max_length = 0
6954
+ column = col[0].column_letter # Get the column letter
6955
+ for cell_ in col:
6956
+ try:
6957
+ if cell_.value:
6958
+ max_length = max(max_length, len(str(cell_.value)))
6959
+ except Exception:
6960
+ pass
6961
+ adjusted_width = max_length + 2 # You can adjust the padding value as needed
6962
+ ws.column_dimensions[column].width = adjusted_width
6963
+
6931
6964
  else:
6932
6965
  for col_idx, width_ in width.items():
6933
6966
  col_letter = get_column_letter(col_idx)
@@ -7017,6 +7050,7 @@ format_excel(
7017
7050
  for indices, rules in conditional_format.items():
7018
7051
  cell_range = convert_indices_to_range(*indices)
7019
7052
  for rule in rules:
7053
+ # Handle color scale
7020
7054
  if "color_scale" in rule:
7021
7055
  color_scale = rule["color_scale"]
7022
7056
  start_color = hex2argb(color_scale.get("start_color", "FFFFFF"))
@@ -7035,6 +7069,32 @@ format_excel(
7035
7069
  end_color=end_color,
7036
7070
  )
7037
7071
  ws.conditional_formatting.add(cell_range, color_scale_rule)
7072
+ # Handle data bar
7073
+ if "data_bar" in rule:
7074
+ data_bar = rule["data_bar"]
7075
+ bar_color = hex2argb(data_bar.get("color", "638EC6"))
7076
+
7077
+ data_bar_rule = DataBarRule(
7078
+ start_type=data_bar.get("start_type", "min"),
7079
+ start_value=data_bar.get("start_value"),
7080
+ end_type=data_bar.get("end_type", "max"),
7081
+ end_value=data_bar.get("end_value"),
7082
+ color=bar_color,
7083
+ showValue=data_bar.get("show_value", True),
7084
+ )
7085
+ ws.conditional_formatting.add(cell_range, data_bar_rule)
7086
+
7087
+ # Handle icon set
7088
+ if "icon_set" in rule:
7089
+ icon_set = rule["icon_set"]
7090
+ icon_set_rule = IconSet(
7091
+ iconSet=icon_set.get("iconSet", "3TrafficLights1"), # Corrected
7092
+ showValue=icon_set.get("show_value", True), # Corrected
7093
+ reverse=icon_set.get("reverse", False) # Corrected
7094
+ )
7095
+ ws.conditional_formatting.add(cell_range, icon_set_rule)
7096
+
7097
+
7038
7098
  # Save the workbook
7039
7099
  wb.save(filename)
7040
7100
  print(f"Formatted Excel file saved as:\n{filename}")
@@ -11011,6 +11071,8 @@ def mouse(
11011
11071
  scroll_amount: int = -500,
11012
11072
  fail_safe: bool = True,
11013
11073
  grayscale: bool = False,
11074
+ n_try: int = 10,
11075
+ verbose: bool = True,
11014
11076
  **kwargs,
11015
11077
  ):
11016
11078
  """
@@ -11037,6 +11099,9 @@ def mouse(
11037
11099
  import pyautogui
11038
11100
  import time
11039
11101
 
11102
+ # import logging
11103
+ # logging.basicConfig(level=logging.DEBUG, filename="debug.log")
11104
+
11040
11105
  pyautogui.FAILSAFE = fail_safe # Enable/disable fail-safe
11041
11106
  loc_type = "absolute" if "abs" in loc_type else "relative"
11042
11107
  if len(args) == 1:
@@ -11045,7 +11110,6 @@ def mouse(
11045
11110
  x_offset, y_offset = None, None
11046
11111
  else:
11047
11112
  x_offset, y_offset = args
11048
-
11049
11113
  elif len(args) == 2:
11050
11114
  x_offset, y_offset = args
11051
11115
  elif len(args) == 3:
@@ -11079,38 +11143,35 @@ def mouse(
11079
11143
  if region is None:
11080
11144
  w, h = pyautogui.size()
11081
11145
  region = (0, 0, w, h)
11082
- print(region)
11083
- try:
11084
- print(image_path)
11085
- location = pyautogui.locateOnScreen(
11086
- image_path, confidence=confidence, region=region, grayscale=grayscale
11087
- )
11088
- print(pyautogui.center(location))
11089
- except Exception as e:
11090
- location = None
11146
+ retries = 0
11147
+ while location is None and retries <= n_try:
11148
+ try:
11149
+ confidence_ = round(float(confidence - 0.05 * retries), 2)
11150
+ location = pyautogui.locateOnScreen(
11151
+ image_path,
11152
+ confidence=confidence_,
11153
+ region=region,
11154
+ grayscale=grayscale,
11155
+ )
11156
+ except Exception as e:
11157
+ if verbose:
11158
+ print(f"confidence={confidence_},{e}")
11159
+ location = None
11160
+ retries += 1
11091
11161
 
11092
11162
  # try:
11093
11163
  if location:
11094
11164
  x, y = pyautogui.center(location)
11095
11165
  x += x_offset if x_offset else 0
11096
- y += y_offset if y_offset else 0
11166
+ if x_offset is not None:
11167
+ x += x_offset
11168
+ if y_offset is not None:
11169
+ y += y_offset
11097
11170
  x_offset, y_offset = x, y
11098
- print(action)
11171
+ print(action) if verbose else None
11099
11172
  if action in ["locate"]:
11100
11173
  x, y = pyautogui.position()
11101
11174
  elif action in ["click", "double_click", "triple_click"]:
11102
- # if location:
11103
- # x, y = pyautogui.center(location)
11104
- # x += x_offset
11105
- # y += y_offset
11106
- # pyautogui.moveTo(x, y, duration=duration)
11107
- # if action == "click":
11108
- # pyautogui.click(x=x, y=y, clicks=n_click, interval=interval, button=button)
11109
- # elif action == "double_click":
11110
- # pyautogui.doubleClick(x=x, y=y, interval=interval, button=button)
11111
- # elif action=='triple_click':
11112
- # pyautogui.tripleClick(x=x,y=y,interval=interval, button=button)
11113
- # else:
11114
11175
  if action == "click":
11115
11176
  pyautogui.moveTo(x_offset, y_offset, duration=duration)
11116
11177
  time.sleep(wait)
@@ -11136,7 +11197,7 @@ def mouse(
11136
11197
  if text is not None:
11137
11198
  pyautogui.typewrite(text, interval=interval)
11138
11199
  else:
11139
- raise ValueError("Text must be provided for the 'type' action.")
11200
+ print("Text must be provided for the 'type' action.") if verbose else None
11140
11201
 
11141
11202
  elif action == "drag":
11142
11203
  if loc_type == "absolute":
@@ -11168,15 +11229,7 @@ def mouse(
11168
11229
  else:
11169
11230
  raise ValueError(f"Unsupported action: {action}")
11170
11231
 
11171
- # except pyautogui.ImageNotFoundException:
11172
- # print(
11173
- # "Image not found. Ensure the image is visible and parameters are correct."
11174
- # )
11175
- # except Exception as e:
11176
- # print(f"An error occurred: {e}")
11177
-
11178
11232
 
11179
-
11180
11233
  def py2installer(
11181
11234
  script_path: str = None,
11182
11235
  flatform: str = "mingw64",
@@ -11399,11 +11452,13 @@ def py2installer(
11399
11452
  if any(exclude_import):
11400
11453
  cmd.extend([f"--nofollow-import-to={','.join(exclude_import)}"])
11401
11454
  if include_import is not None:
11402
- if any(include_import):#are included in the final build. Some packages may require manual inclusion.
11455
+ if any(
11456
+ include_import
11457
+ ): # are included in the final build. Some packages may require manual inclusion.
11403
11458
  cmd.extend([f"--include-package={','.join(include_import)}"])
11404
11459
  if plugins:
11405
11460
  for plugin in plugins:
11406
- #Adds support for tkinter, ensuring it works correctly in the standalone build.
11461
+ # Adds support for tkinter, ensuring it works correctly in the standalone build.
11407
11462
  cmd.extend([f"--enable-plugin={plugin}"])
11408
11463
 
11409
11464
  if additional_args:
@@ -11422,7 +11477,9 @@ def py2installer(
11422
11477
  # )
11423
11478
 
11424
11479
  if clean_build:
11425
- cmd.append("--remove-output")#Removes intermediate files created during the build process, keeping only the final executable.
11480
+ cmd.append(
11481
+ "--remove-output"
11482
+ ) # Removes intermediate files created during the build process, keeping only the final executable.
11426
11483
  # Add the script path (final positional argument)
11427
11484
  cmd.append(str(script_path))
11428
11485
  # Ensure Windows shell compatibility
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py2ls
3
- Version: 0.2.4.39
3
+ Version: 0.2.4.40
4
4
  Summary: py(thon)2(too)ls
5
5
  Author: Jianfeng
6
6
  Author-email: Jianfeng.Liu0413@gmail.com
@@ -243,7 +243,7 @@ py2ls/export_requirements.py,sha256=x2WgUF0jYKz9GfA1MVKN-MdsM-oQ8yUeC6Ua8oCymio,
243
243
  py2ls/fetch_update.py,sha256=9LXj661GpCEFII2wx_99aINYctDiHni6DOruDs_fdt8,4752
244
244
  py2ls/freqanalysis.py,sha256=F4218VSPbgL5tnngh6xNCYuNnfR-F_QjECUUxrPYZss,32594
245
245
  py2ls/ich2ls.py,sha256=3E9R8oVpyYZXH5PiIQgT3CN5NxLe4Dwtm2LwaeacE6I,21381
246
- py2ls/ips.py,sha256=nvpHPtEQl7rqnhTeI7BZYyJ2FZU9fXk85_w8PgT-5Gc,422932
246
+ py2ls/ips.py,sha256=cC7kOZ-hpiMZ_iMwSMjq9fVFqOIqFASMQ8njv4atrxQ,427376
247
247
  py2ls/ml2ls.py,sha256=I-JFPdikgEtfQjhv5gBz-QSeorpTJI_Pda_JwkTioBY,209732
248
248
  py2ls/mol.py,sha256=AZnHzarIk_MjueKdChqn1V6e4tUle3X1NnHSFA6n3Nw,10645
249
249
  py2ls/netfinder.py,sha256=OhqD3S9PuwweL2013D-q4GNP1WvJjuYfZzq5BZgGddE,68980
@@ -255,6 +255,6 @@ py2ls/sleep_events_detectors.py,sha256=bQA3HJqv5qnYKJJEIhCyhlDtkXQfIzqksnD0YRXso
255
255
  py2ls/stats.py,sha256=qBn2rJmNa_QLLUqjwYqXUlGzqmW94sgA1bxJU2FC3r0,39175
256
256
  py2ls/translator.py,sha256=77Tp_GjmiiwFbEIJD_q3VYpQ43XL9ZeJo6Mhl44mvh8,34284
257
257
  py2ls/wb_detector.py,sha256=7y6TmBUj9exCZeIgBAJ_9hwuhkDh1x_-yg4dvNY1_GQ,6284
258
- py2ls-0.2.4.39.dist-info/METADATA,sha256=ANCx7SlkGLfIlF9_PzXMblurv9daFBOrTDrqKSWrkYU,20473
259
- py2ls-0.2.4.39.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
260
- py2ls-0.2.4.39.dist-info/RECORD,,
258
+ py2ls-0.2.4.40.dist-info/METADATA,sha256=depWxTukM5uk2vttHEvLLPWoMXjGV9HZACinx_WHjOM,20473
259
+ py2ls-0.2.4.40.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
260
+ py2ls-0.2.4.40.dist-info/RECORD,,