source: geniuswebcore/geniusweb/partystdio/PartyStdIo.py@ 92

Last change on this file since 92 was 90, checked in by Bart Vastenhouw, 3 years ago

Refactor to help reusing partiesserver.

File size: 1.8 KB
Line 
1import json
2
3from pyson.ObjectMapper import ObjectMapper
4
5from geniusweb.party.Party import Party
6from geniusweb.partystdio.StdInOutConnectionEnd import StdInOutConnectionEnd
7
8
9class PartyStdIo:
10 '''
11 A class that makes a connection between a Party and the system stdio and stderr channels.
12 This allows communication with a party through the stdio channels,
13 which in fact is a system pipe.
14 '''
15 def __init__(self, partyclas):
16 '''
17 partyclas the class of the party.
18 Parties should implement a getter for this in the function
19 party.party()
20 '''
21 if not issubclass(partyclas, Party):
22 raise ValueError("party must be subclass of Party but got "+str(partyclas))
23 self._partyclas= partyclas
24 self._jackson = ObjectMapper()
25
26
27 def capabilities(self)->None:
28 '''
29 This assumes a party object
30 at the global scope, containing the party() call that returns
31 a class extending Party
32 '''
33 self.out(self._partyclas.getCapabilities(None))
34
35 def description(self)->None:
36 '''
37 This assumes a party object
38 at the global scope, containing the party() call that returns
39 a class extending Party
40 '''
41 self.out(self._partyclas.getDescription(None))
42
43 def out(self, obj)->None:
44 '''
45 prints object serialized with ObjectMapper to stdout, without newline
46 '''
47 print(json.dumps(self._jackson.toJson(obj)),end="")
48
49 def run(self, connend=StdInOutConnectionEnd()):
50 '''
51 "runs" the party. Create instance, connect,
52 pipe actions and inform through stdin/stdout, terminate.
53 '''
54 party=self._partyclas()
55
56 party.connect(connend)
57 connend.run(party)
58
59
60
Note: See TracBrowser for help on using the repository browser.