Solution exception:URLError

Hello!
I am trying to use compas and ARA Machine Learning Plugin by
Gramazio Kohler Research Lab at ETH for Grasshopper.
I encountered this problem. Did I missed something in the installation or on the grasshopper canvas or why cant I connect to the server. Or is it simply not existing anymore?

The Error is: 1. Solution exception:URLError
The URL is: http://127.0.0.1:8765/shutdown

Heres also the code of the “Server” Component.

from future import absolute_import
from future import division
from future import print_function

import urllib2

import compas
import compas._os
from ghpythonlib.componentbase import executingcomponent as component
from scriptcontext import sticky as st

from aixd_ara.constants import DEFAULT_PORT

try:
from subprocess import PIPE
from subprocess import Popen
except ImportError:
from System.Diagnostics import Process

import os

import aixd_ara as ag

class ApiRunner(object):
def init(
self,
package=None,
python=None,
url=“http://127.0.0.1”,
port=DEFAULT_PORT,
service=None,
max_conn_attempts=100,
autoreload=True,
show_window=False,
path=None,
working_directory=None,
):
self.python = compas._os.select_python(python)
self.service = “aixd_ara.api”
self.working_directory = working_directory
self.show_window = show_window
self.port = port

    self.start_process()

def start_process(self):
    env = compas._os.prepare_environment()

    try:
        Popen
    except NameError:
        self._process = Process()
        for name in env:
            if self._process.StartInfo.EnvironmentVariables.ContainsKey(name):
                self._process.StartInfo.EnvironmentVariables[name] = env[name]
            else:
                self._process.StartInfo.EnvironmentVariables.Add(name, env[name])
        self._process.StartInfo.UseShellExecute = True
        self._process.StartInfo.RedirectStandardOutput = not self.show_window
        self._process.StartInfo.RedirectStandardError = not self.show_window
        self._process.StartInfo.FileName = self.python
        self._process.StartInfo.Arguments = "-m {0} {1}".format(self.service, self.port)
        self._process.Start()
    else:
        args = [self.python, "-m", self.service, str(self.port)]
        kwargs = dict(env=env)

        if self.show_window:
            if compas.is_mono():
                python_command = " ".join(args)
                apple_script = """
                tell application "Terminal"
                    do script "{}"
                    activate
                end tell
                """.format(
                    python_command
                )
                args = ["osascript", "-e", apple_script]
        else:
            kwargs["stdout"] = PIPE
            kwargs["stderr"] = PIPE

        if self.working_directory:
            kwargs["cwd"] = self.working_directory
        self._process = Popen(args, **kwargs)

def stop_process(self):
    """Attempts to terminate the python process hosting the proxy server.

    The process reference might not be present, e.g. in the case
    of reusing an existing connection. In that case, this is a no-op.
    """
    print("Stopping the server process.")

    if not self._process:
        return

    try:
        self._process.terminate()
    except Exception:
        pass
    try:
        self._process.kill()
    except Exception:
        pass

api_path = os.path.dirname(ag.file)

print(api_path)

def create_api_runner_id(component):
name = “api-runner”
return “{}_{}”.format(name, component.InstanceGuid)

class ApiRunnerComponent(component):

def RunScript(self, start, stop, show_window=True):
    key = create_api_runner_id(self)
    port = DEFAULT_PORT

    if show_window:
        python = "python"
    else:
        python = "pythonw"

    if start:
        self.stop(key)
        runner = ApiRunner(python=python, port=port, show_window=show_window, working_directory=api_path)
        st[key] = runner

    if stop:
        self.stop(key)

def stop(self, key):
    # Attempt gracefully stopping the server
    try:
        urllib2.urlopen("http://127.0.0.1:8765/shutdown", timeout=1)
    except Exception:
        pass

    # stop previous API runner if any
    previous_api_runner = st.get(key)
    if previous_api_runner:
        try:
            previous_api_runner.stop_process()
        except Exception as e:
            print("Unable to stop previous process")
            print(e)
        st.pop(key)
    else:
        print("No previous process runner found")

Hi Dorian,

Which Rhino version are you using?
Could you maybe provide the full stack trace for the error? (should be printed below when you open and run the failed component).

Also, did it ever work? is this what you’re seeing immediately after the installation?

Thanks,
Chen

Hey!
Thanks for the reply. It started working out of sudden after trying it a few times :man_shrugging:t3:.
So no problems anymore, thanks.

1 Like