pyscript-programming-language 1.15.2__tar.gz → 1.15.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/PKG-INFO +1 -8
  2. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/README.md +0 -7
  3. pyscript_programming_language-1.15.3/changelog.md +13 -0
  4. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyproject.toml +1 -1
  5. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/cache.py +4 -1
  6. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/constants.py +2 -1
  7. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/editor/gui.py +18 -1
  8. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/editor/terminal.py +16 -0
  9. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/handlers.py +2 -4
  10. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/runner.py +1 -1
  11. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/shell.py +15 -3
  12. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/version.py +2 -2
  13. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/site.pys +36 -15
  14. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/other/message.txt +44 -1
  15. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript_programming_language.egg-info/PKG-INFO +1 -8
  16. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/setup.py +1 -1
  17. pyscript_programming_language-1.15.2/changelog.md +0 -16
  18. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/MANIFEST.in +0 -0
  19. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/__init__.py +0 -0
  20. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/__init__.pyi +0 -0
  21. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/__main__.py +0 -0
  22. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/__init__.py +0 -0
  23. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/analyzer.py +0 -0
  24. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/bases.py +0 -0
  25. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/buffer.py +0 -0
  26. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/checks.py +0 -0
  27. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/context.py +0 -0
  28. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/editor/__init__.py +0 -0
  29. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/editor/bases.py +0 -0
  30. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/exceptions.py +0 -0
  31. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/highlight.py +0 -0
  32. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/interpreter.py +0 -0
  33. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/lexer.py +0 -0
  34. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/mapping.py +0 -0
  35. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/nodes.py +0 -0
  36. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/parser.py +0 -0
  37. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/position.py +0 -0
  38. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/pysbuiltins.py +0 -0
  39. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/pystypes.py +0 -0
  40. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/results.py +0 -0
  41. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/symtab.py +0 -0
  42. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/token.py +0 -0
  43. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/__init__.py +0 -0
  44. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/ansi.py +0 -0
  45. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/debug.py +0 -0
  46. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/decorators.py +0 -0
  47. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/generic.py +0 -0
  48. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/module.py +0 -0
  49. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/path.py +0 -0
  50. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/similarity.py +0 -0
  51. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/core/utils/string.py +0 -0
  52. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/__hello__.pys +0 -0
  53. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/ansi.pys +0 -0
  54. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/ast/__init__.pys +0 -0
  55. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/ast/ast_dump.py +0 -0
  56. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/ast/ast_literal_eval.py +0 -0
  57. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/ast/ast_unparse.py +0 -0
  58. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/ast/ast_walk.py +0 -0
  59. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/brainfuck.pys +0 -0
  60. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/code.pys +0 -0
  61. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/dis.pys +0 -0
  62. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/dual/__init__.pys +0 -0
  63. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/dual/py_dual.py +0 -0
  64. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/explorer.pys +0 -0
  65. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/fpstimer/__init__.pys +0 -0
  66. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
  67. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/getch/__init__.pys +0 -0
  68. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/getch/py_getch.py +0 -0
  69. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/history.pys +0 -0
  70. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/inspect.pys +0 -0
  71. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/jsdict.pys +0 -0
  72. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/keyword.pys +0 -0
  73. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/opcode.pys +0 -0
  74. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/parser.pys +0 -0
  75. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/pdisplay.pys +0 -0
  76. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/symtable.pys +0 -0
  77. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/this.pys +0 -0
  78. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/token.pys +0 -0
  79. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/tokenize/__init__.pys +0 -0
  80. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
  81. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/other/.nomedia +0 -0
  82. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/other/PyScript.ico +0 -0
  83. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/other/copyright +0 -0
  84. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/other/credits +0 -0
  85. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/other/license +0 -0
  86. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript/this.py +0 -0
  87. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
  88. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  89. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript_programming_language.egg-info/requires.txt +0 -0
  90. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  91. {pyscript_programming_language-1.15.2 → pyscript_programming_language-1.15.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyscript-programming-language
3
- Version: 1.15.2
3
+ Version: 1.15.3
4
4
  Summary: PyScript Programming Language
5
5
  Home-page: https://azzammuhyala.github.io/pyscript
6
6
  Author: AzzamMuhyala
@@ -83,13 +83,6 @@ pip install -U pyscript-programming-language
83
83
  pip install -U pyscript-programming-language[other]
84
84
  ```
85
85
 
86
- And also, you can download PyScript with `git`:
87
- ```sh
88
- git clone https://github.com/azzammuhyala/pyscript
89
- cd pyscript
90
- pip install .
91
- ```
92
-
93
86
  After that, you can run the PyScript shell (_REPL_) with this command:
94
87
  ```sh
95
88
  python -m pyscript
@@ -51,13 +51,6 @@ pip install -U pyscript-programming-language
51
51
  pip install -U pyscript-programming-language[other]
52
52
  ```
53
53
 
54
- And also, you can download PyScript with `git`:
55
- ```sh
56
- git clone https://github.com/azzammuhyala/pyscript
57
- cd pyscript
58
- pip install .
59
- ```
60
-
61
54
  After that, you can run the PyScript shell (_REPL_) with this command:
62
55
  ```sh
63
56
  python -m pyscript
@@ -0,0 +1,13 @@
1
+ # Change Logs
2
+
3
+ ## [1.15.3] - 10/11/2026
4
+
5
+ ### Added
6
+ - Some functions in the `site` library now raise exceptions if `ENABLE_USER_SITE` is `None`.
7
+ - _etc._
8
+
9
+ ### Fixed
10
+ - The user site-packages path has been moved to `site.getusersitepackages()` + `/pyscript/site-packages`.
11
+ - The **Shift** + **Tab** shortcut now performs a dedent to the one tab character.
12
+ - Fixed several bugs.
13
+ - _etc._
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyscript-programming-language"
7
- version = "1.15.2"
7
+ version = "1.15.3"
8
8
  description = "PyScript Programming Language"
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.10"
@@ -28,7 +28,7 @@ pys_sys.builtin_module_names = tuple(
28
28
  for module in os.listdir(LIBRARIES_PATH)
29
29
  if get_module_candidate(os.path.join(LIBRARIES_PATH, module)) is not None
30
30
  )
31
- pys_sys.path = [LIBRARIES_PATH, SITE_PACKAGES_PATH]
31
+ pys_sys.path = [LIBRARIES_PATH]
32
32
  pys_sys.loading_modules = set()
33
33
  pys_sys.modules = {}
34
34
  pys_sys.interns = {}
@@ -51,6 +51,9 @@ pys_sys.ps1 = '>>> '
51
51
  pys_sys.ps2 = '... '
52
52
  pys_sys._is_gil_enabled = lambda : pys_sys.gil
53
53
 
54
+ if SITE_PACKAGES_PATH is not None:
55
+ pys_sys.path.append(SITE_PACKAGES_PATH)
56
+
54
57
  for name in (
55
58
  '_clear_internal_caches', '_is_immortal', '_is_interned', 'byteorder', 'exit', 'float_info', 'float_repr_style',
56
59
  'get_int_max_str_digits', 'getallocatedblocks', 'getdefaultencoding', 'getfilesystemencodeerrors',
@@ -5,7 +5,8 @@ PYSCRIPT_PATH = os.path.sep.join(__file__.split(os.path.sep)[:-2])
5
5
  CORE_PATH = os.path.join(PYSCRIPT_PATH, 'core')
6
6
  LIBRARIES_PATH = os.path.join(PYSCRIPT_PATH, 'lib')
7
7
  OTHER_PATH = os.path.join(PYSCRIPT_PATH, 'other')
8
- SITE_PACKAGES_PATH = os.path.join(site.getusersitepackages(), 'pyscript')
8
+ SITE_PACKAGES_PATH = None if (site_path := site.getusersitepackages()) is None else \
9
+ os.path.join(site_path, 'pyscript', 'site-packages')
9
10
  ICON_PATH = os.path.join(OTHER_PATH, 'PyScript.ico')
10
11
  GLOBAL_HISTORY_PATH = os.path.join(os.path.expanduser('~'), '.pyscript_history')
11
12
  CONFIGURATIONS_PATH = os.path.join(OTHER_PATH, 'configurations.json')
@@ -88,6 +88,20 @@ try:
88
88
  text.see('insert')
89
89
  return 'break'
90
90
 
91
+ def on_dedent(event=None):
92
+ text = self.text
93
+
94
+ if text.get('insert-1c', 'insert') == '\t':
95
+ text.delete('insert-1c', 'insert')
96
+ refresh_line_numbers()
97
+ return 'break'
98
+
99
+ if text.get('insert linestart', 'insert linestart +1c') == '\t':
100
+ text.delete('insert linestart', 'insert linestart +1c')
101
+ refresh_line_numbers()
102
+
103
+ return 'break'
104
+
91
105
  def on_enter(event=None):
92
106
  text = self.text
93
107
  if text.tag_ranges('sel'):
@@ -188,7 +202,10 @@ try:
188
202
  self.text.edit_modified(False)
189
203
 
190
204
  self.text.bind('<<Modified>>', on_modified)
191
- self.text.bind('<Return>', on_enter)
205
+ self.text.bind('<Control-Return>', on_enter)
206
+ self.text.bind('<Control-j>', on_enter)
207
+ self.text.bind('<Shift-Tab>', on_dedent)
208
+ self.text.bind('<ISO_Left_Tab>', on_dedent)
192
209
  self.text.bind('<Prior>', on_page_up)
193
210
  self.text.bind('<Next>', on_page_down)
194
211
  self.text.bind('<KeyRelease>', refresh_line_numbers)
@@ -138,6 +138,22 @@ try:
138
138
  line = buffer.document.current_line_before_cursor
139
139
  buffer.insert_text('\n' + line[:len(line) - len(line.lstrip())])
140
140
 
141
+ @key_bindings.add('s-tab', filter=on_edit, eager=True)
142
+ def _(event):
143
+ buffer = self.text.buffer
144
+ document = buffer.document
145
+
146
+ if document.char_before_cursor == '\t':
147
+ buffer.delete_before_cursor(1)
148
+ return
149
+
150
+ elif document.current_line.startswith('\t'):
151
+ line_start = document.translate_row_col_to_index(document.cursor_position_row, 0)
152
+ old_position = buffer.cursor_position
153
+ buffer.cursor_position = line_start
154
+ buffer.delete(1)
155
+ buffer.cursor_position = max(line_start, old_position - 1)
156
+
141
157
  @key_bindings.add('c-w', filter=on_edit, eager=True)
142
158
  def _(event):
143
159
  self.set_configuration('wrap', not self.get_configuration('wrap', False))
@@ -5,7 +5,6 @@ from .position import PysPosition
5
5
  from .pystypes import PysFunction
6
6
  from .utils.generic import is_environ
7
7
 
8
- from site import ENABLE_USER_SITE
9
8
  from types import MethodType
10
9
  from typing import Any
11
10
 
@@ -13,12 +12,11 @@ import os
13
12
 
14
13
  wrapper_function = (MethodType, classmethod, staticmethod)
15
14
 
16
- if ENABLE_USER_SITE:
15
+ if SITE_PACKAGES_PATH is not None:
17
16
  try:
18
17
  if os.path.isfile(SITE_PACKAGES_PATH):
19
18
  os.remove(SITE_PACKAGES_PATH)
20
- if not os.path.exists(SITE_PACKAGES_PATH):
21
- os.mkdir(SITE_PACKAGES_PATH)
19
+ os.makedirs(SITE_PACKAGES_PATH, exist_ok=True)
22
20
  except:
23
21
  pass
24
22
 
@@ -339,7 +339,7 @@ def pys_shell(
339
339
 
340
340
  if not (flags & NO_WARNING):
341
341
  for path in (LIBRARIES_PATH, OTHER_PATH, SITE_PACKAGES_PATH):
342
- if not os.path.isdir(path):
342
+ if not (path is None or os.path.isdir(path)):
343
343
  custom_print(f'WARNING: "{path}" directory not found', file=sys.stderr)
344
344
 
345
345
  custom_print(
@@ -306,11 +306,23 @@ try:
306
306
  def _(event):
307
307
  self.default_buffer.insert_text('\t')
308
308
 
309
- @key_bindings.add('c-n', eager=True)
309
+ @key_bindings.add('s-tab', eager=True)
310
310
  def _(event):
311
- self.default_buffer.insert_text('\n')
311
+ buffer = self.default_buffer
312
+ document = buffer.document
312
313
 
313
- @key_bindings.add('s-tab', eager=True)
314
+ if document.char_before_cursor == '\t':
315
+ buffer.delete_before_cursor(1)
316
+ return
317
+
318
+ elif document.current_line.startswith('\t'):
319
+ line_start = document.translate_row_col_to_index(document.cursor_position_row, 0)
320
+ old_position = buffer.cursor_position
321
+ buffer.cursor_position = line_start
322
+ buffer.delete(1)
323
+ buffer.cursor_position = max(line_start, old_position - 1)
324
+
325
+ @key_bindings.add('c-n', eager=True)
314
326
  def _(event):
315
327
  newline_with_indent()
316
328
 
@@ -7,8 +7,8 @@ from re import match as match_regex
7
7
  from types import NotImplementedType
8
8
  from typing import Any
9
9
 
10
- __version__ = '1.15.2'
11
- __date__ = '08 November 2026, 12:30 UTC+7'
10
+ __version__ = '1.15.3'
11
+ __date__ = '10 November 2026, 14:30 UTC+7'
12
12
  __author__ = ('AzzamMuhyala',)
13
13
 
14
14
  version = pys_sys.version = f'{__version__} ({__date__})'
@@ -5,7 +5,12 @@ import explorer
5
5
  from '_pyscript>utils>module' import get_module_candidate
6
6
  from '_pyscript>utils>path' import normpath
7
7
 
8
- ENABLE_USER_SITE = pyimport('site').ENABLE_USER_SITE
8
+ (func getusersitepackages() {
9
+ global ENABLE_USER_SITE
10
+ path = sys.site_packages_path
11
+ ENABLE_USER_SITE = path is not none
12
+ return path
13
+ })()
9
14
 
10
15
  func removeduppaths() {
11
16
  path = []
@@ -23,27 +28,34 @@ func removeduppaths() {
23
28
  return known_paths
24
29
  }
25
30
 
26
- func getusersitepackages() => sys.site_packages_path
27
-
28
- func getsitepackages() => list(comprehension(
29
- os.listdir(sys.site_packages_path),
30
- func(package) => os.path.splitext(package)[0],
31
- func(package) => get_module_candidate(normpath(sys.site_packages_path, package)) is not None
32
- ))
31
+ func getsitepackages() {
32
+ site_path = getusersitepackages()
33
+ if (!ENABLE_USER_SITE)
34
+ throw Exception('user site is disabled')
35
+ return list(comprehension(
36
+ os.listdir(site_path),
37
+ func(package) => os.path.splitext(package)[0],
38
+ func(package) => get_module_candidate(normpath(site_path, package)) is not none
39
+ ))
40
+ }
33
41
 
34
42
  func addpackage(path) {
35
- valid = get_module_candidate(normpath(path))
36
- if (valid is None)
43
+ site_path = getusersitepackages()
44
+ if (!ENABLE_USER_SITE)
45
+ throw Exception('user site is disabled')
46
+ if (get_module_candidate(normpath(path)) is none)
37
47
  throw ModuleNotFoundError("invalid module")
38
- result = explorer.copy(path, sys.site_packages_path, metadata=False)
48
+ result = explorer.copy(path, site_path, metadata=False)
39
49
  if (!result.success)
40
50
  throw result.exception
41
51
  }
42
52
 
43
53
  func removepackage(name) {
44
- path = normpath(sys.site_packages_path, name)
45
- valid = get_module_candidate(path)
46
- if (valid is None)
54
+ site_path = getusersitepackages()
55
+ if (!ENABLE_USER_SITE)
56
+ throw Exception('user site is disabled')
57
+ path = normpath(site_path, name)
58
+ if (get_module_candidate(path) is none)
47
59
  throw ModuleNotFoundError("module not found")
48
60
  if (!os.path.exists(path))
49
61
  path += '.pys'
@@ -68,6 +80,12 @@ if (__name__ == '__main__') {
68
80
  description="PyScript's site module"
69
81
  )
70
82
 
83
+ parser.add_argument(
84
+ '--user-site',
85
+ action='store_true',
86
+ help='show the user site path'
87
+ )
88
+
71
89
  parser.add_argument(
72
90
  '-s',
73
91
  action='store_true',
@@ -107,7 +125,10 @@ if (__name__ == '__main__') {
107
125
  }
108
126
  }
109
127
 
110
- if (!ENABLE_USER_SITE)
128
+ if (args.user_site)
129
+ print(getusersitepackages())
130
+
131
+ elif (!ENABLE_USER_SITE)
111
132
  error('User site is disabled')
112
133
 
113
134
  elif (args.l)
@@ -69,4 +69,47 @@ my friends are all so mean auntiee (temanku semua pada jahat tantee)
69
69
  when i'm down they're never there (aku lagi susah mereka gak ada)
70
70
  [kenny died]
71
71
  but when i'm living the high life.. (coba kalau lagi jaya..)
72
- they'll be all over me auntiee (aku dipuja-pujanya tantee)
72
+ they'll be all over me auntiee (aku dipuja-pujanya tantee)
73
+
74
+ what is that?
75
+ a toilet?
76
+ that's right! it's a toilet clyde
77
+ and where is the toilet seat?
78
+ it's up! because you left it up, again!
79
+ we've been through this countless times clyde!
80
+ ok mom just not in front of my friends ok?
81
+ no not ok!
82
+ because you are getting the message!
83
+ what if i had fallen in,
84
+ start listening to me! put it down, put it down!
85
+ [seat placed down]
86
+
87
+ [intense crap]
88
+ [poop pops out]
89
+ [silent]
90
+ eric, did you just take a crap on my desk?
91
+ [pulling pants]
92
+ what's up? what's up?
93
+ i crapped on your desk, dawg
94
+ what's up with that?
95
+ [silent]
96
+ huh..
97
+
98
+ category is people who annoy you
99
+ audience keep quite please!
100
+ [cameraman glances]
101
+ uhh.. well uh..
102
+ ten seconds mr marsh
103
+ i know it but i dont think i should say it
104
+ five seconds mr marsh
105
+ alright, i'd like to solve the puzzle
106
+ N*GGERS!
107
+ [incorrect sound]
108
+ huh?
109
+ [NAGGERS]
110
+ ohh..
111
+ oww..
112
+ oh naggers of course, naggers..
113
+ uhh, can we cut to a..
114
+ can we cut to a-
115
+ [beep sound]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyscript-programming-language
3
- Version: 1.15.2
3
+ Version: 1.15.3
4
4
  Summary: PyScript Programming Language
5
5
  Home-page: https://azzammuhyala.github.io/pyscript
6
6
  Author: AzzamMuhyala
@@ -83,13 +83,6 @@ pip install -U pyscript-programming-language
83
83
  pip install -U pyscript-programming-language[other]
84
84
  ```
85
85
 
86
- And also, you can download PyScript with `git`:
87
- ```sh
88
- git clone https://github.com/azzammuhyala/pyscript
89
- cd pyscript
90
- pip install .
91
- ```
92
-
93
86
  After that, you can run the PyScript shell (_REPL_) with this command:
94
87
  ```sh
95
88
  python -m pyscript
@@ -8,7 +8,7 @@ with open('README.md', 'r', encoding='utf-8') as file:
8
8
 
9
9
  setup(
10
10
  name='pyscript-programming-language',
11
- version='1.15.2',
11
+ version='1.15.3',
12
12
  description='PyScript Programming Language',
13
13
  long_description=long_description,
14
14
  long_description_content_type='text/markdown',
@@ -1,16 +0,0 @@
1
- # Change Logs
2
-
3
- ## [1.15.2] - 08/11/2026
4
-
5
- ### Added
6
- - Site packages have been moved to `site.getusersitepackages()` within the `pyscript` folder.
7
- - The body of a `switch` statement can use semicolons `;`.
8
- - Optimizations applied to several nodes.
9
- - `getch` library includes the function `getch.is_initialized()`.
10
- - `site` library includes the function `site.getusersitepackages()`.
11
- - Added support for conversion to `complex` types in the `dual` library.
12
- - Added the `make_dirs` parameter to the `newfile`, `move`, and `copy` functions in the `explorer` library.
13
-
14
- ### Fixed
15
- - Fixed several bugs.
16
- - _etc._