Yep, that’s it. Just for posterity here’s the successful proof of concept.
import objc
from Foundation import NSLog, NSRunLoop
CRApplication = objc.lookUpClass("CRApplication")
objc.registerMetaDataForSelector(
b'CRRouter',
b'get:block:',
{
'arguments': {
3: { 'callable': {
'arguments': {
0:{'type': b'^v'},
1:{'type': b'@'},
2:{'type': b'@'},
3:{'type': b'@'}
},
' retval': { 'type': b'v' }
}
}
}
}
)
objc.registerMetaDataForSelector(
b'CRRouter',
b'add:block:',
{
'arguments': {
3: { 'callable': {
'arguments': {
0:{'type': b'^v'},
1:{'type': b'@'},
2:{'type': b'@'},
3:{'type': b'@'}
},
' retval': { 'type': b'v' }
}
}
}
}
)
global server
def helloHandler(request, response, handler):
NSLog("%@ %@ %@", request, response, handler)
response.send_("Hello World!")
handler()
def completionHandler(request, response, handler):
NSLog("Completion handler called")
if __name__ == "__main__":
server = CRApplication.sharedApplication().delegate().server()
NSLog("Server: %@", server)
server.get_block_("/", helloHandler)
server.add_block_("/", completionHandler)
NSLog("Started...")
listening = server.startListening()
NSRunLoop.currentRunLoop().run()
> On Jan 9, 2020, at 04:18, Ronald Oussoren <[email protected]> wrote:
>
>
>> On 9 Jan 2020, at 00:23, Rand Dvorak <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> I got it working. Basically I have a main.py file in Resources that get
>> loaded and run by PyRun_SimpleFile in applicationDidFinishLaunching.
>> Control is then passed to the python interpreter. Notice the infinite loop
>> at the bottom which is needed because the interpreter finishes executing the
>> file and exits. It is needed to keep the python interpreter alive. I need
>> a better solution to keep the interpreter alive because this eats up too
>> much cpu. It was just a hack to prove that is what was happening.
>
> I’ve quickly scanned
> https://github.com/thecatalinstan/Criollo/wiki/Getting-Started
> <https://github.com/thecatalinstan/Criollo/wiki/Getting-Started> and that
> seems to indicate that the webserver integrates with the regular Cocoa event
> loop. That means you’ll probably need to run the NSRunloop or CFRunloop.
>
> Ronald
> —
>
> Twitter: @ronaldoussoren
> Blog: https://blog.ronaldoussoren.net/ <https://blog.ronaldoussoren.net/>
_______________________________________________
Pythonmac-SIG maillist - [email protected]
https://mail.python.org/mailman/listinfo/pythonmac-sig
unsubscribe: https://mail.python.org/mailman/options/Pythonmac-SIG