diff --git a/Pipfile b/PythonBridgeRuntime/Pipfile similarity index 100% rename from Pipfile rename to PythonBridgeRuntime/Pipfile diff --git a/__init__.py b/PythonBridgeRuntime/PythonBridge/__init__.py similarity index 100% rename from __init__.py rename to PythonBridgeRuntime/PythonBridge/__init__.py diff --git a/bridge_globals.py b/PythonBridgeRuntime/PythonBridge/bridge_globals.py similarity index 100% rename from bridge_globals.py rename to PythonBridgeRuntime/PythonBridge/bridge_globals.py diff --git a/bridge_hooks.py b/PythonBridgeRuntime/PythonBridge/bridge_hooks.py similarity index 100% rename from bridge_hooks.py rename to PythonBridgeRuntime/PythonBridge/bridge_hooks.py diff --git a/bridge_utils.py b/PythonBridgeRuntime/PythonBridge/bridge_utils.py similarity index 100% rename from bridge_utils.py rename to PythonBridgeRuntime/PythonBridge/bridge_utils.py diff --git a/flask_platform.py b/PythonBridgeRuntime/PythonBridge/flask_platform.py similarity index 100% rename from flask_platform.py rename to PythonBridgeRuntime/PythonBridge/flask_platform.py diff --git a/json_encoder.py b/PythonBridgeRuntime/PythonBridge/json_encoder.py similarity index 100% rename from json_encoder.py rename to PythonBridgeRuntime/PythonBridge/json_encoder.py diff --git a/msgpack_serializer.py b/PythonBridgeRuntime/PythonBridge/msgpack_serializer.py similarity index 100% rename from msgpack_serializer.py rename to PythonBridgeRuntime/PythonBridge/msgpack_serializer.py diff --git a/msgpack_socket_platform.py b/PythonBridgeRuntime/PythonBridge/msgpack_socket_platform.py similarity index 100% rename from msgpack_socket_platform.py rename to PythonBridgeRuntime/PythonBridge/msgpack_socket_platform.py diff --git a/object_registry.py b/PythonBridgeRuntime/PythonBridge/object_registry.py similarity index 100% rename from object_registry.py rename to PythonBridgeRuntime/PythonBridge/object_registry.py diff --git a/python_bridge.py b/PythonBridgeRuntime/PythonBridge/python_bridge.py similarity index 95% rename from python_bridge.py rename to PythonBridgeRuntime/PythonBridge/python_bridge.py index e9b1847..2ed7d8e 100644 --- a/python_bridge.py +++ b/PythonBridgeRuntime/PythonBridge/python_bridge.py @@ -5,6 +5,12 @@ from PythonBridge.bridge_hooks import * from PythonBridge.object_registry import registry +def pbbreak(): + print("Breaking now") + breakpoint() + print("Continuing") + + class EvalCommand: statements = "" binding = {} @@ -158,4 +164,4 @@ def run_bridge(): bridge_globals.logger.log("PYTHON: Finished command execution") if __name__ == "__main__": - run_bridge() \ No newline at end of file + run_bridge() diff --git a/stoppable_thread.py b/PythonBridgeRuntime/PythonBridge/stoppable_thread.py similarity index 100% rename from stoppable_thread.py rename to PythonBridgeRuntime/PythonBridge/stoppable_thread.py diff --git a/PythonBridgeRuntime/PythonBridge/tfactorial.py b/PythonBridgeRuntime/PythonBridge/tfactorial.py new file mode 100644 index 0000000..01c8f01 --- /dev/null +++ b/PythonBridgeRuntime/PythonBridge/tfactorial.py @@ -0,0 +1,36 @@ +import argparse +import threading +import time + + +# Calculate the factorial +def factorial(n, t): + time.sleep(n*t/4) + print("Start: " + str(t) + ": " + str(n)) + if n == 1: + res = 1 + if t == 1: + print("Feel free to break here") + else: + res = n * factorial(n-1, t) + return res + + +# Calculate the factorial and print the result +def factorial_thread(n, t): + time.sleep(2) + result = factorial(n, t) + print("Thread " + str(t) + " = "+str(result)) + + +def launch_factorials(n): + threads = [] + print("Calculate: "+str(n)) + breakpoint() + for i in range(n): + threads.append(threading.Thread(target=factorial_thread, args=(n+i, i+1))) + threads[-1].start() + print("Wait for the results") + for thread in threads: + thread.join() + print("Done") diff --git a/tmp.py b/PythonBridgeRuntime/PythonBridge/tmp.py similarity index 100% rename from tmp.py rename to PythonBridgeRuntime/PythonBridge/tmp.py diff --git a/install_env.sh b/PythonBridgeRuntime/install_env.sh similarity index 58% rename from install_env.sh rename to PythonBridgeRuntime/install_env.sh index c5928ac..f05c06a 100755 --- a/install_env.sh +++ b/PythonBridgeRuntime/install_env.sh @@ -1,4 +1,5 @@ #!/bin/bash cd "$(dirname "$0")" export PIPENV_VENV_IN_PROJECT=1 -pipenv install \ No newline at end of file +pipenv install +pipenv run pip install debugpy diff --git a/PythonBridgeRuntime/killpbservers.sh b/PythonBridgeRuntime/killpbservers.sh new file mode 100755 index 0000000..a6c900d --- /dev/null +++ b/PythonBridgeRuntime/killpbservers.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Kill all the PythonBridge servers running on localhost. +# This assumes they are being run as the current user. +# Any associated debug server processes will automatically exit. + +# List the processes. +# If none are found, exit successfully +ps aux | grep -E 'PythonBridgeRuntime/start_bridge\.py.*msgpack' +status=$? +if [ $status -eq 1 ] +then + exit 0 +fi + +# Kill them +ps aux | grep -E 'PythonBridgeRuntime/start_bridge\.py.*msgpack' | awk '{print $2}' | xargs kill +exit $? diff --git a/run_command.bat b/PythonBridgeRuntime/run_command.bat similarity index 100% rename from run_command.bat rename to PythonBridgeRuntime/run_command.bat diff --git a/start_bridge.py b/PythonBridgeRuntime/start_bridge.py similarity index 100% rename from start_bridge.py rename to PythonBridgeRuntime/start_bridge.py diff --git a/windows_install_env.bat b/PythonBridgeRuntime/windows_install_env.bat similarity index 100% rename from windows_install_env.bat rename to PythonBridgeRuntime/windows_install_env.bat diff --git a/src/BaselineOfPythonBridge/BaselineOfPythonBridge.class.st b/src/BaselineOfPythonBridge/BaselineOfPythonBridge.class.st index d7b02ea..fa9e2a9 100644 --- a/src/BaselineOfPythonBridge/BaselineOfPythonBridge.class.st +++ b/src/BaselineOfPythonBridge/BaselineOfPythonBridge.class.st @@ -12,13 +12,13 @@ BaselineOfPythonBridge >> baseline: spec [ do: [ spec baseline: 'OSSubprocess' - with: [ spec repository: 'github://pharo-contributions/OSSubprocess:v1.0.0/repository' ]. + with: [ spec repository: 'github://feenkcom/OSSubprocess:main/repository' ]. spec baseline: 'Python3Generator' with: [ spec repository: 'github://juliendelplanque/Python3Generator:v2.0.0/repository' ]. spec baseline: 'NeoJSON' with: [ spec - repository: 'github://svenvc/NeoJSON/repository' ]. + repository: 'github://svenvc/NeoJSON:v17/repository' ]. spec baseline: 'MessagePack' with: [ spec repository: 'github://msgpack/msgpack-smalltalk:v1.3.1/repository' ]. diff --git a/src/PythonBridge-Pharo/PBMsgPackPharoBrokerTest.class.st b/src/PythonBridge-Pharo/PBMsgPackPharoBrokerTest.class.st index aa047ee..5da3bd9 100644 --- a/src/PythonBridge-Pharo/PBMsgPackPharoBrokerTest.class.st +++ b/src/PythonBridge-Pharo/PBMsgPackPharoBrokerTest.class.st @@ -60,6 +60,17 @@ PBMsgPackPharoBrokerTest >> sendMessageToBroker: dict answerBlock: aBlock [ self sleepAWhile. ] +{ #category : #utils } +PBMsgPackPharoBrokerTest >> sendMessageToBroker: dict answerEquals: ansDict [ + | flag | + flag := false. + self sendMessageToBroker: dict answerBlock: [ :anAssoc | + flag := true. + self assert: anAssoc value equals: ansDict ]. + self sleepAWhile. + self assert: flag +] + { #category : #utils } PBMsgPackPharoBrokerTest >> sleepAWhile [ (Delay forMilliseconds: 50) wait diff --git a/src/PythonBridge-Pharo/PBPharoPipenvProcess.class.st b/src/PythonBridge-Pharo/PBPharoPipenvProcess.class.st index c4cfe73..644ef87 100644 --- a/src/PythonBridge-Pharo/PBPharoPipenvProcess.class.st +++ b/src/PythonBridge-Pharo/PBPharoPipenvProcess.class.st @@ -3,7 +3,8 @@ Class { #superclass : #PBAbstractProcess, #instVars : [ 'process', - 'environmentVariables' + 'environmentVariables', + 'serverDebugger' ], #classVars : [ 'PipenvPath' @@ -11,16 +12,22 @@ Class { #category : #'PythonBridge-Pharo-Processes' } +{ #category : #'class initialization' } +PBPharoPipenvProcess class >> initialize [ + + SessionManager default registerUserClassNamed: self name. +] + { #category : #initialization } PBPharoPipenvProcess class >> pipenvPath [ - ^ PipenvPath isEmptyOrNil - ifTrue: [ PipenvPath := self resolvePipenvPath ] - ifFalse: [ PipenvPath ] + ^ PipenvPath + ifNil: [ PipenvPath := self resolvePipenvPath ] + ifNotNil: [ PipenvPath ] ] { #category : #initialization } -PBPharoPipenvProcess class >> pipenvPath: aString [ - PipenvPath := aString +PBPharoPipenvProcess class >> pipenvPath: aFileReference [ + PipenvPath := aFileReference ] { #category : #accessing } @@ -28,16 +35,26 @@ PBPharoPipenvProcess class >> platform [ ^ PBPharoPlatform current ] +{ #category : #initialization } +PBPharoPipenvProcess class >> reset [ +