1 | from typing import Any, Dict, Union
|
---|
2 | from geniusweb.issuevalue.Value import Value
|
---|
3 |
|
---|
4 | NoneType=type(None)
|
---|
5 |
|
---|
6 | class Bid:
|
---|
7 | def __init__(self, issuevalues:Dict[str, Value]):
|
---|
8 | '''
|
---|
9 | FIXME use strict typing
|
---|
10 | '''
|
---|
11 | for (iss,val) in issuevalues.items():
|
---|
12 | if not isinstance(iss, str):
|
---|
13 | raise ValueError("Issue "+str(iss)+" must be a str")
|
---|
14 | if not isinstance(val, Value):
|
---|
15 | raise ValueError("value "+str(val)+" must be a Value, but is "+str(type(val)))
|
---|
16 | self._issuevalues = dict(issuevalues) #shallow copy : Value is immutable
|
---|
17 |
|
---|
18 | def getIssueValues(self) -> Dict[str, Value]:
|
---|
19 | return self._issuevalues
|
---|
20 |
|
---|
21 | def getIssues(self):
|
---|
22 | return self._issuevalues.keys()
|
---|
23 |
|
---|
24 |
|
---|
25 | def getValue(self, issue:str) -> Union[Value,NoneType] :
|
---|
26 | '''
|
---|
27 | @param issue name of the issue
|
---|
28 | @return the value for the given issue, or null if there is no value for
|
---|
29 | the given issue.
|
---|
30 | '''
|
---|
31 | if not issue in self._issuevalues:
|
---|
32 | return None
|
---|
33 | return self._issuevalues[issue];
|
---|
34 |
|
---|
35 | def __eq__(self, other):
|
---|
36 | return isinstance(other, self.__class__) and \
|
---|
37 | self._issuevalues == other._issuevalues
|
---|
38 |
|
---|
39 | def __repr__(self) -> str:
|
---|
40 | return "Bid" + repr( self._issuevalues);
|
---|
41 |
|
---|
42 | def __hash__(self):
|
---|
43 | return hash((tuple(self._issuevalues.items())))
|
---|
44 | |
---|