forked from pyfa-org/Pyfa
-
Notifications
You must be signed in to change notification settings - Fork 0
/
implantSet.py
142 lines (117 loc) · 4.2 KB
/
implantSet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# =============================================================================
# Copyright (C) 2016 Ryan Holmes
#
# This file is part of pyfa.
#
# pyfa is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pyfa is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
import copy
import eos.db
from service.market import Market
from eos.saveddata.implant import Implant as es_Implant
from eos.saveddata.implantSet import ImplantSet as es_ImplantSet
class ImportError(Exception):
pass
class ImplantSets:
instance = None
@classmethod
def getInstance(cls):
if cls.instance is None:
cls.instance = ImplantSets()
return cls.instance
@staticmethod
def getImplantSetList():
return eos.db.getImplantSetList(None)
@staticmethod
def getImplantSet(name):
return eos.db.getImplantSet(name)
@staticmethod
def getImplants(setID):
return eos.db.getImplantSet(setID).implants
@staticmethod
def addImplants(setID, *itemIDs):
implant_set = eos.db.getImplantSet(setID)
for itemID in itemIDs:
implant = es_Implant(eos.db.getItem(itemID))
implant_set.implants.makeRoom(implant)
implant_set.implants.append(implant)
eos.db.commit()
@staticmethod
def removeImplant(setID, implant):
eos.db.getImplantSet(setID).implants.remove(implant)
eos.db.commit()
@staticmethod
def newSet(name):
implant_set = es_ImplantSet()
implant_set.name = name
eos.db.save(implant_set)
return implant_set
@staticmethod
def renameSet(implant_set, newName):
implant_set.name = newName
eos.db.save(implant_set)
@staticmethod
def deleteSet(implant_set):
eos.db.remove(implant_set)
@staticmethod
def copySet(implant_set):
newS = copy.deepcopy(implant_set)
eos.db.save(newS)
return newS
@staticmethod
def saveChanges(implant_set):
eos.db.save(implant_set)
def importSets(self, text):
sMkt = Market.getInstance()
lines = text.splitlines()
newSets = []
errors = 0
current = None
lookup = {}
for i, line in enumerate(lines):
line = line.strip()
try:
if line == '' or line[0] == "#": # comments / empty string
continue
if line[:1] == "[" and line[-1:] == "]":
current = es_ImplantSet(line[1:-1])
newSets.append(current)
else:
item = sMkt.getItem(line)
current.implants.append(es_Implant(item))
except (KeyboardInterrupt, SystemExit):
raise
except:
errors += 1
continue
for implant_set in self.getImplantSetList():
lookup[implant_set.name] = implant_set
for implant_set in newSets:
if implant_set.name in lookup:
match = lookup[implant_set.name]
for implant in implant_set.implants:
match.implants.append(es_Implant(implant.item))
else:
eos.db.save(implant_set)
eos.db.commit()
lenImports = len(newSets)
if lenImports == 0:
raise ImportError("No patterns found for import")
if errors > 0:
raise ImportError("%d sets imported from clipboard; %d errors" %
(lenImports, errors))
def exportSets(self):
patterns = self.getImplantSetList()
patterns.sort(key=lambda p: p.name)
return es_ImplantSet.exportSets(*patterns)