Compare commits

...

2057 Commits

Author SHA1 Message Date
blitzmann
9bb83d4574 Merge branch 'master' of https://github.com/pyfa-org/pyfa 2018-05-14 22:08:07 -04:00
blitzmann
8023b2ea29 Bump version 2018-05-14 21:59:25 -04:00
blitzmann
3e1244a27a Fix for not being able to drag fit to tab area (#1569) 2018-05-14 19:26:23 -04:00
blitzmann
51e610830f Fix (not really) an issue with a dead character editor still receiving events 2018-05-14 18:27:53 -04:00
blitzmann
a2877f6b5f Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2018-05-14 01:03:06 -04:00
Ryan Holmes
acf6b3dffd Merge pull request #1549 from flashspys/patch-1
Add Drone Damage Amplifier to defaults
2018-05-14 00:39:44 -04:00
blitzmann
b6a1c4b308 Add support for using own client details (messy code, but it works!) 2018-05-14 00:37:26 -04:00
blitzmann
e29ab817af Add the client details back to the preferences page 2018-05-13 13:27:49 -04:00
blitzmann
86576581cd Break out the phobos dump from the data compilation (dump has to work in py2, whereas compilation requires py3 due to hooking directly in with EOS classes). protip: PyCharm configurations are awesome 2018-05-13 01:17:59 -04:00
blitzmann
50bd46015b fix the osx icon 2018-05-12 23:10:27 -04:00
blitzmann
aa2ffaf1ea Update installer script and create new dist script for windows. todo: find out hwo to invoke PyInstaller from python 2018-05-12 22:49:18 -04:00
blitzmann
5cc6b6c69c Move over all esi stuff to it's own class, which the esi service extends from. Also fix an issue in the EVE fittings browser where deleting a fit didn't actually remove it from the list of fits (due to that list being populated by the return data of ESI, which can be cached). More clean up. 2018-05-12 13:57:14 -04:00
blitzmann
0365f71c00 Move over ESI functionality to be completely separate from esipy 2018-05-12 12:25:34 -04:00
blitzmann
4d666907c9 Start breaking out esipy, first up: getting for login 2018-05-11 23:24:30 -04:00
Felix Wehnert
0466678176 Add Drone Damage Amplifier to defaults 2018-05-09 10:20:11 +02:00
blitzmann
c1e239b9b3 Add a message box informing user of failed ESI initialization 2018-05-08 22:00:35 -04:00
blitzmann
26aaeabd7f Bump version 2018-05-08 21:33:20 -04:00
blitzmann
0e0bc9dfd2 Remove some references to old api stuff (#1547) 2018-05-08 21:06:32 -04:00
blitzmann
8990cbfd6a update readme 2018-05-08 00:01:55 -04:00
blitzmann
8f34c03289 implement a stop gap measure for #1384 2018-05-07 23:20:11 -04:00
blitzmann
c1322a3566 Run through pyfa.io for update checks (allows us to log version usage and provide more flexibility going forward). Falls back to simple github request 2018-05-07 22:55:50 -04:00
blitzmann
5101e2851a replace eve-central with evemarketer 2018-05-07 22:28:40 -04:00
blitzmann
7b7f67ad2e bump version 2018-05-07 22:24:18 -04:00
blitzmann
dbdc566ae4 Only raise exception for status code > 400 (was previously excluding 201 and the like) 2018-05-07 22:09:31 -04:00
blitzmann
f4fd991907 Remove some event handling from the ESI windows to prevent errors from happening (#1501) 2018-05-07 22:00:41 -04:00
blitzmann
42ad74158b Remove the ASCII text from console 2018-05-07 21:55:47 -04:00
blitzmann
c99afa79e1 Merge branch 'test-3' 2018-05-07 21:54:51 -04:00
blitzmann
789c3b869a Add new Exception type 2018-05-06 13:04:02 -04:00
blitzmann
7d8d87662b Merge remote-tracking branch 'origin/py3' into test-3 2018-05-06 12:58:04 -04:00
blitzmann
645a5ced14 check response for a 200 2018-05-06 12:57:48 -04:00
Ryan Holmes
5ed98e8fed Update requirements.txt 2018-05-04 23:30:43 -04:00
Ryan Holmes
f12370389c Merge pull request #1538 from fsufitch/issue/1533
Improve user experience customizing jargon.yaml
2018-05-02 22:36:44 -04:00
blitzmann
fc35d7bb26 Add mutaplasmids to group listing for sql inclusion 2018-05-02 22:32:49 -04:00
Filip Sufitchi
95c1f7bde0 Improve user experience customizing jargon.yaml 2018-05-02 11:02:46 -04:00
blitzmann
d52c249921 Remove client path hashing for secret file (was interfering with OS X build, because it unpacks pyfa into a different, random directory each time it runs) 2018-04-29 12:49:03 -04:00
blitzmann
0b9a50cd8d fix mac spec 2018-04-29 11:56:47 -04:00
blitzmann
25bbfec318 add a few things to requirements.txt 2018-04-29 11:31:33 -04:00
blitzmann
1192c26b8f Add the jargon yaml files to the build process 2018-04-29 11:30:41 -04:00
blitzmann
4a3201ffd4 Merge branch 'py3' of https://github.com/pyfa-org/Pyfa into test-3 2018-04-28 20:35:26 -04:00
blitzmann
406a22100d Merge branch 'esi' into test-3 2018-04-28 20:35:14 -04:00
Ryan Holmes
2547cf70c2 Merge pull request #1515 from Neugeniko/Issue#1511
Fix new sustained reps code for logistic drones.
2018-04-28 20:08:07 -04:00
Ryan Holmes
e83fa4d40b Merge pull request #1513 from fsufitch/issue/1369
Issue/1369
2018-04-07 09:10:44 -04:00
Ryan Holmes
c552cb5e40 Merge pull request #1510 from fsufitch/issue/1509
Use list control length instead of sys.maxsize for platform compatibility
2018-04-07 08:27:40 -04:00
Neugeniko
363904411d Projected Logistic Drones don't have a cap use or rawCycleTime.
Only call the logic for the appropriate module groups.
2018-04-04 16:55:05 +10:00
Filip Sufitchi
49bc9f50bc Add a comprehensive default jargon file 2018-04-02 17:35:58 -04:00
Filip Sufitchi
30501feb99 Raise search limit back up to 3 2018-04-02 17:25:45 -04:00
Filip Sufitchi
efc07e1553 Move minimum search length check to the service, to cover jargon 2018-04-02 17:23:30 -04:00
Filip Sufitchi
9bbeec523e Remove some debug try/except stuff 2018-04-02 16:44:14 -04:00
Filip Sufitchi
943ee517f4 Add jargon service
Jargon service translates search strings for the market
using community-sourced abbreviations. It also creates the
jargon.yaml file in the user's save directory, for
future customization (either manual, or via the UI) and
provides the code hooks to load and update it. The
JargonLoader is capable of hot-loading new jargon.yaml
configurations without restarting Pyfa.
2018-04-02 16:40:39 -04:00
Filip Sufitchi
18bb3bf246 Use list control length instead of sys.maxsize for platform compatibility 2018-03-31 16:28:59 -04:00
blitzmann
117d51caab change back to the py3-dev database 2018-03-25 21:42:51 -04:00
blitzmann
a3e411f225 Merge tag 'v2.0.0b5' into esi
# Conflicts:
#	eos/saveddata/character.py
2018-03-25 19:21:32 -04:00
blitzmann
083af3ebc7 Suppress pre-release notification only if current build is not a pre-release 2018-03-25 13:25:09 -04:00
blitzmann
3fd4d106d9 Merge branch 'master' into test-3
# Conflicts:
#	config.py
#	eos/effects/warpdisruptsphere.py
#	service/update.py
2018-03-25 13:16:07 -04:00
Ryan Holmes
7c376c93a2 Merge pull request #1500 from pyfa-org/release/1.36
Release/1.36
2018-03-25 13:12:46 -04:00
blitzmann
4ef7b645a8 Update effects, icons, db, version bump 2018-03-25 13:11:29 -04:00
blitzmann
cccc7ff2d0 Merge branch 'master' into release/1.36
# Conflicts:
#	service/update.py
2018-03-25 13:03:52 -04:00
blitzmann
b7c45f4c6e Fix the update check logic; only go through the 5 latests updates, and if the check fails (specifically due to our new beta tagging for v2) then simply continue to the next one instead of failing outright 2018-03-25 03:33:02 -04:00
blitzmann
3964658d9a Enable cargohold for structures (#1414) 2018-03-25 03:18:34 -04:00
blitzmann
03212be54a Merge branch 'master' into test-3
# Conflicts:
#	eos/capSim.py
#	eos/effects/structurewarpscrambleblockmwdwithnpceffect.py
#	eos/effects/warpdisruptsphere.py
2018-03-25 03:03:59 -04:00
blitzmann
46098f2127 Merge branch 'master' into release/1.36 2018-03-25 03:00:28 -04:00
Ryan Holmes
2005d0b0b9 Merge pull request #1494 from Neugeniko/Issue#1439-2
Respect 'Factor in Reload' preference for sustainable tank (tidied up).
2018-03-25 02:59:48 -04:00
blitzmann
3293380515 styling fix 2018-03-24 18:18:16 -04:00
Neugeniko
68e5b22fe2 Implement effect for Standup Warp Disruption Burst Projector.
Make active so we can see its effect on capacitor.

(cherry picked from commit 03c2088e6b)
2018-03-24 17:59:49 -04:00
Neugeniko
0f7dd7cc0c Correct the structure guidance enhancers to apply bonuses to relevant charges.
(cherry picked from commit 5c20ee7ade)
2018-03-24 17:59:34 -04:00
Neugeniko
0713251685 Redefine scrambler operation.
If we are projecting effects, modify warpScrambleStatus all the time, and turn off modules requiring 'High Speed Maneuvering' (MWDs) or "Micro Jump Drive Operation" (MJD etc) if a scrambling script is loaded.

(cherry picked from commit 04c62aabea)
2018-03-24 17:59:23 -04:00
Neugeniko
3fda62e320 Redefne structure mounted disruptor operation
If we are projecting effects, modify warpScrambleStatus all the time, and turn off modules requiring 'High Speed Maneuvering' (MWDs) or "Micro Jump Drive Operation" (MJD etc) if a scrambling script is loaded.

(cherry picked from commit 0994158abd)
2018-03-24 17:59:08 -04:00
Neugeniko
5f1c2d6676 Redefine Warp Disruption Field Generators operation
If we are applying effects onto our self, disallowAssistance all the time, and go into low mass/high sig etc mode when no script is loaded.

If we are projecting effects, modify warpScrambleStatus all the time, and turn off modules requiring 'High Speed Maneuvering' (MWDs) or "Micro Jump Drive Operation" (MJD etc) if a scrambling script is loaded.

(cherry picked from commit 77a66a66ea)
2018-03-24 17:58:52 -04:00
blitzmann
c0ba559ca6 Merge branch 'master' into release/1.36 2018-03-24 17:52:22 -04:00
Ryan Holmes
164720db3d Merge pull request #1495 from Neugeniko/Issue#1482-2
Fix cap use for non repeatable modules.
2018-03-22 00:58:16 -04:00
blitzmann
bd90ec4bf0 Don't fail an api update when a skill has been removed (#1473) 2018-03-21 22:12:21 -04:00
blitzmann
d7e24dfa8f Merge branch 'Issue#1486' 2018-03-21 21:51:13 -04:00
Ebag333
2f1ad21392 Calculate DPS for beam type doomsdays. 2018-03-21 21:49:04 -04:00
Ebag333
687d539534 Enable misc info for doomsdays. 2018-03-21 21:48:46 -04:00
Ryan Holmes
bd6793bc19 Merge pull request #1498 from Neugeniko/Issue#1484
Create basic effects files for various modules.
2018-03-21 21:18:08 -04:00
Ryan Holmes
6dd6452c11 Merge pull request #1491 from Neugeniko/Capsimreload
CapSim changes to make reloadtime a variable.
2018-03-21 21:03:40 -04:00
Ryan Holmes
e59a1cd27b Merge pull request #1489 from Neugeniko/Issue#1488
Bomb Launcher Problems Issue#1488
2018-03-21 20:55:05 -04:00
blitzmann
24d14d5e19 Fix attribute that was changed on some items 2018-03-21 20:48:05 -04:00
blitzmann
e0584367c5 fix some update logic for the new beta releases 2018-03-21 20:32:59 -04:00
blitzmann
a2f48e8944 update effects and a few tox fixes 2018-03-21 20:18:00 -04:00
blitzmann
95ba18f8a9 Update database 2018-03-20 23:03:02 -04:00
blitzmann
122d8ef367 Add Monitor effects 2018-03-20 23:01:05 -04:00
blitzmann
281d2ed1f4 Add Praxis effect 2018-03-20 22:55:12 -04:00
blitzmann
48924774f9 Add drake navy issue effects 2018-03-20 22:53:34 -04:00
blitzmann
ee00914a2b Renamed attribute 2018-03-20 22:49:40 -04:00
Ryan Holmes
48d90c1eca Add login method to login request 2018-03-18 00:54:59 -04:00
Ryan Holmes
415b3db809 Merge branch 'esi-noserver' into esi 2018-03-18 00:47:07 -04:00
Ryan Holmes
53451dfaf6 Implement a setting for manual vs server login method 2018-03-18 00:46:53 -04:00
Ryan Holmes
49181dce2b Develop dialog to input SSO Info from pyfa.io, and handle the login. Still need to hook this up to a settings option 2018-03-17 21:08:11 -04:00
Ryan Holmes
199763bcca Separate the server login handler from the sso info handler 2018-03-17 20:31:38 -04:00
Ryan Holmes
033647da61 Move to a central login() method 2018-03-17 20:23:14 -04:00
Ryan Holmes
00e8e9d84a Send pyfa version to server when logging in 2018-03-17 20:18:28 -04:00
Neugeniko
96b701687b pep 8 2018-03-17 13:53:03 +11:00
Neugeniko
e1e90cc23e pep 8 2018-03-17 13:43:19 +11:00
Neugeniko
f41ecae8c8 Add a minimal effects files for mjfg, lance dd's,
reaper dd's, bosonic dd's and gtfo dd's.
2018-03-17 13:23:58 +11:00
Neugeniko
65ec8cf4ee Take into consideration reactivation time for non repeatable modules
like the assault DC and MJD when calculating their 'actual'
cycle time.
2018-03-17 11:44:29 +11:00
Neugeniko
4fc93f7089 Respect 'Factor in Reload' preference for sustainable tank (tidied up). 2018-03-17 09:39:50 +11:00
Ryan Holmes
3ec01a20c2 Bunch of renaming to bring variables up to speed 2018-03-16 18:15:48 -04:00
Ryan Holmes
8a10f0a766 sCrest > sEsi 2018-03-16 18:06:33 -04:00
Ryan Holmes
0db125177f Remove some more cruft 2018-03-16 18:05:49 -04:00
Ryan Holmes
a3f532f62f Remove some cruft, and show EVE fitting when selecting it, rather than double clicking 2018-03-16 18:01:47 -04:00
Neugeniko
234f36c8c0 Zero reload times when reloads are off so we can group modules
with normally different reload times.
2018-03-16 15:57:14 +11:00
Ryan Holmes
2c3957b2db Disable CREST settings in preferences 2018-03-15 23:07:34 -04:00
Ryan Holmes
79deca41c1 Fix skill fetching 2018-03-15 23:05:28 -04:00
Ryan Holmes
570df7f645 Fix a bug with the character selection, and automatically assign a character after logging into eve via character editor 2018-03-15 22:13:56 -04:00
Ryan Holmes
8153b80d05 Work around for sso character not being delete from characters after sso deleted, some other minor tweaks 2018-03-15 19:58:17 -04:00
Ryan Holmes
b74654a5b3 Fix relationships for sso / characters 2018-03-15 02:58:58 -04:00
Ryan Holmes
4c6f68b07e Move sso character stuff to character file (for now while I try to figure out how to properly delete these) 2018-03-14 18:46:49 -04:00
Ryan Holmes
9839efc2dc Fix sso character relationship to not delete sso character (whoops) 2018-03-14 18:40:38 -04:00
Ryan Holmes
9d379d966c Implement working character associations with SSO character 2018-03-14 17:53:48 -04:00
Neugeniko
61086989dc Need to wait speed + reactivation delay between void bomb. 2018-03-14 16:04:15 +11:00
Neugeniko
023ea43611 Divide by numShots not need as we do that below. 2018-03-14 15:39:20 +11:00
Neugeniko
044e032ab3 Allow variable reload time in CapSim. 2018-03-14 13:40:49 +11:00
Neugeniko
da7b95041d Allow variable reload time in CapSim. 2018-03-14 13:40:31 +11:00
blitzmann
f52f39984f Add api view back to character editor (non functioning) 2018-03-12 21:13:18 -04:00
blitzmann
1513b07071 set cargo amoutninput to select all instead of inserstion end 2018-03-11 19:40:38 -04:00
blitzmann
be19b7414a Make a relation between characters and sso chars 2018-03-11 19:39:58 -04:00
blitzmann
75f9a0252a Start working on character to SSO character mapping 2018-03-11 17:38:51 -04:00
blitzmann
5169c35d5c Implement SSO Character delete, Remove some unused character logout code (still need to hook this up with character delete functionality) 2018-03-11 16:50:12 -04:00
blitzmann
bbdf1ee6cc More tweaks / error handling for esi 2018-03-11 15:31:41 -04:00
blitzmann
6c6e8a9972 Do some error handling 2018-03-11 14:47:57 -04:00
Neugeniko
97742b08c8 Attribute disallowRepeatingAction has been renamed to
disallowRepeatingActivation in the database. Make appropriate
modification to instances of this attribute name in code.

(cherry picked from commit ff607e4b03)
2018-03-11 12:19:43 -04:00
Ryan Holmes
8ef4c61fc3 Merge pull request #1481 from Neugeniko/Issue#1480
Attribute disallowRepeatingAction has been renamed.
2018-03-11 12:19:12 -04:00
Neugeniko
ff607e4b03 Attribute disallowRepeatingAction has been renamed to
disallowRepeatingActivation in the database. Make appropriate
modification to instances of this attribute name in code.
2018-03-11 21:38:46 +11:00
blitzmann
30c1ab125c Increase esipy requirement 2018-03-10 17:58:47 -05:00
blitzmann
8276746dad Do custom EsiPY prefix, change sso endpoint to look at pyfa.io instead of localhost 2018-03-10 15:46:23 -05:00
blitzmann
5560ef4d34 Merge branch 'test-3' into esi
# Conflicts:
#	eos/saveddata/character.py
#	service/character.py
#	service/eveapi.py
#	service/pycrest/eve.py
2018-03-10 15:32:21 -05:00
blitzmann
fac31f7254 Merge branch 'py3-requests-proxy' of git://github.com/minlexx/Pyfa into minlexx-py3-requests-proxy 2018-03-10 12:10:54 -05:00
blitzmann
1efcc8d3ef style 2018-03-10 12:09:51 -05:00
Neugeniko
03c2088e6b Implement effect for Standup Warp Disruption Burst Projector.
Make active so we can see its effect on capacitor.
2018-03-10 10:08:22 +11:00
Neugeniko
5c20ee7ade Correct the structure guidance enhancers to apply bonuses to relevant charges. 2018-03-10 00:50:58 +11:00
Neugeniko
04c62aabea Redefine scrambler operation.
If we are projecting effects, modify warpScrambleStatus all the time, and turn off modules requiring 'High Speed Maneuvering' (MWDs) or "Micro Jump Drive Operation" (MJD etc) if a scrambling script is loaded.
2018-03-07 15:29:31 +11:00
Neugeniko
0994158abd Redefne structure mounted disruptor operation
If we are projecting effects, modify warpScrambleStatus all the time, and turn off modules requiring 'High Speed Maneuvering' (MWDs) or "Micro Jump Drive Operation" (MJD etc) if a scrambling script is loaded.
2018-03-07 15:27:53 +11:00
Neugeniko
77a66a66ea Redefine Warp Disruption Field Generators operation
If we are applying effects onto our self, disallowAssistance all the time, and go into low mass/high sig etc mode when no script is loaded.

If we are projecting effects, modify warpScrambleStatus all the time, and turn off modules requiring 'High Speed Maneuvering' (MWDs) or "Micro Jump Drive Operation" (MJD etc) if a scrambling script is loaded.
2018-03-07 15:25:57 +11:00
Alexey Minnekhanov
0b615b578a Bring back proxy settings in network preferences view 2018-03-05 18:02:34 +03:00
Alexey Minnekhanov
53f07db5fe Network: apply proxy settings for requests library call 2018-03-05 16:24:00 +03:00
Alexey Minnekhanov
4d4815d6af Network: change User-Agent header from "urllib" to "requests" with version 2018-03-05 16:16:06 +03:00
blitzmann
b296e0709c Merge branch 'master' into test-3 2018-03-05 00:07:28 -05:00
blitzmann
373e0a390b Don't multiple HP of structure, instead assign it. Fixes #1460 2018-03-04 19:42:28 -05:00
blitzmann
222037ff40 Remove proxy support for the time being 2018-03-04 18:10:40 -05:00
blitzmann
4fac10ccb7 Fix update checker, migrate to requests package for all network stuff. The eveapi package is probably not going to work with caching and whatnot, but pyfa doesn't use it and XML API is EOL anyway 2018-03-04 18:08:34 -05:00
blitzmann
7956ca0409 Merge remote-tracking branch 'origin/master' into test-3
# Conflicts:
#	config.py
2018-03-04 16:47:08 -05:00
Ryan Holmes
5b27d0559f Merge pull request #1464 from pyfa-org/release/v1.35.2
Bump version
2018-03-04 16:44:28 -05:00
blitzmann
85157fdf85 Bump version 2018-03-04 16:44:00 -05:00
blitzmann
caf8e7f2d6 Test something on mac 2018-03-03 17:40:40 -05:00
blitzmann
124bb027ab Use bs4.UnicodeDammit to handle different encodings for file imports (fits only for now, can look into expanding for other file import types) 2018-03-03 14:21:55 -05:00
blitzmann
d5ca14ca52 Remove encoding checks for eft import (#1459) 2018-03-03 00:50:56 -05:00
blitzmann
99982aa547 Merge branch 'master' into test-3 2018-03-02 00:17:54 -05:00
blitzmann
3f4493c0ea Another fix for #1403 2018-03-02 00:17:33 -05:00
blitzmann
cdb604b29f Merge remote-tracking branch 'origin/py3' into test-3 2018-03-01 23:42:29 -05:00
blitzmann
d3b8cebc8a Merge branch 'master' into test-3 2018-03-01 23:42:22 -05:00
Ryan Holmes
7d245660bc Merge pull request #1455 from pyfa-org/issue/1451
Don't fail when trying to project a module that can't be projected.
2018-03-01 23:41:50 -05:00
blitzmann
b1e40427a3 Tox 2018-03-01 23:41:39 -05:00
blitzmann
73925df24b Don't fail when trying to project a module that can't be projected. 2018-03-01 23:24:00 -05:00
Ryan Holmes
04fbd3b548 Merge pull request #1454 from Neugeniko/py3
Resolves issue #1453 with xmlparser.ParseFile(file) wanting bytes.
2018-03-01 20:59:08 -05:00
Neugeniko
d9dd94d6c3 Update character.py
Resolves issue #1453 with xmlparser.ParseFile(file) wanting bytes.
2018-03-02 12:00:11 +11:00
blitzmann
963353a1dc Merge branch 'master' into test-3 2018-03-01 00:40:40 -05:00
Ryan Holmes
3411dcfd91 Merge pull request #1446 from pyfa-org/issue/1445-master
Issue/1445 master
2018-03-01 00:30:24 -05:00
blitzmann
ae6434affb Fix issue with importing EVE API XML 2018-03-01 00:30:08 -05:00
blitzmann
f773e0a935 fix misplaced parentheses
(cherry picked from commit 2a60216a92d39bb200c26bce8573484f54a80dc5)
2018-03-01 00:26:52 -05:00
blitzmann
7ab3ad9e08 Don't delete and recreate skills when updating char sheet. Instead, get each individual skill and change level.
(cherry picked from commit 55c79c1bafaa9a1b159b73a72c6480f7e8d6cb6b)
2018-03-01 00:26:47 -05:00
blitzmann
3f3a82ca6c Merge branch 'py3' of https://github.com/pyfa-org/Pyfa into test-3 2018-02-28 22:02:22 -05:00
blitzmann
e902cc5780 Add event.skip() to fit rename textCtrl focus loss 2018-02-28 22:00:48 -05:00
Ryan Holmes
fcb6952119 Merge pull request #1444 from Neugeniko/py3
Ensure graph frame unbinds its event handlers.
2018-02-27 21:09:10 -05:00
Neugeniko
3eecd57979 Update graphFrame.py 2018-02-28 03:17:37 +11:00
blitzmann
6e73b9fefd Tox 2018-02-27 00:52:15 -05:00
blitzmann
f0b0285f77 Merge branch 'development' of https://github.com/pyfa-org/Pyfa into development 2018-02-27 00:46:10 -05:00
blitzmann
e706a015b3 Merge branch 'issue/1397' into development 2018-02-27 00:45:53 -05:00
blitzmann
a804f9a1ad Fix working on missing skills context menu (#1412)
(cherry picked from commit 96c13c344a)
2018-02-27 00:45:46 -05:00
blitzmann
9e1b7dbb87 Add ability to drag a module from fitting window to projected pane 2018-02-27 00:44:42 -05:00
blitzmann
551ffe9ed3 Quick fix for #1430 2018-02-27 00:23:29 -05:00
blitzmann
cbe1ce5bcd Merge branch 'master' into test-3 2018-02-27 00:16:45 -05:00
Ryan Holmes
917afd5067 Merge pull request #1441 from pyfa-org/issue/1440
Convert sec status to float on character import (#1440)
2018-02-27 00:15:59 -05:00
blitzmann
c3fb9231a4 Convert sec status to float on character import (#1440) 2018-02-27 00:15:20 -05:00
blitzmann
2ed2f8e262 Fix issue with losing wrapper for FittingView when closing 2018-02-25 12:04:57 -05:00
blitzmann
390d90ac47 Merge branch 'issue/1434' into test-3 (#1434)
# Conflicts:
#	gui/builtinViews/fittingView.py
2018-02-25 01:57:36 -05:00
blitzmann
4c877e7a5a re-enable the tab preview 2018-02-25 01:45:43 -05:00
blitzmann
972fe433f7 remove vestigial file 2018-02-25 00:11:13 -05:00
blitzmann
ecaf6f96a9 guage: respect animation setting (#1434) 2018-02-25 00:10:17 -05:00
Ryan Holmes
8541e2a869 Merge pull request #1438 from pyfa-org/issue/1433
DNA export should respect Export Charges setting
2018-02-24 23:50:21 -05:00
blitzmann
48a2963472 Merge branch 'issue/1433' into test-3 2018-02-24 23:40:26 -05:00
blitzmann
f245a02372 DNA export should respect Export Charges setting 2018-02-24 23:37:53 -05:00
blitzmann
1c16343b46 Merge branch 'master' into test-3 2018-02-24 22:24:16 -05:00
Ryan Holmes
d0f66f2d16 Merge pull request #1437 from pyfa-org/issue/1432
Always open imports in a new tab (#1432)
2018-02-24 22:23:13 -05:00
blitzmann
df0c6ed269 Merge branch 'bug/amount-modal' into test-3 2018-02-24 22:21:02 -05:00
Ryan Holmes
9a4e26a5be Merge pull request #1436 from pyfa-org/bug/amount-modal
Handle getting value for Change Amount differently for projected fits (#1435)
2018-02-24 22:20:51 -05:00
blitzmann
2b87f91279 tox fix 2018-02-24 22:20:24 -05:00
blitzmann
9b48b61b9b Merge branch 'bug/amount-modal' into test-3 2018-02-24 22:17:22 -05:00
blitzmann
57e67b3699 Handle getting value for Change Amount differently for projected fits 2018-02-24 22:17:04 -05:00
blitzmann
15e60c3d24 Always open imports in a new tab (#1432) 2018-02-24 21:11:53 -05:00
blitzmann
ebf07db6c6 Partial fix for #1430 2018-02-24 19:01:54 -05:00
blitzmann
1559767201 Ensure that the event is propagated when the graph window handles FitChanged (#1430) 2018-02-24 18:21:32 -05:00
blitzmann
6e5e52df37 See #1429, version file not currently applied 2018-02-24 17:13:50 -05:00
blitzmann
e9289c102b Fix issue in notebook tab preview (this feature hasn't been enabled for a while, but we may want to turn it back on eventually. As such, ensure that we don't run into any problems here) 2018-02-24 13:53:56 -05:00
blitzmann
81d61d7e29 lol context management not available in 4.0.0b2, and can't update to >4.0 until #1421 is addressed 2018-02-24 13:49:17 -05:00
blitzmann
9ab4ec2d4f Convert AutoBufferedPaintDC > BufferedPaintDC (and use spiffy new context management). See #1418 2018-02-24 13:45:36 -05:00
blitzmann
565332dfcd Set wx requirement to v4b2, see #1421 2018-02-24 13:28:45 -05:00
blitzmann
f94fbd740a Merge branch 'bug/amount-modal' into test-3
# Conflicts:
#	gui/builtinContextMenus/amount.py
2018-02-24 02:55:40 -05:00
Ryan Holmes
a2719ec2f7 Merge pull request #1427 from pyfa-org/bug/amount-modal
Redesign amount modal
2018-02-24 02:54:38 -05:00
blitzmann
1da12cb18e tox fix 2018-02-24 02:54:23 -05:00
blitzmann
e0cddcd061 Redesign amount modal, basing style off wx.TextEntryDialog (but not a wx.TextEntryDialog, because there are possibilities to do a few different things in this modal) 2018-02-24 02:47:13 -05:00
blitzmann
78f632a4f6 Merge remote-tracking branch 'origin/master' into test-3 2018-02-24 02:03:29 -05:00
Ryan Holmes
52754535a0 Merge pull request #1426 from pyfa-org/issue/1416
Issue/1416
2018-02-24 02:02:57 -05:00
blitzmann
a9db667c9c Do the same treatment to Target Resists as Damage Patterns 2018-02-24 02:01:23 -05:00
blitzmann
f442632fbc Fix importing damage profiles which included overwriting existing ones and then performing a delete on one of them. #1416 2018-02-24 01:49:09 -05:00
blitzmann
362086cc83 Fix type in database default for damage types 2018-02-24 01:47:05 -05:00
blitzmann
73d59569ff Merge remote-tracking branch 'origin/master' into test-3
# Conflicts:
#	gui/characterEditor.py
2018-02-23 23:28:33 -05:00
Ryan Holmes
cb4fadf84c Merge pull request #1425 from pyfa-org/issue/1419
Migrate the Save Character As dialog tot he same dialog / validator a…
2018-02-23 23:26:44 -05:00
blitzmann
e85d144928 Migrate the Save Character As dialog tot he same dialog / validator as the Edit Character Name (#1419) 2018-02-23 23:25:11 -05:00
blitzmann
07099f4057 Fix working on missing skills context menu (#1412)
(cherry picked from commit 96c13c344a)
2018-02-23 01:17:18 -05:00
blitzmann
96c13c344a Fix working on missing skills context menu (#1412) 2018-02-23 01:15:57 -05:00
blitzmann
8f42822d9e Add roman package as a requirement, and remove the roman module from pyfa 2018-02-23 01:04:31 -05:00
blitzmann
c5ba79cfbb Merge branch 'master' into test-3
# Conflicts:
#	.gitignore
2018-02-23 01:02:51 -05:00
Ryan Holmes
f69f76856a Merge pull request #1391 from BlueShanks/acceptRomanNumerals
Character Editor: accept skill plans in Roman numerals too
2018-02-23 01:01:57 -05:00
Ryan Holmes
3a23d820cc Merge branch 'master' into acceptRomanNumerals 2018-02-23 01:01:07 -05:00
blitzmann
c917d22db5 tox fixes for the roman library to prevent travis from yelling at us 2018-02-23 01:00:43 -05:00
blitzmann
c3f8b102fa Add the romans library to pyfa itself to avoid having to modify the binaries 2018-02-23 00:57:26 -05:00
blitzmann
5e566db47d Fix attribute override export / import (#1420) 2018-02-23 00:36:52 -05:00
blitzmann
5b2c5907ed Skills needed export (#1412): Need to encode the string before we gzip it 2018-02-23 00:23:45 -05:00
blitzmann
dd78a41171 Fix HTML export (more encoding stuff). Also fix old bug in which unicode fit names don't display correctly in the webbrowser. #1411 2018-02-23 00:13:14 -05:00
blitzmann
201fb4e241 Remove all encoding bits from fit importing. Might not work 100% of the time, but as 2.0 gets introduced to the community, we'll get reports of possible problems. #1410 2018-02-23 00:00:53 -05:00
blitzmann
8abd25fe40 Use a scolled window in preference pages 2018-02-19 23:32:44 -05:00
blitzmann
d59c897921 Fix image list in preferences dialog 2018-02-19 01:20:57 -05:00
Ryan Holmes
cb89d13d9f Merge pull request #1409 from pyfa-org/bug/1403
Remove some defunct items from market service
2018-02-19 00:16:42 -05:00
blitzmann
a1aa78adc0 Remove some defunct items from market service 2018-02-18 23:28:17 -05:00
blitzmann
4bbbd33917 Return 0 instead of -1 when there is no charge on a weapon. It was changed from None to -1 during the py3 conversion (as None can no longer be compared against non-None types). -1 was throwing the capSim off by quite a bit. See #1405 2018-02-18 22:55:31 -05:00
blitzmann
42ccc53166 bit of clean up for reload setting 2018-02-18 20:35:46 -05:00
blitzmann
35ad21da38 Add pattern for commit hashes to update dialog 2018-02-17 16:27:12 -05:00
blitzmann
72efef818f Fix version stuff 2018-02-17 13:59:19 -05:00
blitzmann
5571bae8b2 Fix situation in which event propagation was not working properly for structures 2018-02-17 12:47:07 -05:00
blitzmann
8b2cfe44f2 Merge remote-tracking branch 'origin/master' into test-3
# Conflicts:
#	config.py
#	eos/saveddata/fighter.py
2018-02-17 12:31:58 -05:00
Ryan Holmes
5ea7215ec0 Merge pull request #1400 from pyfa-org/release/v1.35.1
Release/v1.35.1
2018-02-17 12:28:48 -05:00
blitzmann
e2ac90a040 Bump release 2018-02-17 12:27:12 -05:00
blitzmann
6ab84240a2 Add missing effect for scram script for standup warp disruptor. Update database to make sure everything is updated. 2018-02-17 12:22:35 -05:00
blitzmann
12a526fa9e Fix for some standup fighter errors 2018-02-17 11:59:51 -05:00
blitzmann
82e3db1ffb Centralize version string getting. Still trying to work out how we should handle automatic version increments so we don't have to modify files all the time. Remove version file from repo (should only be a thing when building binaries) 2018-02-17 11:10:42 -05:00
blitzmann
e779bb84e2 Fix for #1383. Due to the changed mechanics of None in py3, getModifiedItemAttr was defaulted to 0 instead of None. This adds an explicit default of None when trying to find the allowed drone group attribute 2018-02-17 10:53:29 -05:00
BlueShanks
bd0fcbef3a Fixed style issues which were throwing errors
The code was failing an automatic test because of style issues, which are hopefully fixed now
2018-02-17 18:26:00 +10:00
blitzmann
0456cb2f96 Merge remote-tracking branch 'origin/master' into test-3 2018-02-16 22:26:10 -05:00
blitzmann
cafd92f169 add a todo 2018-02-16 22:26:02 -05:00
blitzmann
05f08970c9 fix character editor not spawning on OSX 2018-02-16 20:40:51 -05:00
Ryan Holmes
f66485c48a Merge pull request #1396 from pyfa-org/bug/citadels
Bug/citadels
2018-02-16 17:42:50 -05:00
Ryan Holmes
2153c05183 Merge branch 'master' into bug/citadels 2018-02-16 17:42:03 -05:00
blitzmann
f66c36e42b disable tests preventing branch from passing tox 2018-02-16 17:32:45 -05:00
DarkPhoenix
8771de9c1f Fix retribution rof effect 2018-02-16 23:03:51 +03:00
blitzmann
fa3cf90421 add / update effects for citadels 2018-02-16 00:44:26 -05:00
blitzmann
636ee1de23 Get new Standup fighters working 2018-02-15 22:26:42 -05:00
blitzmann
b36bf8fb21 Fix issue restricting structure modules from fitting onto a structure 2018-02-15 21:03:25 -05:00
blitzmann
55ad52919e Add missing Ishkur effect (drone tracking) 2018-02-15 20:09:50 -05:00
blitzmann
0648feaa7b Handle a couple of group renamings 2018-02-15 20:07:57 -05:00
blitzmann
e16ae88ed9 Fix the item diff script not looking at all items needed 2018-02-15 20:07:06 -05:00
BlueShanks
c5c673e360 moved a line back to where it was
results in a net smaller diff
2018-02-16 00:46:51 +10:00
BlueShanks
5cd21da7b1 Character Editor: accept skill plans in Roman numerals too 2018-02-16 00:19:56 +10:00
blitzmann
da0f89ef91 Merge commit 'refs/tags/v1.35.0^{}' into test-3 2018-02-14 22:25:45 -05:00
blitzmann
efc3f1ba7d Don't display console for windows application 2018-02-14 22:23:42 -05:00
Ryan Holmes
8d7f0b56f1 Merge pull request #1382 from pyfa-org/release/v1.35.0
Release/v1.35.0
2018-02-14 22:19:46 -05:00
blitzmann
89b6e8f8c3 fix tox stuff 2018-02-14 22:15:48 -05:00
blitzmann
c6e715aa5c Merge branch 'master' into test-3 2018-02-14 22:07:33 -05:00
blitzmann
0e93136157 Merge branch 'release/v1.35.0' 2018-02-14 22:07:20 -05:00
blitzmann
89c84aac96 update effect headers, add some icons, update DB to final 1248987 2018-02-14 22:05:55 -05:00
blitzmann
649ba9f3e4 Merge branch 'master' into singularity 2018-02-14 21:31:54 -05:00
blitzmann
2d38fd4773 Update to tq 2018-02-14 01:30:24 -05:00
blitzmann
23f0f48c80 Use a special dev database for py3 branch 2018-02-14 01:16:49 -05:00
Ryan Holmes
6254fa3e23 Merge pull request #1380 from pyfa-org/bug/1377
Add stacking penalties to dromi fighters
2018-02-12 23:35:40 -05:00
blitzmann
8686c02b1f Add stacking penalties to dromi fighters 2018-02-12 23:33:16 -05:00
blitzmann
fe1c4cc4d4 Make a callback for token refresh, not sure how I'm gonna handle this one yet 2018-02-12 21:43:23 -05:00
blitzmann
ed649dd4c7 Merge branch 'test-3' into esi 2018-02-11 23:23:30 -05:00
blitzmann
33618f12f7 Fix issue when error happens before wx is even initialized traceback is never set 2018-02-11 23:22:37 -05:00
blitzmann
33eccaa374 Merge branch 'test-3' into esi
# Conflicts:
#	requirements.txt
2018-02-11 23:17:50 -05:00
blitzmann
5f0ce58c29 Merge branch 'master' into test-3
# Conflicts:
#	gui/builtinShipBrowser/fitItem.py
#	service/port.py
2018-02-11 21:29:17 -05:00
blitzmann
c329f5eeb8 Bump up the wxPython requirement to 4.0.1 2018-02-11 21:22:35 -05:00
blitzmann
320a0230f4 fix version data file in mac spec file 2018-02-11 12:32:34 -05:00
blitzmann
d94d49f0a9 Add misc column to booster panel, and show booster duration 2018-02-10 20:45:26 -05:00
Ryan Holmes
9bfc5b35b6 Merge pull request #1378 from pyfa-org/bug/1377
Fix for #1377 - group up support fighters and modify the bonus based …
2018-02-10 14:14:57 -05:00
blitzmann
0f30ea554d Fix for #1377 - group up support fighters and modify the bonus based on amount active 2018-02-10 14:14:31 -05:00
blitzmann
50dd74dbe8 Add packaging requirement, and use it's PEP 440 version parsing for version comparisons. 2018-02-10 00:59:25 -05:00
blitzmann
9c355d8f96 update requirements 2018-02-09 18:53:14 -05:00
blitzmann
7b0f672f04 Get encrypted refresh tokens working 2018-02-09 18:25:53 -05:00
blitzmann
33bf5234d0 Goodbye eveapi! You have served us well all these years!
Start stripping XML API stuff and implement ESI skill fetching.
2018-02-09 00:42:59 -05:00
blitzmann
cb392e7e5f Rename a few things 2018-02-08 01:52:38 -05:00
blitzmann
dfba033190 Implement posting fit to EVE server 2018-02-08 01:50:52 -05:00
blitzmann
5fbe623ae6 get fit deletion working. Need to be aware that we are still using cached fit listing... 2018-02-08 01:38:24 -05:00
blitzmann
e025bff99b Get ESI fitting import working completely. Use a file cache for EsiApp to prevent long startup times (possibly cache for about a week or so, and start in background if it needs to be gotten again?) 2018-02-08 01:24:40 -05:00
blitzmann
e77dddc15b More work on getting fittings form a character via ESI. It's starting to be come a pain working with this client with having to background it until it initializes. Thinking about rolling my own, considering we only need a few calls and not a whole package. 2018-02-07 02:07:42 -05:00
blitzmann
eea8019593 Get fitting browser to show up with proper characters (still not functional). Start testing ways to store the esipy app on the service (it can take a few seconds to initialize due to network calls) 2018-02-07 01:21:22 -05:00
blitzmann
c7360c8cc3 Get logging into EVE working and SSO characters saving, along with client hashes being stored alongside characters. 2018-02-07 00:44:37 -05:00
Ryan Holmes
f81179db4b Merge pull request #1374 from pyfa-org/bug/1355
Fix for #1355 - we were not properly deleting the fit from the list b…
2018-02-06 00:37:56 -05:00
blitzmann
2d7eed4aac Fix for #1355 - we were not properly deleting the fit from the list being passed into the Import event (which the history functionality piggy backs on). This also fixes the same bug with the import list. 2018-02-06 00:36:57 -05:00
blitzmann
96828a5611 Add assualt damage control effect 2018-02-05 23:12:58 -05:00
blitzmann
8a0f8ae609 Add module renames from singularity 2018-02-05 22:52:24 -05:00
Ryan Holmes
ac8f805fcb Merge pull request #1373 from pyfa-org/bug/1372
Add stacking penalty to Fighter's MWD ability
2018-02-05 22:46:37 -05:00
blitzmann
9f3c2ca7a8 Add stacking penalty to Fighter's MWD ability 2018-02-05 22:34:25 -05:00
blitzmann
2376148380 Start ripping CREST stuff out, add new SSOCharacter stuff in. Long process ahead. 2018-02-02 02:05:49 -05:00
blitzmann
2e8d7d3610 add markdown2 to requirements.txt 2018-02-01 23:09:08 -05:00
blitzmann
3179016aed Enhance the update modal to show a web view with html-rendered markdown of release ntoes 2018-02-01 21:58:29 -05:00
Ryan Holmes
514db91d7a Merge pull request #1367 from burnsypet/issue-1360
Remove energy warfare resistance on capNeed calc
2018-01-31 23:50:44 -05:00
Ryan Holmes
269d3f326d Update ISSUE_TEMPLATE.md 2018-01-31 23:10:27 -05:00
Ryan Holmes
b04fcb0d15 Merge pull request #1366 from burnsypet/issue-1362
Include service modules in EFT export
2018-01-31 22:59:44 -05:00
blitzmann
a29b3da8a6 Update DB and effects 2018-01-30 00:05:11 -05:00
blitzmann
18a5e35e80 Merge commit 'refs/tags/v1.34.0^{}' into singularity
# Conflicts:
#	eve.db
#	gui/builtinViewColumns/misc.py
2018-01-29 23:34:24 -05:00
burnsypet
3072dbb3ff Remove energy warfare resistance on capNeed calc
When calculating the capactitor need of an energy nosferatu the
amount was being modified incorrectly by the energy warfare
resistance of the ship. Change to only apply energy warfare
resitance modifier if this is a projected effect.
2018-01-26 14:48:35 +00:00
burnsypet
b103f0df7e Include service modules in EFT export
Change to service/port.py to include Slot.SERVICE in export
Also fixes a crash when attempting to export citadel with service
modules to CREST
2018-01-26 13:53:07 +00:00
blitzmann
9e8166c13d Add ESI service skeleton, and my customer ESI Proxy class 2018-01-11 20:54:33 -05:00
blitzmann
9f7e4e0dc0 Fix issue with market search (None / int comparison) 2018-01-10 21:39:50 -05:00
blitzmann
29d175c7b3 Fix for error that happens when switching to/from firepower/mining 2018-01-10 00:51:21 -05:00
Ryan Holmes
0c971a127c Fix loggerhead drone bonus (#1348) (#1358) 2018-01-02 01:43:55 -05:00
blitzmann
40ce7b7c0b Merge branch 'master' into test-3
# Conflicts:
#	.gitignore
#	eos/saveddata/character.py
#	service/network.py
#	service/price.py
2017-12-10 22:36:15 -05:00
Ryan Holmes
a8060a5e15 Merge pull request #1347 from pyfa-org/release/v1.34.0_3
Release/v1.34.0 3
2017-12-10 18:17:21 -05:00
blitzmann
cc063d1934 Bump release 2017-12-10 18:07:45 -05:00
blitzmann
531721ef5e Merge branch 'master' into development 2017-12-10 16:25:20 -05:00
blitzmann
2936b88c3d code cleanup 2017-11-27 21:05:06 -05:00
blitzmann
2365112292 Some file cleanup 2017-11-26 18:36:20 -05:00
blitzmann
1daef5354d remove old wx test file 2017-11-26 18:31:48 -05:00
blitzmann
6f19d45c6d fix mac spec 2017-11-26 18:29:03 -05:00
blitzmann
ac7908c62c rearrange spec files 2017-11-26 18:15:33 -05:00
blitzmann
c000b19986 Finish pulling all the cruft out of pyfa.py relating to logging and error handling. All that is now done in separate areas.
Also finally did some major reworking on the error dialog. Now it doesn't spawn a new wxApp and wxFrame for each and every error - attaches to MainFrame and sticks around, having exceptions append to it rather than spawn a new one. In the case that an error happens before MainFrame is available, it spins up a new wxApp. Yay cleanup!
2017-11-26 03:57:00 -05:00
blitzmann
1da127c898 Working commit to better handle errors 2017-11-26 01:54:36 -05:00
blitzmann
fcdf55632f working commit to try to clean up pyfa.py and re-implement version checking 2017-11-26 01:08:02 -05:00
blitzmann
dd3bc66896 Remove old py<2.6 OrderedDict compat module 2017-11-25 22:40:23 -05:00
blitzmann
da67cdba9b Get a mailmap working for properish tracking of authors 2017-11-25 20:34:03 -05:00
blitzmann
8850da6cdb OS X bundling puts it all into one file, which is extracted. We need to make sure the script knows of the actual path 2017-11-25 20:11:05 -05:00
blitzmann
7d46d7e22d fix crash dealing with CREST fitting window's cache timer 2017-11-25 17:31:19 -05:00
blitzmann
b3157303cd Reenable error dialog and remove versioning info - want to look into a more uniform way of doing this if possible, and the requirements are all changing. 2017-11-25 13:49:48 -05:00
blitzmann
65e17119af Deprecation fix 2017-11-25 13:12:26 -05:00
blitzmann
f7b509f9a9 code styling 2017-11-25 04:04:13 -05:00
blitzmann
dea775058d * Try other price sources if user's preferred fails (#1342)
* Handle cached prices better when eve-marketdata returns 0 for lack of price data (#1334)
2017-11-25 02:50:46 -05:00
blitzmann
3c405f51d8 Remove platform-specific CREST checks (add for mac-deprecated client) 2017-11-24 17:27:44 -05:00
blitzmann
337f0a9c8a Fix stretchspacers 2017-11-24 17:23:04 -05:00
blitzmann
53936a3e66 Fix additional panel note toggling correctly 2017-11-24 12:44:00 -05:00
blitzmann
30a6e29b39 Fix slight sizing issue with toggle panel header arrow 2017-11-24 12:30:46 -05:00
blitzmann
f3dc3bc654 Fix tabs not disabling. It was primarily an issue with event propagation not being handled correctly, as well as some missing helper code in chrome_tabs 2017-11-24 12:22:21 -05:00
blitzmann
0a935cf149 fix gtk warnings 2017-11-24 02:02:09 -05:00
blitzmann
5697da7ec2 fix upgrade 2017-11-24 01:23:04 -05:00
blitzmann
a7086b78cb Fix an issue with with Cap Power Relay using an effect without an expecting source attribute. Used to work, but with changes to getModifiedItemAttr need to default these to None 2017-11-24 00:55:23 -05:00
blitzmann
e032c9c5b1 fix item stats dialog 2017-11-23 22:48:37 -05:00
blitzmann
46b0aded03 fixes 2017-11-23 22:43:41 -05:00
blitzmann
d23398ce29 fix for boosters 2017-11-23 20:51:03 -05:00
blitzmann
5e0a5da6d5 more post-merge work 2017-11-23 12:51:43 -05:00
blitzmann
6e112b9ed5 Fix issues with merge 2017-11-23 11:38:08 -05:00
blitzmann
b30b3fcbf1 Merge branch 'master' into test-3
Conflicts:
	eos/gamedata.py
	eos/saveddata/booster.py
	eos/saveddata/character.py
	gui/builtinAdditionPanes/commandView.py
	gui/builtinContextMenus/commandFits.py
	gui/builtinMarketBrowser/itemView.py
	gui/builtinMarketBrowser/marketTree.py
	gui/builtinPreferenceViews/pyfaGeneralPreferences.py
	gui/builtinShipBrowser/categoryItem.py
	gui/builtinShipBrowser/fitItem.py
	gui/builtinShipBrowser/navigationPanel.py
	gui/builtinShipBrowser/raceSelector.py
	gui/builtinShipBrowser/shipItem.py
	gui/builtinStatsViews/priceViewFull.py
	gui/builtinViews/fittingView.py
	gui/characterEditor.py
	gui/characterSelection.py
	gui/chromeTabs.py
	gui/crestFittings.py
	gui/itemStats.py
	gui/mainFrame.py
	scripts/itemDiff.py
	service/price.py
2017-11-23 11:19:05 -05:00
Ryan Holmes
455fea75c0 Merge pull request #1341 from pyfa-org/bug/1335
Bug/1335
2017-11-22 23:22:53 -05:00
blitzmann
bd181559ed Don't show Side Effects menu if there are no side effects (eg: Synths) 2017-11-22 23:19:03 -05:00
blitzmann
967128cb69 Added missing effect for shield booster penalty on crash 2017-11-22 23:16:28 -05:00
blitzmann
5fa43138b3 Merge branch 'master' into development
Conflicts:
	config.py
2017-11-22 23:06:36 -05:00
blitzmann
f0baba10df Update effects 2017-11-22 23:04:32 -05:00
blitzmann
7058018aed Fix alpha clones 2017-11-22 21:51:40 -05:00
blitzmann
d45d7204d2 Merge branch 'release/v1.33.2' into development
Conflicts:
	config.py
2017-11-22 21:51:19 -05:00
Ryan Holmes
b596447095 Fix issue with deleting a fit while having certain other fits open (#1339) (#1340)
Also, bump dev version
2017-11-22 21:44:15 -05:00
blitzmann
25df05a15d Clean up alpha clones for December 2017 release - also runs a few sanity checks to make sure that CCP doesn't forget to include a skill in one of the races 2017-11-22 21:42:25 -05:00
blitzmann
4a33365195 Add some debug and fix indentation issue causing fit deletion to crash open fittings views 2017-11-22 01:45:31 -05:00
blitzmann
5d5646df79 Fix BlankPage having binding issue 2017-11-22 01:45:06 -05:00
blitzmann
405a965046 Fix issue with loading fighters 2017-11-22 01:44:48 -05:00
blitzmann
4138088d4a Do not create a new fitting view every time we switch fits. 2017-11-21 23:46:50 -05:00
blitzmann
de44e6f932 Get rid of some annoying messages 2017-11-21 23:46:33 -05:00
blitzmann
d4df989427 Remove handlers from unbind (see https://github.com/wxWidgets/Phoenix/issues/624) 2017-11-21 23:04:51 -05:00
blitzmann
6c8b143936 Tentative .spec file for linux 2017-11-21 00:32:45 -05:00
blitzmann
0f94557699 Use wx.AutoBufferedPaintDC instead of wx.BufferedPaintDC (helps with drawing on linux) 2017-11-21 00:05:52 -05:00
blitzmann
a52b9e58e9 Testing some stuff out 2017-11-18 19:01:05 -05:00
blitzmann
0d8904d59f Fix None comparison operation 2017-11-16 01:35:26 -05:00
blitzmann
d956cb7861 use a different image to denote changed skills 2017-11-16 01:31:28 -05:00
blitzmann
e848cec815 Fix dirty skill indicator (* instead of blue text). Need to get a different icon working for those. Remove debugging prints() 2017-11-16 01:20:38 -05:00
blitzmann
ce8f1d385d Better fix for broken Entity Editor Validation 2017-11-15 21:43:36 -05:00
blitzmann
90e338b969 Fix for broken Entity Editor Validation 2017-11-14 00:07:12 -05:00
blitzmann
1978f5cb92 Test validator stuff 2017-11-13 22:45:12 -05:00
blitzmann
979bc494f0 deprecation 2017-11-13 22:29:58 -05:00
blitzmann
cc9b6ea04b More deprecation fixes 2017-11-13 00:18:24 -05:00
blitzmann
8cbb327659 Fix bug that caused race image to not appear in fitting tab 2017-11-12 23:58:30 -05:00
Ryan Holmes
2f6e306f8e Merge pull request #1336 from pyfa-org/release/v1.33.2
Release/v1.33.2
2017-11-12 16:59:03 -05:00
blitzmann
065747f425 bump release 2017-11-12 16:54:28 -05:00
blitzmann
c4f41fb5fa Update to 1209099 and rename old komodo skill 2017-11-12 16:52:56 -05:00
Ryan Holmes
e4f3ed05cc Merge pull request #1328 from burnsypet/wcs-display
Display warp core strength on warp speed tooltip
2017-11-12 15:38:25 -05:00
Ryan Holmes
0e84d6c557 Merge branch 'development' into wcs-display 2017-11-12 15:34:17 -05:00
blitzmann
c384848870 Merge branch 'master' into development
Conflicts:
	config.py
2017-11-12 15:33:59 -05:00
blitzmann
1fc9b2941d Add spac file for mac 2017-11-12 13:43:19 -05:00
blitzmann
e9be07f281 Rename pyfa.spec to pyfa-win.spec 2017-11-12 13:17:16 -05:00
blitzmann
df7dc30e7e Write out git version information to a file, use in about box, remove all the other stuff until I can format it correctly 2017-11-12 13:13:38 -05:00
blitzmann
d0235f6d93 Fix market browser meta filtering 2017-11-12 12:00:24 -05:00
blitzmann
de646cf252 Have a noticeable message show up (currently prints for everything, should restrict to only beta builds) 2017-11-12 02:30:15 -05:00
blitzmann
21838f2d9a Fix issue with pyinstaller not bundling required DLLs when building on Windows 10 / Python >= 3.5 2017-11-12 02:15:15 -05:00
blitzmann
266398b1de Get some things working for pyinstaller 2017-11-12 00:14:45 -05:00
blitzmann
0cc646bab9 Fix gauge resetting to 0 each time (should figure out how to utilize the existing set range and value, but for now this works) 2017-11-05 02:29:58 -05:00
blitzmann
cebca64e5e Fix CREST stuff 2017-11-05 01:43:39 -05:00
blitzmann
bd0de82a8e remove repo version of FloatSpin, go with wx bundled version 2017-11-05 01:10:22 -05:00
blitzmann
0f5ae8d9b6 Fix delete fix (renamed MiddleDown to MiddleIsDown) 2017-11-05 01:03:14 -05:00
blitzmann
5ae7805bb1 Fix ammo picker 2017-11-05 01:54:19 -04:00
blitzmann
6a382c4445 More tweaks to getModifiedItemAttr and fix deprecation warning 2017-11-05 01:51:19 -04:00
blitzmann
3b0c8b6117 Fix Racks having a CPU and Power value of 0 2017-11-04 18:32:26 -04:00
blitzmann
0e1e4cad6d Fix a few more deprecation warnings 2017-11-04 18:24:18 -04:00
blitzmann
e0b92198b0 Fix deprecation warnings 2017-11-04 18:20:54 -04:00
blitzmann
ce3b94696a Make sure getModifiedItemAttr always returns an int, unless otherwise wanting None
In py2, you could compare None to an int and it would always be less than. Unfortunately in py3, this is no longer the case. Returning getModifiedItemAttr as 0 allows us to not do a huge refactor.
2017-11-04 18:20:00 -04:00
oaao
cacf286176 [fix] eos - remove Komodo thermalDamage double-dipping 2017-11-02 04:41:57 -04:00
burnsypet
a02bbe3964 Removed traces 2017-11-01 23:31:17 +00:00
burnsypet
866d410695 Added logic for WDFG MWD scrambling 2017-11-01 23:27:34 +00:00
burnsypet
ea6f31c021 Added disruption effect for WDFG 2017-11-01 22:55:05 +00:00
burnsypet
d522fff511 Add projected warp strength to scrams
Changes to effects:
Added warp strength projected effects to all kinds of warp disruption
modules except for WDFG (this will need some more thinking). Fixed
a bug where warp disruptors appeared to reduce the warp strength of
the ship they were fitted to

Changes to targetingMiscView*.py:
Replaced abs() with multiplication by -1 where appropriate
2017-10-30 21:05:46 +00:00
Ryan Holmes
ca27cd3250 bump stable release (#1329) 2017-10-29 18:54:46 -04:00
burnsypet
20a1618e41 Display warp core strength as warp speed tooltip
Changes to antiwarpscramblingpassive.py:
Fixed a typo of "warmScrambleStatus" to "warpScrambleStatus"

Changes to targetingMiscViewMinimal.py:
Extended existing tooltip to include warp core strength. Warp core
strength is none for ships that do not have a hull bonus (venture etc.)
or do not have any warp core stabs fitted so logic is added to
default value to 0.

Changes to targetingMiscViewFull.py:
As above.
2017-10-29 20:40:39 +00:00
Alex
2830729cb4 Merge pull request #1 from pyfa-org/master
Updating fork with bugfixes from master
2017-10-29 20:21:34 +00:00
Ryan Holmes
c0e15f61c6 Merge pull request #1322 from burnsypet/issue-1315
Stop applying neut resistance twice
2017-10-29 15:27:27 -04:00
blitzmann
4355f35eef Revert "Stop applying neut resistance twice" and instead remove the resistance application from addDrain()
This reverts commit 7b32fe08ac.
2017-10-29 15:07:05 -04:00
Ryan Holmes
029e61edaf Merge branch 'master' into issue-1315 2017-10-29 12:36:29 -04:00
Ryan Holmes
b18f82505b Merge pull request #1327 from pyfa-org/bug1316
Bug1316
2017-10-29 12:25:00 -04:00
blitzmann
f8a65de47f tox fix 2017-10-29 12:23:45 -04:00
blitzmann
e5a0ef1877 Re-work menu spawning for Command and Projected views to be a bit more straightforward and allow spawning up context menu when right clicking the DummyEntry (#1316) 2017-10-29 12:22:15 -04:00
Ryan Holmes
8647fe460c Merge pull request #1326 from pyfa-org/133bugfixes
133bugfixes
2017-10-28 22:44:27 -04:00
blitzmann
a4950e9015 Remove the rifter test as it's not properly mocked out and recent balancing passes have since made it useless 2017-10-28 22:36:00 -04:00
blitzmann
82d50cfa0d Fix effect that used to only be for skill, but is now for a booster (#1324) 2017-10-28 21:04:51 -04:00
blitzmann
efea46006a Better include all missiles in the MISC column (#1325) 2017-10-28 20:37:29 -04:00
blitzmann
d9800dcf19 Fix some effects for #1320 2017-10-28 19:45:09 -04:00
blitzmann
266b3ce985 Set Victor and Virtuso to not published, and fix bug which allowed user fits to return in search even if ship isn't published (#1310) 2017-10-28 19:25:19 -04:00
blitzmann
3b61a07c55 Fix for #1321 - make sure we have attribute on ship 2017-10-28 19:25:15 -04:00
blitzmann
5dc092ace5 bump dev 2017-10-28 19:25:10 -04:00
burnsypet
7b32fe08ac Stop applying neut resistance twice
Energy neut/nos resistance was being applied twice when a nos or
neut is projected onto a fit. I have removed the redundant resistance
application in energyneutralizerfalloff.py and also in
energynosferatufalloff.py as they are already being applied once in
eos.saveddata.fit.addDrain.
2017-10-26 17:53:16 +01:00
Ryan Holmes
fd6e318ae3 Release/v1.33.0 (#1319)
* update database file to SISI 1202899

* Effect and group renaming

* Add civilian modules (#1308)

* Add new effects

* update effect headers

* update database to tq - lifeblood (1203953)

* Update renders

* Update icons

* bump version

* fix tox errors

* change up tox config to ignore E722

* more tox ignores

* Try disabling tests for now. Rifter stats changed, causing breakage. This is why we need properly mocked data, not crap straight from the database.

* Try this

* more testing

* Fuck it, disable branch protection until I can evaluate the test failures and what needs to be done to get them back on the path
2017-10-25 23:33:05 -04:00
blitzmann
504c395ea2 Add civilian modules (#1308) 2017-10-22 16:18:35 -04:00
blitzmann
9ed210d5b5 Effect and group renaming 2017-10-22 16:03:21 -04:00
blitzmann
c7f0f6215a update database file to SISI 1202899 2017-10-22 15:57:17 -04:00
Ryan Holmes
34c692c972 Use unicode string to prevent non-ASCII ship names from causing error (#1317) 2017-10-21 22:04:40 -04:00
blitzmann
56f34873a6 bleh 2017-10-08 22:51:06 -04:00
Ryan Holmes
b4dfcf53fb Merge pull request #1303 from burnsypet/issue-1289
Change how skillsMap is generated
2017-10-08 21:42:40 -04:00
Ryan Holmes
3c26676b66 Merge branch 'master' into issue-1289 2017-10-08 21:30:53 -04:00
Ryan Holmes
3fb7411b9d Issue/1305 (#1311)
* Bump dev version

* fix issue in itemDiff

* Do not apply Prop Jamming to Grapplers (#1305)
2017-10-08 21:13:38 -04:00
burnsypet
cac8e528a3 Change how skillsMap is generated
Changes to characterSelection.py:
grantMissingSkills now uses _buildSkillsTooltipCondensed to
generate a list of skills to update
_buildSkillsTooltipCondensed now outputs level and ID rather than
just level so that it can be used by grantMissingSkills
Anything else using _buildSkillsTooltipCondensed like exportSkills
and fitChanged have been amended to extract just the level from
the skills map rather than level and ID
2017-09-26 18:22:24 +01:00
blitzmann
2afc8b1abe Get rack headers bold again (courtesy of @RobinD42 - https://github.com/wxWidgets/Phoenix/issues/525) 2017-09-25 01:58:31 -04:00
blitzmann
06e82a04b4 fix issue in itemDiff 2017-09-25 01:15:14 -04:00
blitzmann
782df18501 Bump dev version 2017-09-24 18:23:01 -04:00
blitzmann
a87d659e5d Merge remote-tracking branch 'origin/master' into development 2017-09-24 18:20:53 -04:00
blitzmann
cd35c9319c Merge branch 'development' of https://github.com/pyfa-org/Pyfa into development 2017-09-24 18:20:26 -04:00
Ryan Holmes
dfe3d5c82a Update forum references (#1301) 2017-09-24 18:00:21 -04:00
blitzmann
ccd8cdd099 Update forum references 2017-09-24 17:54:19 -04:00
Ryan Holmes
72062e6213 Release/1.32.0 (#1300)
* update database

* update effect headers

* Bump version
2017-09-24 16:43:51 -04:00
Ryan Holmes
10836acab2 Bug/1275 (#1299)
* Add stacking penalties to the max targeting range bonus of the Info Command Burst : Sensor Optimization

* Move Information Burst: Sensor Optimization: Targeting Range effect to proper position

* Fix tox issue
2017-09-24 13:38:52 -04:00
Ryan Holmes
08ab8fbc5b Make sure efxBmp is created (#1265) (#1298) 2017-09-24 13:29:57 -04:00
Ryan Holmes
da5aaf2f78 Feature/evemarketdata (#1297)
* Add preliminary support for eve market data

* Break out market sources into their own classes and register them onto the price service. Create preference option to select which source user wants. Default to eve central

* fix tox stuff
2017-09-23 19:39:38 -04:00
Ryan Holmes
4484b68a3a Fix for #1260 - need to unbind event handling from frame when closed (#1296) 2017-09-23 19:15:03 -04:00
Ryan Holmes
81fce93186 Merge pull request #1294 from pyfa-org/bug/1263
Bug/1263
2017-09-23 13:18:01 -04:00
Ryan Holmes
d58987e427 Merge branch 'master' into bug/1263 2017-09-23 12:56:29 -04:00
Ryan Holmes
05a5ebff00 Merge pull request #1293 from pyfa-org/bug/1278
Bug/1278
2017-09-23 12:56:13 -04:00
blitzmann
2f28afc7ae Merge branch 'bug/1278' of https://github.com/pyfa-org/Pyfa into bug/1278 2017-09-23 12:49:05 -04:00
blitzmann
0134c3b9a1 Fix formatting 2017-09-23 12:33:51 -04:00
Ryan Holmes
9f433fd072 Merge branch 'master' into bug/1278 2017-09-23 03:11:04 -04:00
blitzmann
7729bd9210 Opps commented wrong thing 2017-09-22 02:35:01 -04:00
blitzmann
ce5803dd9c Disable an odd bit of code from a long time ago that fitting max group fitting restrictions to be bypassed (#1278) 2017-09-22 02:33:46 -04:00
blitzmann
821ede8579 Do the same thing for damage patterns as we did for character for global setting 2017-09-22 02:08:53 -04:00
blitzmann
592f9a2298 Trigger a recalc on fit switching if the characters are not the same and the global character flag is set. 2017-09-22 02:01:27 -04:00
blitzmann
c30c07b91c fix tox stuff 2017-09-21 21:21:14 -04:00
Ryan Holmes
73d9dd60e6 Don't return None as a price, always return a float (#1291) (#1292) 2017-09-21 21:13:05 -04:00
blitzmann
dbdbe155f3 Merge branch 'feature/evemarketdata' into development 2017-09-21 21:12:42 -04:00
blitzmann
7d41260863 Break out market sources into their own classes and register them onto the price service. Create preference option to select which source user wants. Default to eve central 2017-09-21 20:50:37 -04:00
blitzmann
d53ff0f502 Add preliminary support for eve market data 2017-09-21 00:10:33 -04:00
Ryan Holmes
f37f4573bf Add missing effect (#1290) 2017-09-20 00:11:32 -04:00
Ryan Holmes
ee392e07c4 Fixes (#1288)
* Provide correct text formatting index

* Fix remove item context menu in projected pane
2017-09-19 19:20:10 -04:00
Ryan Holmes
59b09a255a Fix override importing (and possibly some other bugs revolving around this?) (#1285) 2017-09-18 23:28:39 -04:00
Ryan Holmes
3e73c2eb34 Fix setting implant set for character implants (#1284) 2017-09-18 20:36:41 -04:00
Ryan Holmes
3625b4395a Merge pull request #1272 from burnsypet/issue-1264
Issue #1264 Don't attempt PopupMenu if getMenu returned False
2017-09-18 20:12:34 -04:00
Ryan Holmes
1444a24e70 Merge branch 'master' into issue-1264 2017-09-18 20:04:09 -04:00
Ryan Holmes
73dfa25ef0 Merge pull request #1282 from burnsypet/issue-1280
Convert booster attribute to value before applying
2017-09-18 19:25:32 -04:00
burnsypet
a01284ff1c Convert booster attribute to value before applying
Changes to boostermissilevelocitypenalty.py:
Get booster attribute value using booster.getModifiedItemAttr()
before attempting to apply it to avoid type error
2017-09-14 21:53:53 +01:00
burnsypet
8cc81cebdd Don't attempt PopupMenu if getMenu returned False
Change to characterEditor.py:
Added logic to prevent a crash when attempting to execute
self.PopupMenu(menu) when menu was False. This would occur in the
situation where there were no saved implant sets.
2017-08-19 18:47:58 +01:00
Ryan Holmes
c33aeb7275 Merge pull request #1270 from pyfa-org/release/v1.31.0
Release/v1.31.0
2017-08-16 20:57:04 -04:00
blitzmann
c0237905b6 Ignore F401 warning (# noqa: E402, F401 isn't being honored ion Travis??) 2017-08-16 20:50:18 -04:00
blitzmann
eda6d738a4 fix some whitespace stuff, update database, effect headers, and release version 2017-08-16 20:39:26 -04:00
blitzmann
eef3b420a9 Merge branch 'burnsypet-issue-1241' into development 2017-08-16 20:36:38 -04:00
burnsypet
caef752a74 Bind contextHandler to children of contentPanel
Changes to statsPane.py:
Added new method applyBinding which loops through all the children
of the contentPanel passed to it and binds contextHandler to each of them

Changes to miningyieldViewFull.py:
Call to new method applyBinding
2017-08-16 22:54:32 +01:00
blitzmann
e13bd7af52 Merge branch 'development' of https://github.com/pyfa-org/Pyfa into development 2017-08-15 21:52:16 -04:00
Ryan Holmes
c263575788 Merge pull request #1262 from burnsypet/issue-1261
Issue #1261 show variations menu for cargo items
2017-08-15 21:51:50 -04:00
Ryan Holmes
5bd80d3d06 Merge pull request #1267 from w9jds/input-fix
Amounts window crashes pyfa if you paste with characters
2017-08-15 21:47:22 -04:00
blitzmann
47cbc71e8a Implement simple skill import/export functionality, and some cleanup top pass tox 2017-08-14 23:28:50 -04:00
blitzmann
fdba8d147f Merge remote-tracking branch 'petosorus/master' into development 2017-08-14 22:22:47 -04:00
Jeremy Shore
4720b611b0 Support Decimals 2017-08-14 15:48:18 -05:00
blitzmann
1f43410780 Merge branch 'qol/file-reorg' into development 2017-08-13 21:20:20 -04:00
blitzmann
ead595e666 Allow burst projector to be projected 2017-08-13 21:19:55 -04:00
Jeremy Shore
89cf40423b Fixed issue crashing pyfa when pasting from calculator with commas 2017-08-13 01:54:59 -05:00
burnsypet
95d6944298 Merge branch 'issue-1261' of https://github.com/burnsypet/Pyfa into issue-1261
Conflicts:
	gui/builtinContextMenus/metaSwap.py
2017-07-30 21:35:59 +01:00
burnsypet
a3c19d1d1c Issue #1261 show variations menu for cargo items
Added logic to condition statement in metaSwap.py to accomodate
cargoItem context. Will replace existing cargo item with selected
item and retain the original stack amount.
2017-07-30 21:34:21 +01:00
burnsypet
88185cb886 Issue #1261 show variations menu for cargo items
Added logic to condition statement in metaSwap.py to accomodate
cargoItem context. Will replace existing cargo item with selected
item and retain the original stack amount.
2017-07-30 21:18:47 +01:00
blitzmann
7962aa7b1b Reorganize file structure of item stats dialog box 2017-07-23 17:55:18 -04:00
Ryan Holmes
220ce23e8f Merge pull request #1254 from pyfa-org/bug-1246
Bug 1246 fix
2017-07-15 21:57:54 -04:00
blitzmann
66752b2cbf Fix cargo bonus for Covert subsytems (#1246) 2017-07-15 21:51:32 -04:00
blitzmann
f59a65f314 bump dev 2017-07-15 21:49:58 -04:00
blitzmann
725034ebc5 Merge remote-tracking branch 'origin/master' into development 2017-07-11 23:00:50 -04:00
Ryan Holmes
0210020658 Merge pull request #1245 from pyfa-org/release/1.30.0
Release/1.30.0
2017-07-11 19:45:44 -04:00
blitzmann
22dc6512c0 Final updates and bump version :D 2017-07-11 19:39:13 -04:00
blitzmann
709b4524e6 Bump version :D 2017-07-11 19:26:02 -04:00
blitzmann
bc462ede3e Fix some back event reference due to sleepiness last night ;_; 2017-07-11 19:23:29 -04:00
blitzmann
277bd14453 See #1234 - temporarily add conditional to ensure we run the skill level checking code only when a character exists to prevent error. This may cause some issues with the alpha characters since that may not get checked anymore. 2017-07-11 19:23:08 -04:00
blitzmann
59fed2c516 Update to TQ 1164320 2017-07-11 19:09:32 -04:00
blitzmann
d19486ce15 cleanup 2017-07-11 02:30:26 -04:00
blitzmann
b55fcfaf04 cleanup 2017-07-11 02:06:09 -04:00
blitzmann
60e5085724 ohgodwhathaveidone.jpg 2017-07-11 01:50:54 -04:00
blitzmann
5adde95807 Remove print statement 2017-07-11 01:42:45 -04:00
blitzmann
3da0b8bc29 Effect header update 2017-07-11 01:31:02 -04:00
blitzmann
0104e8954a Remove the -dev suffix for the user database 2017-07-11 01:17:30 -04:00
blitzmann
78e065feff Apparently, my IDE settings changed from spaces to tabs. Changing this back :3 2017-07-11 01:13:25 -04:00
blitzmann
30fe7930a9 Remove log spam 2017-07-11 01:10:55 -04:00
blitzmann
453054f6c7 Remove command fitting from the command fits context menu upon deletion (#1244) 2017-07-11 01:10:39 -04:00
blitzmann
231f9a91c2 Do not assume number of columns for damagePatterns, see #1238 2017-07-10 22:46:30 -04:00
blitzmann
c553790eaf move the "generating effect" spam - doesn't need to happen every time the handler is called 2017-07-10 01:48:10 -04:00
blitzmann
f2e8506ea7 Merge remote-tracking branch 'origin/singularity' into development 2017-07-10 01:39:32 -04:00
Ryan Holmes
76b22dfe17 Merge pull request #1243 from wendazhou/singularity-fix-loki-effects
Fix loki effects
2017-07-10 01:39:16 -04:00
blitzmann
1202c335d9 Fix implant set clipboard import (#1237) 2017-07-10 00:28:22 -04:00
blitzmann
f70d671f1d Fix implant set copy (#1236) 2017-07-10 00:21:52 -04:00
blitzmann
1305a1f2b6 Do not get variations by "group" unless the item is part of a set of hard-coded categories. #1232 2017-07-10 00:11:54 -04:00
blitzmann
f5108c34db Do not kill the entire XML import if one fitting fails (#1231) 2017-07-09 19:08:46 -04:00
Ebag333
d553c60b65 Fix errors caused by importing a few "skinned" ships. Patch by ebag. See #1231 2017-07-09 19:08:06 -04:00
blitzmann
be84cf1db7 formatting 2017-07-09 18:59:07 -04:00
blitzmann
854d7cb09c Rename "system effects" to "wormhole effects" (#1229) 2017-07-09 18:35:44 -04:00
blitzmann
b70f401a91 Merge branch 'qol/file-reorg' into development 2017-07-09 18:27:18 -04:00
blitzmann
496b28226d Merge branch 'feature/booster-side-effects' into development 2017-07-09 18:26:38 -04:00
blitzmann
fec7c8fd0b Merge branch 'singularity' into development 2017-07-09 18:26:28 -04:00
blitzmann
f8e5e15051 Fixed bug with meta swap context menu for subsystems 2017-07-09 15:08:59 -04:00
blitzmann
78b273455d Fix up some effects 2017-07-09 14:44:57 -04:00
blitzmann
de35692666 Fix a few things with affected by tab (indentation issue, overwriting modifier incorrectly) 2017-07-09 13:18:28 -04:00
blitzmann
49b2e42d8c Fix subsystem count, requires post processing of data from CCP when building the database... this may be fixed by the time it releases, but maybe not, and I don't want to forget about it 2017-07-09 12:17:07 -04:00
blitzmann
307ccd10e8 Implement migration for t3c configurations 2017-07-09 00:34:12 -04:00
blitzmann
1225f2074a update to 1163182 2017-07-08 21:59:28 -04:00
Wenda Zhou
afee4469f0 fix loki effects to apply correctly 2017-07-07 00:26:38 -04:00
blitzmann
3b716e6e5e fix py2app setup file 2017-07-07 00:22:58 -04:00
blitzmann
961b389b40 test 2017-07-06 23:41:55 -04:00
blitzmann
e9c691575f Fix RR effect 2017-07-05 23:48:44 -04:00
blitzmann
27236feec3 Add new effects 2017-07-03 22:24:27 -04:00
Ryan Holmes
2e598a7ef7 update sisi database 2017-07-03 14:59:28 -04:00
Ryan Holmes
0527a506ac fix broken events preventing additions panels to not work 2017-07-03 01:46:46 -04:00
Ryan Holmes
1082d8a173 fix fix fix 2017-07-02 23:45:28 -04:00
Ryan Holmes
7ae41b71b2 Fix some deprecated things and a bug or two 2017-07-02 23:26:44 -04:00
Ryan Holmes
de5a734919 About dialog (looks like shit x_x) 2017-07-02 16:42:22 -04:00
Ryan Holmes
987c55ed8f Get preferences dialog up and running 2017-07-02 16:32:39 -04:00
Ryan Holmes
57783fe80f More work on character editor 2017-07-02 15:28:42 -04:00
Ryan Holmes
f24c2ddd22 Get skill list in character editor showing. Mostly doesn't work still 2017-07-02 14:12:00 -04:00
blitzmann
58a242f753 update effect headers 2017-06-27 21:03:16 -04:00
blitzmann
5c2cf6dd15 Add last bit of t3 effects from sisi data 2017-06-27 21:02:27 -04:00
blitzmann
287f3bc510 Fix some broken effects (due to effect renames) 2017-06-25 02:54:14 -04:00
blitzmann
caaa6bcd0c update config.py to reflect sisi version 2017-06-25 01:33:18 -04:00
blitzmann
b01c961251 change path to database in case these sisi releases screw with data 2017-06-25 01:27:29 -04:00
blitzmann
826c73c903 Merge branch 'strat_cruisers' into singularity 2017-06-25 01:26:55 -04:00
blitzmann
b6a28ae15f Merge branch 'master' into development
Conflicts:
	config.py
2017-06-25 01:23:08 -04:00
blitzmann
ad0d55faed update effect headers 2017-06-25 01:21:37 -04:00
blitzmann
910ae6315d More work on subsystems 2017-06-25 01:19:48 -04:00
blitzmann
25b4d3a45b More work on strat cruiser updates 2017-06-25 00:33:36 -04:00
blitzmann
f355cb3a72 Update effect headers 2017-06-25 00:18:06 -04:00
blitzmann
ff58648f94 start picking at strat cruiser update 2017-06-21 22:19:37 -04:00
Ryan Holmes
f16e14e0b4 Fix gauges again, convert remaining IconFromBitmap > Icon 2017-06-14 15:05:12 -04:00
Ryan Holmes
729c46ab00 Revert "Remove EVT_ERASE_BACKGROUND events - pretty sure these were there for older versions of wx where the background wasn't erased properly"
This does help prevent flickering on resizing. Need to research more before removing them

This reverts commit 8c5c7fba29.
2017-06-14 03:57:57 -04:00
Ryan Holmes
3b546de070 More deprecated fixes, and re-enable a working stats view 2017-06-14 03:51:40 -04:00
Ryan Holmes
ba64f75f88 Add some missing features to the gauge (and the background erase event, which apparently is needed to prevent flickering. Still need to access if this is something I need to be concerned about in other areas) 2017-06-14 03:44:38 -04:00
Ryan Holmes
4b8f2ce9e7 Deprecation stuff 2017-06-14 01:07:18 -04:00
Ryan Holmes
8c5c7fba29 Remove EVT_ERASE_BACKGROUND events - pretty sure these were there for older versions of wx where the background wasn't erased properly 2017-06-14 01:02:27 -04:00
Ryan Holmes
bec26d5d05 Fix unable to close window 2017-06-14 00:53:22 -04:00
Ryan Holmes
8f369daf1e InsertStringItem > InsertItem 2017-06-14 00:46:38 -04:00
Ryan Holmes
43cbdc1e57 Fix issue with crashing (set weight not working as intended?) 2017-06-14 00:46:13 -04:00
Ryan Holmes
cf4d0706ae Fix column headers, and disable event posting which was causing crash 2017-06-14 00:09:30 -04:00
Ryan Holmes
2857eff884 Fix a few None comparison operations... python 3 has changed this. I'm sure there's going to be a lot of these issues popping up.
Oh, and now we get a hard crash when opening a fit. Yey!
2017-06-13 23:57:27 -04:00
Ryan Holmes
050f1b4add Fixed some missing chrome tab stuff, as well as more conversion issues 2017-06-13 15:18:40 -04:00
Ryan Holmes
2bbcd96ce3 Even more fixes 2017-06-13 15:01:30 -04:00
Ryan Holmes
1cbd8ee901 Fix some deprecated stuff 2017-06-12 21:31:37 -04:00
Ryan Holmes
7e86cb0f84 OMG I HAVE A SHIP BROWSER NOW :3 (replace old instances of GetSuitableColor with GetSuitable) 2017-06-12 21:25:07 -04:00
Ryan Holmes
0e7dccccfe Remove stat panels for now. I HAVE A FRAME SPAWNING OMG 2017-06-12 21:16:21 -04:00
Ryan Holmes
9d75dea31a "Fix" more spacers 2017-06-12 21:14:45 -04:00
Ryan Holmes
610f501608 "Color Correction" 2017-06-12 21:11:10 -04:00
Ryan Holmes
361f7fc5bb misc fixes 2017-06-12 21:09:50 -04:00
Ryan Holmes
951b35a345 PyDeadObjectError fixes and PFNotebook -> ChromeNotebook renaming 2017-06-12 20:50:05 -04:00
Ryan Holmes
6c317d56ee touch up the gauge code 2017-06-12 20:45:58 -04:00
Ryan Holmes
2acb3e759e Touch up toggle panel 2017-06-12 20:42:03 -04:00
Ryan Holmes
9712ec4fbf Fix up some stuff, migrate to cleaned up chrome tabs 2017-06-12 20:38:00 -04:00
Ryan Holmes
ae0da59ed2 Clean up draw and color utils 2017-06-12 18:14:29 -04:00
Ryan Holmes
8e4db5a8c3 Do some renaming of some files 2017-06-12 18:08:07 -04:00
Ryan Holmes
7f392006d1 comment out most of the fluff in pyfa.py. Need to come back to this and get it all working 2017-06-12 16:37:15 -04:00
Ryan Holmes
828b18d0fd py2to3 automatic conversion. Woot! 2017-06-12 16:12:45 -04:00
Ryan Holmes
ad535ccc78 Merge branch 'qol/additionPanes' into qol/file-reorg 2017-06-12 01:17:22 -04:00
Ryan Holmes
9dee761f6d Move addition pane views into their own directory 2017-06-12 01:17:00 -04:00
Ryan Holmes
f5531b458b Fix up focus for ship browser, allowing space or enter to work to open up new stage 2017-06-12 00:28:06 -04:00
Ryan Holmes
a7c89f7b40 break out market browser to individual class files 2017-06-11 17:54:36 -04:00
Ryan Holmes
048ae0205c Breakout shipBrowser into individual class files 2017-06-11 17:32:43 -04:00
Ryan Holmes
e6a0784466 space to select fit when it's focus'd 2017-06-11 15:43:01 -04:00
blitzmann
53d15425f3 tab / tab+shift to change focus of ship browser items 2017-06-09 01:27:28 -04:00
Ryan Holmes
a79257271e bump to stable 1.29.4 (#1228) 2017-06-08 22:22:30 -04:00
Ryan Holmes
94256876e4 Add tooltip for alpha clones to explain functionality (#1227)
See #1219
2017-06-08 22:13:46 -04:00
Ryan Holmes
d319b74d7a Fix exception when double clicking CREST fit browser hull (#1226) 2017-06-08 21:58:20 -04:00
petosorus
acb7c0878e Basic skill reqs export 2017-06-07 11:17:13 +02:00
blitzmann
47fcbefe8b Finish off user-selectable booster side effects - effects are applied correctly now and each has their own display name. Implements #642 2017-06-05 00:18:36 -04:00
blitzmann
c2cb5d763f Implement selectable booster side effects and persist them to the database, very much based on the fighter ability code. Still need to name them and enable the effects.
This also removes the old boosterActiveSideEffect table definition (migration script to drop table still needs to be written)
2017-06-04 23:33:11 -04:00
Ryan Holmes
208148b670 Fix issue with fit deletion (#1211)
* bump dev

* Fix issue with deleted fit not being removed from database cache (#1207). Also, include some error handling around the our commit stuff
2017-06-02 00:30:58 -04:00
blitzmann
cf02c74272 bump dev 2017-06-01 00:33:46 -04:00
blitzmann
f77cd0b834 Merge branch 'master' into development 2017-06-01 00:32:06 -04:00
Ryan Holmes
461f5219e5 bump release (#1204) 2017-05-31 23:51:46 -04:00
Ryan Holmes
373ead8da6 Add structure painter / web to dps graph (#1203) (#1202) 2017-05-31 23:14:17 -04:00
Ryan Holmes
3371086d54 Fix for #1193 - compounded bonuses during recursive command / projected fittings (#1197)
* Teak calculated logic

* test

* clear() on every calculation if it's not already calculated

* tox fix
2017-05-31 00:01:59 -04:00
Ryan Holmes
45c3533501 Make some extra logging statements and stuff to troubleshoot fit deletion bugs (#1199) 2017-05-30 22:57:52 -04:00
Ryan Holmes
4286f2ea5a Add stacking penalties to armor and shield resist command links (#1198) 2017-05-30 22:44:01 -04:00
Ryan Holmes
344546a583 Merge pull request #1196 from jasconius/mactest
updated drag and drop behavior to not trigger a suspected wx bug on Mac
2017-05-30 22:26:59 -04:00
Michael Ryan
46f61ecfa3 address travis errors 2017-05-30 21:07:02 -05:00
Ryan Holmes
2ec9c5addb Merge pull request #1194 from petosorus/pricing-pane-1158
Pricing pane 1158
2017-05-30 21:42:05 -04:00
Michael Ryan
d09f21fe15 updated drag and drop behavior to not trigger a suspected wx bug on Mac 2017-05-30 20:18:32 -05:00
petosorus
33410f0618 Formatting 2017-05-30 15:51:48 +02:00
petosorus
2c98baade8 Price options labels + total computing in minimal 2017-05-29 15:24:21 +02:00
petosorus
380f90d065 Price options in context menu 2017-05-24 17:30:55 +02:00
petosorus
1781c6dcf0 total computation + settings 2017-05-24 16:27:32 +02:00
Ryan Holmes
cff3d0ee95 Don't process removeModule is ctrl / cmd key is active (#1190) 2017-05-22 01:50:13 -04:00
Ryan Holmes
d1fc2dd6ec Fix issue with calculateSustainableTank not considering remote ancil modules (from https://forums.eveonline.com/default.aspx?g=posts&m=6948134#post6948134) (#1189) 2017-05-22 00:55:35 -04:00
Ryan Holmes
218712835e Merge pull request #1188 from pyfa-org/bug/evemon-char
EVEMon import fix
2017-05-22 00:41:12 -04:00
Ebag333
5a60cff9a1 Fixes EVEMon import. Security status was added, but wasn't handled in the EVEMon import. Also, default secstatus to 0 if it's somehow missing. 2017-05-22 00:29:29 -04:00
Ryan Holmes
18554e3186 Fix a bunch of item swapping mechanisms (see #1186) (#1187) 2017-05-21 20:31:12 -04:00
Ryan Holmes
2e2303c9aa Update some migrations to consider new schema (#1185)
* Update some migrations to consider new schema

* tox
2017-05-20 02:44:26 -04:00
blitzmann
fbf455c9fe Fix for fighter prices (#1178) 2017-05-18 22:28:09 -04:00
blitzmann
00dcda6fad Check if projected / command thing actually exist before attempting to remove it 2017-05-18 22:22:02 -04:00
blitzmann
3be7538daa Bump dev 2017-05-18 22:22:02 -04:00
Ryan Holmes
9e0638c54c Merge pull request #1175 from pyfa-org/bumprelease
Bumprelease
2017-05-16 22:12:29 -04:00
blitzmann
a5ff46fbd1 Bump stable 2017-05-16 21:34:09 -04:00
Ebag333
6900938208 Set all strings to be unicode when referencing fit.name. This won't catch all conversion errors, but it should catch most. 2017-05-16 21:33:45 -04:00
blitzmann
4887817142 Revert "Set all strings to be unicode when referencing fit.name. This won't catch all conversion errors, but it should catch most. (#1168)"
This reverts commit da33a372cb. Was squashed by mistake, commit author was lost
2017-05-16 21:33:28 -04:00
Ryan Holmes
0d721b55a7 Fix for when factor reload when module doesn't have a cycle time (#1171) (#1173) 2017-05-16 00:09:51 -04:00
Ryan Holmes
65f71b6f6b Fix exception with character implants, and don't show implant set menu if there aren't any (#1172) 2017-05-15 22:59:47 -04:00
Ryan Holmes
89b508d0f6 Merge pull request #1170 from pyfa-org/bug/char_fixes
Various character fixes
2017-05-14 23:05:18 -04:00
Ryan Holmes
6344f7a975 Merge branch 'master' into bug/char_fixes 2017-05-14 22:56:34 -04:00
blitzmann
11eea37aa7 Remove duplication of Character.ro property 2017-05-14 22:50:18 -04:00
blitzmann
bff44c46f8 Fix character list sorting (https://forums.eveonline.com/default.aspx?g=posts&m=6940327#post6940327) 2017-05-14 22:44:02 -04:00
blitzmann
7a0ea759ef Fix issue with character copy, as well as instantiating character with duplicate skills (since Skill has a backref to charactrer, it's automatically added to the characters skill list. No more need for the append()) 2017-05-14 22:24:05 -04:00
blitzmann
f9419977c0 Instantiate skills with a character (may help to solve https://forums.eveonline.com/default.aspx?g=posts&m=6939299#post6939299) 2017-05-14 20:55:48 -04:00
Ryan Holmes
da33a372cb Set all strings to be unicode when referencing fit.name. This won't catch all conversion errors, but it should catch most. (#1168) 2017-05-14 20:52:06 -04:00
blitzmann
0db141d0a6 Fix exception when reverting character skills 2017-05-14 02:26:32 -04:00
blitzmann
79445225de fix issue with market shortcuts if not active items are present 2017-05-14 02:21:23 -04:00
Ryan Holmes
a0f5e4cbb3 Merge pull request #1166 from pyfa-org/bug/t3d-mod-delete
Bug/t3d mod delete
2017-05-14 01:59:38 -04:00
blitzmann
3b23c9eacd flake8 2017-05-14 01:41:15 -04:00
blitzmann
d4ce1ef3db Fix issue with Delete key event on t3d mode causing exception (#1160). Additionally, work around the fact that every module that is removed also recalculates the fit, allowing for a faster response time when deleting multiple modules at a time. This is somewhat ugly as the removeModule function was originally based on the assumption of removing only one module. Should clean it up at some point. 2017-05-14 01:37:49 -04:00
Ryan Holmes
b4f063b07a Merge pull request #1165 from pyfa-org/bug/fit-delete-stuff2
Bug/fit delete stuff2
2017-05-14 00:42:26 -04:00
blitzmann
ffe840e245 Fix for #1161. Can't reproduce, but I'm unsure what the root cause is (probably something firing in the wrong order). 9be4ae may also alleviate the root cause. 2017-05-13 23:28:51 -04:00
blitzmann
2e3c3e92f1 Fix for a possible bug (see comments in #1147). 2017-05-13 23:28:50 -04:00
blitzmann
5e20d6973f Fix situation in which deleting a fit that was both a command and projected fit for the same target threw an error 2017-05-13 23:28:49 -04:00
blitzmann
c68739d78c Move the FitRemoved event before the stage selected events. Otherwise, if the stage is selected first and the FitItem (self) is deleted before the FitRemoved is done, we get an error about how self is not valid anymore 2017-05-13 23:28:49 -04:00
blitzmann
5392aaa27e refresh command fits on boosted fits when the booster is deleted 2017-05-13 23:28:48 -04:00
Ryan Holmes
fee82d294b Bump dev and include fix for #1162 (#1163)
* Add some logging to try to figure out what happens with #1149

* Add some logging to try to figure out what happens with #1149, along with some other fixes

* bump dev

* Add remote hull repairers in the calculateSustainableTank() mappings
2017-05-13 22:36:03 -04:00
Ryan Holmes
9f5e14fe2d Bugfixes and bump point release (#1159)
* Add some logging to try to figure out what happens with #1149, along with some other fixes

* Bump point release
2017-05-11 20:53:37 -04:00
Ryan Holmes
b39ec4f9b3 Do not commit price objects to database from within thread (#1154)
* Remove database commit in price worker, essentially bringing it back to the previous functionality (pass thread list of price objects, it modifies, calls back for main thread to commit). There's probably a better way to handle this for the future creating a scoped session or something, but for now this works

* E303 too many blank lines (2)
2017-05-11 01:15:07 -04:00
Ryan Holmes
25bfb4ddb8 Fox for issue #1152 - unicode characters in entity names (#1153) 2017-05-10 22:36:10 -04:00
Ryan Holmes
de9b167242 Bump version and include fix for #1147 (#1150)
* bump dev

* Fix two issues with deleting fits (#1147)
2017-05-10 18:48:33 -04:00
Ryan Holmes
18d44979e4 Merge pull request #1143 from pyfa-org/release-1.29.0
Release 1.29.0
2017-05-09 21:05:42 -04:00
blitzmann
1eddad859a Bump for 1.29.0 release for realz
This reverts commit fc9408d062.
2017-05-09 20:59:35 -04:00
blitzmann
e2de1565bf Forgot to add notes to the import fit list. Caused break. Very bad. 2017-05-09 20:59:11 -04:00
blitzmann
fc9408d062 Revert "bump for 1.29.0 release"
This reverts commit 892ee13542.
2017-05-09 20:56:09 -04:00
Ryan Holmes
cb98618e5e Merge pull request #1142 from pyfa-org/release-1.29.0
Release 1.29.0
2017-05-09 20:54:41 -04:00
blitzmann
892ee13542 bump for 1.29.0 release 2017-05-09 20:49:05 -04:00
blitzmann
2595c59c73 Fix issue in which character editor did not display skill level update when changed from skill search results 2017-05-09 19:57:59 -04:00
blitzmann
93c26aa02f Merge branch 'jeffy-g-fix_unread_description' into release-1.29.0 2017-05-09 18:58:15 -04:00
blitzmann
a6a153b703 Update database, add missing renders, fix bug with not being able to add citadel modules, and fix bug associated with engineering complex properties (debug info, don't care about it) 2017-05-09 18:52:32 -04:00
blitzmann
38e6e7d5ed Add missing Dagon effect 2017-05-08 22:58:25 -04:00
blitzmann
4d8c9e0522 Fix floats in skill tree, and fix typo - apparently I can't spell dependents x_x 2017-05-08 22:49:37 -04:00
blitzmann
e75e2b7605 Bad isinstance() for skill search... I feel like I've fixed this 3 times now??? 2017-05-08 22:40:12 -04:00
blitzmann
0e81c985a3 Fix bad index for fit notes which causes exception on recent fits 2017-05-08 22:38:18 -04:00
blitzmann
21a071ea40 Add "remove" context menu to command fits 2017-05-08 22:34:03 -04:00
blitzmann
4f1e7697ed Fix issue in which "Open Fit" was showing on the command view, not the command fit, potentially causing an error 2017-05-08 22:29:50 -04:00
blitzmann
ccfd414cb3 Disable stopwatch in test (was failing due to import error) and fix bad requests version setting 2017-05-08 22:25:05 -04:00
blitzmann
3de63c5ca5 flake8 fixes 2017-05-08 21:32:13 -04:00
blitzmann
42e64a6223 Fix jsonToSql script and issue with character sec status setter 2017-05-08 21:24:29 -04:00
blitzmann
53f589284b Implement hard constraints for All 5/0 characters with respect to skills and sec status 2017-05-08 19:47:55 -04:00
blitzmann
aecbf8f86e Fix issue with drones causing exception during remote RR calcs 2017-05-08 19:41:34 -04:00
blitzmann
dd09b3d951 Add fitting notes to the ship browser tooltips 2017-05-08 19:20:30 -04:00
blitzmann
f022c2474c Restrict fit notes export to 400 character for CREST and XML export 2017-05-08 19:02:30 -04:00
blitzmann
249956689a text tweaks 2017-05-08 18:26:44 -04:00
blitzmann
6b22bd189a Merge remote-tracking branch 'jeffy/fix_unread_description' into dev, see #1099
Conflicts:
	eos/config.py
	gui/notesView.py
	service/settings.py
2017-05-08 00:44:29 -04:00
blitzmann
524bb43113 Merge branch 'fix_unread_description' of git://github.com/jeffy-g/Pyfa-dev into jeffy-g-fix_unread_description 2017-05-08 00:09:09 -04:00
blitzmann
83a7a854bb Merge branch 'feature/recent' into dev
Conflicts:
	eos/db/saveddata/character.py
	eos/db/saveddata/fit.py

Implements #983 but utilizing sqlalchemy events to update the fit modified date whenever something is added/changed.
2017-05-07 20:48:41 -04:00
blitzmann
0507a55731 Get resists working with more things, and fix bug in which we were still looking at an effect info (which doesn't exist anymore) 2017-05-07 19:59:25 -04:00
blitzmann
f1eb3f68d1 Change func.now() to datetime.datetime.now().
Apparently these are calculated differently (sqlite function is in utc, datetime is in local), and I couldn't figure out how to retrieve the tiome back into local. Since this is a single user application without a concern for time drift on the server, this should work just as well.
2017-05-07 11:35:26 -04:00
blitzmann
1604ea1f2c Fix many bugs related to GUI not receiving a correct timestamp, as well as extending feature out to all other fit entities. 2017-05-07 02:02:54 -04:00
blitzmann
4a9662c0f7 Merge branch 'feature/skill-filter' into dev
Conflicts:
	gui/characterEditor.py

This implements a long-requested feature to be able to search skills in the character editor
2017-05-06 13:25:20 -04:00
blitzmann
47a683c44c Merge branch 'feature/strictSkills' into dev
Conflicts:
	service/character.py

Implements strict skill requirement handling
2017-05-06 13:13:50 -04:00
blitzmann
d888982657 Merge branch 'bug/market-fit-none' into dev 2017-05-06 13:11:26 -04:00
blitzmann
184c46dbce Merge branch 'bug/unicode-skill-export' into dev 2017-05-06 13:11:07 -04:00
blitzmann
b2ae6913d7 Merge branch 'qol/self-projection' into dev 2017-05-06 13:10:48 -04:00
blitzmann
703d6dbc85 Merge branch 'feature/grant-needed-skills' into dev 2017-05-06 13:09:30 -04:00
blitzmann
2e6066e848 Merge branch 'feature/tabbed-fits' into dev 2017-05-06 13:08:52 -04:00
blitzmann
f751eff1cf Fix some styling issues on linux 2017-05-06 12:57:20 -04:00
blitzmann
d342e66db4 Merge branch 'feature/sec-status-change' into dev
Add ability to change characters sec status
2017-05-06 12:23:40 -04:00
blitzmann
1222567a4f Merge branch 'feature/allow-restrictions' into dev.
Allows user to turn off most fitting restrictions (#1117)
2017-05-06 12:11:00 -04:00
blitzmann
1f7858f853 Merge branch 'bug/resist-effects' (also includes current work on sisi branch).
This fixes the ewar resists (and possibly implements remote repair impedance, not tested)
2017-05-06 12:04:10 -04:00
blitzmann
283cb1e50c Add hard requirement for requests (for everything except mac-deprecated) 2017-05-04 21:48:30 -04:00
blitzmann
c2880c0175 Move queue and wait variables to __init__.
Turns out threading.start() returns before the thread actually starts, so there were situations in which we would start the thread and immediately try to use it before run() happened.
2017-05-04 19:27:54 -04:00
blitzmann
3d0a4b84d4 Add hard minimum requirement for logbook 0.10.0, remove requirements.txt loop as it isn't applicable for 95% of users, and Linux users are complaining about seeing console output all the time on dev 2017-05-03 20:53:10 -04:00
blitzmann
622efb624d Refactor how remote resistance works. We now check the resistance ID directly from the effect, and fall back to the remoteResistanceID attribute. See #1139 2017-05-02 22:19:58 -04:00
blitzmann
50965244c0 Merge branch 'bug/1139' into bug/resist-effects 2017-05-02 20:41:54 -04:00
blitzmann
9e6aca2496 Merge branch 'qol/effect-class' into bug/resist-effects 2017-05-02 20:38:20 -04:00
blitzmann
1cf844d415 item.attributes would not contain attributes that were added during runtime. Instead, get the attribute info and search the modified attributes for the resist attribtue. 2017-04-30 01:39:03 -04:00
blitzmann
f57e7cf1ec Implement FloatSpin as well as changing sec status via character editor 2017-04-26 22:14:30 -04:00
Ryan Holmes
bedd6efff2 Fix for #1137 - industrial command skill was applying to incorrect attribute (#1138) 2017-04-26 20:25:35 -04:00
blitzmann
9bffc6afd6 Fix issue in which exception happened because of a bad type check 2017-04-26 19:59:57 -04:00
blitzmann
77b5e8afdc Merge branch 'development' into feature/strictSkills
Conflicts:
	eos/gamedata.py
2017-04-26 19:42:29 -04:00
blitzmann
f9b7376cc7 Move sql alchemy events into their own file for now so that mac-deprecated doesn't get pissy. 2017-04-26 19:34:47 -04:00
blitzmann
34723d7bb1 Merge branch 'development' into feature/recent 2017-04-26 18:51:46 -04:00
blitzmann
32f417ce5a Created first iteration of "Recent Fits" view, in which a nav button is interacted with to show a list of the 100 most recently modified fits. Ship Broswer is littered with ToggleRecentShips() to reset the icon when not in "recent" mode. This should probably be fixed at some point.
Removed the FIT_CHANGED binding from FitItem - this was causing very odd issues when the object was destroyed (navigating to another "stage") such as the Fit Changed event for that fit no longer firing (or at least seemingly so)

To fix this, simply look at the active fit during FitItem.Refresh()

Also creates a new query to get a list of items from the DB, although it's not used (was gonna use it, decided against it, but didn't want to delete the code - could prove handy later)
2017-04-26 18:51:39 -04:00
blitzmann
5657438e3c Change up effect classes for better efficiency 2017-04-24 19:04:07 -04:00
blitzmann
f7349316b4 Revert "Change to using inspect() instead of the current shitty way"
This reverts commit 711537dcf4.

Turns out inspect() was introduced in 0.8, and mac-deprecated has 0.6.4 (without an easy way to jack it up). Stuck with this ugly, but functional code for now.
2017-04-24 00:34:04 -04:00
blitzmann
c0f74cd0a3 Fix old issue with trying to open previous fits that don't exist. 2017-04-23 23:40:51 -04:00
blitzmann
bb73065b43 Update FitItem datetime when fit changes 2017-04-22 22:46:23 -04:00
blitzmann
ae99a179d9 Update FitItem to use modified datetime of fit (fallback to created and old timestamp). Remove activation of FitItem timer (no idea what this is trying to do???) 2017-04-22 19:30:50 -04:00
blitzmann
b4930d15b7 Update Fit.modified whenever modules change, allowing proper "recent" timestamps 2017-04-22 18:58:30 -04:00
blitzmann
86e6250a63 Add strict skills to preference pane 2017-04-22 14:49:13 -04:00
blitzmann
c9a04e886a Add eos setting for strict skills, and update info in skill tree without doing a repopulation 2017-04-22 14:02:40 -04:00
blitzmann
b21c850598 move skill mapping to item class 2017-04-22 03:12:33 -04:00
blitzmann
58abdcfa22 Add dependants tab for skills 2017-04-22 03:09:18 -04:00
blitzmann
d0a4fa1c9d Get strict skills working. Todo: add engine setting 2017-04-22 02:43:06 -04:00
blitzmann
e94b4a1c18 Fix old issue with trying to open previous fits that don't exist. 2017-04-21 23:43:40 -04:00
blitzmann
2a679efc14 Remove print message for except clause when iterating through item properties. This is dev stuff, not too worried about handling it. Was failing on getting a property that doesn't make sense for a module. 2017-04-21 23:38:46 -04:00
Ebag333
4652b91e98 Always show refresh button on compare window (annoying that it hides sometimes when it shouldn't). Move compare window prices to the new price model. 2017-04-21 00:55:06 -04:00
Ebag333
0079f76f67 Change price column to use new method 2017-04-21 00:54:13 -04:00
blitzmann
711537dcf4 Change to using inspect() instead of the current shitty way 2017-04-21 00:45:36 -04:00
blitzmann
e971b7927e Fix issue in which prices are removed all the time (forgot to add the check for deleted to the condition >.<) 2017-04-21 00:40:45 -04:00
Ryan Holmes
3afa829173 Merge pull request #1136 from blitzmann/bug/rr-fuel-1135
Remote Ancil Bug
2017-04-21 00:02:11 -04:00
blitzmann
cd30d74393 Rename fueled to modifier 2017-04-20 23:54:52 -04:00
Ebag333
25a945f9e6 Catch bug where remote reppers have the fueled multiplier applied when they have no charges. 2017-04-20 23:54:36 -04:00
Ryan Holmes
504d582b59 Merge pull request #1134 from blitzmann/bug/drones
Drone bugs
2017-04-19 21:43:39 -04:00
blitzmann
3d8a80aeaa Include drones in RR stats 2017-04-19 21:36:49 -04:00
blitzmann
9ac609528b Fix issue in which drones hp/s does not consider number of drones 2017-04-19 21:04:48 -04:00
blitzmann
988861af1f Add option to ignore fitting restrictions on a per-fit basis 2017-04-18 23:57:34 -04:00
blitzmann
66a8669c64 Implement CONCORD ship sec status bonus. 2017-04-18 01:21:08 -04:00
blitzmann
99b0322289 Merge branch 'singularity' into sisi-dev 2017-04-18 00:03:58 -04:00
blitzmann
b0e7c02a6a Add migration script for character sec status 2017-04-18 00:01:25 -04:00
blitzmann
f0fc5643e9 Return and save sec status for character when updating skills 2017-04-18 00:01:25 -04:00
blitzmann
8c83ac120f Implement asynchronous api skill fetching 2017-04-18 00:01:24 -04:00
blitzmann
53cab4b1ab Merge branch 'master' into development
Conflicts:
	requirements.txt
2017-04-17 21:41:44 -04:00
blitzmann
6d176c0010 Merge branch 'master' into singularity 2017-04-17 21:41:02 -04:00
blitzmann
1aaa93c1fd Set sqlalchemy version to 1.0.5 in requirements... newer version causing issues in builds? 2017-04-17 21:35:22 -04:00
blitzmann
9d1c77f5b7 Damn you effects... 2017-04-17 21:19:51 -04:00
Ryan Holmes
3b351603a3 Merge pull request #1130 from blitzmann/feature/drone-affecting-skills
Add affecting skills context menu to drones and fighters
2017-04-17 19:52:19 -04:00
Ryan Holmes
f563b2666d Merge pull request #1129 from blitzmann/bug/fighters-1128
Fix for #1128
2017-04-17 19:46:51 -04:00
blitzmann
cede46d4a4 Remove PyYAML from list of requirements to run pyfa. 2017-04-17 19:40:47 -04:00
blitzmann
90d854fd24 Add change affecting skills menu to drones and fighters 2017-04-17 19:25:35 -04:00
blitzmann
9c406a0a44 Fix for #1128 - these modifiers are in their own pen-group 2017-04-16 23:53:19 -04:00
blitzmann
81160e9e72 Fix effects (don't need level for ship bonuses x_x) 2017-04-16 22:50:19 -04:00
blitzmann
7bfd19dca4 Update effect headers 2017-04-16 22:24:32 -04:00
blitzmann
8ff244d509 Add new effects to support new hulls 2017-04-16 22:11:28 -04:00
blitzmann
e2061a25c2 Update effects for logi 2017-04-16 21:06:28 -04:00
blitzmann
272201c0fc Update for renamed attribute 2017-04-16 20:34:58 -04:00
blitzmann
54930d7d50 Rename effects. 2017-04-16 20:20:57 -04:00
blitzmann
5ddac97719 Update EVE db from sisi 2017-04-16 19:04:51 -04:00
blitzmann
973432b997 Merge remote-tracking branch 'origin/master' into singularity 2017-04-16 19:02:17 -04:00
blitzmann
1ee679903c Bring dev up to date with master
Conflicts:
	service/fit.py
2017-04-16 11:42:41 -04:00
Ryan Holmes
89614f7948 Merge pull request #1127 from blitzmann/master
Appveyor tweaks
2017-04-16 11:39:16 -04:00
blitzmann
dec5970bd6 Update appveyor to use cx_freeze until pyInstaller is reviewed. 2017-04-16 11:31:08 -04:00
Ebag333
a374fb4a12 Appveyor (#1101)
Appveyor setup
2017-04-16 11:31:01 -04:00
blitzmann
5d066f1401 Merge branch 'development' of https://github.com/pyfa-org/Pyfa into development 2017-04-16 11:12:42 -04:00
blitzmann
e8749d379a Update appveyor to use cx_freeze until pyInstaller is reviewed. 2017-04-16 11:12:15 -04:00
blitzmann
b02506d6cd fixes issue in which fit was recalced on fit switch when characters were different, regardless of calculation state. 2017-04-15 22:33:45 -04:00
blitzmann
cca61b8ac1 Fix issue with selecting item with an empty view 2017-04-14 21:45:41 -04:00
Ryan Holmes
962c45b807 Merge pull request #1124 from StinGer-ShoGuN/PR_01
Default HTML export to pyfa save path, and allow override of database file path
2017-04-14 00:31:59 -04:00
blitzmann
9646cee324 De-jankify self projections. We now check to see if the fit we're about to project is self and, if so, simply run the projections on ourselves. At this point, all bonuses should be applied to our fit. 2017-04-13 23:41:02 -04:00
blitzmann
04242ef52c Fix issue with handling item names that include unicode 2017-04-13 23:39:42 -04:00
blitzmann
da9816d1bd Implement character skill searching 2017-04-13 23:39:00 -04:00
blitzmann
283aba4f85 Add grant missing skills feature 2017-04-13 23:26:08 -04:00
blitzmann
080590a292 Add "Currently Open Fits" context menu for projected and command views 2017-04-13 23:23:48 -04:00
blitzmann
a7ec10525e Apparently this happens on command fits as well... temp fix until I can look into why this happens 2017-04-13 23:23:47 -04:00
blitzmann
e28bf545e9 Fix some bugs with notes view - exception happening due to lack of fit, and possibility of notes saving under the wrong fit 2017-04-12 23:22:57 -04:00
Ryan Holmes
5aeb3a38c8 Fit Calculation Code Cleanup (#1103)
* Remove dirtyStorage, legacy of old fleet boosting system

* Remove withBooster flag from the recalc() function.

This was a legacy parameter dealing with the old fleet boost code, the purpose of which has changed with the addition of command boosts. We no longer have to call recalc with this particular parameter (indeed, it was forced to False in `recalc`). These were never cleaned up. We still have the withBoosters parameter for the `calculateModifiedAttributes` function, however that will be renamed and has a different meaning than it used to (used in the recursion of command fits)

* Add some comments

* Consolidate the tangled mess of conditional flags meant to determine if a fit is local/projected/command. This should make the logic flow a bit clearer.

Also rewrite a blurb about returning on a calculated fit - need to look into this a little bit more.

* fix up test to no longer pass `withBooster`
2017-04-12 19:50:16 -04:00
StinGer ShoGun
c00372900f Save HTML export to .pyfa user's directory by default.
This commit is part of attempts to ease system package creation and
maintenance (specifically Gentoo ebuilds).
2017-04-12 16:13:56 +02:00
StinGer ShoGun
7f50503aec Allow game database file to be loaded from a different directory.
This will allow system-wide installation of Pyfa in Python site-packages
directory, where eve.db has nothing to do.

This commit is part of attempts to ease system package creation and
maintenance (specifically Gentoo ebuilds).
2017-04-12 16:07:21 +02:00
blitzmann
87a600349c Temporarily fix issue with removing a self projected fit 2017-04-11 23:58:05 -04:00
Ryan Holmes
114246bf1e Do not recalc fits on tab switch (#1105)
* Do not recalc fits if they are already calculated. Fits that are projected onto other fits recursively set their victims to `calculated=False` so that the victim will re calculate when it loads again.

* Reset boosted fits when calculating a fit that is boosting others. Also, remove semicolon due to habit :x

* Develop a `__resetDependantCalc()` which will reset any fits that are immediately affected by the current fits calculation.
2017-04-11 23:40:40 -04:00
Ryan Holmes
ebda1349cf Add a small delay on key down for market search (#1123)
* Add a small delay on key down for market search

* prevent a double search if user does something like hit enter in the middle of a timer
2017-04-11 23:30:38 -04:00
Ryan Holmes
45a8aaf387 Merge pull request #1111 from Ebag333/fit_tests
Tests for eos\saveddata\fit.
2017-04-11 00:42:54 -04:00
Ryan Holmes
514933e0e4 Merge pull request #1120 from blitzmann/feature/delete-things
"Delete all" buttons for Prices, Target Resists, Damage Profiles
2017-04-10 22:03:20 -04:00
blitzmann
6f914386ec Remove unused function 2017-04-10 21:58:56 -04:00
blitzmann
efaede0929 Use queries to bulk-delete target resists and damage profiles 2017-04-10 21:49:35 -04:00
Ebag333
73821cbe49 Formatting 2017-04-10 21:41:56 -04:00
Ebag333
e245891cb4 Add delete buttons 2017-04-10 21:40:59 -04:00
blitzmann
50e604f412 convert print to debug statement >.< 2017-04-10 21:32:26 -04:00
blitzmann
4e74555b5d Opps, forgot to change this back from testing. 2017-04-10 21:26:03 -04:00
blitzmann
894c86ebc3 Merge branch 'development' of https://github.com/pyfa-org/Pyfa into development 2017-04-10 21:09:40 -04:00
Ryan Holmes
47ea12f4ba Merge pull request #1048 from Ebag333/ErrorDialog_and_miscfixes
Error Dialog improvements and Pyfa.py refactoring
2017-04-10 21:09:11 -04:00
blitzmann
ce01c66b3e Better manage price object juggling in Item.price property. The previous way was creating new price objects when an object already existed in the database which could lead to Integrity issues. 2017-04-10 20:48:58 -04:00
blitzmann
1260900668 Merge branch 'pricing_v2' into development 2017-04-10 20:46:57 -04:00
jeffy-g
a86ff19c98 Merge branch 'fix_unread_description' of https://github.com/jeffy-g/Pyfa-dev into fix_unread_description 2017-04-10 14:31:29 +09:00
jeffy-g
c07bcf6a29 Determine the necessary changes to use db with test code,
I made necessary edits

.travis.yml
  necessary to depend on wx mod indirectly when running test code

eos\config.py
  copy from development branch, This change was necessary when using data base in test code.

service\settings.py
  copy from development branch.
  and modified SettingsProvider.getSettings and Settings.save.
  After that, we made the same as master branch except for necessary code.
  This change was necessary when using data base in test code.

and other improvement.
2017-04-10 14:23:50 +09:00
Ryan Holmes
82f6d26a88 Merge pull request #1109 from Ebag333/eos_fit_cleanup
Some quick cleanup of logging and shtuff
2017-04-09 23:25:11 -04:00
Ebag333
d1e8f5cf5c Placeholder test (#1113)
* Placeholder test

* pep8
2017-04-09 22:44:28 -04:00
Ryan Holmes
82edaf05d3 Merge pull request #1116 from pyfa-org/eos_cleanup
Eos cleanup
2017-04-09 22:43:29 -04:00
blitzmann
fadc514592 Add back the booster side effect stuff 2017-04-09 22:38:31 -04:00
jeffy-g
fc7ca56f8b searching for a way to open db with minimal changes required 2017-04-10 09:33:54 +09:00
jeffy-g
d629061506 Merge branch 'master' into fix_unread_description 2017-04-10 03:20:35 +09:00
jeffy-g
4a964ab6be apply recent improvements 2017-04-10 03:05:44 +09:00
jeffy-g
53957c24df Reflect changes when writing test code 2017-04-08 22:31:25 +09:00
Ryan Holmes
addff1118c Extend "Open Fit In Context Menu" option for command fits. (#1104) 2017-04-05 19:26:12 -04:00
Ebag333
6a1d106fea Appveyor (#1101)
Appveyor setup
2017-04-05 16:18:03 -07:00
Ryan Holmes
07f88cc4d1 Add Create and Modify fields for most database tables (#1073)
* Add created/modified fields to relevant tables.

* Add migration for created and modified fields

* Seriously tox?
2017-04-05 18:54:57 -04:00
Ryan Holmes
5f35553438 Restrict cap modules to only cap ships (#1097)
* Restrict capital modules to capital hulls

* tweak comment

* Make a isCapitalSize property for modules
2017-04-05 18:54:16 -04:00
Ebag333
802e2afcc0 General cleanup of Eos. Reformats a bunch of files and cleans up unused code or code that's been commented out 2017-04-05 15:47:19 -07:00
Ebag333
ee09b41e08 Use rlock instead of lock 2017-04-05 14:56:22 -07:00
Ebag333
994bd72409 Rework pricing. 2017-04-05 14:40:27 -07:00
Ebag333
01eaba6697 First pass 2017-04-05 11:44:36 -07:00
jeffy-g
d4d69522f5 edit source 2017-04-06 03:37:40 +09:00
jeffy-g
dd88d64d67 im trying PyCharm now! 2017-04-05 21:48:37 +09:00
jeffy-g
0ecaa4d36c edit missied format... 2017-04-05 21:26:45 +09:00
jeffy-g
e9e8ef964c refactoring some code and added docstring
added stopwatch.py(modify from utils.timer.py) for test
2017-04-05 21:18:30 +09:00
Ebag333
c2360528ee Don't flush to DB 2017-04-05 01:09:00 -07:00
Ebag333
3221fba02c Copy/pasta error 2017-04-05 00:52:35 -07:00
Ebag333
c1b74f481a Tox 2017-04-05 00:44:02 -07:00
Ebag333
e2c0dc7e92 Tests for eos\saveddata\fit. 2017-04-05 00:42:19 -07:00
Ebag333
df510c40f4 Some quick cleanup of logging and shtuff 2017-04-05 00:17:13 -07:00
Ebag333
48db3c8ce4 Add some key logging for database information. 2017-04-04 15:01:05 -07:00
Ryan Holmes
9d029b46b1 Respect command fit state (#1100)
* Respect command fit state in calculations

* Utilize `getCommandInfo` instead (we do it this way for projections. Consistency, fuck yeah!)
2017-04-02 23:20:31 -05:00
Ebag333
d2af4f7d9c Locale Tests (#1079)
* Locale tests redo

* Add helper

* Remove line break if found.

* Fix imports

* Remove copy that snuck in

* Install language packs

* Change language pack install

* fix china language pack

* Fix tests that I accidentially broke

* Add debug print

* Don't try and parse Travis cache dirs

* Fix counting
2017-04-02 15:53:14 -07:00
Ryan Holmes
3dd539b4f0 Improve some efficiencies with the variations context menu: Do not recalc twice when switching items. (#1095) 2017-04-02 16:46:25 -05:00
Ebag333
1daafd15e6 Tests (#1086)
* First step in more tests

(cherry picked from commit b9af117)

* Formatting

(cherry picked from commit 5f037e6)

* Booster test fixes

* Switch to wx3.0

* try coda
* Test output

* Tweak travis

* try reduced virtualenv

* Tweak travis

* Reduce test to a single one.

* Formatting
2017-04-02 10:26:11 -07:00
jeffy-g
8fd424814a edit... 2017-04-03 02:00:10 +09:00
jeffy-g
4d8c3eadbc pep8 2017-04-03 01:50:26 +09:00
Ryan Holmes
92722d491f Remove functionality related to auto HTML export (#1088) 2017-04-02 11:46:17 -05:00
jeffy-g
c560d17bdd Improved processing status notification for import and export 2017-04-03 01:34:07 +09:00
Ebag333
55dff65142 Tox things 2017-04-02 01:03:14 -07:00
Ebag333
cdec6fad99 Clean up requirements file. Add detection and warning for possibly missing requirement. Change back to using the modal. 2017-04-02 00:57:11 -07:00
Ryan Holmes
216dac068d Fix for #1090 - using variations on implants is not recalcing fit correctly. (#1094) 2017-04-02 01:04:34 -05:00
Ryan Holmes
f9ec79c8eb Merge pull request #1093 from pyfa-org/master
Bring dev up to date with master
2017-04-01 23:14:26 -05:00
Ryan Holmes
112ab91e34 Fix for #1091 (#1092) 2017-04-01 23:09:32 -05:00
Ryan Holmes
59b0ac127f Merge pull request #1071 from blitzmann/issue-686
Switch units in recharge pane based on effective HP toggle (requested by #686)
2017-04-01 22:31:38 -05:00
Ryan Holmes
e03b3227d4 Fix for #1081 (#1085)
* Break project application code out of main item iteration, and apply it after command boosts have been applied to the fit. Fix for #1081

* Make tox happy
2017-04-01 22:23:50 -05:00
Ryan Holmes
f08a66924c Re-introduce Command Fit State (#1074)
Reintroduce command view state

Squashes `blitzmann/command-fit-state`:

* Reintroduces command view state, allowing users to toggle command fits on and off.
* Remove type() function call and use __class__ instead
2017-04-01 22:04:44 -05:00
Ebag333
535b75225b dump module list and versions 2017-03-28 18:49:10 -07:00
Ebag333
b99c44667e Remove unused import 2017-03-27 21:11:07 -07:00
Ebag333
c6d50b7d6e Merge branch 'development' into ErrorDialog_and_miscfixes 2017-03-27 21:00:51 -07:00
Ebag333
03f12bfca1 Finish implementing wx 2.8 selector. Add a bunch of error catching. General cleanup.
(cherry picked from commit b0ec69e)
2017-03-27 20:52:45 -07:00
Ebag333
78a8c105f4 First pass at re-implementing wx 2.8 preference 2017-03-27 16:57:55 -07:00
Ryan Holmes
878d9d7148 Merge pull request #1072 from blitzmann/fix-string-variables
Fix an exception caused by too few variables for string formatting
2017-03-27 00:04:42 -04:00
blitzman
cb77987129 Fix an exception caused by too few variables for string formatting 2017-03-26 23:51:05 -04:00
blitzman
37ec3d41d9 Switch the units of recharge rates based on EHP / HP 2017-03-26 16:19:14 -04:00
Ryan Holmes
6ececbb81a Merge pull request #1063 from blitzmann/feature/commandmenu
Command Fit Menu
2017-03-26 14:56:50 -04:00
Ryan Holmes
a67c28a4c9 Merge branch 'development' into feature/commandmenu 2017-03-26 14:43:12 -04:00
Ryan Holmes
c3a0176c88 Merge pull request #1021 from Ebag333/MorePreferences
Add more functionality to preferences window.
2017-03-26 14:42:49 -04:00
blitzman
e7de57fc7a tox fixes 2017-03-26 14:39:45 -04:00
blitzman
d928df9c69 Move useStaticAdaptiveArmorHardener to the EOSSettings. Not moving force reload for now 2017-03-26 14:28:13 -04:00
blitzman
b18bb200a9 Merge branch 'development' into MorePreferences 2017-03-26 13:52:59 -04:00
Ryan Holmes
225011f2c1 Merge pull request #1070 from blitzmann/fixforsettings
Fix settings provider
2017-03-26 13:47:41 -04:00
blitzman
024edc500f Fix settings provider 2017-03-26 13:35:46 -04:00
Ryan Holmes
42d59d21a6 Merge pull request #1042 from Ebag333/HandleBadHandleres
Effect Handlers Import - Less Spam
2017-03-26 12:38:47 -04:00
Ryan Holmes
4795571629 Merge branch 'development' into HandleBadHandleres 2017-03-26 12:33:58 -04:00
Ryan Holmes
df587892a3 Merge branch 'development' into feature/commandmenu 2017-03-26 12:27:52 -04:00
Ryan Holmes
57a1f71fdd Merge branch 'development' into ErrorDialog_and_miscfixes 2017-03-26 12:22:08 -04:00
Ryan Holmes
1ffcdc92f2 Merge pull request #1031 from Ebag333/tooltip_capacitor_neut_resistance
Tooltip for capacitor neut resistance
2017-03-26 12:16:41 -04:00
Ryan Holmes
bd043c2358 Fix for #1061 (#1068)
Squash commit that does the following:

* Enable Council Diplo Shuttle
* Disables a test that was preventing Travis from returning success (need to look into this more later)
2017-03-26 12:15:07 -04:00
blitzman
fbd0a6ddda Create a custom pre-check exception that we can check for when doing our unhandled exception handling. 2017-03-25 22:34:35 -04:00
blitzman
e7aceb6a8b Bringing branch up to date with dev
Merge branch 'development' into ErrorDialog_and_miscfixes

Conflicts:
	eos/saveddata/fit.py
	pyfa.py
2017-03-25 22:30:18 -04:00
blitzman
fd745c5f62 Tox fix. 2017-03-25 01:02:20 -04:00
Ryan Holmes
41628ca17f Merge pull request #1065 from Ebag333/pytests
pytests
2017-03-25 00:41:02 -04:00
Ebag333
21fbbf154d Try fake wx module 2017-03-24 18:00:51 -07:00
Ebag333
66c4aefc1e Add comment 2017-03-24 17:27:17 -07:00
Ebag333
5d5c95fb2c Example tests for services! General cleanup.
(cherry picked from commit 9f41bb4)
2017-03-24 11:15:39 -07:00
Ebag333
13305d9ee1 Use correct formula. \o/
(cherry picked from commit b20b6c1)
2017-03-24 11:15:37 -07:00
Ebag333
4a9638767d use math
(cherry picked from commit 4b75f57)
2017-03-24 11:15:34 -07:00
Ebag333
55cd0d5000 Clean up test structure a bit
(cherry picked from commit 320e05b)
2017-03-24 11:15:32 -07:00
Ebag333
1da15cfde3 Add right number of levels to remove.
(cherry picked from commit 1d0a682)
2017-03-24 11:15:30 -07:00
Ebag333
9df0ee9a1c Comment out print
(cherry picked from commit df48cda)
2017-03-24 11:15:28 -07:00
Ebag333
8baeafbdc2 Rename a few tests to follow standards. Move fits into a helper so they can be reused. Add two new Eos tests.
(cherry picked from commit f87ac4d)
2017-03-24 11:15:25 -07:00
Ebag333
aacddb251d pep8 stuff
(cherry picked from commit e87b6c3)
2017-03-24 11:15:23 -07:00
Ebag333
1240e0f768 attempt terrible hack make run in memory
(cherry picked from commit 357275c)
2017-03-24 11:15:20 -07:00
Ebag333
cdbd2979d2 Back to what works on Windows
(cherry picked from commit 3401b87)
2017-03-24 11:15:05 -07:00
Ebag333
da493d07c0 recreate DB connection
(cherry picked from commit 5593e28)
2017-03-24 11:15:02 -07:00
Ebag333
bccb1d2805 update config
(cherry picked from commit b18aecf)
2017-03-24 11:15:00 -07:00
Ebag333
d84787b041 add test
(cherry picked from commit b1b5cb1)
2017-03-24 11:14:57 -07:00
Ebag333
f1d6252d8b Add pyfa path to python paths
(cherry picked from commit dd51c38)
2017-03-24 11:14:53 -07:00
Ebag333
38a7a50d1c move helpers functions out
(cherry picked from commit 2047d3f)
2017-03-24 11:14:50 -07:00
Ebag333
3ca181fce4 Add comment
(cherry picked from commit dbbe3aa)
2017-03-24 11:14:48 -07:00
Ebag333
9eeb01b746 Add debug output
(cherry picked from commit f8d7012)
2017-03-24 11:14:45 -07:00
Ebag333
9ef9a0f1fb disable import tests
(cherry picked from commit 58ac331)
2017-03-24 11:14:43 -07:00
Ebag333
599b5318fc Add local path
(cherry picked from commit c9c340d)
2017-03-24 11:14:41 -07:00
Ebag333
75df133071 Add hack to add in root path to python paths
(cherry picked from commit 1068c41)
2017-03-24 11:14:38 -07:00
Ebag333
403b39659c Fix tox things.
(cherry picked from commit 60298c8)
2017-03-24 11:14:34 -07:00
Ebag333
8d357ee282 Test more Rifter things!
(cherry picked from commit b92f584)
2017-03-24 11:14:32 -07:00
Ebag333
96ad687944 Baby's first (real) Eos test.
(cherry picked from commit df51f9f)
2017-03-24 11:14:29 -07:00
blitzman
79040adf1a tox fixes 2017-03-23 01:13:41 -04:00
blitzman
cbcc81d42e Actually apply the command fit, and remove print statement 2017-03-23 00:38:24 -04:00
blitzman
732386b83a Get command fit menu up and running. Had to revert to a non-cached version of the menu, as the instance has root menu, which we need in order to properly bind. Don't think caching the menu would have really given a large performance gain anyway. 2017-03-23 00:38:24 -04:00
blitzman
4065022866 Initial work on caching command fits unless needing to update. FitChanged event can now carry an action and typeID, only used in the CommandFit context menu (for now, can use this elsewhere). If the module being added or removed, we update the cached list. 2017-03-23 00:38:23 -04:00
blitzman
6c1d949cef Proof of concept for gathering fits based on modules that are fit 2017-03-23 00:38:23 -04:00
blitzman
c4293bba6b bump dev 2017-03-23 00:36:20 -04:00
blitzman
0a1008f64f Merge branch 'master' into development 2017-03-23 00:35:28 -04:00
Ebag333
a5cb2a9f00 Add logbook version warning 2017-03-22 18:52:04 -07:00
blitzman
4a6c0db4fa Bump to stable point release 2017-03-20 21:05:09 -04:00
blitzman
f31ec9a154 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2017-03-19 16:29:27 -04:00
blitzman
b4ad4becd3 Fix for #1060 2017-03-19 16:27:41 -04:00
Ryan Holmes
554807968a Update requirements.txt 2017-03-19 00:23:17 -04:00
Ryan Holmes
5cecb24654 Update README.md 2017-03-19 00:22:50 -04:00
blitzman
5911538e29 Do a version check for logbook 2017-03-19 00:22:17 -04:00
Ebag333
0ccd812398 Add logging OS version. Deprioritize some messages to debug, so devs can run at info level with less spam (and much less impact on recalc times). 2017-03-18 13:27:07 -07:00
Ebag333
9c693cd7ed Python now properly requires 2.7 and not 2.6 or 2.7. Removed duplicate output to log, now that we handle exceptions. 2017-03-18 13:11:40 -07:00
Ebag333
fbcd8396db Few little tweaks 2017-03-18 12:55:53 -07:00
Ebag333
b1be2eee06 Add unhandled exception handler. Now catches problems and will try and output to the pyfalog, falling back to outputting to the console. 2017-03-18 12:37:23 -07:00
Ryan Holmes
bca26721ff Merge pull request #1057 from Ebag333/Moar_Logging!
Fit service logging
2017-03-17 21:41:13 -04:00
Ebag333
301e874cd4 Add a ton of logging to the fitting service 2017-03-17 16:05:09 -07:00
blitzman
2ff66970ad remove __all__ from contect menus 2017-03-16 19:05:07 -04:00
Ryan Holmes
58142664cc Merge pull request #1051 from Ebag333/Fix_PR943
Fix bad merge of #943
2017-03-16 18:58:09 -04:00
Ryan Holmes
73f6a68b9d Merge pull request #1047 from Ebag333/Hotfix_Implant_ContextMenu
Hotfix - Implant ContextMenu
2017-03-16 18:54:04 -04:00
Ryan Holmes
b88f4bc77f Merge pull request #1050 from Ebag333/Hotfix_Matplotlib
Hotfix - Matplotlib import
2017-03-16 18:52:48 -04:00
Ebag333
e3c2220a1c Fix matplotlib importing 2017-03-16 14:09:10 -07:00
Ebag333
26238e731d Fix matplotlib importing 2017-03-16 10:22:40 -07:00
Ebag333
717db2f906 Further pyfa.py refactoring 2017-03-16 09:40:17 -07:00
Ebag333
1c59a27902 Fix typo and missing setting
(cherry picked from commit c122047)
2017-03-16 08:40:18 -07:00
Ebag333
6ce52a1da9 PEP8 cleanup
(cherry picked from commit 63f2f85)
2017-03-16 08:40:14 -07:00
Ebag333
f2a0e42810 Rework error dialog to have better layout and more information 2017-03-16 02:13:02 -07:00
Ebag333
63f2f85c25 PEP8 cleanup 2017-03-16 02:12:26 -07:00
blitzman
80375d1f5b Merge branch 'master' into development 2017-03-15 20:19:22 -04:00
blitzman
20ac2ad847 bump dev 2017-03-15 20:19:05 -04:00
blitzman
3b5fc7e13c Bump stable 2017-03-15 20:10:08 -04:00
blitzman
73a12aedeb Fix for #1041 2017-03-15 20:05:38 -04:00
blitzman
2ce6592048 Merge branch 'development' 2017-03-15 20:01:01 -04:00
Ebag333
a588aec978 Simple change to not try and reimport handlers if they have failed previously. 2017-03-15 15:53:40 -07:00
blitzman
8b124f3194 Merge branch 'development' of https://github.com/pyfa-org/Pyfa into development 2017-03-15 00:03:01 -04:00
blitzman
588ac62b6f fix for #1039 2017-03-15 00:02:48 -04:00
Ryan Holmes
63001d83b9 Merge pull request #1037 from Ebag333/Fix_Outgoing_Minimal_View
Fix outgoingMinimal view
2017-03-15 00:00:43 -04:00
blitzman
1112415f93 update eve database 2017-03-14 19:40:44 -04:00
blitzman
4633a1c136 some clean up 2017-03-14 19:22:18 -04:00
Ebag333
8991e1dbad Fix the view. Not sure why it broke (it was working at one point). 2017-03-13 20:09:37 -07:00
blitzman
d5f6f7b37c Disable "minimal" selection for remote reps pane (doesn't work) 2017-03-13 21:49:31 -04:00
blitzman
4ffec21cd3 Add real icons for the new pref pages 2017-03-13 21:46:56 -04:00
Ebag333
9d34c2a2e6 Add TODO 2017-03-13 11:52:18 -07:00
Ebag333
4f12caa05f Remove test variable 2017-03-13 11:30:07 -07:00
Ebag333
649ba71c0f Make sure overrides are enabled before we return override values 2017-03-13 11:15:14 -07:00
Ebag333
af5a9b31bc Fix another hidden import (move to top) 2017-03-13 11:09:12 -07:00
Ebag333
b72304203c Add default option to getOriginal. This eliminates some double lookups and simplifies the code. 2017-03-13 10:56:33 -07:00
Ebag333
f70d250995 Cleanup code. Use slightly faster comparison (is instead of isinstance). Rename OVERRIDES variable to eliminate confusion. 2017-03-13 10:11:15 -07:00
blitzman
a4d07a4611 Revert "Merge pull request #1008 from Ebag333/local_tests"
This reverts commit 91b1b1dfc2, reversing
changes made to 53937d1723.
2017-03-11 20:02:10 -05:00
Ryan Holmes
91b1b1dfc2 Merge pull request #1008 from Ebag333/local_tests
Locale Testing
2017-03-11 19:34:53 -05:00
Ryan Holmes
53937d1723 Merge pull request #1023 from Ebag333/EosLoggingCleanup
Quick Eos cleanup and logging fix
2017-03-11 19:33:58 -05:00
Ebag333
46626e9a63 Kill another double lookup 2017-03-09 15:31:19 -08:00
Ebag333
b5626c13b1 Refactor __calculateValue 2017-03-09 15:16:52 -08:00
Ebag333
84de420002 Remove comment 2017-03-09 12:27:45 -08:00
Ebag333
99f939026f Refactor some logic in modifiedAttributeDict 2017-03-09 12:14:23 -08:00
Ryan Holmes
ad973dd51a Merge pull request #1034 from Ebag333/SpellingIsHurd
Spelling Is Hurd
2017-03-09 10:40:59 -05:00
Ebag333
9da485da55 Cleaning up tox errors that crept in by the pep8 gremlins. 2017-03-08 21:02:57 -08:00
Ebag333
da922601cd You say Potatoe, I say tomahtie 2017-03-08 20:59:53 -08:00
Ebag333
8322307ae0 Add tooltip for neut resist. Add handling missing attributes in getting modified value (return default, not exception). Tox fixes to clean up a little. 2017-03-07 09:45:34 -08:00
Ryan Holmes
58977810f9 Merge pull request #1030 from Will-W/new_tab
Add option to open fit in new tab
2017-03-06 21:14:51 -05:00
Will Wykeham
05facc6961 Remove semicolon caused by too much C programming 2017-03-06 14:03:27 +00:00
Will Wykeham
f8db54136e Add option to open fit in new tab
Works from context menu and on middle click - like a browser
2017-03-06 13:52:56 +00:00
Ryan Holmes
ce972ceddd Merge pull request #1029 from bjjerry/development
Fix for first low slot drag and drop
2017-03-06 00:09:23 -05:00
JJ Berry
9ad61c1e23 Need to enter if block in case of modPosition 0 as it refers to the first low slot 2017-03-05 18:54:17 -08:00
blitzman
1c4128b9a1 Change probe size cap to 1.08 (previous testing done apparently showed 1.1 - 1.12, however most people refer to 1.08 as the cap. 2017-03-05 17:01:00 -05:00
blitzman
2c4a2f7dd9 Fix probe size not updating #1026 2017-03-05 16:38:00 -05:00
blitzman
9befaf7c91 Test implementation of eos settings 2017-03-05 02:01:10 -05:00
Ryan Holmes
ab34b31219 Merge pull request #1022 from Ebag333/MoreLogging
Add additional logging to services
2017-03-01 00:44:43 -05:00
Ebag333
b9b56f5e73 kill another hidden import. 2017-02-28 19:23:01 -08:00
Ebag333
d28312f13b Slightly correction to the effective reload time for cycle time. 2017-02-28 18:57:12 -08:00
Ebag333
9134464a39 Fixes case that would generate a exception on the first fit calc (would trigger logging dumps for users). Also clean up a bunch of unnecessary try/exceptions, and some logging improvements 2017-02-28 11:28:41 -08:00
Ebag333
ff5d40dcd3 Add additional logging to services 2017-02-28 10:32:03 -08:00
Ebag333
9a284bc740 Add preference to disable ship browser tooltip popup. 2017-02-27 14:33:18 -08:00
Ebag333
d67573f83a Add more functionality to preferences window. 2017-02-27 12:05:38 -08:00
Ryan Holmes
c97a388fc4 Merge pull request #1018 from Ebag333/Merge_New_Pane
Changes required to implement the remote reps pane
2017-02-26 23:48:27 -05:00
Ebag333
370b58d500 Changes required to implement the remote reps pane 2017-02-26 12:42:39 -08:00
Ryan Holmes
dbffdedc92 Merge pull request #996 from Ebag333/PreferencesPaneV2
Preferences Pane V4
2017-02-26 15:14:05 -05:00
Ebag333
712b1811b3 Tox fixes 2017-02-26 11:30:23 -08:00
Ebag333
f2fa598ed7 Merge branch 'PreferencesPaneV2' of https://github.com/Ebag333/Pyfa into PreferencesPaneV2 2017-02-26 11:29:52 -08:00
blitzman
5283c50f84 Merge branch 'master' into development
Conflicts:
	config.py
	gui/utils/exportHtml.py
2017-02-26 14:28:46 -05:00
Ebag333
ee7dbd5208 Tox fixes 2017-02-26 11:28:18 -08:00
blitzman
821298b6d0 tox 2017-02-26 14:26:32 -05:00
Ebag333
dc6cde86c9 Merge branch 'development' into PreferencesPaneV2 2017-02-26 11:22:10 -08:00
blitzman
1826122381 Clean up some syntax (use isinstance) and tox stuff 2017-02-26 14:17:46 -05:00
Ebag333
fbf35edae2 Fix capitalization and set up some logging to help catch errors. 2017-02-26 11:09:56 -08:00
Ryan Holmes
70934e05e1 Merge pull request #943 from Ebag333/More_Variations
Add variations for: drones, fighters, boosters, and implants
2017-02-26 13:33:13 -05:00
blitzman
b235dddbe0 Clean up to the sorting of implants and bosoters 2017-02-26 13:31:56 -05:00
blitzman
fc45cef834 Change order of RR pane 2017-02-26 12:56:31 -05:00
Ebag333
a43de00153 Tox fixes 2017-02-26 09:55:32 -08:00
Ebag333
949144ab25 Embiggen the preference pane window. Change text, and clean up some unused imports. 2017-02-26 09:54:58 -08:00
Ebag333
68e75025be Finish migrate from #868. Lots of tox/formatting/inspection fixes to the files touched. 2017-02-26 09:54:58 -08:00
Ebag333
77e5bebf13 Migrate files from #868 2017-02-26 09:54:57 -08:00
Ebag333
2a72d10bfc Commit file so we can migrate over from old PR 2017-02-26 09:54:57 -08:00
Ebag333
5aa5732606 Initial rollup of #868 2017-02-26 09:54:57 -08:00
Ryan Holmes
3209459e6d Merge pull request #995 from Ebag333/Remote_Repair_Pane_v2
Remote Repair Pane v2
2017-02-26 12:51:13 -05:00
blitzman
0bc0cb7f82 wx tweaks 2017-02-26 12:27:14 -05:00
Ebag333
4e9d2a5e18 Rename file so pytest doesn't think it's a test. 2017-02-26 08:55:29 -08:00
Ebag333
915df1c731 Merge branch 'development' into PreferencesPaneV2 2017-02-26 08:53:56 -08:00
Ebag333
7eb193cbbb Delete test, the method being tested no longer exists. 2017-02-26 08:52:27 -08:00
Ebag333
b63c5fa1ff Tox fixes 2017-02-26 08:50:13 -08:00
Ebag333
e4d0f2dc6f Fix case where property gets reran multiple times. 2017-02-26 08:46:23 -08:00
blitzmann
767cb46d40 Merge branch 'development' into More_Variations
Conflicts:
	gui/builtinContextMenus/metaSwap.py
2017-02-26 02:24:38 -05:00
blitzmann
c430a2d798 Merge branch 'development' into Remote_Repair_Pane_v2
Conflicts:
	eos/mathUtils.py
	service/crest.py
2017-02-26 01:40:53 -05:00
blitzman
1c273210e9 tox fixes 2017-02-26 00:44:37 -05:00
Ryan Holmes
db4e5e05a4 Merge pull request #1012 from Ebag333/PropertiesPane
Add Properties Pane
2017-02-26 00:17:38 -05:00
Ryan Holmes
c6483c4b98 Merge pull request #986 from Ebag333/LogBook_v2
Logbook V2
2017-02-25 23:59:30 -05:00
blitzman
94c098cce3 Fix path and graphFrame issue. I could have sworn these were already fixed during the previous merge... 2017-02-25 19:06:39 -05:00
blitzman
6eddfd2694 Merge branch 'development' into LogBook_v2
Conflicts:
	gui/bitmapLoader.py
2017-02-25 19:03:56 -05:00
blitzman
cb15a3a1d6 Merge branch 'master' into development 2017-02-25 19:02:15 -05:00
blitzman
cd516f80bb bump dev 2017-02-25 19:01:57 -05:00
blitzman
1d9b85c043 Merge branch 'master' into development 2017-02-25 19:01:28 -05:00
blitzman
1ae5f64696 Here we go again! 2017-02-25 18:50:20 -05:00
blitzman
bf24e5f518 Fix for #1014 2017-02-25 18:47:03 -05:00
blitzman
7115cd178c Merge branch 'development' into LogBook_v2
Conflicts:
	config.py
	eos/saveddata/fit.py
	gui/bitmapLoader.py
	gui/graphFrame.py
	gui/utils/exportHtml.py
	pyfa.py
	service/crest.py
	service/price.py
	service/server.py
2017-02-25 18:21:07 -05:00
blitzman
6da806c9c5 Merge branch 'master' into development 2017-02-25 17:49:26 -05:00
blitzman
4895d76bea bump dev 2017-02-25 17:49:06 -05:00
blitzman
f527f9533e Bump stable for real 2017-02-25 17:38:14 -05:00
blitzman
5adfcbf343 Add links in the error dialog 2017-02-25 17:37:38 -05:00
blitzman
c0e0612e02 Merge branch 'errortest' 2017-02-25 17:12:19 -05:00
blitzman
4ba4a753cb Implement and error message if config fails 2017-02-25 17:12:09 -05:00
blitzman
3cbd154c8a Fix for #1013 2017-02-25 16:44:31 -05:00
blitzman
6ab936ef09 lol jk 2017-02-25 14:41:40 -05:00
Ebag333
3383153b66 Little cleanup 2017-02-25 11:23:07 -08:00
Ebag333
04b412dd5b Test walking subdirectories, and using new unicode path 2017-02-25 11:20:40 -08:00
Ebag333
ac20030612 Simple wx file dialog test 2017-02-25 10:52:52 -08:00
blitzman
083c5d1722 Bump stable 2017-02-25 13:23:21 -05:00
Ebag333
baec24ef14 get rid of unused method 2017-02-24 21:28:23 -08:00
Ebag333
df7f0b20f5 Tox cleanup 2017-02-24 21:25:13 -08:00
Ebag333
e5e3133869 Catch exceptions if we get them from a property. Exceptions are bad, but not showing the window is worse. 2017-02-24 21:18:38 -08:00
Ebag333
ca6ef546e5 Add debug pane for item stats 2017-02-24 18:09:22 -08:00
Ebag333
c24798ad2f Clean up last reference and finish nuking floatfloor. One less method! (ouch my test!) 2017-02-24 17:07:05 -08:00
Ebag333
3411eca1e7 Fix a couple pep8 issues, and clean up other folks pep8 misses. :) 2017-02-24 16:34:32 -08:00
Ebag333
43073069c7 Fix merge conflict. 2017-02-24 16:25:31 -08:00
Ebag333
db330ad035 Merge remote-tracking branch 'origin/Remote_Repair_Pane_v2' into Remote_Repair_Pane_v2
# Conflicts:
#	eos/saveddata/fit.py
2017-02-24 16:15:39 -08:00
Ebag333
b3c7273681 implement a suggestion or six from @blitzmann. Fix a bunch of low level bugs (unlikely to have been noticed since we don't really expose those stats). Add some properties instead of referencing the attribute directly. 2017-02-24 16:10:54 -08:00
blitzman
3892ac5996 Change functionality of remote rep calculations to be more efficient.
* Implement a property per attribute
* Use None as our cleared value (signifies that it really hasn't been calculated, not just that the calc was 0)
2017-02-24 18:33:42 -05:00
Ryan Holmes
249841c0db Update pyfa.spec 2017-02-24 16:55:22 -05:00
Ryan Holmes
8900674b72 Merge pull request #978 from Ebag333/OneClickBuilds
One Click Builds
2017-02-24 16:52:58 -05:00
Ebag333
5ca882d3ea implement a suggestion from @blitzmann 2017-02-24 13:06:02 -08:00
Ebag333
516ff6f8e6 Fix .gitignore so it stops ignoring pyfa.spec. RUDE! 2017-02-24 12:14:39 -08:00
Ryan Holmes
dc9c481b80 Merge remote-tracking branch 'blitzmann/unicodetests' 2017-02-24 09:54:50 -05:00
Ebag333
5c55290944 rename some tests 2017-02-24 04:04:43 -08:00
Ebag333
86a145f01c some cleanup 2017-02-24 03:47:21 -08:00
Ebag333
78597a8554 Add hebrew and chinese 2017-02-24 03:34:16 -08:00
Ebag333
0288ba6012 Initial submission for locale testing 2017-02-24 03:27:29 -08:00
blitzman
bada45ec69 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2017-02-24 00:11:30 -05:00
blitzman
ee407913c3 Fix for #1005 2017-02-24 00:11:24 -05:00
blitzman
6e643d7579 Encode the SSL paths for frozen environments (to fix #548) 2017-02-23 23:53:57 -05:00
Ryan Holmes
b8c771f747 Merge pull request #1006 from Ebag333/Pyfa_tests
Tests for Pyfa
2017-02-21 11:04:50 -05:00
Ebag333
a07e1d8f3a Test actual correct value, not the wrong value that was being generated by old hacky method. 2017-02-21 07:43:04 -08:00
Ebag333
565a78610e Fix floorfloat, and pep8 fixes for tests 2017-02-21 07:38:32 -08:00
Ebag333
cdbf4cf5ec Initial pass at tests 2017-02-20 16:35:53 -08:00
Ryan Holmes
ec5c7e5d0e Update README.md 2017-02-20 00:43:58 -05:00
blitzman
b583589849 Remove unicode path fixes for now to better test original problems 2017-02-19 01:01:12 -05:00
blitzman
c3144088ca Fix CREST login (#998). Also flesh out a two-step process:
Step 1: get a page that lets the user know we're processing request. Do whatever we need to do with the hash (in the case of implicit mode), and then refresh to step 2
Step 2: process response, and return error / success message.
2017-02-18 21:59:18 -05:00
Ryan Holmes
7df3fe266e Merge pull request #1002 from Ebag333/matplotlib_import_fix
Matplotlib Import Fix
2017-02-18 18:17:17 -05:00
blitzman
b351befa97 Fix for #1000 2017-02-18 18:14:21 -05:00
blitzman
3925386109 bump dev 2017-02-18 18:14:03 -05:00
Ebag333
cdf392e3e5 Change matplotlib to be imported at the top and not use the import hack. Slows down the startup times slightly, but much simpler. 2017-02-18 10:15:06 -08:00
blitzman
e51ca85e26 Bump stable 2017-02-16 23:16:02 -05:00
blitzman
4ba11d832a Tox fixes, because it's a thing we do now 2017-02-16 23:12:25 -05:00
blitzman
66d78fed2c Add indication in character name of alpha status 2017-02-16 23:09:27 -05:00
Ebag333
e8101f9410 Embiggen the preference pane window. Change text, and clean up some unused imports. 2017-02-16 10:45:28 -08:00
Ebag333
56f1e9ed3a Finish migrate from #868. Lots of tox/formatting/inspection fixes to the files touched. 2017-02-16 09:59:56 -08:00
Ebag333
fff67906d6 Migrate files from #868 2017-02-16 08:20:09 -08:00
Ebag333
343331c667 Commit file so we can migrate over from old PR 2017-02-16 08:16:08 -08:00
Ebag333
201d596c80 Initial rollup of #868 2017-02-16 07:38:43 -08:00
blitzman
6f733394f7 Fix ICS / Mining Boost skill bonus (#892) 2017-02-16 00:26:11 -05:00
blitzman
b164b86eda Fix context menu order 2017-02-16 00:18:09 -05:00
Ebag333
eb97a1c11c Add tooltip and also a minimal version of the view (for future state). 2017-02-15 19:11:32 -08:00
Ebag333
13996d7770 Stupid change list making me miss files. 2017-02-15 18:50:35 -08:00
Ebag333
6e04707457 Commit *ALL* the files. 2017-02-15 18:25:11 -08:00
Ebag333
25b17a221c Update to current version 2017-02-15 18:23:14 -08:00
blitzman
de50bbb16f Update effect files 2017-02-15 21:14:40 -05:00
blitzman
e835cb7f8c update database 2017-02-15 21:12:05 -05:00
blitzman
7fea0c9431 Add migration script for #728 2017-02-15 21:01:58 -05:00
blitzman
bcd045ae4e tweak 2017-02-15 21:01:36 -05:00
blitzman
3f46db55b6 Merge remote-tracking branch 'ebag/ActiveDroneStacking' 2017-02-15 21:01:28 -05:00
Ebag333
93e7b4f5cf Cherry pick d033e4a8d919664d3ae210098291e38df71d3256 2017-02-15 17:23:53 -08:00
Ebag333
a865028420 Remove litter. 2017-02-15 15:42:46 -08:00
Ebag333
489637ec67 Handle this at a lower level. 2017-02-15 09:20:22 -08:00
Ebag333
71ca7d153e Check if we have active drones when merging, if we do make them all active to avoid getting weird scenarios (like deactivating stacks, or only activating parts of stacks). Fixes #728 2017-02-15 08:59:54 -08:00
blitzman
0a37834fd8 Disable the global module ammo picker for now 2017-02-14 23:20:23 -05:00
blitzman
0cc279b351 pass the damn tox 2017-02-14 23:06:33 -05:00
blitzman
06baa10cdc Fix for #991 2017-02-14 20:33:27 -05:00
blitzman
c406102995 remove redundant inits 2017-02-14 20:30:34 -05:00
blitzman
0dc3eda99f Merge branch 'development' of https://github.com/pyfa-org/Pyfa into development 2017-02-13 23:27:40 -05:00
blitzman
2dca9fc3f3 Fix stuff in system pricing feature 2017-02-13 22:27:03 -05:00
blitzman
97cdd751b8 Fix up the CREST server thread to make it a bit more robust, as well as fixing issue in which thread may never die 2017-02-13 21:56:12 -05:00
Ebag333
159472f82c Tox fixes, and convert all logging string replacement to a standard style. 2017-02-13 13:38:21 -08:00
Ebag333
be9eaa0859 Fix timer, make logging less annoying when at Info or higher level. Only show command bonus logspam if there is any. 2017-02-13 13:25:42 -08:00
Ebag333
35e330f574 Improve handling for exceptions, output more information so we can find and fix problems. 2017-02-12 13:09:26 -08:00
Ebag333
e7a5cb4b1d Don't show both messages if we don't have the zip files 2017-02-12 12:21:57 -08:00
blitzman
c9c29da803 Avoid fit recalc when setting state has no effect 2017-02-11 23:55:19 -05:00
blitzman
2527fe2e1e Fix the fix for the crash in OS X 2017-02-11 22:20:32 -05:00
blitzman
a4de0f2b5b Fix crash in OS X 2017-02-11 22:10:53 -05:00
blitzman
401d0d58d5 Merge branch 'development' 2017-02-11 21:42:48 -05:00
Ebag333
441b3f1646 Handle print() messages when not frozen and in debug. We only want to exclude handling stacktraces, so the IDE gets clickable line numbers. 2017-02-11 11:59:49 -08:00
Ebag333
3b185e1bcb Roll up all changes from #962 as the base has been massively changed by code cleanups. Rename our logging to a universal pyfalog to avoid shadowing either Logging or Logbook loggers 2017-02-11 11:51:53 -08:00
Ryan Holmes
beed414429 Merge pull request #984 from Ebag333/FixToxIssues
Tox fixes, and catching a few things lost in the merge.
2017-02-11 13:01:33 -05:00
Ryan Holmes
99b2fdefcc Merge pull request #985 from Ebag333/Travis_Icon
Add Travis Icon
2017-02-11 12:59:21 -05:00
Ebag333
9ec6a829c2 Revert the revert of the revert.....or something. 2017-02-11 09:47:23 -08:00
Ebag333
913f70b24d Fix copy/pasta 2017-02-11 09:41:26 -08:00
Ebag333
5a4d68684e Add Travis Icon 2017-02-11 09:38:10 -08:00
Ebag333
096842de44 Tox fixes, and catching a few things lost in the merge. 2017-02-11 09:23:23 -08:00
blitzman
81e5b33bc9 Few tweaks for price system selection 2017-02-11 11:36:53 -05:00
blitzman
5c91f29efb Merge branch 'price-system-selection' of git://github.com/petosorus/Pyfa into petosorus-price-system-selection
Conflicts:
	gui/builtinPreferenceViews/pyfaGeneralPreferences.py
	gui/builtinStatsViews/priceViewFull.py
	service/fit.py
	service/price.py
2017-02-11 11:36:35 -05:00
blitzman
bfcb73f344 Fixes for #952 2017-02-11 11:12:10 -05:00
blitzman
a2ca5eb8a4 fix oops 2017-02-11 11:01:39 -05:00
blitzman
f34e564ccd Merge branch 'MatPlotLib' of https://github.com/Ebag333/Pyfa into Ebag333-MatPlotLib
Conflicts:
	gui/graphFrame.py
2017-02-11 10:53:24 -05:00
blitzman
0cba428c81 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2017-02-11 10:48:11 -05:00
blitzman
423a433e16 Merge branch 'SorryNotSorryBlitzmann' into development 2017-02-11 10:47:22 -05:00
blitzman
bdee8f662c Merge remote-tracking branch 'ebag/SorryNotSorryBlitzmann' into SorryNotSorryBlitzmann 2017-02-11 10:46:59 -05:00
blitzman
62bb550afd Add shortcut indication for fitting search tooltip 2017-02-11 10:15:01 -05:00
Ebag333
3562577521 Tox fix, and catch an extra shadowing 2017-02-10 12:06:23 -08:00
Ebag333
8c7682c6d4 Little more OCD on cleaning up imports. 2017-02-10 12:02:23 -08:00
Ebag333
2b45a16872 Refactor most of the shadowing from outer scopes. This is a super simple change, just changing the variable used inside (mostly) lambdas. 2017-02-10 11:50:04 -08:00
Ebag333
73cc17ce72 Clean up some more import statements 2017-02-10 11:29:52 -08:00
Ebag333
07a2020303 Don't try and import an old version and then fail back to the 2.7 version. Just do the 2.7 version. :) 2017-02-10 11:22:06 -08:00
Ebag333
0fc45ead6e Catch missing import 2017-02-10 11:16:51 -08:00
Ebag333
6b37e2c973 More clean handling of possibly missing attributes. Thanks @blitzmann! 2017-02-10 10:09:11 -08:00
Ebag333
cdabd83afe Remove old init 2017-02-10 07:19:33 -08:00
Ebag333
f610f525ba Use getattr directly, insead of doing a check then setting it (yay for defaults) 2017-02-10 06:44:40 -08:00
Ebag333
514f927a56 Revert removing call. This class likely needs to be callable. 2017-02-10 05:50:32 -08:00
Ebag333
3c641606da Revert until we actually get a Linux developer. 2017-02-10 05:41:06 -08:00
blitzman
af44d878d1 tweak 2017-02-10 00:57:53 -05:00
blitzman
72ebafe925 Remove redundant init 2017-02-10 00:37:45 -05:00
blitzman
134365c764 Reverts commit de87c9, and instead uses the mod variable to access the method needed.
Conflicts:
	service/fit.py
2017-02-10 00:29:40 -05:00
petosorus
b6871c72ca Merge remote-tracking branch 'origin/price-system-selection' into price-system-selection
# Conflicts:
#	gui/builtinStatsViews/priceViewFull.py
2017-02-09 23:33:14 +01:00
petosorus
aaece725aa Saving price system preference 2017-02-09 23:26:31 +01:00
Ryan Holmes
ef6da6a96b Merge pull request #981 from Ebag333/FixCommandBurstType
Fix command burst typo for target painters
2017-02-09 17:22:10 -05:00
Ebag333
df9daf9b4b Fix typo 2017-02-09 14:08:55 -08:00
Ebag333
228425fdb9 Cast to int so we can compare 2017-02-09 14:07:37 -08:00
Ebag333
9775d1064e Move import code down into class init 2017-02-09 13:27:54 -08:00
Ebag333
1a9591d411 pyCharm inspection and code style 2017-02-09 10:56:26 -08:00
Ebag333
64070a0798 Revert commit 7865219164 This causes too much grief as we are getting a lot of default values from the database. These *SHOULD* be defined, but will have to be done later. 2017-02-09 09:36:16 -08:00
petosorus
bfa772609a Transfer of the price dropbox in the preferences pane.
Moving of the modules list compiling from priceview to price service.
2017-02-09 18:27:26 +01:00
petosorus
d15acf89ba refresh modules price view 2017-02-09 18:27:26 +01:00
petosorus
d25673b8fe Price listing price panel 2017-02-09 18:27:26 +01:00
Ebag333
dd9924a7a7 Fix issues where we assume something can exist when it may not. 2017-02-09 07:22:09 -08:00
Ebag333
0f00b7237a Another classic class conversion 2017-02-09 01:02:55 -08:00
Ebag333
579a13da44 Tox fixes 2017-02-09 00:59:22 -08:00
Ebag333
7865219164 Add a ton of default values 2017-02-09 00:56:33 -08:00
Ebag333
f2c84692a9 Clean up a bunch of unused variables 2017-02-09 00:22:14 -08:00
Ebag333
f61aeb8285 Fix bug where the toggle button the compare pane didn't do anything. (Need to check toggleView because you can hit both first and second if otherwise.) 2017-02-09 00:18:19 -08:00
Ebag333
11d7f9d029 Make modules static if they do not use self. 2017-02-09 00:04:41 -08:00
Ebag333
72633825cf Formatting and layout changes 2017-02-08 23:32:51 -08:00
Ebag333
9a137bb158 Convert old style classes to new 2017-02-08 23:06:39 -08:00
Ebag333
32944f4c9c More import fixes 2017-02-08 22:47:02 -08:00
Ebag333
23c6f2add5 We have two of the exact same backported file. Get rid of one. Also, handle the except if we can't import so we don't get stacktraces. (Currently the three functions affected are not used.) 2017-02-08 22:42:19 -08:00
Ebag333
e535f050c1 Disable inspection of writing to some wx properties. These do seem to get written, so it is likely pyCharm doesn't understand wx 2017-02-08 22:32:12 -08:00
Ebag333
7a2feb9152 Fix a bunch of calls to functions that pass the wrong type of parameter, the wrong number, etc. 2017-02-08 22:20:56 -08:00
Ebag333
3b91ec8c06 Move check for module state being valid out of effectHandlerHelpers and into service\fit. We can't have it there because of cyclical imports. Plus we're already checking the module state here, so makes lots of sense to merge them. 2017-02-08 21:24:24 -08:00
Ebag333
636474610b More of: Disable import inspections for wxPython, because it's not installed traditionally and we can't include it in requirements.txt 2017-02-08 20:16:58 -08:00
Ebag333
6e524de320 Disable import inspections for wxPython, because it's not installed traditionally and we can't include it in requirements.txt 2017-02-08 20:15:24 -08:00
Ebag333
3e916e42f2 pyCharm inspection fixes. Mostly variable refernce issues 2017-02-08 17:55:20 -08:00
Ebag333
de87c992d7 Remove calling es_Module from effectHandlerHelpers, this causes a circular import. Instead pass in from fit. 2017-02-08 16:50:41 -08:00
Ebag333
e5fb90f017 Fix commit message. LOTS of fixes for flake8. 2017-02-08 14:22:56 -08:00
Ebag333
a3501b925d update reqs
(cherry picked from commit 25c6b47)
2017-02-08 13:19:03 -08:00
Ebag333
e47b0f3c44 Add individual builds
(cherry picked from commit 0c30dba)
2017-02-08 13:18:59 -08:00
Ebag333
518f7c9e03 build improvements
(cherry picked from commit 4500bc1)
2017-02-08 13:18:51 -08:00
Ebag333
91d57ded8a Add cert
(cherry picked from commit b12cbaf)
2017-02-08 13:18:48 -08:00
Ebag333
86fd1be8b2 requirements for build
(cherry picked from commit 6992a15)
2017-02-08 13:18:34 -08:00
Ebag333
e18deb5eeb Roll up #967 and #974
Takes the import fixes and cleanup out of those and rolls it into this
one
2017-02-08 13:12:54 -08:00
Ebag333
a8fd7cf2e9 Matplotlib 2.0 support 2017-02-08 12:50:42 -08:00
Ryan Holmes
25182de365 Merge branch 'master' into development
Conflicts:
	gui/builtinViewColumns/baseName.py
2017-02-08 13:58:37 -05:00
Ryan Holmes
c90efb8d0a Fix emAmount > {type}Amount, some formatting tweaks 2017-02-08 09:41:59 -05:00
Ebag333
7a521c655f Wrap dlg.Destroy() in a Try/Except
Conflicts:
	gui/mainFrame.py
2017-02-08 00:15:02 -05:00
blitzman
8a9d2a032e Revert the try... except, see #960 2017-02-08 00:00:16 -05:00
Ryan Holmes
b1b3ff2637 Merge pull request #960 from Ebag333/Fueled_Booster_Misc_Column_Improvements
Add extra info for misc column for fueled boosters (cap, shield, and armor)
2017-02-07 23:59:07 -05:00
Ryan Holmes
752f9e77f5 Merge pull request #971 from Ebag333/ToxFixes2
Some additional Tox tweaks
2017-02-07 23:28:42 -05:00
blitzman
e52db0b2f5 Merge branch 'AncientDatabaseRepair' of https://github.com/Ebag333/Pyfa
Conflicts:
	service/prefetch.py
2017-02-07 23:26:06 -05:00
blitzman
ce9069af4a Fix projected fit view not showing projected fit count 2017-02-07 20:11:02 -05:00
blitzman
31d74730c5 Add matplotlib version to about window 2017-02-07 19:44:59 -05:00
blitzman
84867c6e67 fix oops 2017-02-07 19:22:31 -05:00
blitzman
f7d7b3fe5e Merge branch 'EosImportCleanup' of https://github.com/Ebag333/Pyfa into development
Conflicts:
	eos/db/gamedata/metaData.py
	eos/db/gamedata/queries.py
	eos/db/saveddata/queries.py
	eos/saveddata/fleet.py
	eos/types.py
	eve.db
	gui/builtinContextMenus/amount.py
	gui/builtinViewColumns/ammo.py
	gui/builtinViewColumns/ammoIcon.py
	gui/builtinViewColumns/capacitorUse.py
	service/port.py
2017-02-07 19:22:26 -05:00
blitzman
356c0c8be1 Merge branch 'master' into singularity 2017-02-07 19:08:30 -05:00
blitzman
f957c42e26 Merge branch 'development' 2017-02-07 19:08:10 -05:00
blitzman
ca311e5dec Line endings again 2017-02-07 19:07:22 -05:00
blitzman
3ccd4ad2ca Revert "Convert remaining files to CRLF"
This reverts commit a8ab876053.
2017-02-07 19:05:45 -05:00
blitzman
867fb30286 Merge remote-tracking branch 'origin/development' 2017-02-07 19:00:10 -05:00
Ryan Holmes
a8ab876053 Convert remaining files to CRLF 2017-02-07 11:01:40 -05:00
Ryan Holmes
dfc5627031 Remove circular import mainFrame <> mainMenuBar 2017-02-07 09:37:20 -05:00
blitzman
542542f48d import changes to graphframe 2017-02-07 00:33:15 -05:00
blitzman
5fda29e651 Merge branch 'master' of https://github.com/pyfa-org/Pyfa into development 2017-02-07 00:32:52 -05:00
blitzman
c25a07c95b Stuff 2017-02-07 00:32:45 -05:00
Ebag333
aafc850dbd Adhere to standards 2017-02-05 20:09:00 -08:00
Ryan Holmes
41ae8de99b Merge pull request #970 from Ebag333/ToxFixes
Tox fixes
2017-02-05 22:24:55 -05:00
Ebag333
808f070df4 Redisable dynamic import test until eos.types is gone 2017-02-05 16:28:16 -08:00
Ebag333
e4cd66be5c Add root to python paths 2017-02-05 16:21:07 -08:00
Ebag333
a638e991af Disable test 2017-02-05 16:05:56 -08:00
Ebag333
d67dbaa0ae .gitattributes fixing line endings 2017-02-05 15:39:23 -08:00
Ebag333
be66ff1eec Tox fixes 2017-02-05 15:39:07 -08:00
Ryan Holmes
603a8acdfc Update ISSUE_TEMPLATE.md 2017-02-05 17:57:18 -05:00
blitzman
86393d728f I can't get these files out of "modified". Just commit them to get them out of the way. 2017-02-05 17:56:36 -05:00
blitzman
e564e051a3 tweaks to issue template 2017-02-05 17:55:54 -05:00
blitzman
2ade7dc632 Add issue template 2017-02-05 17:45:35 -05:00
blitzman
a938845aa2 Remove weird file... I have no idea what this is... 2017-02-05 17:16:23 -05:00
blitzman
ba2205867e Test line endings with pyfa.py (see #964) 2017-02-05 17:12:45 -05:00
blitzman
d7ec04f995 test change to .gitattributes to specifically tell pyfa.py to save with LF line endings 2017-02-05 17:08:11 -05:00
blitzman
91baabd1b3 update database 2017-02-05 17:00:10 -05:00
blitzman
c3fdabd3a2 Merge branch 'development' 2017-02-05 16:52:27 -05:00
blitzman
3d8c76209d update database from master 2017-01-29 19:52:56 -05:00
blitzman
c2038a6cf2 Change from UPDATE to DELETE for null damage pattern and target resist names 2017-01-29 19:04:57 -05:00
blitzman
082ac233ad Merge branch 'MissingDamageTargetProfileNames' of https://github.com/Ebag333/Pyfa into development
Conflicts:
	service/prefetch.py
2017-01-29 15:04:56 -05:00
blitzman
5d46fe7e4d Merge branch 'master' into development
Conflicts:
	gui/builtinContextMenus/amount.py
	gui/builtinStatsViews/priceViewFull.py
	service/fit.py
	service/prefetch.py
2017-01-29 15:02:22 -05:00
Ebag333
32611e07c8 Fix syntax. Catch scenarios where none can be passed. 2017-01-29 10:12:16 -08:00
Ebag333
dd3316a1c2 Gets the multiplier bonus from the item rather than hard coding it to 3 2017-01-29 00:28:20 -08:00
Ebag333
1ebd54b282 Wrap getting attribute data in a try/except
Useful for when we try to get an sub-attribute on an object where the
attribute doesn't exist. Now returns the default value.
2017-01-29 00:27:45 -08:00
Ebag333
e524197a4d Revert "wrap getting attribute in at try/except"
This reverts commit f111c49cc6.
2017-01-29 00:25:55 -08:00
Ebag333
f111c49cc6 wrap getting attribute in at try/except
Catches if there's an attribute error.  Useful when we try and get an
attribute when the object doesn't even have it.
2017-01-29 00:25:42 -08:00
Ebag333
c567ee2c08 Clean up logic and generally make purdier 2017-01-29 00:16:32 -08:00
Ebag333
1a0ac7bb35 Allow default values to be passed in for modified attributes 2017-01-29 00:16:15 -08:00
Ebag333
34c69cf10f Some pep8 stuff 2017-01-28 21:56:03 -08:00
Ebag333
88125634d2 Add extra info for misc column for fueled boosters 2017-01-28 21:47:58 -08:00
blitzman
6049c9837c Remove prefetch thread (unneeded and consumes resources?) 2017-01-28 23:35:42 -05:00
blitzman
a76eef01de name all ze threads 2017-01-28 17:46:59 -05:00
blitzman
b3eb4f35cd Max out cargo amount to sys.maxint (#958) 2017-01-28 13:31:03 -05:00
blitzman
6b6dacf94c Fix traceback when trying to cancel an amount dialog with nothing in the field 2017-01-28 13:30:14 -05:00
blitzman
f010f2fef2 Don't loop through all amounts of cargo and drones just to get the price. (#958) 2017-01-28 13:15:25 -05:00
blitzman
a952f80ea4 min version for sqlalchemy 2017-01-28 01:29:08 -05:00
blitzman
6d34ae2960 fix 2017-01-27 23:35:19 -05:00
blitzman
d17ff000c7 Add migration for alpha clone character update 2017-01-27 23:12:08 -05:00
blitzman
6b3d3ecd93 More import fixes for osx deprecated 2017-01-27 22:25:22 -05:00
blitzman
32dc28f48d Move CREST import inside a conditional 2017-01-27 22:17:07 -05:00
blitzman
a210724312 Fix conversion imports for osx deprecated... :( 2017-01-27 22:06:52 -05:00
blitzman
1d69ed7584 Merge branch 'test_import' into development
Conflicts:
	gui/builtinContextMenus/amount.py
	gui/characterEditor.py
	gui/itemStats.py
2017-01-27 20:39:54 -05:00
blitzman
43e864e47b Fix issue in which -s flag was not being honored 2017-01-27 20:36:19 -05:00
blitzman
fb538027f7 Fix issues with paths and linux / os x 2017-01-27 20:30:11 -05:00
blitzman
cbf7f7d320 Merge branch 'master' into development 2017-01-27 19:39:10 -05:00
Ebag333
200023234c Give modules the special snowflake experience
Modules can legitimately have a null item value.  So don't catch null or
'', only 0's (which would be an invalid item ID).
2017-01-27 14:49:30 -08:00
Ebag333
fc99d6f0a6 catch duplicate selected ammo 2017-01-27 13:46:20 -08:00
Ebag333
e6b4ecdaf7 Additional cleanup for orphaned records 2017-01-27 13:37:51 -08:00
blitzmann
4111d670a7 Fix possible issue with floats coming through (see #729) 2017-01-26 23:52:18 -05:00
blitzmann
397084a9ff Disable rename and delete button for restricted character on character editor spawn (fix for #930) 2017-01-26 21:33:13 -05:00
blitzmann
968d633d46 Merge branch 'feature/alphaclones' into development 2017-01-26 19:53:27 -05:00
blitzmann
96c3363edc Merge branch 'master' into feature/alphaclones
Conflicts:
	eve.db
2017-01-26 19:39:13 -05:00
Ebag333
a853ed9960 Remove test variable 2017-01-25 18:17:05 -08:00
Ebag333
323a7060ec Fix import 2017-01-25 17:53:04 -08:00
Ebag333
d0fa2510e5 Merge branch 'test_import' of https://github.com/Ebag333/Pyfa into test_import 2017-01-25 17:40:00 -08:00
Ebag333
8d57f641f7 Remove comments about conversion 2017-01-25 17:39:54 -08:00
blitzman
055957567f Fix fit import 2017-01-25 20:28:57 -05:00
blitzman
5aff3f007e Fix crest export 2017-01-25 20:22:07 -05:00
blitzman
c34d86ba80 Fix XML exports 2017-01-25 20:12:30 -05:00
Ebag333
2038f36254 Remove calls to null pattern name cleanup 2017-01-25 13:52:00 -08:00
Ebag333
b1fc07a4cf Abstract out the SQL Query Execution
gives more granular error handling
2017-01-25 13:28:34 -08:00
Ebag333
a366420d65 Catch scenario where names are missing 2017-01-25 09:58:26 -08:00
Ebag333
8095b4852b Clean up another broken reference. Fix broken XML export. 2017-01-24 21:34:24 -08:00
Ebag333
cc3274f245 Add comment to note special snowflakes needs 2017-01-24 18:21:09 -08:00
Ebag333
fbde9ce7bf Fix passing the fit into exportXML 2017-01-24 18:13:57 -08:00
Ebag333
130fc189ad Merge branch 'test_import' of https://github.com/Ebag333/Pyfa into test_import 2017-01-24 17:37:42 -08:00
Ebag333
a50e4fcc46 Fix issue caused by file path and import fix merges 2017-01-24 17:37:37 -08:00
Ebag333
ae96ff244e Fix crest exports 2017-01-24 17:09:48 -08:00
blitzman
1b0cdeedce Fix lack of instance 2017-01-24 19:57:16 -05:00
Ebag333
992820ac42 Redirect to correct module
Function was moved from service.Fit to service.Port
2017-01-24 16:48:28 -08:00
blitzman
c0ecc6a329 tweaks to fix merge issues 2017-01-23 21:07:20 -05:00
blitzman
85131e6166 oh god this isn't gonna work
Merge branch 'ebag_importchanges' into test_import

Conflicts:
	config.py
	eos/db/saveddata/queries.py
	eos/effects/chargebonuswarfarecharge.py
	eos/effects/elitebonuscommandshipinformationhiddencs3.py
	eos/effects/elitebonuslogisticremotearmorrepairoptimalfalloff1.py
	eos/effects/energydestabilizationnew.py
	eos/effects/iceharvestingdroneoperationdurationbonus.py
	eos/effects/miningforemanstrengthbonus.py
	eos/effects/modulebonuswarfarelinkarmor.py
	eos/effects/modulebonuswarfarelinkinfo.py
	eos/effects/modulebonuswarfarelinkmining.py
	eos/effects/modulebonuswarfarelinkshield.py
	eos/effects/modulebonuswarfarelinkskirmish.py
	eos/effects/moduletitaneffectgenerator.py
	eos/effects/remotehullrepair.py
	eos/effects/rolebonusremotearmorrepairoptimalfalloff.py
	eos/effects/shipbonusforceauxiliarya4warfarelinksbonus.py
	eos/effects/shipmodesmallmissiledamagepostdiv.py
	eos/effects/structureenergyneutralizerfalloff.py
	eos/effects/structuremoduleeffectstasiswebifier.py
	eos/effects/structurerigmaxtargets.py
	eos/effects/subsystembonusamarrdefensiveinformationwarfarehidden.py
	eos/effects/subsystembonuscaldaridefensiveinformationwarfarehidden.py
	eos/effects/subsystembonusgallentedefensiveinformationwarfarehidden.py
	eos/effects/techtwocommandburstbonus.py
	eos/saveddata/fighter.py
	eos/saveddata/fit.py
	eos/saveddata/module.py
	eve.db
	gui/bitmapLoader.py
	gui/builtinContextMenus/itemStats.py
	gui/builtinStatsViews/miningyieldViewFull.py
	gui/builtinViewColumns/misc.py
	gui/builtinViews/__init__.py
	gui/builtinViews/fittingView.py
	gui/contextMenu.py
	gui/graphFrame.py
	gui/itemStats.py
	gui/mainFrame.py
	gui/marketBrowser.py
	service/__init__.py
	service/character.py
	service/fit.py
	service/port.py
	service/prefetch.py
	service/pycrest/eve.py
	service/settings.py
2017-01-23 21:06:12 -05:00
blitzman
330983d9dd Merge branch 'master' into development
Conflicts:
	eve.db
2017-01-22 21:10:06 -05:00
Ryan Holmes
1bb7c4e825 Merge pull request #945 from Ebag333/Patch_1111328
Update database to 1111328
2017-01-17 20:39:32 -05:00
Ryan Holmes
450e1427a1 Merge pull request #948 from Ebag333/MiningYield
Revert back to /s for mining. Adds /hour to tooltips.
2017-01-17 20:21:15 -05:00
blitzman
5614cec19d Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2017-01-17 20:18:21 -05:00
blitzman
3f24a4b2c5 Fix for #946 - citadel rig not increasing max targets 2017-01-17 20:18:12 -05:00
Ebag333
4e9e5735dc Revert "Add check for remote resistance"
This reverts commit 269565e959.
2017-01-17 10:03:14 -08:00
Ebag333
b1a6189c55 Revert back to /s for mining. Adds /hour to tooltips. 2017-01-17 09:29:22 -08:00
Ebag333
836504ee01 Expand gitattributes to cover a few more scenarios 2017-01-17 08:53:01 -08:00
Ebag333
269565e959 Add check for remote resistance 2017-01-17 00:28:44 -08:00
Ryan Holmes
e45027a66c Merge pull request #910 from Ebag333/UnicodePaths_v2
Unicode Paths 2: The Reckoning
2017-01-14 02:44:24 -05:00
Ebag333
2d3310d8e0 Update database to 1111328 2017-01-13 15:10:36 -08:00
Ebag333
ade47bed8b Add filtering for implants and boosters 2017-01-12 12:30:25 -08:00
Ebag333
ea12ec9cd1 Now can add 1000 ammo stacks or 5 drone stacks through context menu 2017-01-12 08:45:16 -08:00
Ebag333
3774e3bca0 add variations for drones, fighters, boosters, and implants 2017-01-12 01:24:26 -08:00
Ryan Holmes
77066f0389 Fix Rabisu effects (#941) 2017-01-11 15:06:50 -05:00
blitzman
5e0567ef4d Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2017-01-10 22:51:38 -05:00
blitzman
b49de4b0fa Update to 1108313 2017-01-10 22:51:27 -05:00
blitzman
372495a83a Remove vestigial appendage 2017-01-10 22:45:41 -05:00
blitzman
468a4644d6 Merge branch 'development'
Conflicts:
	eos/db/saveddata/queries.py
2017-01-10 22:42:01 -05:00
Ebag333
3c31391ec9 Burn types with fire 2017-01-09 22:36:19 -08:00
Ryan Holmes
29d0f102fd Move AT14 ships to the Limited Edition group (#935) 2017-01-05 11:38:47 -05:00
blitzman
ebc7173c50 Fix issues with unexpected module positions (see #932) 2017-01-04 23:48:37 -05:00
blitzman
43f1ac78a6 Keep subsystem module in the same position when swapping them out (see #932) 2017-01-04 23:17:56 -05:00
petosorus
9df54238d9 refresh modules price view 2017-01-05 00:18:20 +01:00
petosorus
fcd934319d Price listing price panel 2017-01-05 00:18:20 +01:00
petosorus
48ccc7ff06 System list 2017-01-05 00:18:17 +01:00
petosorus
edc48f0017 beginnings of price system choice 2017-01-05 00:17:56 +01:00
Ryan Holmes
d489fdd700 Merge pull request #913 from resinneublem/remember-user-filters-take2
Remembers user's meta filtering choices
2017-01-04 00:10:48 -05:00
blitzman
d6b1e4465e Merge branch 'test/cat-has-fits' 2017-01-03 01:32:50 -05:00
blitzman
5cbffcf3ac Handle counting number of fits per ship category more efficiently (see #819) 2017-01-03 01:32:12 -05:00
blitzman
c91723516e Do not calculate projected fits for command fits (see #931) 2017-01-02 23:54:06 -05:00
Ryan Holmes
a68f45d15a Merge pull request #927 from Ebag333/BurstProjectors
ECM Burst Projectors effect
2017-01-02 19:58:10 -05:00
Ryan Holmes
152a708ee8 Merge pull request #920 from Ebag333/Database_Cleanup
Database Validation and Cleanup
2017-01-02 19:25:26 -05:00
blitzman
a0ec13d2ed More tweaks 2017-01-02 18:45:08 -05:00
Ebag333
3313b7421f Move query logic into own function in queries. Tighten up flow in DB repair. Catch null values. 2017-01-02 13:41:39 -08:00
blitzman
a76ee6b2fc more tweaks 2017-01-02 12:07:15 -05:00
Ebag333
0056b704d4 Add other projector effects. Only allow it to affect the specific attribute it's modifying. 2017-01-02 03:18:54 -08:00
Ebag333
c1ead5fe27 change method for retreiving count 2017-01-02 00:29:44 -08:00
blitzman
85a89339a7 Cleaned up database corruption stuff 2017-01-02 00:58:54 -05:00
Ryan Holmes
55f82c48bc Merge pull request #929 from Ebag333/Character_Import_Sanitization
Add some sanity checks and validation of imported character data
2017-01-02 00:38:48 -05:00
Ebag333
f4761e099b Don't let people rename built in chars 2017-01-01 13:17:39 -08:00
Ebag333
be3696deba Add some sanity checks and validation of incoming data 2017-01-01 12:47:28 -08:00
Ebag333
cd41e9e9be Change to use skill rather than group, and modify correct attribute 2017-01-01 03:08:38 -08:00
Resin Neublem
d6db30b7fc We weren't setting user selection in all branches
I heavily refactored the button click handler to make it a little easier to understand
2016-12-28 19:54:37 -05:00
Ryan Holmes
fd066c2150 Merge branch 'Ebag333-EFTBoosterImports' into development 2016-12-28 17:46:33 -05:00
Ebag333
f9ba95b3de Check the ness to see if it's an implant, booster, or something else.
Log it if it's something else and don't try and import it. This prevents
a bad line from failing the entire import, and (hopefully) we know about
it.
2016-12-27 12:32:52 -08:00
Ebag333
7ee4d1d588 Try loading item as a booster if implant fails. 2016-12-26 23:29:22 -08:00
Ebag333
cef5842344 Database validation and cleanup 2016-12-26 21:54:52 -08:00
Resin Neublem
a7b6647135 Remembers user's meta filtering choices
There is a lot of logic that overwrites the user's choices of meta
filtering on every search.

That's a little too clever. Especially if the user is looking for
different variations of a certain meta.

If a user wants to include the other meta buttons they can re-add them
after filtering.

Extra care has to be taken with Windows. If a button is Enabled=False AND
SetValue=True, then it looks like it's Enabled=True, but clicking it
doesn't do anything. So we handle that logic in it's own class

closes: https://github.com/pyfa-org/Pyfa/issues/818
2016-12-19 22:39:56 -05:00
Ebag333
bef17e53c6 Recreating wheels 2016-12-19 00:11:55 -08:00
Ebag333
d4b6099d6e Handle unicode, utf8, and windows-1252
(cherry picked from commit 0d4f24a)
2016-12-18 14:11:55 -08:00
blitzman
ff60538e21 Revert "Merge branch 'Ebag333-UnicodePaths' into development"
This reverts commit 8a6ef788b3, reversing
changes made to cf91ae7627.
2016-12-18 15:56:06 -05:00
Ryan Holmes
50c6133046 Revert "Remembers user's meta filtering choices" 2016-12-18 10:09:55 -05:00
Ryan Holmes
b7d7b80544 Merge pull request #829 from resinneublem/remember-user-filters
Remembers user's meta filtering choices
2016-12-18 10:07:15 -05:00
blitzman
2b9342692d working commit 2016-12-18 09:45:26 -05:00
blitzman
a24e247f1b Merge branch 'master' into development
Conflicts:
	eos/effects/usemissiles.py
	eos/saveddata/fit.py
2016-12-18 09:24:39 -05:00
blitzman
3396056dae bump dev 2016-12-18 09:19:47 -05:00
blitzman
366d6c8971 bump stable 2016-12-18 08:00:19 -05:00
blitzman
14bf7ddf7a fix renders (revert back to previous ones) 2016-12-18 07:52:49 -05:00
blitzman
30cce09063 actually fix database 2016-12-18 06:27:37 -05:00
blitzman
9a50ebfc47 fix database 2016-12-18 05:51:22 -05:00
blitzman
0f05b60c20 Fix for #901 2016-12-18 05:47:56 -05:00
blitzman
4f8493d1bb Merge branch 'Ebag333-Patch_1105543' 2016-12-16 21:27:19 -05:00
blitzman
58dd629956 update db 2016-12-16 21:27:11 -05:00
blitzman
936b746954 update headers 2016-12-16 21:19:00 -05:00
blitzman
ef14bfac58 Merge branch 'Patch_1105543' of https://github.com/Ebag333/Pyfa into Ebag333-Patch_1105543 2016-12-16 21:16:07 -05:00
blitzman
291f73b661 fix for #905 2016-12-16 20:59:54 -05:00
blitzman
3d9dae0d52 fuuu 2016-12-16 20:50:36 -05:00
blitzman
017c37c4af Fix for #892 2016-12-16 20:49:42 -05:00
blitzman
ee0c852ddb Fix titan effects and issue in which all warefarebuffs may not get run (range too short). This should also shore up (#897) 2016-12-16 20:17:20 -05:00
blitzman
d63627a37b More cleanup 2016-12-16 19:26:54 -05:00
blitzman
b1c9e70f95 Merge branch 'command-refactor' 2016-12-16 19:20:44 -05:00
blitzman
3ac2fd870f clean up 2016-12-16 19:20:30 -05:00
Ebag333
af7272cd10 fix dual reference back to same object 2016-12-15 17:08:59 -08:00
Ebag333
d7c71f5d47 fix some, missed import references. 2016-12-15 16:17:10 -08:00
Ebag333
c858fc2859 Remove an inline import. Fix a reference that is missing. 2016-12-15 15:39:19 -08:00
Ebag333
f76f44e9f3 Fix port references, imports, and add some logging 2016-12-15 15:20:29 -08:00
Ebag333
4fb07cc1d0 Bunch of pep8 and inspection cleanup 2016-12-15 12:43:19 -08:00
Ebag333
658a87cbc0 Single line change to fix most (all??) of the problems 2016-12-15 12:10:03 -08:00
Ebag333
956fa7a8b7 Fixing some issues due to import cleanup 2016-12-14 13:06:13 -08:00
blitzman
0ebb992354 more clean up
(cherry picked from commit f198ff1)
2016-12-14 12:44:42 -08:00
blitzman
37f8253836 oops
(cherry picked from commit 0a28fb6)
2016-12-14 12:26:22 -08:00
blitzman
200ff5a1a4 Fix titan command effects
(cherry picked from commit 7875c2a)
2016-12-14 12:26:08 -08:00
blitzman
0d44cbf74a clean up path stuff
(cherry picked from commit d3e360b)
2016-12-14 12:24:35 -08:00
Stefan Dresselhaus
bb216aa6ed wrong index in tuple.
Array looks normally so:

(RunTime, Value, etc., etc.)
("normal", -10, ..., ...)

I guess "RunTime" got added and this is an artifact as it is rarely
called.

Fixes Orca-Mining-Boost onto itself and other ships.

(cherry picked from commit 0ba88d0)
2016-12-14 12:22:41 -08:00
Stefan Dresselhaus
eccf405ba8 fixed parameters in call when adding neuts to structures.
(cherry picked from commit 4f77dff)
2016-12-14 12:22:28 -08:00
blitzman
9df87f61cd bump dev
(cherry picked from commit 2b3e646)
2016-12-14 12:22:17 -08:00
blitzman
4186e19c65 bump stable
(cherry picked from commit e0e7478)
2016-12-14 12:22:10 -08:00
blitzman
57edc32a4b Clean up new tactical mode stats stuff
(cherry picked from commit c9bc234)
2016-12-14 12:21:00 -08:00
blitzman
9cfa0748ac fix for #871
(cherry picked from commit 70af2b0)
2016-12-14 12:20:42 -08:00
blitzman
df859a2132 Fix for #883
(cherry picked from commit 753b5c5)
2016-12-14 12:19:54 -08:00
blitzman
52257d60ac fix a couple command effects
(cherry picked from commit 9bb86b4)
2016-12-14 12:18:46 -08:00
blitzman
96ddb0bbff Fixed a few issues with command bursts
(cherry picked from commit 9071960)
2016-12-14 12:18:41 -08:00
Ebag333
b529a28715 Implement fittingMode
(cherry picked from commit 5eb2fef)
2016-12-14 12:18:34 -08:00
Ebag333
ea3a374ced Add logging, because why not
(cherry picked from commit 9403a1f)
2016-12-14 12:17:55 -08:00
Ebag333
2eacadf08f Don't use try for fittingView, and don't show remove item for modes.
(cherry picked from commit fd224d6)
2016-12-14 12:17:13 -08:00
Ebag333
1a127bb1a6 Add ability to look at tactical mode item info.
(cherry picked from commit f5776a0)
2016-12-14 12:16:51 -08:00
Ebag333
edfa130939 Fix tooltip order
(cherry picked from commit 61d1878)
2016-12-14 12:15:09 -08:00
blitzman
7fbd89392a Revert "Remove effect files that are not used by any item"
This reverts commit b29fa2467a.

(cherry picked from commit 4a95156)
2016-12-14 12:14:39 -08:00
Indiction
9f4b31979c Adding Fighter Support CREST
(cherry picked from commit ab5f348)
2016-12-14 12:14:11 -08:00
blitzman
9ecfc475e3 Bump dev, fix for #874
(cherry picked from commit b375d3c)
2016-12-14 12:13:55 -08:00
blitzman
84dc93ac54 bump release
(cherry picked from commit f160aed)
2016-12-14 12:13:02 -08:00
Ebag333
7532bcda08 Clean up some stuff left over from cherry picks 2016-12-14 10:42:04 -08:00
Ebag333
08b5abc7ad Handle unicode, utf8, and windows-1252
(cherry picked from commit 0d4f24a)
2016-12-14 10:38:56 -08:00
Indiction
38bf143704 Fighters for export and import functions
(cherry picked from commit 04c30e7)
2016-12-14 10:24:45 -08:00
Ebag333
a440ed3b37 Drop unicode
(cherry picked from commit 7fe7056)
2016-12-14 10:20:57 -08:00
Ebag333
39b7d9fdeb Change to shorthand unicode
(cherry picked from commit ab32a3a)
2016-12-14 10:20:53 -08:00
Ebag333
dfa728a486 Handle Lockbreaker, Void, and Focused Void Bombs
(cherry picked from commit ea3e5e2)
2016-12-14 10:20:48 -08:00
Ebag333
7bd8ca5a55 Removed actual fleet files. Cleaned up __init__.py that had references.
(cherry picked from commit b6c5183)
2016-12-14 10:20:20 -08:00
Ebag333
627977ab51 Purging fleet bonuses from code base
(cherry picked from commit 68f4570)
2016-12-14 10:18:19 -08:00
Ebag333
e3b592977a Make some imports more explicit 2016-12-13 23:49:37 -08:00
Ebag333
622a734405 remove lazy import. Fix test 2016-12-13 23:35:29 -08:00
Ebag333
28404cd8bb bajillion pep8 fixes to pass tox 2016-12-13 23:31:39 -08:00
Ebag333
be53dedb18 Large pep8 compliance to make work for Tox 2016-12-13 21:23:01 -08:00
blitzman
8ab6e26def Start refactoring the command burst effects in a way that's not complete and total shit (only slightly shit) 2016-12-13 23:55:56 -05:00
Ebag333
b2a5a20650 Travis and CodeCov files 2016-12-13 20:37:52 -08:00
Ebag333
57f930c83e Cherry pick commits from @a-tal 2016-12-13 20:35:03 -08:00
a-tal
b4dd65cf3e dont use built-in function format as a var name
(cherry picked from commit 74dd6cf)
2016-12-13 20:19:27 -08:00
a-tal
4a9b1df9b4 pep8 fixes
(cherry picked from commit 5dc43b2)
2016-12-13 20:18:57 -08:00
a-tal
874bfb3305 missed a type
(cherry picked from commit f416c77)
2016-12-13 20:18:04 -08:00
a-tal
ab9c925c47 non-standard - use forces coding declarations
(cherry picked from commit 6e17d88)
2016-12-13 20:17:56 -08:00
a-tal
d3b6bc1c93 so many pep8 fixes
(cherry picked from commit bee125d)
2016-12-13 20:16:44 -08:00
Ebag333
cd7d25e4e1 Add skill bonus 2016-12-13 14:28:43 -08:00
Ebag333
1e5e9122ae Change gate to handle missiles with 0 values 2016-12-13 14:09:56 -08:00
Ebag333
506c7d31ca Update DB. Add defender missile effect. 2016-12-13 13:48:58 -08:00
Ryan Holmes
54cc5abf21 Delete implants.py
This also shouldn't have been committed.
2016-12-13 13:49:19 -05:00
Ryan Holmes
18e913d9ba Delete iconIDs.yaml
this shouldn't have been commited. whoops
2016-12-13 13:48:47 -05:00
Ryan Holmes
180de97893 Merge pull request #738 from Ebag333/Remove-Command-Boosts
Purging fleet bonuses from code base
2016-12-12 00:54:06 -05:00
blitzman
f198ff1773 more clean up 2016-12-12 00:49:47 -05:00
blitzman
55c13d1ad0 Merge branch 'master' into Ebag333-Remove-Command-Boosts 2016-12-12 00:43:52 -05:00
blitzman
16505b30bf working commit 2016-12-12 00:43:42 -05:00
blitzman
95b3f0a21c Merge branch 'Remove-Command-Boosts' of https://github.com/Ebag333/Pyfa into Ebag333-Remove-Command-Boosts
Conflicts:
	eos/db/saveddata/fleet.py
	eos/db/saveddata/queries.py
	gui/additionsPane.py
2016-12-12 00:41:47 -05:00
blitzman
6adcfc52cd Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-12-12 00:27:41 -05:00
blitzman
0a28fb60df oops 2016-12-12 00:27:36 -05:00
Ryan Holmes
2bab1464ee Merge pull request #811 from Ebag333/requirements.txt
Requirements for Pyfa
2016-12-12 00:25:32 -05:00
blitzman
7875c2acaa Fix titan command effects 2016-12-12 00:24:50 -05:00
blitzman
49bf40484d Merge branch 'Ebag333-VoidBombs' into development 2016-12-11 23:27:40 -05:00
blitzman
07148f1e7f Merge branch 'VoidBombs' of https://github.com/Ebag333/Pyfa into Ebag333-VoidBombs
Conflicts:
	eos/effects/usemissiles.py
2016-12-11 23:27:30 -05:00
blitzman
8a6ef788b3 Merge branch 'Ebag333-UnicodePaths' into development 2016-12-11 23:06:23 -05:00
blitzman
d3e360b7c0 clean up path stuff 2016-12-11 23:03:09 -05:00
blitzman
b1bba74c5a Merge branch 'UnicodePaths' of https://github.com/Ebag333/Pyfa into Ebag333-UnicodePaths 2016-12-11 23:01:08 -05:00
blitzman
a954759012 GUI implementation of alpha clone switching 2016-12-11 22:51:48 -05:00
blitzman
90c1033437 add clone grades to the client extraction list 2016-12-11 20:27:27 -05:00
blitzman
191a065de1 Get skill limits working 2016-12-11 20:26:30 -05:00
Ryan Holmes
cf91ae7627 Merge pull request #890 from Drezil/master
fixed parameters in call when adding neuts to structures.
2016-12-11 19:17:25 -05:00
Stefan Dresselhaus
0ba88d081a wrong index in tuple.
Array looks normally so:

(RunTime, Value, etc., etc.)
("normal", -10, ..., ...)

I guess "RunTime" got added and this is an artifact as it is rarely
called.

Fixes Orca-Mining-Boost onto itself and other ships.
2016-12-11 21:56:17 +01:00
blitzman
b6420b9a4b Get alpha clones in the database 2016-12-11 15:44:14 -05:00
Stefan Dresselhaus
4f77dff6dd fixed parameters in call when adding neuts to structures. 2016-12-11 20:25:55 +01:00
blitzman
2b3e646213 bump dev 2016-12-11 14:18:48 -05:00
blitzman
e0e7478857 bump stable 2016-12-10 19:43:34 -05:00
Ryan Holmes
828d722be8 Merge pull request #807 from IndictionEve/ImportExportFighters
Fighters for export and import functions
2016-12-10 02:09:45 -05:00
Ryan Holmes
1ae55b34ee Merge pull request #886 from Ebag333/T3DRebalance
Add ability to look at tactical mode item info
2016-12-10 02:08:18 -05:00
blitzman
c9bc2341d1 Clean up new tactical mode stats stuff 2016-12-10 02:04:51 -05:00
blitzman
eba98fec33 Merge branch 'T3DRebalance' of https://github.com/Ebag333/Pyfa into Ebag333-T3DRebalance 2016-12-10 01:37:44 -05:00
blitzman
70af2b0df7 fix for #871 2016-12-10 01:27:17 -05:00
blitzman
753b5c5339 Fix for #883 2016-12-10 01:11:38 -05:00
blitzman
9bb86b4ee4 fix a couple command effects 2016-12-10 01:00:14 -05:00
blitzman
2702193337 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-12-09 00:07:44 -05:00
blitzman
907196018b Fixed a few issues with command bursts 2016-12-09 00:07:35 -05:00
Ebag333
5eb2fef89c Implement fittingMode 2016-12-08 18:56:43 -08:00
Ebag333
9403a1fce9 Add logging, because why not 2016-12-08 17:31:04 -08:00
Ebag333
fd224d6781 Don't use try for fittingView, and don't show remove item for modes. 2016-12-08 16:59:26 -08:00
Ebag333
f5776a0cb2 Add ability to look at tactical mode item info. 2016-12-08 13:12:15 -08:00
Ebag333
5b62419520 Add requirements for getting this to work on Travis-Ci 2016-12-08 10:05:22 -08:00
Ebag333
b9e5a47924 Remove gnosis 2016-12-06 13:46:09 -08:00
Ryan Holmes
545c48266c Merge pull request #880 from Ebag333/ECMTooltip
Fix tooltip order for ECM
2016-12-05 09:14:13 -05:00
Ebag333
61d1878494 Fix tooltip order 2016-12-04 22:36:22 -08:00
blitzman
4a95156e35 Revert "Remove effect files that are not used by any item"
This reverts commit b29fa2467a.
2016-12-04 23:10:09 -05:00
Indiction
ab5f3488e7 Adding Fighter Support CREST 2016-12-04 19:56:42 +01:00
Ebag333
510492e5e9 More refactoring, elimited another recursive import 2016-12-03 17:12:16 -08:00
blitzman
b375d3cb6c Bump dev, fix for #874 2016-12-03 18:28:48 -05:00
Ebag333
6ef57e735e Missed imports. Fixed now. 2016-12-03 06:21:52 -08:00
blitzman
f160aede3e bump release 2016-12-02 18:25:31 -05:00
Ebag333
ea8a4c01cb Eliminate export calling fit.py (no need)
Except for 1 (clipboardXML), same number of lines of code in mainFrame,
lots of code gone from fit, and no more complicated.  Also spotted an
import reference that got missed.
2016-12-02 12:50:49 -08:00
Ebag333
d963327ed4 Make it run again 2016-12-02 03:13:54 -08:00
Ryan Holmes
bb96b0af1a Merge pull request #828 from resinneublem/group-drones-for-dna-export
Groups drones before generating DNA
2016-12-02 01:05:37 -05:00
blitzman
34e3aa20ba Merge branch 'Ebag333-T3CSubRemoteRepEffect' 2016-12-02 01:02:27 -05:00
blitzman
5a846c36ab Merge branch 'T3CSubRemoteRepEffect' of https://github.com/Ebag333/Pyfa into Ebag333-T3CSubRemoteRepEffect
Conflicts:
	eos/effects/subsystembonusamarrdefensive2remotearmorrepairamount.py
	eos/effects/subsystembonuscaldaridefensive2remoteshieldtransporteramount.py
	eos/effects/subsystembonusgallentedefensive2remotearmorrepairamount.py
	eos/effects/subsystembonusminmatardefensive2remoteshieldtransporteramount.py
2016-12-02 01:02:17 -05:00
Ryan Holmes
7bd6344359 Merge pull request #790 from IndictionEve/miningyieldperhour
Mining Yield "per hour".
2016-12-02 00:52:00 -05:00
Ryan Holmes
b76e8df1bf Merge pull request #689 from MrNukealizer/RAH-v3
RAH v3
2016-12-01 01:06:24 -05:00
blitzman
5a0165282f Add reverse sorting / name column to sorting 2016-12-01 00:40:27 -05:00
blitzman
597d9f2612 Merge branch 'SortableCompare' of https://github.com/Ebag333/Pyfa into Ebag333-SortableCompare 2016-12-01 00:07:44 -05:00
blitzman
4d9c2898bf Fix orca effects (#866) 2016-12-01 00:07:24 -05:00
Ebag333
1854a21a50 Clicking on the name column now reverts back to default sorting 2016-11-30 13:17:50 -08:00
blitzman
0e4e7525e1 Add runtimes to command effects (defaulting to normal) 2016-11-29 23:18:35 -05:00
blitzman
5259df2828 Quick hack to run command boosts inside the runtime. See #839 2016-11-29 22:58:33 -05:00
blitzman
a5b5da6d27 Update developers 2016-11-28 21:24:17 -05:00
blitzman
b2cf4b8aa5 Delete broken references to in commandFits (#844) 2016-11-28 21:07:09 -05:00
Ryan Holmes
0d874f9ad1 Merge pull request #858 from Ebag333/RemoveIncorrectEffects
Remove Effects
2016-11-27 21:51:55 -05:00
blitzman
019b8e93b4 Remove effect files for effects that no longer exist 2016-11-27 21:33:47 -05:00
blitzman
b29fa2467a Remove effect files that are not used by any item 2016-11-27 21:32:44 -05:00
blitzman
8b17cbfbc8 Fix effects that utilize old commandBonus attribute, and update headers 2016-11-27 21:22:28 -05:00
blitzman
a445509d75 Revert removal of skill check in effect 2016-11-27 20:48:38 -05:00
Ryan Holmes
5a8eac21a3 Merge pull request #855 from Ebag333/MiningDroneRigFix
Fix Mining Rig Effect for Ice Harvesters
2016-11-27 20:47:30 -05:00
Ebag333
45480a0216 These 4 effects break processing, because the bonus gets set to 0 2016-11-27 13:35:56 -08:00
Ebag333
97f72f6df5 Add ability to sort compare list 2016-11-27 12:06:41 -08:00
Ebag333
466b2ac706 Fix multiple issues with effect 2016-11-26 23:15:19 -08:00
Ebag333
0d4f24ade9 Handle unicode, utf8, and windows-1252 2016-11-26 22:57:53 -08:00
tgraviou
2f2800c360 System list 2016-11-24 12:00:53 +01:00
blitzman
459d55c31a fix burst jammers 2016-11-23 21:18:20 -05:00
blitzman
7e98d29de0 Fix T3Ds (#835) 2016-11-23 21:12:00 -05:00
blitzman
6bd51ff0d5 Fix for missing market groups (#842) 2016-11-23 20:43:05 -05:00
blitzman
6500e6d467 Fix some drone effects (#840) 2016-11-23 20:01:56 -05:00
blitzman
abcce8879f Fix #834 2016-11-22 23:25:13 -05:00
blitzman
e30040c9fd Bump pre-release 2016-11-22 20:53:57 -05:00
blitzman
6bbfb8e837 Update database to final version for pre-release 2016-11-22 20:50:39 -05:00
blitzman
2ec203a3a2 Update renders 2016-11-22 20:47:28 -05:00
blitzman
4df22d2063 Add new icons 2016-11-22 20:44:56 -05:00
blitzman
bf16246825 Disable booster fit icon (for now) 2016-11-22 20:44:19 -05:00
blitzman
0eed01811c Conversion mappings 2016-11-22 20:36:52 -05:00
blitzman
96b3d5637a Fix industrial core effect 2016-11-22 20:04:57 -05:00
blitzman
4a09cbcec9 Merge branch 'Acendency-IndustrialCoreEffect' of https://github.com/Ebag333/Pyfa into Ebag333-Acendency-IndustrialCoreEffect 2016-11-22 20:00:00 -05:00
Ebag333
964493d701 add logi falloff 2016-11-22 16:52:53 -08:00
Ebag333
f1b9c788f3 Added falloffeffectiveness 2016-11-22 16:38:55 -08:00
Ebag333
a50f89db67 Added stacking penalties, fixed range buff 2016-11-22 16:36:19 -08:00
blitzman
0d94ffe27a Merge branch 'singularity' of https://github.com/pyfa-org/Pyfa into singularity 2016-11-22 18:45:27 -05:00
Ebag333
dc4c4c7353 Change to skill req 2016-11-22 15:03:21 -08:00
Ryan Holmes
8d4e0a259e Fix for #833 2016-11-22 15:35:04 -05:00
Ryan Holmes
91f87b02cc Merge branch 'EffectTest' of https://github.com/Ebag333/Pyfa into Ebag333-EffectTest
Conflicts:
	eos/saveddata/fit.py
	eos/saveddata/module.py
2016-11-22 12:34:10 -05:00
Ebag333
870e333605 Rebase from pyfa.org/master
# Conflicts:
#	eos/effects/boosterarmorhppenalty.py
#	eos/effects/boosterarmorrepairamountpenalty.py
#	eos/effects/boostercapacitorcapacitypenalty.py
#	eos/effects/boostermaxvelocitypenalty.py
#	eos/effects/boostermissileexplosioncloudpenaltyfixed.py
#	eos/effects/boostermissileexplosionvelocitypenalty.py
#	eos/effects/boostermissilevelocitypenalty.py
#	eos/effects/boostershieldcapacitypenalty.py
#	eos/effects/boosterturretfalloffpenalty.py
#	eos/effects/boosterturretoptimalrangepenalty.py
#	eos/effects/boosterturrettrackingpenalty.py
#	eos/saveddata/character.py
#	eos/saveddata/drone.py
#	eos/saveddata/fighter.py
#	eos/saveddata/mode.py
#	eos/saveddata/module.py
2016-11-21 22:21:25 -08:00
Ebag333
7ea3103c25 Updated docstring with more information 2016-11-21 22:02:16 -08:00
Ebag333
3aa60ac669 Make Effects Togglable 2016-11-21 22:02:16 -08:00
blitzman
81612cc32a Remove border from note box text area 2016-11-21 23:51:18 -05:00
Ryan Holmes
d3caee328f Merge pull request #799 from IndictionEve/ActiveFighterAbilities
Activate fighter standard attack and limit active fighters
2016-11-21 23:18:40 -05:00
blitzman
d5af6127e5 Tweaks 2016-11-21 23:02:29 -05:00
blitzman
5eb5fb3310 Merge branch 'drop-null-sec-com' of git://github.com/resinneublem/Pyfa into resinneublem-drop-null-sec-com 2016-11-21 22:56:01 -05:00
blitzman
8605bab4d4 Fix effects running when they shouldn't 2016-11-21 21:59:44 -05:00
Ebag333
1540c9463a Added unused attributes 2016-11-21 13:10:59 -08:00
Ebag333
130105ca9f Fixed attribute, removed duplicate 2016-11-21 12:53:57 -08:00
tgraviou
7eb3ad98fa beginnings of price system choice 2016-11-21 17:38:28 +01:00
blitzman
cb225eabb3 Get a working migration for command fits. 2016-11-20 22:06:26 -05:00
blitzman
72245d8ebe Fix bad merge 2016-11-20 21:53:49 -05:00
Ebag333
96505e4421 Industrial core for Rorq 2016-11-20 18:37:12 -08:00
blitzman
fbb1750528 Merge branch 'master' into singularity
Conflicts:
	eos/db/saveddata/fit.py
	gui/additionsPane.py
2016-11-20 20:52:23 -05:00
Ryan Holmes
dad63b6d77 Merge pull request #821 from resinneublem/notes-field
Adds a new notes pane for each fit
2016-11-20 20:48:02 -05:00
blitzman
14e69b1e59 Add "Command Fit" context menu 2016-11-20 19:19:03 -05:00
blitzman
883917d5d6 Add missing effects 2016-11-20 19:17:40 -05:00
blitzman
deeccc85a3 Fix command boosts (attributes renamed) 2016-11-20 19:08:23 -05:00
Resin Neublem
cfa57a70dc Remembers user's meta filtering choices
There is a lot of logic that overwrites the user's choices of meta filtering on every search.

That's a little too clever. Especially if the user is looking for different variations of a certain meta.

If a user wants to include the other meta buttons they can re-add them after filtering.

closes: https://github.com/pyfa-org/Pyfa/issues/818
2016-11-20 16:28:18 -05:00
blitzman
e6dfb1e90a Update some effects and headers 2016-11-20 16:04:32 -05:00
blitzman
e03d3278a0 Update effect headers 2016-11-20 15:37:55 -05:00
blitzman
eae4bb75e5 more fixes 2016-11-20 15:37:12 -05:00
Resin Neublem
e6dead2e27 Groups drones before generating DNA
Drones can and often are in different stacks due to bandwidth and skills. The DNA would mess up in these cases because they would include duplicate ids with different numbers.

This commit groups the drones by the itemID before generating the DNA.

closes: https://github.com/pyfa-org/Pyfa/issues/367
2016-11-20 15:25:30 -05:00
blitzman
59b854b00d Fix some effects 2016-11-20 15:25:27 -05:00
Resin Neublem
675533a732 Drops null-sec.com as an option
It seems like it would be a good idea to make this user configurable so they could enter whatever domain they want.

However with this entire HTML export feature being questionable, I didn't go that far. https://github.com/pyfa-org/Pyfa/issues/825

closes: https://github.com/pyfa-org/Pyfa/issues/826
2016-11-20 14:46:18 -05:00
blitzman
7751a2e072 Merge branch 'AscendencyPatch' of https://github.com/Ebag333/Pyfa into Ebag333-AscendencyPatch 2016-11-20 14:44:53 -05:00
blitzman
b4bbc82ba1 Merge branch 'master' into singularity
Conflicts:
	eos/db/saveddata/fit.py
	eos/effects/armoredwarfaremindlink.py
	eos/effects/elitebonuscommanddestroyerarmored1.py
	eos/effects/elitebonuscommanddestroyerinfo1.py
	eos/effects/elitebonuscommanddestroyerinfohidden1.py
	eos/effects/elitebonuscommanddestroyersiege1.py
	eos/effects/elitebonuscommanddestroyerskirmish1.py
	eos/effects/elitebonuscommandshiparmoredcs3.py
	eos/effects/elitebonuscommandshipinformationcs3.py
	eos/effects/elitebonuscommandshipinformationhiddencs3.py
	eos/effects/elitebonuscommandshipsiegecs3.py
	eos/effects/elitebonuscommandshipskirmishcs3.py
	eos/effects/miningforemanmindlink.py
	eos/effects/shipbonuscarriera4warfarelinksbonus.py
	eos/effects/shipbonuscarrierc4warfarelinksbonus.py
	eos/effects/shipbonuscarrierg4warfarelinksbonus.py
	eos/effects/shipbonuscarrierm4warfarelinksbonus.py
	eos/effects/shipbonusforceauxiliarya4warfarelinksbonus.py
	eos/effects/shipbonusforceauxiliaryc4warfarelinksbonus.py
	eos/effects/shipbonusforceauxiliaryg4warfarelinksbonus.py
	eos/effects/shipbonusforceauxiliarym4warfarelinksbonus.py
	eos/effects/shipbonussupercarriera5warfarelinksbonus.py
	eos/effects/shipbonussupercarrierc5warfarelinksbonus.py
	eos/effects/shipbonussupercarrierg5warfarelinksbonus.py
	eos/effects/shipbonussupercarrierm5warfarelinksbonus.py
	eos/effects/subsystembonusamarrdefensivearmoredwarfare.py
	eos/effects/subsystembonusamarrdefensiveinformationwarfare.py
	eos/effects/subsystembonusamarrdefensiveinformationwarfarehidden.py
	eos/effects/subsystembonusamarrdefensiveskirmishwarfare.py
	eos/effects/subsystembonuscaldaridefensiveinformationwarfare.py
	eos/effects/subsystembonuscaldaridefensiveinformationwarfarehidden.py
	eos/effects/subsystembonuscaldaridefensivesiegewarfare.py
	eos/effects/subsystembonuscaldaridefensiveskirmishwarfare.py
	eos/effects/subsystembonusgallentedefensivearmoredwarfare.py
	eos/effects/subsystembonusgallentedefensiveinformationwarfare.py
	eos/effects/subsystembonusgallentedefensiveinformationwarfarehidden.py
	eos/effects/subsystembonusgallentedefensiveskirmishwarfare.py
	eos/effects/subsystembonusminmatardefensivearmoredwarfare.py
	eos/effects/subsystembonusminmatardefensivesiegewarfare.py
	eos/effects/subsystembonusminmatardefensiveskirmishwarfare.py
	eos/saveddata/fit.py
	eos/saveddata/module.py
	gui/shipBrowser.py
	scripts/prep_data.py
	service/fit.py
2016-11-20 14:42:19 -05:00
blitzman
a0a0ec9b1f Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-11-20 14:29:18 -05:00
blitzman
26285cfc95 Tweaks 2016-11-20 14:28:51 -05:00
blitzman
6799e71f1a Merge branch 'projectedRightClickMenu' of git://github.com/IndictionEve/Pyfa into IndictionEve-projectedRightClickMenu 2016-11-20 14:19:45 -05:00
Ryan Holmes
8806c941a8 Merge pull request #816 from Ebag333/LimitLanaguage
Limit lanaguage from multi to en-us
2016-11-20 14:16:47 -05:00
Resin Neublem
78cbed516a Adds a new notes pane for each fit
This allows users to save text notes for each fit. They may do this for history, or usage, etc.
2016-11-20 14:11:42 -05:00
blitzman
2281fae615 Merge branch 'EosCodeCleanup-V2' of https://github.com/Ebag333/Pyfa into Ebag333-EosCodeCleanup-V2
Conflicts:
	eos/effects/mininginfomultiplier.py
2016-11-20 13:59:14 -05:00
Ryan Holmes
1192a0658a Merge pull request #806 from Ebag333/GitIgnore
Ignore temp files
2016-11-20 13:55:18 -05:00
blitzman
7f2ac25455 Remove fleet booster context menu on fit 2016-11-20 13:54:56 -05:00
blitzman
62a696cc4b Only apply command boosts when command module is active, and add t2 command burst effect 2016-11-20 13:21:59 -05:00
blitzman
11716f7f94 Add command processor effect 2016-11-20 03:22:28 -05:00
blitzman
180166156a Revert mining change (#771) 2016-11-20 02:51:15 -05:00
blitzman
3c8bab92b5 Add some missing effects 2016-11-20 02:17:57 -05:00
Ryan Holmes
cf361593a4 Merge pull request #771 from Ebag333/MiningCrystalBonus
Applied Mining Crystal Bonus to modules
2016-11-20 02:00:02 -05:00
blitzman
8ad639a122 Add titan command effects 2016-11-20 01:54:45 -05:00
blitzman
a7cd445cef Add Mining Burst effects 2016-11-20 01:33:22 -05:00
blitzman
380d74b333 Fix issue with gangboost not recalculating. We really should ensure that a command fit that has been calcuated does not need ot recalculate unless it's changed / is needed. But that's for a different time. 2016-11-20 01:14:40 -05:00
blitzman
eade4f0ebd Add the four main combat boost module effects 2016-11-20 00:59:07 -05:00
blitzman
08be50caf2 More work on command boosts 2016-11-19 23:53:49 -05:00
Ebag333
6a5c86b84f Should be all the Rorq and Orca effects. 2016-11-19 18:51:59 -08:00
Ebag333
1fb5bbc36e Effects used by Orca
first pass
2016-11-18 20:53:57 -08:00
Ebag333
d6edb57a10 Update to current TQ DB 2016-11-18 20:53:39 -08:00
Ebag333
d3fdf9854d Add versions
Updated Gnosis to point to at least the current version.

Pinned Requests as there's a bug in the most recent version. (Only applies to Python 3, but....)
2016-11-18 01:01:08 -08:00
Ebag333
3217980ada Revert "Switch Shield/Cap to using new formula"
This reverts commit d2a52e26b2.
2016-11-16 12:11:27 -08:00
Ryan Holmes
29b5a7433d Trying to flesh out how command boosts are gonna work. 2016-11-16 09:54:02 -05:00
Ebag333
5bca2d723e Change from multi to en-us only
Allows this to run in 32 bit Python.
2016-11-15 10:10:19 -08:00
Ebag333
d2a52e26b2 Switch Shield/Cap to using new formula
The old formula was surpsingly close in most scenarios.  It is, however,
hardcoded to 25% which isn't always peak cap/shield regen.
2016-11-14 05:27:16 -08:00
Ebag333
8a4fe1627e Requirements for Pyfa
Caught most of the main ones, I think.
(Yes I'm sneaking EVE-Gnosis in here, just so I don't have a conflict
when I submit the cap/shield sim fix)
2016-11-14 01:37:23 -08:00
Indiction
a9fb55fedd Add "projected" to selected fitting via shipbrowser right click menu 2016-11-13 20:48:44 +01:00
Indiction
04c30e70af Fighters for export and import functions 2016-11-10 23:28:21 +01:00
Ebag333
c0210895e9 Ignore temp files
These don't exist for long, but could catch them in a commit if you
clicked commit too quickly.
2016-11-09 07:44:24 -08:00
Ebag333
fe9917e620 Updated docstring with more information 2016-11-09 07:21:27 -08:00
Ebag333
a3dfa3b5ba Make Effects Togglable 2016-11-09 00:46:19 -08:00
blitzmann
34243b7b71 Get a working UI skeleton going for assigning boost fits 2016-11-08 19:36:57 -05:00
blitzmann
9fd81e8acd Copy projected view into a command view, first step to developing new command burst structure 2016-11-08 00:21:25 -05:00
Indiction
bbc4ef8146 Activate "standard attack" if available.
If there is no "standard attack" all other abilities set active except propmods
2016-11-07 23:28:27 +01:00
Ebag333
7fe7056c12 Drop unicode 2016-11-07 12:18:36 -08:00
Ebag333
ab32a3afb0 Change to shorthand unicode 2016-11-07 12:09:20 -08:00
Ebag333
ea3e5e273f Handle Lockbreaker, Void, and Focused Void Bombs 2016-11-07 10:27:51 -08:00
blitzman
6849478226 Change hyphens in fitting tooltip to unicode dashes 2016-11-06 21:51:33 -05:00
Ebag333
b6c5183d40 Removed actual fleet files. Cleaned up __init__.py that had references. 2016-11-06 16:38:21 -08:00
Ebag333
e5d65b97ce Merged changes from Pyfa.org\Master to branch 2016-11-06 16:33:28 -08:00
Indiction
6cda47be9f Activate all fighter abilities by default and deactivate fighter groups if more than the maximum number of fighters are in bay 2016-11-06 23:19:18 +01:00
Indiction
a0ef1a3d9b change to ternary operators (less ugly) 2016-11-06 20:37:24 +01:00
Indiction
ba47420577 Bugfix: Unable to handle ships without traits (Citadels) 2016-11-06 18:47:56 +01:00
Indiction
806f17545f Moved HTML remover into ShipItem and FitItem function 2016-11-06 16:36:12 +01:00
Indiction
f0f5b4c04c Tooltip to Ships and Fittings 2016-11-06 16:14:49 +01:00
Ebag333
ad76104033 Revert "Create variables before they are referenced. "
1dc15936ed

This is a problem for us.  See #794 for more details.
2016-11-04 14:18:18 -07:00
Ryan Holmes
c6e481efcf Merge pull request #791 from IndictionEve/OpenFittingsInNewPage
open fittings in new page by default
2016-11-04 12:48:23 -04:00
Ryan Holmes
2ad0c00c17 Merge pull request #792 from ppfeufer/patch-1
fixed link to development repository
2016-11-04 12:43:19 -04:00
Peter Pfeufer
26ab7d5e6f fixed link to development repository 2016-11-04 07:18:35 +01:00
Ebag333
832e7e6637 Revert moving projectionInfo out
Need to handle this better. :/
2016-11-03 22:15:40 -07:00
Ryan Holmes
8c7972ed78 Merge pull request #784 from Ebag333/Gitignore
Include more standard exceptions to gitignore
2016-11-03 15:01:23 -04:00
Ryan Holmes
05bbc14965 Merge pull request #789 from Ebag333/BurstJammerStrengthFix
Add Burst Jammer to effects modified by Scorpion hull bonus
2016-11-03 14:59:21 -04:00
Ryan Holmes
e7feee6878 Merge pull request #759 from minlexx/feature/proxy_auth
Add login/password for proxy authorization in network settings
2016-11-03 14:58:08 -04:00
Indiction
791ddcb9a1 load fitting in selected page if ctrl-key pressed and option active 2016-10-30 01:05:22 +02:00
Indiction
12d5a21982 Option to open fittings in a new page by default 2016-10-30 00:43:23 +02:00
Indiction
7493b92d83 Mining Yield set to "per hour". This is the way miners calculate. 2016-10-29 18:57:38 +02:00
Ebag333
e7c79e58b4 Use in instead of or, because that makes sense 2016-10-26 10:09:43 -07:00
Ebag333
0dbdbf7cfe Add Burst Jammer to effects modified by Scorpion hull bonus 2016-10-26 08:42:49 -07:00
Ebag333
f39ca66dbf Include more standard exceptions to gitignore 2016-10-23 13:20:45 -07:00
Ryan Holmes
8d80494b8d Merge pull request #783 from Ebag333/ExportHiddenAttribs
Implement new method for exporting values
2016-10-23 14:40:38 -04:00
Ebag333
058768baab Implement new method for finding values
Original method would only export values that were attached directly to
the ship.  New method starts from the modified dict, which will export
values without attribute IDs or original values.
2016-10-23 10:44:59 -07:00
blitzman
cfee6fdcd0 Add effects for command mindlinks 2016-10-23 03:02:47 -04:00
blitzman
34c95bea5d Apply command burst skills to the bursts and charges. Handle renamed items. 2016-10-23 02:34:29 -04:00
blitzman
50911c7fc8 test 2016-10-22 00:02:12 -04:00
Ryan Holmes
4e1f0f9cc6 Merge pull request #779 from Ebag333/ExportButton
Add button for exports
2016-10-21 22:29:40 -04:00
Ebag333
2b1abfc9b2 No longer refresh GUI. They can click the refresh button themselves, lazy jerks. 2016-10-21 19:28:54 -07:00
Ebag333
595c139ca8 Add button for exports 2016-10-21 10:53:47 -07:00
blitzman
6637feb3a6 Update to sisi 1086428 2016-10-20 00:43:45 -04:00
Ebag333
928246a8ca Even more PEP8 fixes!
Also, create a variable so we can't reference it and have it not exist.
Because that would be bad.
2016-10-19 14:26:46 -07:00
Ebag333
fd3e0bbebf Formatting and spacing 2016-10-19 14:14:34 -07:00
Ebag333
2a0a572b76 PEP8 formatting! \o/ 2016-10-19 14:03:31 -07:00
Ebag333
a314cd7cfd Revert adding the __init___ 2016-10-19 13:33:25 -07:00
Ebag333
cd28375019 Put some imports back. Prooooobably not needed but vOv 2016-10-19 13:32:57 -07:00
Ebag333
7cf4134a73 SQLAlchemy doesns't like is, requires ==
Oops.
2016-10-19 13:32:35 -07:00
Ebag333
44c76f0b98 Even more PEP8 cleanup 2016-10-19 12:29:33 -07:00
Ebag333
69a122a271 more PEP8 cleanup 2016-10-19 12:26:03 -07:00
Ebag333
0c0eb327f7 lots of PEP8 cleanup 2016-10-19 12:25:31 -07:00
Ebag333
74ce79ba8f Add inspection exception to ignore reassignment of self 2016-10-19 12:11:30 -07:00
Ebag333
1dc15936ed Create variables before they are referenced.
Resolves attribute reference validation errors in pyCharm
2016-10-19 12:08:35 -07:00
Ebag333
126fa7be29 remove trailing semicolon 2016-10-19 11:51:12 -07:00
Ebag333
d61251e9b3 Reformatting eos (root) 2016-10-19 11:46:26 -07:00
Ebag333
f9f53a13c0 Reformatting eos.saveddata 2016-10-19 11:42:45 -07:00
Ebag333
b4360d44f1 Reformatting eos.graph 2016-10-19 11:38:43 -07:00
Ebag333
574d575cad Reformatting eos.db 2016-10-19 11:37:28 -07:00
Ebag333
5e10339c20 Reformatting eos.db.saveddata 2016-10-19 11:33:29 -07:00
Ebag333
feb83cf737 Revert "Revert "Reformatting eos.db.gamedata""
This reverts commit 0ff4aec400.
2016-10-19 11:26:40 -07:00
Ebag333
0ff4aec400 Revert "Reformatting eos.db.gamedata"
This reverts commit e2944f6be7.
2016-10-19 11:24:03 -07:00
Ebag333
e2944f6be7 Reformatting eos.db.gamedata 2016-10-19 11:19:24 -07:00
Ebag333
3e842f30f1 Reformatting all effect files for readability and better PEP8 compliance 2016-10-19 11:16:32 -07:00
Ebag333
481619101b Reformatting for PEP8 standards 2016-10-19 11:09:13 -07:00
Ebag333
2ac66d87af commented out reload as not used 2016-10-19 10:54:59 -07:00
Ebag333
e818ce62c8 Removed line from legacy implementation 2016-10-19 10:54:47 -07:00
Ebag333
49851d1131 Removed unnecessary assignment (variable assigned later) 2016-10-19 10:37:59 -07:00
Ebag333
a8061c9276 Remove unnecessary backslash
and a bit of reformatting
2016-10-19 08:58:19 -07:00
Ebag333
4036ac8cd2 Move projectionInfo so it can't be referenced without being assigned 2016-10-19 08:53:11 -07:00
Ebag333
57bbbfcc3b Convert triple single quote docstring to triple double quote docstring
For better consistency
2016-10-19 08:39:12 -07:00
Ebag333
68f769aac2 Remove redundent parentheses 2016-10-19 08:37:07 -07:00
Ebag333
ef9bd3edc8 Change class method from self to cls
Better match coding standards
2016-10-19 08:33:28 -07:00
Ebag333
45f88a92dc Use list literal 2016-10-19 08:27:29 -07:00
Ebag333
02c8b46b74 Fixed formatting issues
Mixed spaces/tabs.  Also converted to using container instead of module.
Reformatted file.
2016-10-19 08:26:18 -07:00
Ebag333
32068e8d8e Create set directly 2016-10-19 08:22:45 -07:00
Ebag333
ccd8ee87f3 Create dictionary directly 2016-10-19 08:18:47 -07:00
Ebag333
c73b446482 Comparison with None performed iwth equality operators 2016-10-19 08:17:34 -07:00
Ebag333
699276ca58 Add __init__ to classes missing it
Mostly just to shut pyCharm up, but it's good practice.
2016-10-19 08:15:36 -07:00
Ebag333
3187bab90a Simplified Chained Comparison 2016-10-19 08:11:20 -07:00
Ebag333
c1dfd676e1 Simplified boolean check 2016-10-19 08:08:50 -07:00
Ebag333
c7554ec400 Removed reassigned var
i was already declared by the parent loop, removed reassignment
2016-10-19 08:06:39 -07:00
Ryan Holmes
f1771a61d0 We're now using Slack for communications \o/ 2016-10-18 11:31:41 -04:00
Ebag333
d3cb968c19 Why the hacks, CCP? 2016-10-16 21:44:11 -07:00
blitzman
9c685263bb Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-10-17 00:14:37 -04:00
blitzman
d43db40469 Fix running mining effect for every active drone in the stack 2016-10-17 00:14:06 -04:00
blitzman
a50471c0a6 Merge branch 'MiningDroneBonus' of https://github.com/Ebag333/Pyfa into Ebag333-MiningDroneBonus 2016-10-17 00:01:49 -04:00
Ryan Holmes
8d215f7d7f Merge pull request #764 from Ebag333/MiningDroneRigStackingPenalty
Removed stacking penalty from Mining Drone Rigs
2016-10-17 00:00:23 -04:00
Ebag333
eb9b034d65 Fixed maths with more than 1 drone
Also tightened up code a bit. Does nothing now if there isn't a
miningDroneAmountPercent
2016-10-16 20:52:09 -07:00
blitzman
c52fecead3 Fix fit drag image getting stuck when mouse capture is lost (#479) 2016-10-16 22:32:40 -04:00
Ryan Holmes
5b09cf7c4d Merge pull request #769 from Ebag333/IntegratedAnyalyzersEffectCountedTwice
Integrated Hacking Modules Give Double Bonus Incorrectly
2016-10-16 22:13:55 -04:00
Ebag333
9be9a21b22 Applied Mining Crystal Bonus to modules
Previously the mining crystal bonus was not applied to modules, so
adding a crystal didn't change the amount mined at all.  This now
applies.  Left the old application in place, so it still applies to a
nonsense `specialtyMiningAmount` stat if you want to see that seperated
out for some weird reason.
2016-10-16 15:09:17 -07:00
Ebag333
3e4b748952 Subsystems calculate after projection calcs
Moved the 4 remote rep subsystem effect bonuses to calculate early in
the engine.  This correctly calculates these bonuses for effects,
previously these effect bonuses wouldn't be calculated until after
projection calcs ran.
2016-10-16 12:47:50 -07:00
Ebag333
9fe91472cf Integrated Hacking Modules Give Double Bonus Incorrectl
Because integrated modules are a single module with both Data and Relic
analizer built into one, ship hulls were giving a bonus twice over.
Changed it from adding the bonus for each individually (which worked
fine when it was broken out) to simply adding it if either Hacking or
Archaeology skill is present.
2016-10-16 12:14:21 -07:00
Alexey Min
a06810c7c8 Network settings GUI: Use "Username:" and "Password:" for labels, as you wish 2016-10-09 13:20:20 +05:00
Alexey Min
160de64135 Network settings GUI: be prepared for None return from getProxyAuthDetails() 2016-10-09 13:16:38 +05:00
Alexey Min
2b5535c5d1 service/network: change "if" condition as suggested by @blitzmann 2016-10-09 13:14:37 +05:00
Alexey Min
1e9f911385 service/settings: setProxyAuthDetails(): empty string as login means no password too 2016-10-09 13:07:13 +05:00
Alexey Min
2a9a4fbdff service/settings: make getProxyAuthDetails() return None again 2016-10-09 13:05:39 +05:00
Ryan Holmes
7331c158b6 Merge pull request #756 from MrNukealizer/FighterFixes
Fixed a few fighter/carrier bugs:
2016-10-08 23:07:01 -04:00
Ebag333
ddcbbb7fcf Use the mining effect
This effect is only used by mining drones, and it's not been
implemented.

See #762 for more info
2016-10-07 20:43:14 -07:00
Ebag333
e7ac1597bb Removed stacking penalty 2016-10-07 09:05:18 -07:00
Ryan Holmes
11e8ea4fe8 Merge pull request #761 from petosorus/fix-numCharges
Fix of the number of charges in multibuy
2016-10-06 10:49:50 -04:00
petosorus
1853500729 Fix of the number of charges in multibuy 2016-10-06 08:45:35 +02:00
Mr. Nukealizer
a349626923 Changed fighter selection for NSA bonus 2016-10-05 22:44:10 -07:00
Ryan Holmes
f466f9cc49 Merge pull request #751 from Ebag333/T2-Resist-Profiles
Add T2 resists and 90% resist profile
2016-10-05 22:27:07 -04:00
blitzman
13b452223d bump dev 2016-10-02 22:02:50 -04:00
Alexey Min
c166fa6bf5 service/network: revert to simple ProxyHandler with login:password@host:port format
previous sh@t with password managers and proxy basic auth handlers did not work for me :(
this way is simpler AND working.

Also explicitly use the default urllib2 opener if proxy is disabled (bug fix)
2016-10-02 22:08:58 +05:00
Alexey Min
3a7e343f1c Network preferences settings: GUI to set proxy login/password 2016-10-02 19:15:32 +05:00
Alexey Min
02557701f0 NetworkSettings: never return None in proxy auth details getter,
return a tuple with empty strings instead
2016-10-01 13:47:27 +05:00
Mr. Nukealizer
30755fbb73 Made fighter DPS calculations more accurate when factoring in reload time. 2016-09-30 23:44:12 -07:00
Mr. Nukealizer
c1b3491933 Fixed superiority fighter attack and added Evasive Maneuvers ability. 2016-09-30 21:40:10 -07:00
Mr. Nukealizer
5467a58b04 Fixed a few fighter/carrier bugs:
* Omnidirectional Tracking Link overheat applies to explosion radius/velocity bonuses.
* Networked Sensor Array affects fighters' sensor strengths.
* Long range heavy fighters no longer appear to require Bomb Deployment.
* Carriers and supercarriers are no longer capped at 300km lock range.
2016-09-30 20:25:55 -07:00
Alexey Min
75f07afcb7 NetworkSettings: add setter method for proxy auth details (login, password) 2016-09-29 20:21:11 +05:00
blitzman
c64838f7f5 Update effect headers and bump stable 2016-09-28 00:20:30 -04:00
Alexey Min
a0359b8bd9 [WIP] Add basic proxy authorization support to Network service class.
not tested yet, will test later
2016-09-28 01:42:59 +05:00
Ryan Holmes
e2434619b5 Merge pull request #733 from petosorus/multibuy-export
Multibuy format export feature, adresses #726
2016-09-27 01:49:12 -04:00
blitzman
becb3d4bb6 Fit Citadel imports (#749) 2016-09-27 01:45:21 -04:00
blitzman
44fb4a558c fix some rigs 2016-09-27 01:25:49 -04:00
Ryan Holmes
9a574cb31b Merge pull request #740 from Ebag333/ECM-Burst-Effect
Implementing ECM Burst Jammer as a projected effect
2016-09-27 00:35:26 -04:00
blitzman
4fa4640991 Update to YC118.8 1.3 2016-09-27 00:34:14 -04:00
Ebag333
35b5002eca Add T2 resists and 90% resist profile 2016-09-25 22:52:11 -07:00
blitzman
b5574ca535 bump dev 2016-09-25 22:04:54 -04:00
Alexey Min
8fec03bcbf Add proxy login/pass fields to NetworkSettings class.
Use named "constants" instead of hardcoded numbers for proxy "mode" parameter
2016-09-25 04:16:07 +05:00
Mr. Nukealizer
7de90cc2d8 Changed forceItemAttr to increaseItemAttr 2016-09-19 02:50:00 -07:00
Mr. Nukealizer
c700d9b661 Adjusted the tolerance for finding loops and rounded the result 2016-09-18 06:27:14 -07:00
Ebag333
48f264851d Implementing ECM Burst Jammer as a projected effect 2016-09-16 11:39:00 -07:00
petosorus
467d244bea Booster export in EFT Implants export 2016-09-16 18:40:24 +02:00
petosorus
840c041f8c Fighters get exported in EFT export 2016-09-16 12:06:17 +02:00
Ebag333
c30190f63e Revert "Revert "Purging fleet bonuses from code base""
This reverts commit 6e54d6788c.
2016-09-15 15:27:30 -07:00
Ebag333
6e54d6788c Revert "Purging fleet bonuses from code base"
This reverts commit 68f45706ab.
2016-09-15 15:27:10 -07:00
Ebag333
68f45706ab Purging fleet bonuses from code base 2016-09-15 15:07:59 -07:00
petosorus
43ee031121 Number of charges loaded 2016-09-15 16:01:32 +02:00
petosorus
533c86de16 Removal of empty lines when there are empty slots 2016-09-15 11:20:45 +02:00
petosorus
ba3c9b87b5 Fighters handling in Multibuy export 2016-09-15 08:27:38 +02:00
petosorus
8338b6adb3 Implants and boosters in Multibuy export 2016-09-15 08:19:21 +02:00
petosorus
54c950f951 Multibuy format export feature 2016-09-14 23:38:09 +02:00
blitzman
d1c18d9642 Bump stable 2016-09-06 23:51:25 -04:00
Ryan Holmes
19090e7353 Merge pull request #720 from BartMassey/master
fixed syntax typo in modulebonusomnidirectionaltrackingenhancer.py
2016-09-06 23:45:01 -04:00
Bart Massey
1d52382460 fixed syntax typo in modulebonusomnidirectionaltrackingenhancer.py 2016-09-03 00:26:29 -07:00
blitzman
a074199219 Bump stable 2016-09-01 22:20:51 -04:00
blitzman
c1179ddb40 Fix issue with fighter bomber charges causing skill requirement warnings 2016-08-30 23:45:21 -04:00
blitzman
ef06a1ccb1 Merge remote-tracking branch 'origin/master' 2016-08-30 23:16:12 -04:00
Ryan Holmes
e31f3cb46e Update modulebonusomnidirectionaltrackingenhancer.py 2016-08-30 23:14:48 -04:00
Ryan Holmes
9f9cd29a7f Merge pull request #712 from pyfa-org/feature/citadels
Feature/citadels
2016-08-30 09:23:34 -04:00
blitzman
ed24ef2615 Delete projected modules from citadels 2016-08-28 20:22:30 -04:00
blitzman
c5b78c20e5 Do not allow projection to citadels 2016-08-28 20:00:46 -04:00
blitzman
f98f6a120b Bump dev, fix issue with applying fleet boosts 2016-08-28 19:35:55 -04:00
blitzman
6192343add bump stable 2016-08-26 21:55:52 -04:00
blitzman
6728aba0a5 Fix icons 2016-08-26 21:53:47 -04:00
blitzman
64b75303af Quick fix for override window crashing trying to load items that no longer exist (#706) 2016-08-26 21:52:56 -04:00
blitzman
0eef1ee480 Fix for #705 2016-08-26 21:29:12 -04:00
blitzman
fef087ae46 jk 2016-08-26 21:13:03 -04:00
blitzman
0e15adecf2 Bump stable 2016-08-24 22:31:44 -04:00
blitzman
be6addf4d0 update dist (holy shit how long has this not been in master?) 2016-08-24 22:16:05 -04:00
blitzman
052e9b68b5 add missing service slot 2016-08-24 22:01:39 -04:00
blitzman
fd91f56e55 Give citadels their own Upwell logo 2016-08-24 21:46:14 -04:00
Ryan Holmes
a0a35d60ec Merge pull request #700 from PageArkanis/feature/citadels
fixed exception that froze interface
2016-08-24 20:45:01 -04:00
blitzman
639f3d27b4 Fix citadel rig bonuses 2016-08-24 20:41:38 -04:00
blitzman
e3040854d8 Merge remote-tracking branch 'origin/master' 2016-08-24 20:23:22 -04:00
Ryan Holmes
4597fd27da Merge pull request #701 from shagie/master
Update README.md with current brew instructions
2016-08-19 14:36:50 -04:00
shagie
88bceae6b0 Update README.md with current brew instructions
```
Error: No available formula with the name "pyfa" 
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
This formula was found in a tap:
Caskroom/cask/pyfa
To install it, run:
  brew install Caskroom/cask/pyfa
```
2016-08-19 13:00:07 -05:00
PageArkanis
9ace9815b6 fixed exception that froze interface 2016-08-19 15:11:06 +01:00
blitzman
bfda7014db Fix citadels not showing up in ship search 2016-08-14 21:05:30 -04:00
blitzman
5107d383e0 Merge branch 'citadel' 2016-08-14 20:40:32 -04:00
blitzman
32ba3fa516 Fix targeting delay effect running when rig is offline (#696) 2016-08-12 21:08:21 -04:00
blitzman
69723d1bd0 Fix for #695 2016-08-12 21:01:22 -04:00
blitzman
5a5ab846c2 Fix for search 2016-08-12 20:05:22 -04:00
Mr. Nukealizer
394381c736 I think I changed something...
This still works the same, but I think I changed a couple things that didn't look right.
2016-07-30 04:20:00 -07:00
Mr. Nukealizer
fea1a28760 Grr, tab characters, grr 2016-07-29 22:49:34 -07:00
Mr. Nukealizer
f895e82c69 Commented out logging and made a couple tweaks 2016-07-29 22:44:38 -07:00
Mr. Nukealizer
710d15a66c Add files via upload
New Reactive Armor Hardener code that should work correctly.
2016-07-29 01:04:07 -07:00
blitzman
d81a51bd8c bump version 2016-07-24 18:29:36 -04:00
blitzman
3ac733a30c Merge branch 'master' into citadel 2016-07-24 01:25:57 -04:00
Ryan Holmes
7a715fc471 Merge pull request #684 from Ebag333/Neuts
Applied size reduction effect to neut/nos
2016-07-24 01:25:15 -04:00
Ryan Holmes
b9b72ebf40 Merge pull request #685 from Ebag333/RAHBug
RAH gets pissy if there is no damage profile
2016-07-18 23:26:00 -04:00
Ebag333
071dfaf656 Removed ship size, as this applies only to NPCs 2016-07-18 06:41:50 -07:00
Ebag333
88384a2fd8 RAH gets pissy if there is no damage profile
If there is no damage profile (likely from one that's deleted, and
somehow the profile doesn't get set back to uniform), then RAH tries to
apply null values.  This skips making the RAH reactive if that scenario
happens.
2016-07-17 14:10:58 -07:00
Ebag333
a2c0049488 Moved neut reduction logic into fit.py 2016-07-17 13:43:52 -07:00
Ebag333
60288204fc switched from using container/module to bag_of_dicks
Also cleaned up some warnings PyCharm was throwing.
2016-07-17 11:24:24 -07:00
Ebag333
7d0f65c1f3 Moved the sig size reduction under projected 2016-07-17 10:52:08 -07:00
Ebag333
a35b9b5d3f Added sig reduction for cap neuts 2016-07-17 10:47:15 -07:00
Ebag333
2a2842100a Applied size reduction effect to neut/nos 2016-07-17 00:01:41 -07:00
blitzmann
faed0ce159 Merge remote-tracking branch 'origin/master' into citadel
Conflicts:
	config.py
2016-07-16 21:45:28 -04:00
blitzmann
23a6849fe3 Bump release 2016-07-07 19:40:21 -04:00
blitzmann
91c6e91023 Fix Cataclysmic Variable effects (#628) 2016-07-07 19:21:41 -04:00
blitzmann
8f64c91677 Update effect headers 2016-07-06 23:52:42 -04:00
blitzmann
842ee3d426 Fix Genolution implant set bonus (#672) 2016-07-06 23:50:31 -04:00
blitzmann
45d338ba3d Add price to item compare (#673) 2016-07-06 22:30:31 -04:00
blitzmann
f141fac3a2 Add fighters to overall fitting price (#674) 2016-07-05 23:34:19 -04:00
blitzmann
7b2a89d66b Add structure rig effects (untested) 2016-07-05 23:26:24 -04:00
blitzmann
4d158d99fd Fix crash related to structure rigs not having meta level, and a traceback that might happen occasionally. 2016-07-05 23:23:55 -04:00
blitzmann
c3983a26c5 Add structure rigs 2016-07-05 00:21:08 -04:00
blitzmann
016854a292 Clean up effects 2016-07-04 23:31:41 -04:00
Ebag333
5d7252cbec fixed referencec 2016-07-04 15:50:00 -07:00
Ebag333
0e0bcf51fc Added Effects Files for Citadel Modules 2016-07-04 14:27:35 -07:00
blitzmann
f396077cd6 Remove stacking penalty from Asklepian implants 2016-07-04 13:52:25 -04:00
blitzmann
1c194b67f3 Restrict projected view after speaking with CCP Larrikin about mechanics 2016-07-04 11:18:47 -04:00
blitzmann
72e77d2264 Fix some wording 2016-07-04 11:05:50 -04:00
blitzmann
10c79ac812 More work on restrictions 2016-07-04 11:01:08 -04:00
blitzmann
fe8c3a4957 Disable fit add on pages based on context (ship vs citadel) 2016-07-04 10:30:04 -04:00
blitzmann
3734be21d6 Fix icons and script and version 2016-07-03 20:48:20 -04:00
blitzmann
8ae6ad879e Add structure skill effects 2016-07-03 20:03:00 -04:00
blitzmann
92b2a35888 Fix omega implant 2016-07-03 17:42:12 -04:00
blitzmann
fb2e6e5c17 Restrict skills being applied to citadels. The effect must be of type "structure" for it to apply. Fix issue with agility 2016-07-03 14:52:00 -04:00
blitzmann
2212311a44 Add effects for Asklepian implant set 2016-07-03 14:25:05 -04:00
blitzmann
ef3791f845 bump dev 2016-07-03 01:11:28 -04:00
blitzmann
6e2878194c Merge branch 'master' into citadel
Conflicts:
	config.py
	service/market.py
2016-07-03 01:10:26 -04:00
blitzmann
e7780485f1 Bump release 2016-07-03 00:41:21 -04:00
blitzmann
7831999563 Update effect headers 2016-07-03 00:40:10 -04:00
blitzmann
7020f4bda9 Fix compare when item doesn't have a meta (#667) 2016-07-03 00:38:22 -04:00
Ryan Holmes
dcd21bd165 Merge pull request #669 from Ebag333/VehementDPSEffectsFile
Fixed type of weapon
2016-07-03 00:26:58 -04:00
Ebag333
4a70028762 Fixed type of weapon
Used to be applied to Naglfar, but everyone knows that Vehement is the
new Naglfar, and never use projectiles after memorial day (only
hybrids).
2016-07-02 01:02:03 -07:00
blitzmann
9255a9e638 bump dev 2016-07-01 23:38:06 -04:00
blitzmann
02736ac92d Bump version 2016-07-01 22:07:56 -04:00
blitzmann
2df01c7157 Merge branch 'singularity' 2016-07-01 22:04:25 -04:00
blitzmann
01a0745b9b Update database and fix some icon related bugs 2016-07-01 22:03:51 -04:00
blitzmann
c7573ad4c3 Update icons / fix script 2016-07-01 00:44:17 -04:00
blitzmann
06f402bb9d Add sde icon script 2016-06-28 23:34:39 -04:00
blitzmann
b9f0812b38 Fix issue with entity editor and wxPython 2.8 2016-06-28 23:24:01 -04:00
blitzmann
cdca8fe236 New effects 2016-06-28 22:00:18 -04:00
blitzmann
c8175d1191 Only compare attributes with display names (ones that don't have display names are normally internal attributes) 2016-06-23 23:19:08 -04:00
blitzmann
7a7a0f1eff Merge branch 'feature/item-compare' into singularity 2016-06-23 22:57:09 -04:00
blitzmann
5176fe0366 Sort by meta level 2016-06-23 22:56:40 -04:00
blitzmann
b4bd6e7acd Ensure we have an active fit when exporting to crest 2016-06-23 22:44:24 -04:00
blitzmann
bd4dbf45af Beautify pyfa's CREST login message 2016-06-23 22:16:08 -04:00
blitzmann
d9fc3d436b Allow EHP toggle to persist between fits (#641) 2016-06-19 23:50:42 -04:00
blitzmann
67143cbc0e Fix for siege stacking penalty (#653) 2016-06-19 23:18:59 -04:00
blitzmann
ed3b2eb1bf Fix energy warfare 2016-06-19 23:04:52 -04:00
blitzmann
7a5e4291a5 Handle renamed groups 2016-06-19 12:40:49 -04:00
blitzmann
d1c6810e1e Update to SISI 1050133 2016-06-19 12:39:09 -04:00
blitzmann
faa9c0a2b9 Fix my merge fail 2016-06-18 23:29:53 -04:00
Ryan Holmes
0456973093 Merge pull request #639 from Ebag333/default-database-profiles
Default database profiles
2016-06-18 23:25:07 -04:00
blitzmann
4a79a4e4d9 Merge remote-tracking branch 'origin/master'
Conflicts:
	gui/mainMenuBar.py
2016-06-18 23:14:23 -04:00
blitzmann
ac46d33a60 Fix CREST export (#655) 2016-06-18 23:10:01 -04:00
Ebag333
0f958bef81 Removed _init_ definition as it's redundant 2016-06-16 19:08:29 -07:00
Ebag333
b79009517e Updated po-ta-toe to po-tah-toh 2016-06-16 14:46:22 -07:00
Ebag333
12ccc96f46 Updated as per Blitzmanns feedback
https://github.com/pyfa-org/Pyfa/pull/639#issuecomment-225749245
2016-06-15 23:42:38 -07:00
Ebag333
47828c38d2 Merged differences from master (more catching up) 2016-06-15 19:40:45 -07:00
blitzmann
afdae6a3d6 Added first iteration of item comparisons. 2016-06-15 22:26:48 -04:00
Ebag333
03d1d8f5a4 Merged changes from pyfa-org/master into branch
Merged changes to see if we can clear up the merge conflict warning
2016-06-15 18:24:40 -07:00
Ryan Holmes
cc4e4c0f13 Merge pull request #649 from Ebag333/ECM-Misc-Column-Improvements
Updated ECM to be more descriptive
2016-06-13 21:21:29 -04:00
Ebag333
2f6f14fef2 Update misc.py 2016-06-13 18:14:41 -07:00
Ryan Holmes
fb590ddfdd Merge pull request #644 from Ebag333/Item-Attributes--Show-Base-Value
Added base column to item window
2016-06-13 20:44:15 -04:00
Ryan Holmes
a5e674cdc4 Merge pull request #650 from Ebag333/Group-Attribute-Overrides-Menu
Grouped Attributes override
2016-06-13 20:37:56 -04:00
blitzmann
e28883dd47 Merge branch 'default-database-profiles' of git://github.com/Ebag333/Pyfa 2016-06-13 20:01:35 -04:00
Ebag333
b4694dcf03 Implemented menu option to import default database values
Allows for existing databases to be updated with the current default
profiles.  Can also be used to inject other defaults (maybe 0 and V
chars?)
2016-06-13 14:13:38 -07:00
Ebag333
4c05d9a687 Grouped Attributes override
Users are confused because they find the menu to edit attribute
overrides, change values, then do not see their values reflected.  There
is an option that needs to be enabled under the edit menu to show the
users overrides.

Moved this option from the edit menu to the window menu (next to the
existing attributes override editor), and grouped them together.
Functionality is not changed, merely placement of the overrides toggle.
2016-06-13 13:54:15 -07:00
Ebag333
53da2f9bb2 Many updates
Redid all the values, especially updated target resist profiles.
Re-implemented the _init_ on service\damagePattern.py to check for
default values.
2016-06-13 13:49:56 -07:00
Ebag333
ea106b6064 Updated to round values that are floats to int
Only ints are handled currently, if you throw a float at it, you'll get
a stacktrace.  This is just a little safety to convert it to an int, so
if we somehow get a float (like via database injection/modification), we
quietly convert it to the expected format
2016-06-12 17:24:49 -07:00
Ebag333
32f671b4f2 No longer show "base" column when looking at a market item
Since they are identical.
2016-06-12 17:07:37 -07:00
Ebag333
25e298ff69 Updated ECM to be more descriptive
Gave it the RAH treatment. Now shows min/max values if it's a racial,
and only one for multispectral.  Tooltip shows all four broken out.
2016-06-12 16:46:18 -07:00
Ebag333
45006fe043 reverted back to original 2016-06-12 12:30:29 -07:00
blitzmann
3e1c561752 Implement reload time in fighter dps logic (#627) 2016-06-12 14:15:25 -04:00
blitzmann
be4b78ee1c Module replacement when dropping market module onto fitting view (#528) 2016-06-12 12:38:25 -04:00
Ryan Holmes
5a2989cae4 Update README
Yes, I originally copied it from Osmium, because :effort:
2016-06-12 03:22:21 -04:00
Ryan Holmes
15519fd783 Update misc.py 2016-06-12 02:18:18 -04:00
Ryan Holmes
a357a5b845 Merge pull request #643 from Ebag333/SeBo-Misc-Column-Improvements
Added sensor strength to handle scripting the SeBo
2016-06-12 02:16:13 -04:00
Ryan Holmes
806b8f135b Merge pull request #634 from Ebag333/master
RAH follows damage profile
2016-06-12 02:13:03 -04:00
Ebag333
f2b636bd44 Rewrote function 2016-06-11 00:50:40 -07:00
Ebag333
0d25eca6e5 Added base column 2016-06-10 21:10:04 -07:00
Ebag333
e5dcac43dc Added sensor strength to handle scripting the SeBo 2016-06-10 20:36:20 -07:00
Ebag333
8629710223 Add RAH misc column and tooltip 2016-06-10 19:33:13 -07:00
Ebag333
111e2cc0de Loads default database values on DB creation
Loads defaults for target resists and damage profiles....for now.

Can be extended to add anything we want on DB creation.  Can be extended to add a "load default value to database" button somewhere down the line, to support people who have existing databases and don't want to recreate them.
2016-06-06 16:25:20 -07:00
Ebag333
8eb0b942c8 Remove _init_ hack to import the default pattern
Removed the kludgey method of using _init_ to check to see if the Uniform 25/25/25/25 damage pattern exists, and if missing create it.

Moved creation of it to prefetch.py.
2016-06-06 16:22:08 -07:00
Ebag333
4c55827aa4 call function to import defaults to database 2016-06-06 16:18:16 -07:00
Ebag333
0a1be7d966 Update adaptivearmorhardener.py 2016-06-06 16:16:56 -07:00
Ebag333
8f3370307a Merge branch 'master' of https://github.com/Ebag333/Pyfa 2016-06-05 00:13:22 -07:00
Ebag333
dd1545c7e1 Merge remote-tracking branch 'refs/remotes/pyfa-org/master' 2016-06-05 00:13:09 -07:00
Ebag333
8ea9bee810 Update adaptivearmorhardener.py 2016-06-04 23:58:34 -07:00
blitzmann
6141356754 Add Ice Products to search results (#600) 2016-05-30 22:43:31 -04:00
blitzmann
e70ea67fec Proper fix to attribute caps 2016-05-30 12:29:06 -04:00
blitzmann
62be4c5bce Merge branch 'master' of git://github.com/Timmeey/Pyfa into Timmeey-master 2016-05-28 17:01:58 -04:00
blitzmann
394a9540b0 Bump dev 2016-05-28 17:01:52 -04:00
Ryan Holmes
62d22f0e74 Merge pull request #629 from wolfwood/aar-amount-display 2016-05-28 16:57:51 -04:00
wolfwood
1cd7b9a250 correct '(E)HP restored over duration' calculation to reflect removal of AAR multiplier from armorDamageAmount 2016-05-27 20:19:24 -07:00
TimmeeY
7044534765 Added Shiptype to fitting name in minimal html export
On minimalistic HTMLExport, the shiptype (name) will be added infront of
the fitting name to all fits on export
2016-05-26 15:03:34 +02:00
blitzmann
9c3b50d622 Bump stable 2016-05-23 23:23:27 -04:00
blitzmann
fd62c254a4 Update to Citadel 1.14 and update effect headers0 2016-05-23 23:22:44 -04:00
blitzmann
90e54c6334 Fix Minokawa and Apostle remote effects (#623) 2016-05-23 23:05:50 -04:00
blitzmann
f423c67979 Fix remote ancillary bonus effects (#626) 2016-05-23 20:19:30 -04:00
blitzmann
4607dd788c Implement ewar resists (#597) 2016-05-22 15:15:21 -04:00
Ryan Holmes
f9c595473f Merge pull request #621 from blitzmann/context-menu-ids
Context menu ids
2016-05-22 14:43:27 -04:00
blitzmann
de6c843e1c Remove cap from target range (#620) 2016-05-22 14:24:43 -04:00
blitzmann
b45924aa52 Fix cycle time bonuses for Lif and Ninazu (#591) 2016-05-22 13:54:58 -04:00
blitzmann
d04ea5b061 Fix EV drones (#619) 2016-05-22 13:33:25 -04:00
blitzmann
7406210c4a Fix remote AAR 2016-05-22 01:38:40 -04:00
blitzmann
c24986fba3 Add missing effect for ancil shield boosts 2016-05-18 00:01:49 -04:00
blitzmann
30c1c00b9b Bump dev 2016-05-18 00:01:48 -04:00
blitzmann
655d658a52 Remove prints 2016-05-16 23:56:46 -04:00
Ebag333
a089c4cbc2 Merge remote-tracking branch 'refs/remotes/pyfa-org/master' 2016-05-16 07:55:15 -07:00
blitzmann
62fd545d24 Restrict citadels to only use citadel modules. Rename Ships tab to Fittings as it no longer just carries ships :(. Fix crash on item stats. 2016-05-15 23:18:39 -04:00
blitzmann
4041ecddc4 Create Citadel class that inherits from Ship. Add Service slots 2016-05-15 22:23:23 -04:00
blitzmann
10f51b41b7 Fix context menu with structure modules (no meta information), add citadel icons. 2016-05-15 19:16:51 -04:00
blitzmann
7cf0a35a7a Add citadel fittings to market browser, and get rid of some initial errors 2016-05-15 18:58:47 -04:00
blitzmann
523f7793b5 Add Citadel to ship root 2016-05-15 18:42:01 -04:00
blitzmann
9891aecf19 Bump dev 2016-05-15 18:40:54 -04:00
Ryan Holmes
fd700f73e5 Update README.md 2016-05-15 12:53:37 -04:00
blitzmann
d71b05095d Clean up 2016-05-15 12:43:24 -04:00
blitzmann
d061a13b58 Move ID pool to context menu class rather than individual menu items 2016-05-15 12:18:56 -04:00
blitzmann
5176cc3b06 Testing a new way of generating context menu id's 2016-05-15 02:35:35 -04:00
blitzmann
1e364913cd Bump version 2016-05-14 23:23:04 -04:00
blitzmann
1adc7c77ac Update to Citadel 1.11 2016-05-14 22:54:53 -04:00
blitzmann
51fbcce803 Add middle click to close fit (#608) 2016-05-14 22:47:44 -04:00
blitzmann
80dab63119 Add missing effect for remote ancil reppers 2016-05-14 22:26:07 -04:00
blitzmann
8c769f152b Fix capacitor need bonus for Stasis Grapplers (#615) 2016-05-14 02:00:50 -04:00
blitzmann
3673391f5a Moved DPS calc from fighter to fighter ability, and fixed fighters in the graph to consider target values. 2016-05-14 01:48:22 -04:00
blitzmann
f96a2e72f7 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-05-11 21:35:25 -04:00
blitzmann
19929ef3ba Increment/decrement cargo instead of adding/removing (#610) 2016-05-11 21:29:17 -04:00
blitzmann
e3a3d287bf Strip leading/trailing whitespace from strings when converting data to json (#607) 2016-05-11 21:07:22 -04:00
blitzmann
b2b92b00f3 Update to Citadel 1.10 and fix gang effects (#592) 2016-05-11 21:04:25 -04:00
Ryan Holmes
6bd2c19b21 Merge pull request #595 from evrial/patch-1
Update README.md
2016-05-10 14:28:21 -04:00
TimmeeY
eb8e5c5135 Added an option for HTML Export, to produce a minimal html version
Added an Opton in the HTMLExport menu to set the HTML export to produce
a minimal HTML version, without any styles or Javscript dependencies.
This can be useful if you are not javascript capable, or if you just
want to copy'n'pase the exported HTML into some web-editor (wordpress).
2016-05-08 23:50:41 +02:00
blitzmann
5a07be40f1 Update to 1037828 (Citadel 1.9) 2016-05-07 20:02:24 -04:00
blitzmann
13a15a38c5 Fix line break in some descriptions (#596) 2016-05-06 20:50:34 -04:00
blitzmann
caa10614d9 Bump dev, and fix flex hardeners (#601) 2016-05-06 20:42:46 -04:00
Alex Grigoryev
0943b4b097 Update README.md
Added Homebrew formula 0ed8244441
2016-05-03 17:43:07 +03:00
blitzmann
8823baaef4 Bump stable 2016-05-02 21:11:29 -04:00
blitzmann
5a5e77414a Remove rigs from prereq checking 2016-05-02 21:10:29 -04:00
blitzmann
f524591327 Fix prereq skill checking for fighters 2016-05-02 20:58:35 -04:00
blitzmann
55ae7c39a4 Fix Shield Harmonizing / Shield Efficiency warfare links 2016-05-02 20:19:47 -04:00
blitzmann
d4e5f8d165 Fix damage profile / target resists editor (#587) 2016-05-02 20:06:53 -04:00
blitzmann
b9dad60b61 Fix icon logic / add some missing icons 2016-05-01 22:21:14 -04:00
blitzmann
57b9b916ed Take care of empty market groups 2016-05-01 19:06:34 -04:00
blitzmann
854476db76 Revert "Fix runtime for all ganglink module effects" (#582)
This reverts commit 373ccbcee5.
2016-05-01 17:50:56 -04:00
blitzmann
941c57b4a8 Fix titan fleet bonii (#577) 2016-05-01 16:45:19 -04:00
blitzmann
fb1c5a760f Fix projected remote cap transfers (#585) 2016-05-01 16:18:27 -04:00
blitzmann
e5367127ea Adds migration path from pre-release database to stable (previously unsupported) (#586) 2016-05-01 14:46:51 -04:00
blitzmann
ffebd3f311 Fix charges for small ancillary shield boosters (#581) 2016-05-01 14:15:44 -04:00
blitzmann
d8fcbd4032 Fix market group sourcing when generating database. 2016-05-01 11:54:39 -04:00
blitzmann
583f416373 Fix FSUs 2016-04-30 23:18:52 -04:00
blitzmann
f605b37a1e Fix OTLs (#579) 2016-04-30 22:48:33 -04:00
Ryan Holmes
a1d64acff4 Merge pull request #578 from lunedis/dda_stacking_fix
Fixing Drone Damage Amplifier fighter stacking issue #576
2016-04-30 22:43:27 -04:00
blitzmann
1fe42f6a79 Bump dev 2016-04-30 22:43:12 -04:00
Kalu
3ce5f69225 Fixing Drone Damage Amplifier fighter stacking issue #576 2016-05-01 03:31:19 +02:00
blitzmann
985107c601 Bump version =D 2016-04-30 19:56:49 -04:00
blitzmann
d416124081 Implemented projected fighters, and various fighter bugfixes / improvements 2016-04-30 19:52:13 -04:00
blitzmann
3a62a6c40d Add fighters to DPS graph 2016-04-30 18:37:00 -04:00
blitzmann
8f6f55b001 Merge branch 'singularity' 2016-04-30 18:23:32 -04:00
blitzmann
6d1ae39bc6 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-04-30 18:21:30 -04:00
Ryan Holmes
850197faa1 Merge pull request #572 from Tandrial/master
Import DNA fittings from ingame urls
2016-04-30 18:16:35 -04:00
blitzmann
1aa206bc82 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2016-04-30 18:10:06 -04:00
Ryan Holmes
5a9cdb67f9 Merge pull request #568 from mmaucher/fix-for-511
fix separation of moving/non-moving drones
2016-04-30 18:07:58 -04:00
blitzmann
c9810cd019 Fix bug when importing fit 2016-04-30 18:03:03 -04:00
blitzmann
8bf75e38ad Add loaded charges export to CREST (#569) 2016-04-29 23:42:47 -04:00
blitzmann
fe9139ae93 Fix issue with adding multiples of the same skill to character via character import (#563) 2016-04-29 23:32:22 -04:00
blitzmann
87a354a314 Add SerializableUriCharacter to EVEMon import check (#557) 2016-04-29 23:15:30 -04:00
blitzmann
270ac99a1e update effects 2016-04-29 22:59:09 -04:00
blitzmann
dc5d6a4ef8 Add conversion pack 2016-04-29 22:54:44 -04:00
blitzmann
4cdb36de09 update icons 2016-04-29 22:42:15 -04:00
blitzmann
7fce1d00d7 Update to TQ again 2016-04-29 22:37:29 -04:00
blitzmann
26c27153f0 Fix FAUX role bonus 2016-04-29 19:11:13 -04:00
blitzmann
b5420e9c6a Add fighter bomb launcher logic 2016-04-29 19:10:51 -04:00
blitzmann
cfd82a6ad4 Add titan gang bonuses, along with other things 2016-04-29 18:47:53 -04:00
Ryan Holmes
7a352b49a0 Merge pull request #534 from Wozbo/EWAR-fix-532
Fixed ewar on damage graphs,
2016-04-29 09:44:26 -04:00
Michael Krane
8a4f3b7642 Code clean Up 2016-04-28 22:59:47 +02:00
Michael Krane
a09d4139d5 Removes everything before and after the DNA 2016-04-28 19:06:53 +02:00
Michael Krane
a257ac87f7 Allows to import DNA fittings via ingame urls 2016-04-28 18:30:41 +02:00
blitzmann
1669a5434c Removing debugging 2016-04-28 00:42:09 -04:00
blitzmann
2fc83aa61c Update to TQ 2016-04-28 00:38:49 -04:00
blitzmann
ed6f00a893 Added column for fighter abilities, fixed some fighter bugs, added some context menus to them 2016-04-28 00:29:25 -04:00
blitzmann
b15f9766c1 * Show fighter bay resources in fighter pane
* Give fighters a state
* Include some toggled stats on the resources pane
* Add some decent icons for fighter stuff
2016-04-28 00:10:01 -04:00
blitzmann
0ad4f07591 Add drone DPS/Volley to stats pane 2016-04-26 22:18:00 -04:00
blitzmann
4704c5a1b0 Limit fighters to fit's available slots. We hijack the module slot bit to do the dirty work >_> 2016-04-25 23:45:01 -04:00
blitzmann
034a9bc3c3 Publish fighter bombs in jsonToSql.py script 2016-04-25 22:49:52 -04:00
Markus Maucher
e7dc9db75a fix separation of moving/non-moving drones 2016-04-25 12:10:00 +02:00
blitzmann
4a2d1b7997 Fix subsystem slots (#553) 2016-04-22 20:49:16 -04:00
blitzmann
a5e2a32fb8 Merge remote-tracking branch 'origin/master' into singularity 2016-04-22 20:38:33 -04:00
blitzmann
43f69bb184 Only show fighter abilites which have been implemented. 2016-04-21 22:20:53 -04:00
blitzmann
71482c2359 Fix network sensor array effect 2016-04-21 22:14:45 -04:00
blitzmann
84a27a60a5 Fix Seige torp bonus 2016-04-19 21:39:56 -04:00
Ryan Holmes
87f865ce1f Merge pull request #562 from DuLLSoN/master
Added website selection for HTML Export
2016-04-17 23:53:36 -04:00
Ryan Holmes
12c78b41af Merge pull request #560 from aacn500/aacn500-t3c-import
Fix importing T3 cruisers #556
2016-04-17 23:52:36 -04:00
blitzmann
c3db808b7c Update 1030624 2016-04-17 23:42:31 -04:00
blitzmann
af9a9c5698 More fighter work. Basic abilities now work correctly. 2016-04-17 13:28:12 -04:00
Dullson
a7e6d3e969 Feature: Ability to select between different online fitting tools while using HTML Export. 2016-04-17 17:32:51 +03:00
blitzmann
708425c67a Toggle fighter abilities in fighter context menu 2016-04-17 02:16:58 -04:00
blitzmann
021de1af80 Get fighter abilities saved into database 2016-04-17 00:37:52 -04:00
blitzmann
b66e98f697 Fix Leviathan effect 2016-04-17 00:10:16 -04:00
blitzmann
28ad32aad5 Fix Character Editor 2016-04-16 23:55:28 -04:00
aacn500
94dc3117bc Fix importing T3 cruisers #556 2016-04-15 22:14:29 +01:00
blitzmann
803ada4b27 Fix siege, bastion, and triage effects. 2016-04-13 20:05:39 -04:00
blitzmann
e7118f637c Merge branch 'charImplants' into singularity
# Conflicts:
#	eos/db/saveddata/fit.py
#	gui/builtinContextMenus/itemStats.py
2016-04-12 20:16:53 -04:00
blitzmann
e11e368c4b Bump dev version 2016-04-12 20:02:30 -04:00
blitzmann
27a9051822 Update 1027729 2016-04-11 22:53:02 -04:00
blitzmann
54caece5b3 Update to 1027624, commit changes to itemDiff, and remove icon fetching from prep_data (need to use old dump info for now) (as well as other misc stuff) 2016-04-10 23:46:37 -04:00
blitzmann
b1fade5d3b Update bastion, siege, triage effects; add networked sensor array effect 2016-04-10 12:55:43 -04:00
blitzmann
8ed485df0e Group renames 2016-04-06 00:22:19 -04:00
blitzmann
9c33947a45 Update effect headers 2016-04-06 00:12:44 -04:00
blitzmann
33dc06055c Fix some more effects 2016-04-06 00:10:51 -04:00
blitzmann
8ff4a99cf3 Add missing Force Aux effects 2016-04-05 22:57:44 -04:00
blitzmann
d38abec819 Add some missing drone module effects 2016-04-05 22:47:20 -04:00
blitzmann
0ba48aa230 Fix energy effects 2016-04-05 22:27:41 -04:00
blitzmann
acf47ad7a6 Add missing Titan effects 2016-04-05 22:05:02 -04:00
blitzmann
c948c62cac Add missing Dreadnaught effects 2016-04-05 21:55:10 -04:00
blitzmann
eee4dbf66c Add missing Supercarrier effects 2016-04-05 21:46:57 -04:00
blitzmann
653b995774 Update eve.db and add missing carrier effects 2016-04-05 21:36:47 -04:00
blitzmann
a78151c5aa Add skill effects for Fighters 2016-04-04 23:52:09 -04:00
blitzmann
3177713447 Add preliminary (database/gui) fighter support. No effects / calculations. 2016-04-04 23:32:03 -04:00
blitzmann
0769df1e55 Update eve.db 2016-04-04 22:18:02 -04:00
blitzmann
0cfa7cb28f Ensure we get all ship group and ship type restrictions 2016-04-03 16:51:01 -04:00
blitzmann
1e621ee133 Fix issue when module is loaded with invalid item causing crash due to no item being available (incorrect logic) 2016-04-03 02:04:52 -04:00
blitzmann
a203799bd2 Merge branch 'master' into singularity 2016-03-30 18:48:17 -04:00
blitzmann
8fc9724204 Switch over to HTTPS protocol for jQuery CDN (#549). Also fix an issue that caused page to not load in Chrome 2016-03-30 00:25:11 -04:00
blitzmann
0d41cb96ab Merge branch 'refactor-entityEditor' into charImplants 2016-03-30 00:04:44 -04:00
blitzmann
39b2f87194 Add in logic that required an entity for implant sets and target resists (not needed for character or damage profiles as we have read-only defaults) 2016-03-30 00:03:48 -04:00
blitzmann
1161037092 Migrate implant set editor to new entity editor 2016-03-29 21:51:39 -04:00
blitzmann
a3d9d5cca8 Migrate character editor to use new entity editor. 2016-03-29 21:19:20 -04:00
Ryan Holmes
4b67411ca6 Merge pull request #550 from MarkNBroadhead/master
Update README
2016-03-29 15:24:22 -04:00
Mark N Broadhead
126b807dc7 Add links and make punctuation and stylistic changes
I am making changes here to help the README be consistent in its styling
and gramatically correct. Specifically distro vs distribution and places
where there are no links where they would be useful.

* Add link to GitHub Issues
* Add link to EVE pyfa forum thread
* Rename Installing to Installation
* Change distros to distributions
* Add apostrophe to "projects" where it is posessive
2016-03-29 12:09:22 -06:00
Mark N Broadhead
ca81d2d602 Reword Installing section
* Reword text and include link to latest builds page
* Remove link to Arch repo
2016-03-29 12:04:48 -06:00
Mark N Broadhead
015c195c9f Move Package list closer to installation section and add link
It makes sense for the Linux Distro-specific Packages section to
immediately follow the text about 3rd party repos in the Installing
section

* Move Linux Distro-specific Packages section
* Add link to issue #484 for FreeBSD installation
2016-03-29 11:52:55 -06:00
Mark N Broadhead
5fd170d480 Rename requirements to dependencies 2016-03-29 11:46:08 -06:00
Mark N Broadhead
4b167ba9de Add gitter chat link in contact information section 2016-03-29 11:45:08 -06:00
Mark N Broadhead
38ac41bccb Remove contact info for Kadeshs per blitzmann
Kadeshs is no longer with the projects per a conversation with blitzmann
on 29/3/2016 in gitter. He has requested I remove the contact info.
2016-03-29 11:18:52 -06:00
blitzmann
3315d27d45 Applied entity editor to resist editor.
Fixed issue with checking for same name in validator.
Center dialogs on parents to make it look nicer
2016-03-27 22:12:59 -04:00
blitzmann
c3dcdb0686 Entity = characters, damage profiles... anything with the generic drop down list of entities along with new/rename/etc buttons. This commit starts refactoring how we handle this, hopefully simplifying the process to a series of dialogs rather than trying to manage multiple control in the window. 2016-03-27 21:48:19 -04:00
blitzmann
ca91f6bd92 Remove debugging print 2016-03-22 23:21:39 -04:00
blitzmann
65483309ab Clear character implants during recalculation 2016-03-22 23:17:05 -04:00
blitzmann
71d33f3429 Fit implant effects (now applies to whichever implant source is selected) 2016-03-22 23:16:31 -04:00
blitzmann
9b1c543eb7 Support multi-select 2016-03-21 23:56:00 -04:00
blitzmann
24bb0ff39a Fix issue in which implant editor did not spawn if no implant sets 2016-03-21 23:49:01 -04:00
blitzmann
3ae312db37 Import / export implants sets 2016-03-21 23:43:45 -04:00
blitzmann
94f73241ea Implement implant set application in character implants. 2016-03-20 23:45:42 -04:00
blitzmann
d4632b9059 Add context menu to apply implant set to fit 2016-03-20 22:28:18 -04:00
blitzmann
dd15d52130 Merge pull request #541 from aacn500/missing-charge-skills
Fix "Change charge skills" showing module skills #535
2016-03-20 19:55:16 -04:00
blitzmann
145f252ca6 Add icon for implant set editor 2016-03-20 19:49:53 -04:00
blitzmann
731b54a1f7 Continued work on implant set editor 2016-03-20 18:58:13 -04:00
aacn500
f8d7b68289 Fix "Change charge skills" showing module skills 2016-03-20 22:56:27 +00:00
blitzmann
80e47d5157 Add some functionality to implantSet service, and get editor working correctly with implant editor view 2016-03-20 12:49:29 -04:00
blitzmann
c1653c5f2e Abstract the implant editor to work with different sources 2016-03-20 12:26:37 -04:00
blitzmann
36ad31ab25 Get some initial scaffolding up for implant sets sourced from the resist code. 2016-03-20 02:04:55 -04:00
blitzmann
6f1872fb94 Disable implants for read-only characters 2016-03-19 22:10:09 -04:00
blitzmann
ff56e70b81 Opps, dunno how this happened 2016-03-19 22:09:31 -04:00
blitzmann
201263237f Add migration to update fits tablet for implant source 2016-03-19 21:20:20 -04:00
blitzmann
1ddd37f381 Enable implant searching. 2016-03-19 20:55:29 -04:00
blitzmann
f9d2a78c5e Fix up styling for character implants and fitting window implant view 2016-03-19 19:30:42 -04:00
blitzmann
443c917c6b Get context menus working for character implants 2016-03-19 18:23:34 -04:00
blitzmann
7c787cd13b Recalc fit when changing implant source 2016-03-19 15:42:49 -04:00
blitzmann
dc8aff6b6c Merge branch 'master' into charImplants 2016-03-19 15:33:35 -04:00
blitzmann
397040549f Merge branch 'aacn500-validate-import' 2016-03-18 23:52:11 -04:00
blitzmann
0b858d6e94 Clean up call to checkStates 2016-03-18 23:51:55 -04:00
blitzmann
6c8efcda12 Fix traceback when ship is missing launcher / turret attribute (#539) 2016-03-18 23:31:19 -04:00
blitzmann
3fa0aa9242 Bump dev 2016-03-18 23:30:40 -04:00
aacn500
18775286c0 only check states when first loading a fit from db 2016-03-17 11:56:00 +00:00
aacn500
57433efe80 Check that modules fit on imported fits #512 #522 2016-03-16 20:12:26 +00:00
blitzmann
c42748a5dd Fix #537 - cap battery causing remote cap transfers to apply incorrect values.
Bump to stable 1.20.1
2016-03-15 22:46:51 -04:00
blitzmann
b5cf835959 Add a toggle between fit-specific implants and character implants. This avoids a lot of the problems of how to mix these two sources of implants. Character implants cannot change stage. 2016-03-13 14:48:43 -04:00
blitzmann
48b45b5f51 Merge branch 'master' into charImplants
# Conflicts:
#	gui/characterEditor.py
2016-03-12 23:20:26 -05:00
cwozniak
7d658c3f3d Fixed ewar on damage graphs, and added a quick formula for module falloff and applied it to Target Painters and Heavy Grapplers. 2016-03-11 16:15:08 -05:00
blitzmann
91980c9f2c Bump release 2016-03-11 00:20:26 -05:00
blitzmann
db1c80c7e3 Update effect headers 2016-03-11 00:18:33 -05:00
blitzmann
e53bd70c2c Merge pull request #497 from SpeedProg/master
Added commandline arguments to specify window title and path for savefiles
2016-03-10 23:58:56 -05:00
blitzmann
fe64e2e24c Fix module states when loading from database with an incorrect state (see #529) 2016-03-10 23:55:12 -05:00
blitzmann
a020ca9a71 Fix tracking / guidance disrupters 2016-03-10 23:43:24 -05:00
blitzmann
7a9fde822c Add some missing icons to the database and image store 2016-03-10 23:28:56 -05:00
blitzmann
152af02336 Fix effects involving XL missiles 2016-03-10 20:37:09 -05:00
blitzmann
be7d3a921a Update database to TQ 1017528 2016-03-10 20:17:26 -05:00
blitzmann
78acb205d3 Merge branch 'singularity' 2016-03-10 20:16:57 -05:00
blitzmann
627dac692c Modify applied cap drain based on ship's cap resistance 2016-03-08 18:23:35 -05:00
blitzmann
68a6a828d8 Revert "Disable setting new database version and bump pre-release"
This reverts commit d36bf41ecf.
2016-03-08 16:55:03 -05:00
blitzmann
e8604788df Replace locale formating with regular string formatting due to issues with setting locale. 2016-03-06 11:48:01 -05:00
blitzmann
d36bf41ecf Disable setting new database version and bump pre-release 2016-03-05 22:25:35 -05:00
blitzmann
821d9ea330 Add the renamed items to the conversion sheet 2016-03-05 21:54:32 -05:00
blitzmann
65eb0fac3d Fix syntax errors 2016-03-05 21:51:11 -05:00
blitzmann
e9a0c5456e Fix group matching: Capital charges 2016-03-05 21:48:12 -05:00
blitzmann
e2d33beb34 Fix group matching: Remote Sensor Dampener -> Sensor Dampener 2016-03-05 21:44:02 -05:00
blitzmann
b44c8461d4 Fix group matching: ECM Burst -> Burst Jammer 2016-03-05 21:41:01 -05:00
blitzmann
38cc13ff2c Update to 1015913 2016-03-05 21:37:12 -05:00
blitzmann
53a46dcec6 Fix bug causing fitting view to crash if ammo does not have icon 2016-03-05 21:32:02 -05:00
blitzmann
c01e506eb1 Add some debug info to item stats (effect and attribute IDs) 2016-03-05 15:42:31 -05:00
blitzmann
ad61795e80 Add conversions, TODO: Confirm with some testing! 2016-03-05 15:41:39 -05:00
blitzmann
bd802ab926 Fix typing issue with cargo stat 2016-03-05 01:08:53 -05:00
blitzmann
a25a1c0415 Reintroduce thousands separators for certain stats, tweak precision of cargo stat and displays 2016-02-28 18:14:27 -05:00
blitzmann
969952cccc Add support for user-defined server timeout setting (#492) 2016-02-14 18:51:18 -05:00
blitzmann
d85f8c0744 bump dev 2016-02-14 18:10:13 -05:00
Constantin Wenger
cf60bbc904 Merge remote-tracking branch 'upstream/master'
updated from upstream
2016-02-11 06:53:01 +01:00
blitzmann
9c67e7dd93 Fix database for icons (using old data), bump for release 2016-02-10 20:07:56 -05:00
blitzmann
df81a146d2 Bump dev 2016-02-10 15:08:42 -05:00
blitzmann
9bfb697f1e Bump version 2016-02-10 13:22:39 -05:00
blitzmann
2e227cdbd5 Update to TQ 1006189 2016-02-10 11:49:58 -05:00
blitzmann
fb7c227a10 Add a few market conversions and change cap drone group name (Feb '16 release) 2016-02-10 01:24:21 -05:00
blitzmann
e3742c0420 Fix double calculations on projected fits that double as boosters (#496) 2016-02-10 00:04:19 -05:00
blitzmann
373ccbcee5 Fix runtime for all ganglink module effects 2016-02-07 23:46:20 -05:00
blitzmann
785060f12b Merge branch 'test' 2016-02-06 16:07:44 -05:00
blitzmann
4e509bbaee Fix character editor crash on Windows by disallowing resizing. (#441) 2016-02-06 16:04:29 -05:00
Constantin Wenger
02d4ac81dd renamed parameter savepath to customSavePath for better distinguishability to savePath 2016-02-05 13:10:18 +01:00
blitzmann
7e305aab67 Revert "Tentative fix for character editor issues."
This reverts commit 253ebdc4e1.
2016-01-31 10:52:00 -05:00
blitzmann
55eed0d029 Revert "Fix Character Editor Dialog for osx"
This reverts commit 9fc31d6a55.
2016-01-31 10:51:45 -05:00
blitzmann
c7d5f2533a Merge pull request #514 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2016-01-29 14:49:08 -05:00
The Gitter Badger
a6cfbcb331 Add Gitter badge 2016-01-29 19:41:11 +00:00
blitzmann
45074952fd Merge pull request #504 from resinneublem/export-charges-optional
Make exporting charges a preference
2016-01-26 15:34:23 -05:00
blitzmann
a73d9abc60 Fix stacking for leadership, skirmish, and Information skill effects 2016-01-26 05:12:46 -05:00
blitzmann
9fc31d6a55 Fix Character Editor Dialog for osx 2016-01-25 22:47:27 -05:00
blitzmann
9cb99a1170 Update README.md 2016-01-25 21:36:50 -05:00
blitzmann
f3f1d022ef Updated to new repo location and forum thread 2016-01-25 21:14:45 -05:00
blitzmann
253ebdc4e1 Tentative fix for character editor issues. 2016-01-25 21:10:20 -05:00
blitzmann
5d45f1d3f3 Update README.md 2016-01-25 20:37:35 -05:00
blitzmann
e253af9763 Added links to distro-specific packages 2016-01-25 20:37:17 -05:00
blitzmann
a355a82f8a Merge pull request #503 from resinneublem/osx-preferences-shortcut
Use idiomatic osx preferences shortcut
2016-01-16 23:31:05 -05:00
Resin Neublem
ceb7eb15c3 Make exporting charges a preference
Some users don't want to export equiped charges because it might
conflict with their cargo hold (don't need 2x of the same type of script)

They just be equipping the items to see the different stats
2016-01-16 13:45:13 -05:00
Resin Neublem
115b154f0b Use idiomatic osx preferences shortcut
OSX uses "Command-," for application preferences
2016-01-16 13:09:13 -05:00
blitzmann
2d1344b785 Fix issue with accidental whitespace in CREST user-defined settings 2016-01-13 19:41:58 -05:00
blitzmann
bdf793072c Fix for t2 cloaks on prospect 2016-01-12 17:38:00 -05:00
blitzmann
2f879d39f3 Bump dev 2016-01-12 17:34:53 -05:00
Constantin Wenger
f0775af439 added command line option to specify the savepath 2016-01-12 21:28:15 +01:00
Constantin Wenger
96048b5133 added command line option to set the window title 2016-01-12 21:28:15 +01:00
blitzmann
36ab224853 Update to 996005 and bump stable 2016-01-12 00:28:19 -05:00
blitzmann
52d19b8de4 Remove debug prints 2016-01-09 14:48:13 -05:00
blitzmann
7be5ec844f Update README.md 2016-01-09 14:13:20 -05:00
blitzmann
3d26a31ee2 Add option to disable gauge animations (primarily for osx 10.11 users, see #438) 2016-01-09 12:36:55 -05:00
blitzmann
343d605a84 Fitting file import improvements:
- Blank files don't cause crash
- If error happens during processing, notify user
2016-01-03 21:45:19 -05:00
blitzmann
ef1228eb32 Ensure that utf-8 is tested when importing fits 2016-01-03 13:24:05 -05:00
blitzmann
ad738f7e7c Fix exporting fit to XML when name is unicode 2016-01-03 00:06:53 -05:00
blitzmann
4a66fa0138 Revert "Fix Command Destroyer MWD sig radius issue"
This reverts commit 331338e7b9.
2015-12-30 23:17:42 -05:00
blitzmann
331338e7b9 Fix Command Destroyer MWD sig radius issue 2015-12-30 23:02:27 -05:00
blitzmann
8e28925336 Add civilian weapons 2015-12-20 21:10:18 -05:00
blitzmann
df0e829dbe Merge pull request #478 from Neugeniko/master
Handle Crest Import and Export of Drone Bay and Cargo Bay contents.
2015-12-20 18:35:36 -05:00
Neugeniko
0c278b668c Handle Crest Import and Export of Drone Bay and Cargo Bay contents. 2015-12-16 12:56:28 +11:00
blitzmann
6e7ba714a8 Bump Dev, and fix import errors (#474) 2015-12-13 22:26:36 -05:00
blitzmann
d8e2e3ace1 Fix triage effects on weapon disrupters, update DB, and bump release 2015-12-10 20:18:02 -05:00
blitzmann
69c3dd188e Merge pull request #472 from wendazhou/FixNeutNosDisruptor
Fixed display of neut and nos amount, and guidance disruptors
2015-12-10 19:50:58 -05:00
Wenda Zhou
57da36f1cf Fixed category names for neut, nos and tracking disruptor.
With the implementation of falloff for energy neutralizer
and nosferatus, their names has changed so had to update
for correct display.

Also added some display for the new guidance disruptors
(i.e. missile disruptors). This also fixes the category
change for weapon disruptor (both are now called weapon
disruptor).
2015-12-09 22:50:30 -05:00
blitzmann
753ba00ac0 Update icons and EVE data 2015-12-09 21:56:22 -05:00
blitzmann
290f7d116f Fix some RR shield effects, and bump dev because I forgot 2015-12-09 21:09:50 -05:00
blitzmann
81fa88a36d Remove previously mentioned old item 2015-12-09 20:55:34 -05:00
blitzmann
0dd98330aa Fix issue with old item in market service causing error due to being non-existent. 2015-12-09 20:54:29 -05:00
blitzmann
ae55a2c1d2 Fix Nestor RR falloff effect 2015-12-08 12:21:21 -05:00
blitzmann
43ae593568 Bump to Stable 2015-12-07 20:12:19 -05:00
blitzmann
81963a6a7d Update effect files 2015-12-07 20:10:44 -05:00
blitzmann
fbf67c134b Merge remote-tracking branch 'origin/singularity' 2015-12-07 19:39:45 -05:00
blitzmann
a0cfe05eb5 Update to 988883, fix market conversion and add the converted modules, and improve on rename/conversion helper script 2015-12-07 19:38:54 -05:00
blitzmann
ba6e8d7ad1 Add renamed items 2015-12-06 14:28:35 -05:00
blitzmann
cbd2ed603f Possible fix for character editor crash 2015-12-06 11:16:54 -05:00
blitzmann
a2f1623b00 Fix icon script (no longer use icon prefix) and update icons 2015-12-06 10:22:25 -05:00
blitzmann
87ebcf0818 Update renders 2015-12-06 01:42:12 -05:00
blitzmann
f329c9956e Fix for icon conversion 2015-12-06 01:30:21 -05:00
blitzmann
2ac62ece06 Remove erroneous command causing a break in ship booster menu 2015-12-05 22:53:51 -05:00
blitzmann
f9db5eb201 Update to 988638 2015-12-05 22:35:03 -05:00
blitzmann
0a10f2d72a If running under OSX and wx3, override wx.ID_COPY and wx.ID_PASTE. See GH Issue #456 2015-12-04 01:06:35 -05:00
blitzmann
4325ccab8a Different fix for #397 and fix #458 2015-12-03 22:04:59 -05:00
blitzmann
04c6fad531 Change user agent of CREST calls 2015-12-03 20:50:01 -05:00
blitzmann
ca92285ff3 Fix some Weapon Disruption effects 2015-12-03 20:40:23 -05:00
blitzmann
96eee3a173 Fix Nos/Neut effects 2015-12-03 20:21:57 -05:00
blitzmann
a74c3c9b3d Fix #461 2015-12-02 20:38:45 -05:00
blitzmann
b4373cb0c5 Fix #451 2015-11-29 17:56:39 -05:00
blitzmann
9029c04ce6 Merge branch 'master' into singularity 2015-11-27 22:45:28 -05:00
blitzmann
191dd1c71b Add new mining frigate effects 2015-11-27 16:15:16 -05:00
blitzmann
3b64373393 Add more missing effects 2015-11-27 15:58:53 -05:00
blitzmann
0f6c67e852 Add missing effect for Oneiros 2015-11-27 15:03:41 -05:00
blitzmann
209297769f Missed an effect 2015-11-27 01:20:08 -05:00
blitzmann
2d4e3a6ddf Rename Logi skill to Logistic Cruiser 2015-11-27 01:18:32 -05:00
blitzmann
350f4c9f89 Add new effects. This commit uses a new helper script that automatically writes the effect file for the more straightforward effects. 2015-11-27 01:14:59 -05:00
blitzmann
9c9a6b69fe Revert "Add new nos/neut effect files, and change module/drone files to account for new attributes. This does not add the database"
This reverts commit 7dbe6dbe2d.
2015-11-27 00:07:24 -05:00
blitzmann
7dbe6dbe2d Add new nos/neut effect files, and change module/drone files to account for new attributes. This does not add the database 2015-11-22 23:03:46 -05:00
blitzmann
ca34d7cced Differentiate between character implants and fits 2015-11-10 02:06:44 -05:00
blitzmann
938e2a871d Merge branch 'master' into charImplants
Conflicts:
	gui/characterEditor.py
2015-11-08 21:19:04 -05:00
blitzmann
dc55dbdf36 Polish some events 2015-09-25 14:48:05 -04:00
blitzmann
d0ec17feba Some syntax 2015-09-25 14:13:33 -04:00
blitzmann
5b5fdd97d6 Enable and fix market tree for character implant view 2015-09-25 13:59:37 -04:00
3822 changed files with 67805 additions and 23297 deletions

186
.appveyor.yml Normal file
View File

@@ -0,0 +1,186 @@
environment:
global:
# SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the
# /E:ON and /V:ON options are not enabled in the batch script intepreter
# See: http://stackoverflow.com/a/13751649/163740
CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\appveyor\\run_with_env.cmd"
matrix:
# Python 2.7.10 is the latest version and is not pre-installed.
- PYTHON: "C:\\Python27.10"
PYTHON_VERSION: "2.7.10"
PYTHON_ARCH: "32"
#- PYTHON: "C:\\Python27.10-x64"
# PYTHON_VERSION: "2.7.10"
# PYTHON_ARCH: "64"
# Pre-installed Python versions, which Appveyor may upgrade to
# a later point release.
# See: http://www.appveyor.com/docs/installed-software#python
#- PYTHON: "C:\\Python27"
# PYTHON_VERSION: "2.7.x" # currently 2.7.9
# PYTHON_ARCH: "32"
#- PYTHON: "C:\\Python27-x64"
# PYTHON_VERSION: "2.7.x" # currently 2.7.9
# PYTHON_ARCH: "64"
#- PYTHON: "C:\\Python33"
# PYTHON_VERSION: "3.3.x" # currently 3.3.5
# PYTHON_ARCH: "32"
#- PYTHON: "C:\\Python33-x64"
# PYTHON_VERSION: "3.3.x" # currently 3.3.5
# PYTHON_ARCH: "64"
#- PYTHON: "C:\\Python34"
# PYTHON_VERSION: "3.4.x" # currently 3.4.3
# PYTHON_ARCH: "32"
#- PYTHON: "C:\\Python34-x64"
# PYTHON_VERSION: "3.4.x" # currently 3.4.3
# PYTHON_ARCH: "64"
# Python versions not pre-installed
# Python 2.6.6 is the latest Python 2.6 with a Windows installer
# See: https://github.com/ogrisel/python-appveyor-demo/issues/10
#- PYTHON: "C:\\Python266"
# PYTHON_VERSION: "2.6.6"
# PYTHON_ARCH: "32"
#- PYTHON: "C:\\Python266-x64"
# PYTHON_VERSION: "2.6.6"
# PYTHON_ARCH: "64"
#- PYTHON: "C:\\Python35"
# PYTHON_VERSION: "3.5.0"
# PYTHON_ARCH: "32"
#- PYTHON: "C:\\Python35-x64"
# PYTHON_VERSION: "3.5.0"
# PYTHON_ARCH: "64"
# Major and minor releases (i.e x.0.0 and x.y.0) prior to 3.3.0 use
# a different naming scheme.
#- PYTHON: "C:\\Python270"
# PYTHON_VERSION: "2.7.0"
# PYTHON_ARCH: "32"
#- PYTHON: "C:\\Python270-x64"
# PYTHON_VERSION: "2.7.0"
# PYTHON_ARCH: "64"
install:
# If there is a newer build queued for the same PR, cancel this one.
# The AppVeyor 'rollout builds' option is supposed to serve the same
# purpose but it is problematic because it tends to cancel builds pushed
# directly to master instead of just PR builds (or the converse).
# credits: JuliaLang developers.
- ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
throw "There are newer queued builds for this pull request, failing early." }
# Install wxPython
- 'ECHO Downloading wxPython.'
- "appveyor DownloadFile https://goo.gl/yvO8PB -FileName C:\\wxpython.exe"
#- "appveyor DownloadFile https://goo.gl/Uj0jV3 -FileName C:\\wxpython64.exe"
- 'ECHO Install wxPython'
- "C:\\wxpython.exe /SP- /VERYSILENT /NORESTART"
#- "C:\\wxpython64.exe /SP- /VERYSILENT /NORESTART"
- ECHO "Filesystem root:"
- ps: "ls \"C:/\""
- ECHO "Filesystem pyfa root:"
- ps: "ls \"C:\\projects\\pyfa\\\""
- ECHO "Installed SDKs:"
- ps: "ls \"C:/Program Files/Microsoft SDKs/Windows\""
# Install Python (from the official .msi of http://python.org) and pip when
# not already installed.
# - ps: if (-not(Test-Path($env:PYTHON))) { & appveyor\install.ps1 }
# Prepend newly installed Python to the PATH of this build (this cannot be
# done from inside the powershell script as it would require to restart
# the parent CMD process).
- "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
# Check that we have the expected version and architecture for Python
- "python --version"
- "python -c \"import struct; print(struct.calcsize('P') * 8)\""
# Upgrade to the latest version of pip to avoid it displaying warnings
# about it being out of date.
- "pip install --disable-pip-version-check --user --upgrade pip"
# Install the build dependencies of the project. If some dependencies contain
# compiled extensions and are not provided as pre-built wheel packages,
# pip will build them from source using the MSVC compiler matching the
# target Python version and architecture
# C:\\projects\\eve-gnosis\\
- ECHO "Install pip requirements:"
- "pip install -r requirements.txt"
- "pip install -r requirements_test.txt"
- "pip install -r requirements_build_windows.txt"
build_script:
# Build the compiled extension
# - "python setup.py build"
- ECHO "Build pyfa:"
#- copy C:\projects\pyfa\dist_assets\win\pyfa.spec C:\projects\pyfa\pyfa.spec
- "python C:\\projects\\pyfa\\setup.py build"
#- ECHO "Build pyfa (Debug):"
#- copy C:\projects\pyfa\dist_assets\win\pyfa_debug.spec C:\projects\pyfa\pyfa_debug.spec
#- "pyinstaller.exe --clean --noconfirm --windowed --upx-dir=C:\\projects\\pyfa\\scripts\\upx.exe C:\\projects\\pyfa\\pyfa_debug.spec"
build: on
after_build:
- ps: "ls \"./\""
#- ps: "ls \"C:\\projects\\pyfa\\build\\pyfa\\\""
- ps: "ls \"C:\\projects\\pyfa\\build\\\""
- ps: "ls \"C:\\projects\\pyfa\\build\\exe.win32-2.7\\\""
# Zip
# APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER
#- 7z a build.zip -r C:\projects\pyfa\build\pyfa\*.*
- 7z a pyfa.zip -r C:\projects\pyfa\build\exe.win32-2.7\*.*
#- 7z a pyfa_debug.zip -r C:\projects\pyfa\dist\pyfa_debug\*.*
on_success:
# Do nothing right now
test_script:
#- tox
#- "py.test --cov=./"
# Run the project tests
# - "%CMD_IN_ENV% python C:/projects/eve-gnosis/setup.py nosetests"
after_test:
# If tests are successful, create binary packages for the project.
# - "%CMD_IN_ENV% python setup.py bdist_wheel"
# - "%CMD_IN_ENV% python setup.py bdist_wininst"
# - "%CMD_IN_ENV% python setup.py bdist_msi"
# - ps: "ls dist"
artifacts:
# Archive the generated packages in the ci.appveyor.com build report.
- path: pyfa.zip
name: 'pyfa.zip'
#- path: pyfa_debug.zip
# name: Pyfa_debug
#on_success:
# - TODO: upload the content of dist/*.whl to a public wheelhouse
#

26
.codecov.yml Normal file
View File

@@ -0,0 +1,26 @@
codecov:
notify:
require_ci_to_pass: yes
coverage:
precision: 2
round: down
range: "70...100"
status:
project: yes
patch: yes
changes: no
parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: no
macro: no
comment:
layout: "header, diff"
behavior: default
require_changes: no

40
.gitattributes vendored Normal file
View File

@@ -0,0 +1,40 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
# *.c text
# *.h text
# Declare files that will always have CRLF line endings on checkout.
# Source files
# ============
*.pxd text eol=crlf
*.py text eol=crlf
*.py3 text eol=crlf
*.pyw text eol=crlf
*.pyx text eol=crlf
pyfa.py text eol=lf
# Denote all files that are truly binary and should not be modified.
# Binary files
# ============
*.db binary
*.p binary
*.pkl binary
*.pyc binary
*.pyd binary
*.pyo binary
# Note: .db, .p, and .pkl files are associated
# with the python modules ``pickle``, ``dbm.*``,
# ``shelve``, ``marshal``, ``anydbm``, & ``bsddb``
# (among others).
# Denote all files that are truly binary and should not be modified.
# Image files
# ============
*.png binary
*.jpg binary
*.icns binary
*.ico binary

117
.gitignore vendored
View File

@@ -4,20 +4,121 @@
#Kwrite/Gedit/Other crapapps making backups
*~
#Eclipse
.project
.pydevproject
.settings
#Patch files
*.patch
#Personal
/saveddata/
#PyCharm
.idea/
#Pyfa file
pyfaFits.html
#Temporary files
*.py__jb_tmp__
# Based on https://github.com/github/gitignore
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
Pyfa.egg-info/
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# IPython Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# dotenv
.env
# virtualenv
.venv/
venv/
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
# Eclipse project settings
.project
.pydevproject
.settings
# Pycharm project settings
.idea
eos.iml
gitversion
.version
/.version
*.swp

14
.mailmap Normal file
View File

@@ -0,0 +1,14 @@
cncfanatics <diego.duclos@gmail.com> cncfanatics <cncfanatics@titanium.(none)>
blitzmann <holmes.ryan.90@gmail.com>
blitzmann <holmes.ryan.90@gmail.com> blitzmann <ryan.xgamer99@gmail.com>
blitzmann <holmes.ryan.90@gmail.com>
blitzmann <holmes.ryan.90@gmail.com> blitzman <ryan.xgamer99@gmail.com>
blitzmann <holmes.ryan.90@gmail.com> Ryan Holmes <ryan.holmes.90@gmail.com>
blitzmann <holmes.ryan.90@gmail.com>
Corollax <corollax@gmail.com> Corollax <corollax@corollax-laptop.(none)>
Corollax <corollax@gmail.com> Corollax <corollax@corollax-N76VM.(none)>
Mr. Nukealizer <mr.nukealizer@gmail.com> Mr. Nukealizer <MrNukealizer@users.noreply.github.com>
DarkPhoenix <phoenix@mail.ru>
Sakari Orisi <sakari@evefit.org>
Will Wykeham <will@wykeham.net> Will Wykeham <will.wykeham@paconsulting.com>
OISumeko <camerongrout@gmail.com> OISumeko <cameron@sporadic.co.nz>

39
.travis.yml Normal file
View File

@@ -0,0 +1,39 @@
language: python
cache: pip
python:
- '2.7'
env:
- TOXENV=pep8
addons:
apt:
packages:
before_install:
- sudo apt-get update && sudo apt-get --reinstall install -qq language-pack-en language-pack-ru language-pack-he language-pack-zh-hans
- pip install tox
# We're not actually installing Tox, but have to run it before we install wxPython via Conda. This is fugly but vOv
- tox
# get Conda
- if [[ "$TRAVIS_PYTHON_VERSION" == "2.7" ]]; then
wget https://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh;
else
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh;
fi
- bash miniconda.sh -b -p $HOME/miniconda
- export PATH="$HOME/miniconda/bin:$PATH"
- hash -r
- conda config --set always_yes yes --set changeps1 no
- conda update -q conda
# Useful for debugging any issues with conda
- conda info -a
install:
# install wxPython 3.0.0.0
- conda install -c https://conda.anaconda.org/travis wxpython
before_script:
- pip install -r requirements.txt
- pip install -r requirements_test.txt
script:
- py.test --cov=./
after_success:
- bash <(curl -s https://codecov.io/bash)
before_deploy:
- pip install -r requirements_build_linux.txt

34
ISSUE_TEMPLATE.md Normal file
View File

@@ -0,0 +1,34 @@
<!--
Submit a bug report bug report or feature request
Here you can inform pyfa developers of potential bugs or suggest features / improvements to the project. Please check
to make sure that the bug hasn't been reported or feature requested before submitting. If you have general questions
about the project and want to reach out to the developers personally, please check out out our [Slack]
(https://pyfainvite.azurewebsites.net/).
-->
## Bug Report
### Expected behavior:
### Actual behavior:
### Detailed steps to reproduce:
### Fits involved in EFT format (Edit > To Clipboard > EFT):
### Release or development git branch? Please note the release version or commit hash:
### Operating system and version (eg: Windows 10, OS X 10.9, OS X 10.11, Ubuntu 16.10):
### Other relevant information:

View File

@@ -1,5 +1,7 @@
# pyfa
[![Join us on Slack!](https://pyfainvite.azurewebsites.net/badge.svg)](https://pyfainvite.azurewebsites.net/) [![Build Status](https://travis-ci.org/pyfa-org/Pyfa.svg?branch=master)](https://travis-ci.org/pyfa-org/Pyfa)
![pyfa](https://cloud.githubusercontent.com/assets/3904767/10271512/af385ef2-6ade-11e5-8f67-52b8b1e4c797.PNG)
## What is it?
@@ -7,42 +9,50 @@
pyfa, short for **py**thon **f**itting **a**ssistant, allows you to create, experiment with, and save ship fittings without being in game. Open source and written in Python, it is available on any platform where Python 2.x and wxWidgets are available, including Windows, Mac OS X, and Linux.
## Latest Version and Changelogs
The latest version along with release notes can always be found on the projects [Releases](https://github.com/DarkFenX/Pyfa/releases) page. pyfa will notify you if you are running an outdated version.
The latest version along with release notes can always be found on the project's [Releases](https://github.com/DarkFenX/Pyfa/releases) page. pyfa will notify you if you are running an outdated version.
## Installing
Windows and OS X users are supplied self-contained builds of pyfa that can be run without additional software. An `.exe` installer is also available for the Windows builds. There is no self-contained package for Linux users, which are expected to run pyfa through their distributions Python interpreter. However, there are a number of third-party packages available that handle the dependencies and updates for pyfa (for example, [pyfa for Arch Linux](https://aur.archlinux.org/packages/pyfa/)). Please check your distributions repositories.
## Installation
Windows and OS X users are supplied self-contained builds of pyfa on the [latest releases](https://github.com/pyfa-org/Pyfa/releases/latest) page. An `.exe` installer is also available for Windows builds. Linux users can run pyfa using their distribution's Python interpreter. There is no official self-contained package for Linux, however, there are a number of third-party packages available through distribution-specific repositories.
## Requirements
#### OS X
Apart from the official release, there is also a [Homebrew](http://brew.sh) option for installing pyfa on OS X. Please note this is maintained by a third-party and is not tested by pyfa developers. Simply fire up in terminal:
```
$ brew install Caskroom/cask/pyfa
```
### Linux Distro-specific Packages
The following is a list of pyfa packages available for certain distributions. Please note that these packages are maintained by third-parties and are not evaluated by the pyfa developers.
* Debian/Ubuntu/derivitives: https://github.com/AdamMajer/Pyfa/releases
* Arch: https://aur.archlinux.org/packages/pyfa/
* openSUSE: https://build.opensuse.org/package/show/home:rmk2/pyfa
* FreeBSD: http://www.freshports.org/games/pyfa/ (see [#484](https://github.com/pyfa-org/Pyfa/issues/484) for instructions)
### Dependencies
If you wish to help with development or simply need to run pyfa through a Python interpreter, the following software is required:
* Python >= 2.6
* `wxPython` 2.8/3.0
* `sqlalchemy` >= 0.6
* `dateutil`
* `matplotlib` (for some Linux distributions, you may need to install separate wxPython bindings, such as `python-matplotlib-wx`)
* `requests`
* Python 3.6
* Requirements as listed in `requirements.txt`
## Bug Reporting
The preferred method of reporting bugs is through the projects GitHub Issues interface. Alternatively, posting a report in the pyfa thread on the official EVE Online forums is acceptable. Guidelines for bug reporting can be found on [this wiki page](https://github.com/DarkFenX/Pyfa/wiki/Bug-Reporting).
The preferred method of reporting bugs is through the project's [GitHub Issues interface](https://github.com/pyfa-org/Pyfa/issues). Alternatively, posting a report in the [pyfa thread](http://forums.eveonline.com/default.aspx?g=posts&t=247609) on the official EVE Online forums is acceptable. Guidelines for bug reporting can be found on [this wiki page](https://github.com/DarkFenX/Pyfa/wiki/Bug-Reporting).
## License
pyfa is licensed under the GNU GPL v3.0, see LICENSE
## Resources
* Development repository: [http://github.com/DarkFenX/Pyfa](http://github.com/DarkFenX/Pyfa)
* XMPP conference: [pyfa@conference.jabber.org](pyfa@conference.jabber.org)
* [EVE forum thread](http://forums.eveonline.com/default.aspx?g=posts&t=247609)
* Development repository: [https://github.com/pyfa-org/Pyfa](https://github.com/pyfa-org/Pyfa)
* [EVE forum thread](https://forums.eveonline.com/t/27156)
* [EVE University guide using pyfa](http://wiki.eveuniversity.org/Guide_to_using_PYFA)
* [EVE Online website](http://www.eveonline.com/)
## Contacts:
* Kadesh Priestess
* GitHub: @DarkFenX
* [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @kadesh
* Sable Blitzmann
* GitHub: @blitzmann
* [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @blitzmann
* [Gitter chat](https://gitter.im/pyfa-org/Pyfa): @ blitzmann
* Email: sable.blitzmann@gmail.com
## CCP Copyright Notice
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to Osmium to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, Osmium. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website.
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to pyfa to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, pyfa. CCP is in no way responsible for the content on or functioning of this program, nor can it be liable for any damage arising from the use of this program.

View File

@@ -0,0 +1,13 @@
<code_scheme name="Pyfa">
<option name="LINE_SEPARATOR" value="&#xD;&#xA;" />
<option name="RIGHT_MARGIN" value="165" />
<Python>
<option name="NEW_LINE_AFTER_COLON" value="true" />
<option name="DICT_ALIGNMENT" value="2" />
<option name="DICT_NEW_LINE_AFTER_LEFT_BRACE" value="true" />
<option name="DICT_NEW_LINE_BEFORE_RIGHT_BRACE" value="true" />
<option name="USE_CONTINUATION_INDENT_FOR_ARGUMENTS" value="true" />
<option name="OPTIMIZE_IMPORTS_SORT_NAMES_IN_FROM_IMPORTS" value="true" />
<option name="OPTIMIZE_IMPORTS_JOIN_FROM_IMPORTS_WITH_SAME_SOURCE" value="true" />
</Python>
</code_scheme>

View File

@@ -0,0 +1,54 @@
<profile version="1.0">
<option name="myName" value="Pyfa" />
<inspection_tool class="IgnoreUnusedEntry" enabled="false" level="UNUSED ENTRY" enabled_by_default="false" />
<inspection_tool class="InconsistentLineSeparators" enabled="true" level="ERROR" enabled_by_default="true" />
<inspection_tool class="ProblematicWhitespace" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="PyBehaveInspection" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="PyClassicStyleClassInspection" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="PyCompatibilityInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ourVersions">
<value>
<list size="1">
<item index="0" class="java.lang.String" itemvalue="2.7" />
</list>
</value>
</option>
</inspection_tool>
<inspection_tool class="PyMissingTypeHintsInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="1">
<item index="0" class="java.lang.String" itemvalue="wxPython" />
</list>
</value>
</option>
</inspection_tool>
<inspection_tool class="PyPep8Inspection" enabled="true" level="TYPO" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="E203" />
<option value="E127" />
<option value="E128" />
<option value="E126" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="TYPO" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N802" />
<option value="N806" />
<option value="N803" />
<option value="N814" />
</list>
</option>
</inspection_tool>
<inspection_tool class="PyShadowingBuiltinsInspection" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="PyShadowingNamesInspection" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
<option name="processLiterals" value="true" />
<option name="processComments" value="true" />
</inspection_tool>
</profile>

0
_development/__init__.py Normal file
View File

145
_development/helpers.py Normal file
View File

@@ -0,0 +1,145 @@
# noinspection PyPackageRequirements
import pytest
import os
import sys
import threading
from sqlalchemy import MetaData, create_engine
from sqlalchemy.orm import sessionmaker
script_dir = os.path.dirname(os.path.abspath(__file__))
# Add root folder to python paths
sys.path.append(os.path.realpath(os.path.join(script_dir, '..', '..')))
sys._called_from_test = True
# noinspection PyUnresolvedReferences,PyUnusedLocal
@pytest.fixture
def DBInMemory_test():
def rollback():
with sd_lock:
saveddata_session.rollback()
print("Creating database in memory")
from os.path import realpath, join, dirname, abspath
debug = False
gamedataCache = True
saveddataCache = True
gamedata_version = ""
gamedata_connectionstring = 'sqlite:///' + realpath(join(dirname(abspath(str(__file__))), "..", "eve.db"))
saveddata_connectionstring = 'sqlite:///:memory:'
class ReadOnlyException(Exception):
pass
if callable(gamedata_connectionstring):
gamedata_engine = create_engine("sqlite://", creator=gamedata_connectionstring, echo=debug)
else:
gamedata_engine = create_engine(gamedata_connectionstring, echo=debug)
gamedata_meta = MetaData()
gamedata_meta.bind = gamedata_engine
gamedata_session = sessionmaker(bind=gamedata_engine, autoflush=False, expire_on_commit=False)()
# This should be moved elsewhere, maybe as an actual query. Current, without try-except, it breaks when making a new
# game db because we haven't reached gamedata_meta.create_all()
try:
gamedata_version = gamedata_session.execute(
"SELECT `field_value` FROM `metadata` WHERE `field_name` LIKE 'client_build'"
).fetchone()[0]
except Exception as e:
print("Missing gamedata version.")
gamedata_version = None
if saveddata_connectionstring is not None:
if callable(saveddata_connectionstring):
saveddata_engine = create_engine(creator=saveddata_connectionstring, echo=debug)
else:
saveddata_engine = create_engine(saveddata_connectionstring, echo=debug)
saveddata_meta = MetaData()
saveddata_meta.bind = saveddata_engine
saveddata_session = sessionmaker(bind=saveddata_engine, autoflush=False, expire_on_commit=False)()
else:
saveddata_meta = None
# Lock controlling any changes introduced to session
sd_lock = threading.Lock()
# Import all the definitions for all our database stuff
# noinspection PyPep8
#from eos.db.gamedata import alphaClones, attribute, category, effect, group, icon, item, marketGroup, metaData, metaGroup, queries, traits, unit
# noinspection PyPep8
#from eos.db.saveddata import booster, cargo, character, crest, damagePattern, databaseRepair, drone, fighter, fit, implant, implantSet, loadDefaultDatabaseValues, miscData, module, override, price, queries, skill, targetResists, user
# If using in memory saveddata, you'll want to reflect it so the data structure is good.
if saveddata_connectionstring == "sqlite:///:memory:":
saveddata_meta.create_all()
# Output debug info to help us troubleshoot Travis
print(saveddata_engine)
print(gamedata_engine)
helper = {
#'config': eos.config,
'gamedata_session' : gamedata_session,
'saveddata_session' : saveddata_session,
}
return helper
# noinspection PyUnresolvedReferences,PyUnusedLocal
@pytest.fixture
def DBInMemory():
print("Creating database in memory")
import eos.config
import eos
import eos.db
# Output debug info to help us troubleshoot Travis
print((eos.db.saveddata_engine))
print((eos.db.gamedata_engine))
helper = {
'config': eos.config,
'db' : eos.db,
'gamedata_session' : eos.db.gamedata_session,
'saveddata_session' : eos.db.saveddata_session,
}
return helper
@pytest.fixture
def Gamedata():
print("Building Gamedata")
from eos.gamedata import Item
helper = {
'Item': Item,
}
return helper
@pytest.fixture
def Saveddata():
print("Building Saveddata")
from eos.saveddata.ship import Ship
from eos.saveddata.fit import Fit
from eos.saveddata.character import Character
from eos.saveddata.module import Module, State
from eos.saveddata.citadel import Citadel
from eos.saveddata.booster import Booster
helper = {
'Structure': Citadel,
'Ship' : Ship,
'Fit' : Fit,
'Character': Character,
'Module' : Module,
'State' : State,
'Booster' : Booster,
}
return helper

View File

@@ -0,0 +1,66 @@
import pytest
# noinspection PyPackageRequirements
from _development.helpers import DBInMemory as DB, Gamedata, Saveddata
# noinspection PyShadowingNames
@pytest.fixture
def RifterFit(DB, Gamedata, Saveddata):
print("Creating Rifter")
item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Rifter").first()
ship = Saveddata['Ship'](item)
# setup fit
fit = Saveddata['Fit'](ship, "My Rifter Fit")
return fit
# noinspection PyShadowingNames
@pytest.fixture
def KeepstarFit(DB, Gamedata, Saveddata):
print("Creating Keepstar")
item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Keepstar").first()
ship = Saveddata['Structure'](item)
# setup fit
fit = Saveddata['Fit'](ship, "Keepstar Fit")
return fit
# noinspection PyShadowingNames
@pytest.fixture
def CurseFit(DB, Gamedata, Saveddata):
print("Creating Curse - With Neuts")
item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Curse").first()
ship = Saveddata['Ship'](item)
# setup fit
fit = Saveddata['Fit'](ship, "Curse - With Neuts")
mod = Saveddata['Module'](DB['db'].getItem("Medium Energy Neutralizer II"))
mod.state = Saveddata['State'].ONLINE
# Add 5 neuts
for _ in range(5):
fit.modules.append(mod)
return fit
# noinspection PyShadowingNames
@pytest.fixture
def HeronFit(DB, Gamedata, Saveddata):
print("Creating Heron - RemoteSebo")
item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Heron").first()
ship = Saveddata['Ship'](item)
# setup fit
fit = Saveddata['Fit'](ship, "Heron - RemoteSebo")
mod = Saveddata['Module'](DB['db'].getItem("Remote Sensor Booster II"))
mod.state = Saveddata['State'].ONLINE
# Add 5 neuts
for _ in range(4):
fit.modules.append(mod)
return fit

View File

@@ -0,0 +1,12 @@
import pytest
# noinspection PyPackageRequirements
from _development.helpers import DBInMemory as DB, Gamedata, Saveddata
# noinspection PyShadowingNames
@pytest.fixture
def StrongBluePillBooster (DB, Gamedata, Saveddata):
print("Creating Strong Blue Pill Booster")
item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Strong Blue Pill Booster").first()
return Saveddata['Booster'](item)

View File

@@ -0,0 +1,101 @@
import os
# https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
windows_codecs = {
'cp1252', # Standard Windows
'cp1251', # Russian
'cp037',
'cp424',
'cp437',
'cp500',
'cp720',
'cp737',
'cp775',
'cp850',
'cp852',
'cp855',
'cp856',
'cp857',
'cp858',
'cp860',
'cp861',
'cp862',
'cp863',
'cp864',
'cp865',
'cp866',
'cp869',
'cp874',
'cp875',
'cp932',
'cp949',
'cp950',
'cp1006',
'cp1026',
'cp1140',
'cp1250',
'cp1253',
'cp1254',
'cp1255',
'cp1256',
'cp1257',
'cp1258',
}
linux_codecs = {
'utf_8', # Generic Linux/Mac
}
mac_codecs = [
'utf_8', # Generic Linux/Mac
'mac_cyrillic',
'mac_greek',
'mac_iceland',
'mac_latin2',
'mac_roman',
'mac_turkish',
]
universal_codecs = [
'utf_16', 'utf_32', 'utf_32_be', 'utf_32_le', 'utf_16_be', 'utf_16_le', 'utf_7', 'utf_8_sig',
]
other_codecs = [
'scii', 'big5', 'big5hkscs', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213', 'euc_kr', 'gb2312', 'gbk', 'gb18030', 'hz', 'iso2022_jp', 'iso2022_jp_1',
'iso2022_jp_2', 'iso2022_jp_2004', 'iso2022_jp_3', 'iso2022_jp_ext', 'iso2022_kr', 'latin_1', 'iso8859_2', 'iso8859_3', 'iso8859_4', 'iso8859_5',
'iso8859_6', 'iso8859_7', 'iso8859_8', 'iso8859_9', 'iso8859_10', 'iso8859_11', 'iso8859_13', 'iso8859_14', 'iso8859_15', 'iso8859_16', 'johab', 'koi8_r',
'koi8_u', 'ptcp154', 'shift_jis', 'shift_jis_2004', 'shift_jisx0213'
]
system_names = {
'Windows': windows_codecs,
'Linux': linux_codecs,
'Darwin': mac_codecs,
}
def GetPath(root, file=None, codec=None):
# Replace this with the function we actually use for this
path = os.path.realpath(os.path.abspath(root))
if file:
path = os.path.join(path, file)
if codec:
path = path.decode(codec)
return path
def GetUnicodePath(root, file=None, codec=None):
# Replace this with the function we actually use for this
path = os.path.realpath(os.path.abspath(root))
if file:
path = os.path.join(path, file)
if codec:
path = str(path, codec)
else:
path = str(path)
return path

241
config.py
View File

@@ -1,48 +1,61 @@
import os
import sys
# TODO: move all logging back to pyfa.py main loop
# We moved it here just to avoid rebuilding windows skeleton for now (any change to pyfa.py needs it)
import logging
import logging.handlers
from logbook import CRITICAL, DEBUG, ERROR, FingersCrossedHandler, INFO, Logger, NestedSetup, NullHandler, \
StreamHandler, TimedRotatingFileHandler, WARNING
import hashlib
from cryptography.fernet import Fernet
pyfalog = Logger(__name__)
# Load variable overrides specific to distribution type
try:
import configforced
except ImportError:
pyfalog.warning("Failed to import: configforced")
configforced = None
# Turns on debug mode
debug = False
# Defines if our saveddata will be in pyfa root or not
saveInRoot = False
# Version data
version = "1.16.3"
tag = "git"
expansionName = "Parallax"
expansionVersion = "1.1"
version = "2.0.1"
tag = "Stable"
expansionName = "YC120.3"
expansionVersion = "1.8"
evemonMinVersion = "4081"
minItemSearchLength = 3
pyfaPath = None
savePath = None
saveDB = None
gameDB = None
logPath = None
loggingLevel = None
logging_setup = None
cipher = None
clientHash = None
ESI_CACHE = 'esi_cache'
LOGLEVEL_MAP = {
"critical": CRITICAL,
"error": ERROR,
"warning": WARNING,
"info": INFO,
"debug": DEBUG,
}
class StreamToLogger(object):
"""
Fake file-like stream object that redirects writes to a logger instance.
From: http://www.electricmonk.nl/log/2011/08/14/redirect-stdout-and-stderr-to-a-logger-in-python/
"""
def __init__(self, logger, log_level=logging.INFO):
self.logger = logger
self.log_level = log_level
self.linebuf = ''
def getClientSecret():
return clientHash
def write(self, buf):
for line in buf.rstrip().splitlines():
self.logger.log(self.log_level, line.rstrip())
def isFrozen():
if hasattr(sys, 'frozen'):
@@ -50,28 +63,46 @@ def isFrozen():
else:
return False
def getPyfaRoot():
base = getattr(sys.modules['__main__'], "__file__", sys.executable) if isFrozen() else sys.argv[0]
root = os.path.dirname(os.path.realpath(os.path.abspath(base)))
root = unicode(root, sys.getfilesystemencoding())
return root
def __createDirs(path):
if not os.path.exists(path):
os.makedirs(path)
def defPaths():
def getPyfaRoot():
if hasattr(sys, '_MEIPASS'):
return sys._MEIPASS
base = getattr(sys.modules['__main__'], "__file__", sys.executable) if isFrozen() else __file__
root = os.path.dirname(os.path.realpath(os.path.abspath(base)))
root = root
return root
def getVersion():
if os.path.isfile(os.path.join(pyfaPath, '.version')):
with open(os.path.join(pyfaPath, '.version')) as f:
gitVersion = f.readline()
return gitVersion
# if no version file exists, then user is running from source or not an official build
return version + " (git)"
def getDefaultSave():
return os.path.expanduser(os.path.join("~", ".pyfa"))
def defPaths(customSavePath=None):
global debug
global pyfaPath
global savePath
global saveDB
global gameDB
global saveInRoot
global logPath
global cipher
global clientHash
if debug:
logLevel = logging.DEBUG
else:
logLevel = logging.WARN
pyfalog.debug("Configuring Pyfa")
# The main pyfa directory which contains run.py
# Python 2.X uses ANSI by default, so we need to convert the character encoding
@@ -87,33 +118,26 @@ def defPaths():
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
sys.getfilesystemencoding())
if customSavePath is None: # customSavePath is not overriden
savePath = getDefaultSave()
else:
savePath = customSavePath
__createDirs(savePath)
if isFrozen():
os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem")
os.environ["SSL_CERT_FILE"] = os.path.join(pyfaPath, "cacert.pem")
secret_file = os.path.join(savePath, ".secret")
if not os.path.exists(secret_file):
with open(secret_file, "wb") as _file:
_file.write(Fernet.generate_key())
format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s'
logging.basicConfig(format=format, level=logLevel)
handler = logging.handlers.RotatingFileHandler(os.path.join(savePath, "log.txt"), maxBytes=1000000, backupCount=3)
formatter = logging.Formatter(format)
handler.setFormatter(formatter)
logging.getLogger('').addHandler(handler)
with open(secret_file, 'rb') as fp:
key = fp.read()
clientHash = hashlib.sha3_256(key).hexdigest()
cipher = Fernet(key)
logging.info("Starting pyfa")
if hasattr(sys, 'frozen'):
stdout_logger = logging.getLogger('STDOUT')
sl = StreamToLogger(stdout_logger, logging.INFO)
sys.stdout = sl
# This interferes with cx_Freeze's own handling of exceptions. Find a way to fix this.
#stderr_logger = logging.getLogger('STDERR')
#sl = StreamToLogger(stderr_logger, logging.ERROR)
#sys.stderr = sl
# if isFrozen():
# os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem")
# os.environ["SSL_CERT_FILE"] = os.path.join(pyfaPath, "cacert.pem")
# The database where we store all the fits etc
saveDB = os.path.join(savePath, "saveddata.db")
@@ -121,13 +145,120 @@ def defPaths():
# The database where the static EVE data from the datadump is kept.
# This is not the standard sqlite datadump but a modified version created by eos
# maintenance script
gameDB = os.path.join(pyfaPath, "eve.db")
gameDB = getattr(configforced, "gameDB", gameDB)
if not gameDB:
gameDB = os.path.join(pyfaPath, "eve.db")
## DON'T MODIFY ANYTHING BELOW ##
if debug:
logFile = "pyfa_debug.log"
else:
logFile = "pyfa.log"
logPath = os.path.join(savePath, logFile)
# DON'T MODIFY ANYTHING BELOW
import eos.config
#Caching modifiers, disable all gamedata caching, its unneeded.
# Caching modifiers, disable all gamedata caching, its unneeded.
eos.config.gamedataCache = False
# saveddata db location modifier, shouldn't ever need to touch this
eos.config.saveddata_connectionstring = "sqlite:///" + saveDB + "?check_same_thread=False"
eos.config.gamedata_connectionstring = "sqlite:///" + gameDB + "?check_same_thread=False"
print(eos.config.saveddata_connectionstring)
print(eos.config.gamedata_connectionstring)
# initialize the settings
from service.settings import EOSSettings
eos.config.settings = EOSSettings.getInstance().EOSSettings # this is kind of confusing, but whatever
def defLogging():
global debug
global logPath
global loggingLevel
global logging_setup
try:
if debug:
logging_setup = NestedSetup([
# make sure we never bubble up to the stderr handler
# if we run out of setup handling
NullHandler(),
StreamHandler(
sys.stdout,
bubble=False,
level=loggingLevel
),
TimedRotatingFileHandler(
logPath,
level=0,
backup_count=3,
bubble=True,
date_format='%Y-%m-%d',
),
])
else:
logging_setup = NestedSetup([
# make sure we never bubble up to the stderr handler
# if we run out of setup handling
NullHandler(),
FingersCrossedHandler(
TimedRotatingFileHandler(
logPath,
level=0,
backup_count=3,
bubble=False,
date_format='%Y-%m-%d',
),
action_level=ERROR,
buffer_size=1000,
# pull_information=True,
# reset=False,
)
])
except:
print("Critical error attempting to setup logging. Falling back to console only.")
logging_setup = NestedSetup([
# make sure we never bubble up to the stderr handler
# if we run out of setup handling
NullHandler(),
StreamHandler(
sys.stdout,
bubble=False
)
])
with logging_setup.threadbound():
# Output all stdout (print) messages as warnings
try:
sys.stdout = LoggerWriter(pyfalog.warning)
except:
pyfalog.critical("Cannot redirect. Continuing without writing stdout to log.")
# Output all stderr (stacktrace) messages as critical
try:
sys.stderr = LoggerWriter(pyfalog.critical)
except:
pyfalog.critical("Cannot redirect. Continuing without writing stderr to log.")
class LoggerWriter(object):
def __init__(self, level):
# self.level is really like using log.debug(message)
# at least in my case
self.level = level
def write(self, message):
# if statement reduces the amount of newlines that are
# printed to the logger
if message.strip() != '':
self.level(message.replace("\n", ""))
def flush(self):
# create a flush method so things can be flushed when
# the system wants to. Not sure if simply 'printing'
# sys.stderr is the correct way to do it, but it seemed
# to work properly for me.
self.level(sys.stderr)

5666
dist_assets/cacert.pem Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,70 @@
# -*- mode: python -*-
import os
from itertools import chain
import subprocess
label = subprocess.check_output([
"git", "describe", "--tags"]).strip()
with open('gitversion', 'w+') as f:
f.write(label.decode())
block_cipher = None
added_files = [
( 'imgs/gui/*.png', 'imgs/gui' ),
( 'imgs/gui/*.gif', 'imgs/gui' ),
( 'imgs/icons/*.png', 'imgs/icons' ),
( 'imgs/renders/*.png', 'imgs/renders' ),
( 'dist_assets/win/pyfa.ico', '.' ),
( 'dist_assets/cacert.pem', '.' ),
( 'eve.db', '.' ),
( 'README.md', '.' ),
( 'LICENSE', '.' ),
( 'gitversion', '.' ),
]
import_these = []
# Walk directories that do dynamic importing
paths = ('eos/effects', 'eos/db/migrations', 'service/conversions')
for root, folders, files in chain.from_iterable(os.walk(path) for path in paths):
for file_ in files:
if file_.endswith(".py") and not file_.startswith("_"):
mod_name = "{}.{}".format(
root.replace("/", "."),
file_.split(".py")[0],
)
import_these.append(mod_name)
a = Analysis(['pyfa.py'],
pathex=[],
binaries=[],
datas=added_files,
hiddenimports=import_these,
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='pyfa',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='pyfa')

76
dist_assets/mac/pyfa.spec Normal file
View File

@@ -0,0 +1,76 @@
# -*- mode: python -*-
import os
from itertools import chain
import subprocess
import requests.certs
label = subprocess.check_output([
"git", "describe", "--tags"]).strip()
with open('.version', 'w+') as f:
f.write(label.decode())
block_cipher = None
added_files = [
('../../imgs/gui/*.png', 'imgs/gui'),
('../../imgs/gui/*.gif', 'imgs/gui'),
('../../imgs/icons/*.png', 'imgs/icons'),
('../../imgs/renders/*.png', 'imgs/renders'),
('../../dist_assets/win/pyfa.ico', '.'),
('../../service/jargon/*.yaml', 'service/jargon'),
(requests.certs.where(), '.'), # is this needed anymore?
('../../eve.db', '.'),
('../../README.md', '.'),
('../../LICENSE', '.'),
('../../.version', '.'),
]
import_these = []
icon = os.path.join(os.getcwd(), "dist_assets", "mac", "pyfa.icns")
# Walk directories that do dynamic importing
paths = ('eos/effects', 'eos/db/migrations', 'service/conversions')
for root, folders, files in chain.from_iterable(os.walk(path) for path in paths):
for file_ in files:
if file_.endswith(".py") and not file_.startswith("_"):
mod_name = "{}.{}".format(
root.replace("/", "."),
file_.split(".py")[0],
)
import_these.append(mod_name)
a = Analysis([r'../../pyfa.py'],
pathex=[],
binaries=[],
datas=added_files,
hiddenimports=import_these,
hookspath=['dist_assets/pyinstaller_hooks'],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='pyfa',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False ,
icon=icon,
)
app = BUNDLE(exe,
name='pyfa.app',
icon=icon,
bundle_identifier=None)

View File

@@ -0,0 +1,78 @@
# This apes hook-matplotlib.backends.py, but REMOVES backends, all but
# the ones in the list below.
# Courtesy of https://github.com/bpteague/cytoflow/blob/70f9291/packaging/hook-matplotlib.backends.py
KEEP = ["WXAgg", "WX", "agg"]
from PyInstaller.compat import is_darwin
from PyInstaller.utils.hooks import (
eval_statement, exec_statement, logger)
def get_matplotlib_backend_module_names():
"""
List the names of all matplotlib backend modules importable under the
current Python installation.
Returns
----------
list
List of the fully-qualified names of all such modules.
"""
# Statement safely importing a single backend module.
import_statement = """
import os, sys
# Preserve stdout.
sys_stdout = sys.stdout
try:
# Redirect output printed by this importation to "/dev/null", preventing
# such output from being erroneously interpreted as an error.
with open(os.devnull, 'w') as dev_null:
sys.stdout = dev_null
__import__('%s')
# If this is an ImportError, print this exception's message without a traceback.
# ImportError messages are human-readable and require no additional context.
except ImportError as exc:
sys.stdout = sys_stdout
print(exc)
# Else, print this exception preceded by a traceback. traceback.print_exc()
# prints to stderr rather than stdout and must not be called here!
except Exception:
sys.stdout = sys_stdout
import traceback
print(traceback.format_exc())
"""
# List of the human-readable names of all available backends.
backend_names = eval_statement(
'import matplotlib; print(matplotlib.rcsetup.all_backends)')
# List of the fully-qualified names of all importable backend modules.
module_names = []
# If the current system is not OS X and the "CocoaAgg" backend is available,
# remove this backend from consideration. Attempting to import this backend
# on non-OS X systems halts the current subprocess without printing output
# or raising exceptions, preventing its reliable detection.
if not is_darwin and 'CocoaAgg' in backend_names:
backend_names.remove('CocoaAgg')
# For safety, attempt to import each backend in a unique subprocess.
for backend_name in backend_names:
if backend_name in KEEP:
continue
module_name = 'matplotlib.backends.backend_%s' % backend_name.lower()
stdout = exec_statement(import_statement % module_name)
# If no output was printed, this backend is importable.
if not stdout:
module_names.append(module_name)
logger.info(' Matplotlib backend "%s": removed' % backend_name)
return module_names
# Freeze all importable backends, as PyInstaller is unable to determine exactly
# which backends are required by the current program.
e=get_matplotlib_backend_module_names()
print(e)
excludedimports = e

46
dist_assets/win/dist.py Normal file
View File

@@ -0,0 +1,46 @@
# helper script to zip up pyinstaller distribution and create installer file
import os.path
from subprocess import call
import zipfile
def zipdir(path, zip):
for root, dirs, files in os.walk(path):
for file in files:
zip.write(os.path.join(root, file))
config = {}
exec(compile(open("config.py").read(), "config.py", 'exec'), config)
iscc = "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" # inno script location via wine
print("Creating archive")
source = os.path.join(os.getcwd(), "dist", "pyfa")
fileName = "pyfa-{}-{}-{}-win".format(
config['version'],
config['expansionName'].lower(),
config['expansionVersion']
)
archive = zipfile.ZipFile(os.path.join(os.getcwd(), "dist", fileName + ".zip"), 'w', compression=zipfile.ZIP_DEFLATED)
zipdir(source, archive)
archive.close()
print("Compiling EXE")
expansion = "%s %s" % (config['expansionName'], config['expansionVersion']),
call([
iscc,
os.path.join(os.getcwd(), "dist_assets", "win", "pyfa-setup.iss"),
"/dMyAppVersion=%s" % (config['version']),
"/dMyAppExpansion=%s" % (expansion),
"/dMyAppDir=%s" % source,
"/dMyOutputDir=%s" % os.path.join(os.getcwd(), "dist"),
"/dMyOutputFile=%s" % fileName]) # stdout=devnull, stderr=devnull
print("Done")

View File

@@ -15,11 +15,12 @@
#define MyAppName "pyfa"
#define MyAppPublisher "pyfa"
#define MyAppURL "https://forums.eveonline.com/default.aspx?g=posts&t=247609&p=1"
#define MyAppURL "https://forums.eveonline.com/t/27156"
#define MyAppExeName "pyfa.exe"
; What version starts with the new structure (1.x.0). This is used to determine if we run directory structure cleanup
#define VersionFlag 16
#define MajorVersionFlag 2
#define MinorVersionFlag 0
#ifndef MyOutputFile
#define MyOutputFile LowerCase(StringChange(MyAppName+'-'+MyAppVersion+'-'+MyAppExpansion+'-win-wx3', " ", "-"))
@@ -53,7 +54,7 @@ SetupIconFile={#MyAppDir}\pyfa.ico
Compression=lzma
SolidCompression=yes
CloseApplications=yes
AppReadmeFile=https://github.com/DarkFenX/Pyfa/blob/v{#MyAppVersion}/readme.txt
AppReadmeFile=https://github.com/pyfa-org/Pyfa/blob/v{#MyAppVersion}/readme.txt
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
@@ -138,15 +139,19 @@ var
V: Integer;
iResultCode: Integer;
sUnInstallString: string;
iOldVersion: Cardinal;
iOldVersionMajor: Cardinal;
iOldVersionMinor: Cardinal;
begin
Result := True; // in case when no previous version is found
if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\{3DA39096-C08D-49CD-90E0-1D177F32C8AA}_is1', 'UninstallString') then //Your App GUID/ID
begin
RegQueryDWordValue(HKEY_LOCAL_MACHINE,
'Software\Microsoft\Windows\CurrentVersion\Uninstall\{3DA39096-C08D-49CD-90E0-1D177F32C8AA}_is1',
'MinorVersion', iOldVersion);
if iOldVersion < {#VersionFlag} then // If old version with old structure is installed.
'MajorVersion', iOldVersionMajor);
RegQueryDWordValue(HKEY_LOCAL_MACHINE,
'Software\Microsoft\Windows\CurrentVersion\Uninstall\{3DA39096-C08D-49CD-90E0-1D177F32C8AA}_is1',
'MinorVersion', iOldVersionMinor);
if (iOldVersionMajor < {#MajorVersionFlag}) or ((iOldVersionMajor = {#MajorVersionFlag}) and (iOldVersionMinor < {#MinorVersionFlag})) then // If old version with old structure is installed.
begin
V := MsgBox(ExpandConstant('An old version of pyfa was detected. Due to recent changes in the application structure, you must uninstall the previous version first. This will not affect your user data (saved fittings, characters, etc.). Do you want to uninstall now?'), mbInformation, MB_YESNO); //Custom Message if App installed
if V = IDYES then

83
dist_assets/win/pyfa.spec Normal file
View File

@@ -0,0 +1,83 @@
# -*- mode: python -*-
import os
from itertools import chain
import subprocess
import requests.certs
label = subprocess.check_output([
"git", "describe", "--tags"]).strip()
with open('.version', 'w+') as f:
f.write(label.decode())
block_cipher = None
added_files = [
('../../imgs/gui/*.png', 'imgs/gui'),
('../../imgs/gui/*.gif', 'imgs/gui'),
('../../imgs/icons/*.png', 'imgs/icons'),
('../../imgs/renders/*.png', 'imgs/renders'),
('../../service/jargon/*.yaml', 'service/jargon'),
('../../dist_assets/win/pyfa.ico', '.'),
(requests.certs.where(), '.'), # is this needed anymore?
('../../eve.db', '.'),
('../../README.md', '.'),
('../../LICENSE', '.'),
('../../.version', '.'),
]
import_these = []
# Walk directories that do dynamic importing
paths = ('eos/effects', 'eos/db/migrations', 'service/conversions')
for root, folders, files in chain.from_iterable(os.walk(path) for path in paths):
for file_ in files:
if file_.endswith(".py") and not file_.startswith("_"):
mod_name = "{}.{}".format(
root.replace("/", "."),
file_.split(".py")[0],
)
import_these.append(mod_name)
a = Analysis(['../../pyfa.py'],
pathex=[
# Need this, see https://github.com/pyinstaller/pyinstaller/issues/1566
# To get this, download and install windows 10 SDK
# If not building on Windows 10, this might be optional
r'C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86'],
binaries=[],
datas=added_files,
hiddenimports=import_these,
hookspath=['dist_assets/pyinstaller_hooks'],
runtime_hooks=[],
excludes=['Tkinter'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
debug=False,
console=False,
strip=False,
upx=True,
name='pyfa',
icon='dist_assets/win/pyfa.ico',
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='pyfa',
icon='dist_assets/win/pyfa.ico',
)

View File

@@ -0,0 +1,83 @@
# -*- mode: python -*-
# Note: This script is provided AS-IS for those that may be interested.
# pyfa does not currently support pyInstaller (or any other build process) 100% at the moment
# Command line to build:
# (Run from directory where pyfa.py and pyfa.spec lives.)
# c:\Python27\scripts\pyinstaller.exe --clean --noconfirm --windowed --upx-dir=.\scripts\upx.exe pyfa.spec
# Don't forget to change the path to where your pyfa.py and pyfa.spec lives
# pathex=['C:\\Users\\Ebag333\\Documents\\GitHub\\Ebag333\\Pyfa'],
import os
block_cipher = None
added_files = [
( 'imgs/gui/*.png', 'imgs/gui' ),
( 'imgs/gui/*.gif', 'imgs/gui' ),
( 'imgs/icons/*.png', 'imgs/icons' ),
( 'imgs/renders/*.png', 'imgs/renders' ),
( 'dist_assets/win/pyfa.ico', '.' ),
( 'dist_assets/cacert.pem', '.' ),
( 'eve.db', '.' ),
( 'README.md', '.' ),
( 'LICENSE', '.' ),
]
import_these = []
# Walk eos.effects and add all effects so we can import them properly
for root, folders, files in os.walk("eos/effects"):
for file_ in files:
if file_.endswith(".py") and not file_.startswith("_"):
mod_name = "{}.{}".format(
root.replace("/", "."),
file_.split(".py")[0],
)
import_these.append(mod_name)
a = Analysis(
['pyfa.py'],
pathex=['C:\\projects\\pyfa\\'],
binaries=[],
datas=added_files,
hiddenimports=import_these,
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
)
pyz = PYZ(
a.pure,
a.zipped_data,
cipher=block_cipher,
)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
debug=True,
console=True,
strip=False,
upx=True,
name='pyfa_debug',
icon='dist_assets/win/pyfa.ico',
onefile=False,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
onefile=False,
name='pyfa_debug',
icon='dist_assets/win/pyfa.ico',
)

View File

@@ -0,0 +1,45 @@
# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
ffi=FixedFileInfo(
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
# Set not needed items to zero 0.
filevers=(1, 15, 1, 0),
prodvers=(1, 15, 1, 0),
# Contains a bitmask that specifies the valid bits 'flags'r
mask=0x3f,
# Contains a bitmask that specifies the Boolean attributes of the file.
flags=0x0,
# The operating system for which this file was designed.
# 0x4 - NT and there is no need to change it.
OS=0x40004,
# The general type of file.
# 0x1 - the file is an application.
fileType=0x1,
# The function of the file.
# 0x0 - the function is not defined for this fileType
subtype=0x0,
# Creation date and time stamp.
date=(0, 0)
),
kids=[
StringFileInfo(
[
StringTable(
u'040904E4',
[StringStruct(u'LegalCopyright', u''),
StringStruct(u'InternalName', u'pyfa.exe'),
StringStruct(u'FileVersion', u'1.15.1.0'),
StringStruct(u'CompanyName', u''),
StringStruct(u'OriginalFilename', u'pyfa.exe'),
StringStruct(u'ProductVersion', u'1.15.1.0'),
StringStruct(u'FileDescription', u'Python fitting assistant'),
StringStruct(u'LegalTrademarks', u''),
StringStruct(u'Comments', u''),
StringStruct(u'ProductName', u'pyfa')])
]),
VarFileInfo([VarStruct(u'Translation', [1033, 1252])])
]
)

View File

@@ -1,7 +1,2 @@
version = "0.2.3"
tag = "git"
def test():
import tests.runTests
import unittest
unittest.main(defaultTest="discover", testLoader=tests.runTests.loader)
version = "0.2.3"
tag = "git"

View File

@@ -1,12 +1,13 @@
import heapq
from math import sqrt, exp
import time
from math import sqrt, exp
from functools import reduce
DAY = 24 * 60 * 60 * 1000
def lcm(a,b):
n = a*b
def lcm(a, b):
n = a * b
while b:
a, b = b, a % b
return n / a
@@ -40,20 +41,19 @@ class CapSimulator(object):
# relevant decimal digits of capacitor for LCM period optimization
self.stability_precision = 1
def scale_activation(self, duration, capNeed):
for res in self.scale_resolutions:
mod = duration % res
if mod:
if mod > res/2.0:
mod = res-mod
if mod > res / 2.0:
mod = res - mod
else:
mod = -mod
if abs(mod) <= duration/100.0:
if abs(mod) <= duration / 100.0:
# only adjust if the adjustment is less than 1%
duration += mod
capNeed += float(mod)/duration * capNeed
capNeed += float(mod) / duration * capNeed
break
return duration, capNeed
@@ -72,7 +72,7 @@ class CapSimulator(object):
disable_period = False
# Loop over modules, clearing clipSize if applicable, and group modules based on attributes
for (duration, capNeed, clipSize, disableStagger) in self.modules:
for (duration, capNeed, clipSize, disableStagger, reloadTime) in self.modules:
if self.scale:
duration, capNeed = self.scale_activation(duration, capNeed)
@@ -80,24 +80,25 @@ class CapSimulator(object):
# a cap booster module.
if not self.reload and capNeed > 0:
clipSize = 0
reloadTime = 0
# Group modules based on their properties
if (duration, capNeed, clipSize, disableStagger) in mods:
mods[(duration, capNeed, clipSize, disableStagger)] += 1
if (duration, capNeed, clipSize, disableStagger, reloadTime) in mods:
mods[(duration, capNeed, clipSize, disableStagger, reloadTime)] += 1
else:
mods[(duration, capNeed, clipSize, disableStagger)] = 1
mods[(duration, capNeed, clipSize, disableStagger, reloadTime)] = 1
# Loop over grouped modules, configure staggering and push to the simulation state
for (duration, capNeed, clipSize, disableStagger), amount in mods.iteritems():
for (duration, capNeed, clipSize, disableStagger, reloadTime), amount in mods.items():
if self.stagger and not disableStagger:
if clipSize == 0:
duration = int(duration/amount)
duration = int(duration / amount)
else:
stagger_amount = (duration*clipSize+10000)/(amount*clipSize)
stagger_amount = (duration * clipSize + reloadTime) / (amount * clipSize)
for i in range(1, amount):
heapq.heappush(self.state,
[i*stagger_amount, duration,
capNeed, 0, clipSize])
[i * stagger_amount, duration,
capNeed, 0, clipSize, reloadTime])
else:
capNeed *= amount
@@ -107,15 +108,13 @@ class CapSimulator(object):
if clipSize:
disable_period = True
heapq.heappush(self.state, [0, duration, capNeed, 0, clipSize])
heapq.heappush(self.state, [0, duration, capNeed, 0, clipSize, reloadTime])
if disable_period:
self.period = self.t_max
else:
self.period = period
def run(self):
"""Run the simulation"""
@@ -135,22 +134,22 @@ class CapSimulator(object):
capCapacity = self.capacitorCapacity
tau = self.capacitorRecharge / 5.0
cap_wrap = capCapacity # cap value at last period
cap_lowest = capCapacity # lowest cap value encountered
cap_lowest_pre = capCapacity # lowest cap value before activations
cap = capCapacity # current cap value
t_wrap = self.period # point in time of next period
cap_wrap = capCapacity # cap value at last period
cap_lowest = capCapacity # lowest cap value encountered
cap_lowest_pre = capCapacity # lowest cap value before activations
cap = capCapacity # current cap value
t_wrap = self.period # point in time of next period
t_now = t_last = 0
t_last = 0
t_max = self.t_max
while 1:
activation = pop(state)
t_now, duration, capNeed, shot, clipSize = activation
t_now, duration, capNeed, shot, clipSize, reloadTime = activation
if t_now >= t_max:
break
cap = ((1.0+(sqrt(cap/capCapacity)-1.0)*exp((t_last-t_now)/tau))**2)*capCapacity
cap = ((1.0 + (sqrt(cap / capCapacity) - 1.0) * exp((t_last - t_now) / tau)) ** 2) * capCapacity
if t_now != t_last:
if cap < cap_lowest_pre:
@@ -182,7 +181,7 @@ class CapSimulator(object):
if clipSize:
if shot % clipSize == 0:
shot = 0
t_now += 10000 # include reload time
t_now += reloadTime # include reload time
activation[0] = t_now
activation[3] = shot
@@ -195,19 +194,17 @@ class CapSimulator(object):
# calculate EVE's stability value
try:
avgDrain = reduce(float.__add__, map(lambda x: x[2]/x[1], self.state), 0.0)
self.cap_stable_eve = 0.25 * (1.0 + sqrt(-(2.0 * avgDrain * tau - capCapacity)/capCapacity)) ** 2
avgDrain = reduce(float.__add__, [x[2] / x[1] for x in self.state], 0.0)
self.cap_stable_eve = 0.25 * (1.0 + sqrt(-(2.0 * avgDrain * tau - capCapacity) / capCapacity)) ** 2
except ValueError:
self.cap_stable_eve = 0.0
if cap > 0.0:
# capacitor low/high water marks
self.cap_stable_low = cap_lowest
self.cap_stable_high = cap_lowest_pre
else:
self.cap_stable_low =\
self.cap_stable_high = 0.0
self.cap_stable_low = \
self.cap_stable_high = 0.0
self.runtime = time.time()-start
self.runtime = time.time() - start

View File

@@ -1,11 +1,31 @@
from os.path import realpath, join, dirname, abspath
import sys
from os.path import realpath, join, dirname, abspath
from logbook import Logger
import os
istravis = os.environ.get('TRAVIS') == 'true'
pyfalog = Logger(__name__)
debug = False
gamedataCache = True
saveddataCache = True
gamedata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "eve.db")), sys.getfilesystemencoding())
saveddata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata.db")), sys.getfilesystemencoding())
gamedata_version = ""
gamedata_connectionstring = 'sqlite:///' + realpath(join(dirname(abspath(__file__)), "..", "eve.db"))
pyfalog.debug("Gamedata connection string: {0}", gamedata_connectionstring)
#Autodetect path, only change if the autodetection bugs out.
path = dirname(unicode(__file__, sys.getfilesystemencoding()))
if istravis is True or hasattr(sys, '_called_from_test'):
# Running in Travis. Run saveddata database in memory.
saveddata_connectionstring = 'sqlite:///:memory:'
else:
saveddata_connectionstring = 'sqlite:///' + realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata-py3-db.db"))
pyfalog.debug("Saveddata connection string: {0}", saveddata_connectionstring)
settings = {
"useStaticAdaptiveArmorHardener": False,
"strictSkillLevels": True,
}
# Autodetect path, only change if the autodetection bugs out.
path = dirname(__file__)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,26 +15,31 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
import threading
from sqlalchemy import MetaData, create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import pool
from sqlalchemy.orm import sessionmaker
from . import migration
from eos import config
import migration
from logbook import Logger
pyfalog = Logger(__name__)
pyfalog.info("Initializing database")
pyfalog.info("Gamedata connection: {0}", config.gamedata_connectionstring)
pyfalog.info("Saveddata connection: {0}", config.saveddata_connectionstring)
class ReadOnlyException(Exception):
pass
gamedata_connectionstring = config.gamedata_connectionstring
if callable(gamedata_connectionstring):
gamedata_engine = create_engine("sqlite://", creator=gamedata_connectionstring, echo = config.debug)
gamedata_engine = create_engine("sqlite://", creator=gamedata_connectionstring, echo=config.debug)
else:
gamedata_engine = create_engine(gamedata_connectionstring, echo = config.debug)
gamedata_engine = create_engine(gamedata_connectionstring, echo=config.debug)
gamedata_meta = MetaData()
gamedata_meta.bind = gamedata_engine
@@ -45,8 +50,10 @@ gamedata_session = sessionmaker(bind=gamedata_engine, autoflush=False, expire_on
try:
config.gamedata_version = gamedata_session.execute(
"SELECT `field_value` FROM `metadata` WHERE `field_name` LIKE 'client_build'"
).fetchone()[0]
except:
).fetchone()[0]
except Exception as e:
pyfalog.warning("Missing gamedata version.")
pyfalog.critical(e)
config.gamedata_version = None
saveddata_connectionstring = config.saveddata_connectionstring
@@ -59,23 +66,32 @@ if saveddata_connectionstring is not None:
saveddata_meta = MetaData()
saveddata_meta.bind = saveddata_engine
saveddata_session = sessionmaker(bind=saveddata_engine, autoflush=False, expire_on_commit=False)()
else:
saveddata_meta = None
# Lock controlling any changes introduced to session
sd_lock = threading.Lock()
sd_lock = threading.RLock()
#Import all the definitions for all our database stuff
from eos.db.gamedata import *
from eos.db.saveddata import *
# Import all the definitions for all our database stuff
# noinspection PyPep8
from eos.db.gamedata import alphaClones, attribute, category, effect, group, icon, item, marketGroup, metaData, metaGroup, queries, traits, unit
# noinspection PyPep8
from eos.db.saveddata import booster, cargo, character, damagePattern, databaseRepair, drone, fighter, fit, implant, implantSet, loadDefaultDatabaseValues, \
miscData, module, override, price, queries, skill, targetResists, user
#Import queries
# Import queries
# noinspection PyPep8
from eos.db.gamedata.queries import *
# noinspection PyPep8
from eos.db.saveddata.queries import *
#If using in memory saveddata, you'll want to reflect it so the data structure is good.
# If using in memory saveddata, you'll want to reflect it so the data structure is good.
if config.saveddata_connectionstring == "sqlite:///:memory:":
saveddata_meta.create_all()
pyfalog.info("Running database out of memory.")
def rollback():
with sd_lock:
pyfalog.warning("Session rollback triggered.")
saveddata_session.rollback()

View File

@@ -1,2 +1,2 @@
__all__ = ["attribute", "category", "effect", "group", "metaData",
"icon", "item", "marketGroup", "metaGroup", "unit"]
"icon", "item", "marketGroup", "metaGroup", "unit", "alphaClones"]

View File

@@ -0,0 +1,50 @@
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
# ===============================================================================
from sqlalchemy import Column, String, Integer, Table, ForeignKey
from sqlalchemy.orm import relation, mapper, synonym
from eos.db import gamedata_meta
from eos.gamedata import AlphaClone, AlphaCloneSkill
alphaclones_table = Table(
"alphaClones",
gamedata_meta,
Column("alphaCloneID", Integer, primary_key=True),
Column("alphaCloneName", String),
)
alphacloneskskills_table = Table(
"alphaCloneSkills",
gamedata_meta,
Column("alphaCloneID", Integer, ForeignKey("alphaClones.alphaCloneID"), primary_key=True),
Column("typeID", Integer, primary_key=True),
Column("level", Integer),
)
mapper(AlphaClone, alphaclones_table,
properties={
"ID" : synonym("alphaCloneID"),
"skills": relation(
AlphaCloneSkill,
cascade="all,delete-orphan",
backref="clone")
})
mapper(AlphaCloneSkill, alphacloneskskills_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,20 +15,22 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, Float, Unicode, ForeignKey, String, Boolean
from sqlalchemy.orm import relation, mapper, synonym, deferred
from sqlalchemy.ext.associationproxy import association_proxy
from eos.types import Attribute, Icon, AttributeInfo, Unit
from sqlalchemy.orm import relation, mapper, synonym, deferred
from eos.db import gamedata_meta
from eos.gamedata import Attribute, AttributeInfo, Unit, Icon
typeattributes_table = Table("dgmtypeattribs", gamedata_meta,
Column("value", Float),
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True, index=True),
Column("attributeID", ForeignKey("dgmattribs.attributeID"), primary_key=True))
Column("value", Float),
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True, index=True),
Column("attributeID", ForeignKey("dgmattribs.attributeID"), primary_key=True))
attributes_table = Table("dgmattribs", gamedata_meta,
Column("attributeID", Integer, primary_key = True),
Column("attributeID", Integer, primary_key=True),
Column("attributeName", String),
Column("defaultValue", Float),
Column("maxAttributeID", Integer, ForeignKey("dgmattribs.attributeID")),
@@ -40,14 +42,16 @@ attributes_table = Table("dgmattribs", gamedata_meta,
Column("unitID", Integer, ForeignKey("dgmunits.unitID")))
mapper(Attribute, typeattributes_table,
properties = {"info": relation(AttributeInfo, lazy=False)})
properties={"info": relation(AttributeInfo, lazy=False)})
mapper(AttributeInfo, attributes_table,
properties = {"icon" : relation(Icon),
"unit": relation(Unit),
"ID": synonym("attributeID"),
"name": synonym("attributeName"),
"description" : deferred(attributes_table.c.description)})
properties={
"icon" : relation(Icon),
"unit" : relation(Unit),
"ID" : synonym("attributeID"),
"name" : synonym("attributeName"),
"description": deferred(attributes_table.c.description)
})
Attribute.ID = association_proxy("info", "attributeID")
Attribute.name = association_proxy("info", "attributeName")

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,23 +15,25 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, String, Integer, ForeignKey, Boolean, Table
from sqlalchemy.orm import relation, mapper, synonym, deferred
from eos.db import gamedata_meta
from eos.types import Category, Icon
from eos.gamedata import Category, Icon
categories_table = Table("invcategories", gamedata_meta,
Column("categoryID", Integer, primary_key = True),
Column("categoryID", Integer, primary_key=True),
Column("categoryName", String),
Column("description", String),
Column("published", Boolean),
Column("iconID", Integer, ForeignKey("icons.iconID")))
mapper(Category, categories_table,
properties = {"icon" : relation(Icon),
"ID" : synonym("categoryID"),
"name" : synonym("categoryName"),
"description" : deferred(categories_table.c.description)})
properties={
"icon" : relation(Icon),
"ID" : synonym("categoryID"),
"name" : synonym("categoryName"),
"description": deferred(categories_table.c.description)
})

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,36 +15,32 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, String, Integer, Boolean, Table, ForeignKey
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import mapper, synonym, relation, deferred
from eos.types import Effect, EffectInfo
from sqlalchemy.orm import mapper, synonym, deferred
from eos.db import gamedata_meta
from eos.gamedata import Effect, ItemEffect
typeeffects_table = Table("dgmtypeeffects", gamedata_meta,
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True, index=True),
Column("effectID", Integer, ForeignKey("dgmeffects.effectID"), primary_key=True))
effects_table = Table("dgmeffects", gamedata_meta,
Column("effectID", Integer, primary_key = True),
Column("effectID", Integer, primary_key=True),
Column("effectName", String),
Column("description", String),
Column("published", Boolean),
Column("isAssistance", Boolean),
Column("isOffensive", Boolean))
Column("isOffensive", Boolean),
Column("resistanceID", Integer))
mapper(Effect, effects_table,
properties={
"ID" : synonym("effectID"),
"name" : synonym("effectName"),
"description": deferred(effects_table.c.description)
})
mapper(EffectInfo, effects_table,
properties = {"ID" : synonym("effectID"),
"name" : synonym("effectName"),
"description" : deferred(effects_table.c.description)})
mapper(Effect, typeeffects_table,
properties = {"ID": synonym("effectID"),
"info": relation(EffectInfo, lazy=False)})
Effect.name = association_proxy("info", "name")
Effect.description = association_proxy("info", "description")
Effect.published = association_proxy("info", "published")
mapper(ItemEffect, typeeffects_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,16 +15,16 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Table
from sqlalchemy.orm import relation, mapper, synonym, deferred
from eos.db import gamedata_meta
from eos.types import Group, Icon, Category
from eos.gamedata import Category, Group, Icon
groups_table = Table("invgroups", gamedata_meta,
Column("groupID", Integer, primary_key = True),
Column("groupID", Integer, primary_key=True),
Column("groupName", String),
Column("description", String),
Column("published", Boolean),
@@ -32,8 +32,10 @@ groups_table = Table("invgroups", gamedata_meta,
Column("iconID", Integer, ForeignKey("icons.iconID")))
mapper(Group, groups_table,
properties = {"category" : relation(Category, backref = "groups"),
"icon" : relation(Icon),
"ID" : synonym("groupID"),
"name" : synonym("groupName"),
"description" : deferred(groups_table.c.description)})
properties={
"category" : relation(Category, backref="groups"),
"icon" : relation(Icon),
"ID" : synonym("groupID"),
"name" : synonym("groupName"),
"description": deferred(groups_table.c.description)
})

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,19 +15,21 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, String, Integer, Table
from sqlalchemy.orm import mapper, synonym, deferred
from eos.db import gamedata_meta
from eos.types import Icon
from eos.gamedata import Icon
icons_table = Table("icons", gamedata_meta,
Column("iconID", Integer, primary_key = True),
Column("iconID", Integer, primary_key=True),
Column("description", String),
Column("iconFile", String))
mapper(Icon, icons_table,
properties = {"ID" : synonym("iconID"),
"description" : deferred(icons_table.c.description)})
properties={
"ID" : synonym("iconID"),
"description": deferred(icons_table.c.description)
})

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,18 +15,19 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Table, Float
from sqlalchemy.orm import relation, mapper, synonym, deferred
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import relation, mapper, synonym, deferred
from sqlalchemy.orm.collections import attribute_mapped_collection
from eos.db.gamedata.effect import typeeffects_table
from eos.db import gamedata_meta
from eos.types import Icon, Attribute, Item, Effect, MetaType, Group, Traits
from eos.gamedata import Attribute, Effect, Group, Icon, Item, MetaType, Traits
items_table = Table("invtypes", gamedata_meta,
Column("typeID", Integer, primary_key = True),
Column("typeID", Integer, primary_key=True),
Column("typeName", String, index=True),
Column("description", String),
Column("raceID", Integer),
@@ -39,23 +40,24 @@ items_table = Table("invtypes", gamedata_meta,
Column("iconID", Integer, ForeignKey("icons.iconID")),
Column("groupID", Integer, ForeignKey("invgroups.groupID"), index=True))
from .metaGroup import metatypes_table
from .traits import traits_table
from .metaGroup import metatypes_table # noqa
from .traits import traits_table # noqa
mapper(Item, items_table,
properties = {"group" : relation(Group, backref = "items"),
"icon" : relation(Icon),
"_Item__attributes" : relation(Attribute, collection_class = attribute_mapped_collection('name')),
"effects" : relation(Effect, collection_class = attribute_mapped_collection('name')),
"metaGroup" : relation(MetaType,
primaryjoin = metatypes_table.c.typeID == items_table.c.typeID,
uselist = False),
"ID" : synonym("typeID"),
"name" : synonym("typeName"),
"description" : deferred(items_table.c.description),
"traits" : relation(Traits,
primaryjoin = traits_table.c.typeID == items_table.c.typeID,
uselist = False)
})
properties={
"group" : relation(Group, backref="items"),
"icon" : relation(Icon),
"_Item__attributes": relation(Attribute, cascade='all, delete, delete-orphan', collection_class=attribute_mapped_collection('name')),
"effects": relation(Effect, secondary=typeeffects_table, collection_class=attribute_mapped_collection('name')),
"metaGroup" : relation(MetaType,
primaryjoin=metatypes_table.c.typeID == items_table.c.typeID,
uselist=False),
"ID" : synonym("typeID"),
"name" : synonym("typeName"),
"description" : deferred(items_table.c.description),
"traits" : relation(Traits,
primaryjoin=traits_table.c.typeID == items_table.c.typeID,
uselist=False)
})
Item.category = association_proxy("group", "category")

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,26 +15,30 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Table
from sqlalchemy.orm import relation, mapper, synonym, deferred
from eos.db import gamedata_meta
from eos.types import Item, MarketGroup, Icon
from eos.gamedata import Icon, Item, MarketGroup
marketgroups_table = Table("invmarketgroups", gamedata_meta,
Column("marketGroupID", Integer, primary_key = True),
Column("marketGroupID", Integer, primary_key=True),
Column("marketGroupName", String),
Column("description", String),
Column("hasTypes", Boolean),
Column("parentGroupID", Integer, ForeignKey("invmarketgroups.marketGroupID", initially="DEFERRED", deferrable=True)),
Column("parentGroupID", Integer,
ForeignKey("invmarketgroups.marketGroupID", initially="DEFERRED", deferrable=True)),
Column("iconID", Integer, ForeignKey("icons.iconID")))
mapper(MarketGroup, marketgroups_table,
properties = {"items" : relation(Item, backref = "marketGroup"),
"parent" : relation(MarketGroup, backref = "children", remote_side = [marketgroups_table.c.marketGroupID]),
"icon" : relation(Icon),
"ID" : synonym("marketGroupID"),
"name" : synonym("marketGroupName"),
"description" : deferred(marketgroups_table.c.description)})
properties={
"items" : relation(Item, backref="marketGroup"),
"parent" : relation(MarketGroup, backref="children",
remote_side=[marketgroups_table.c.marketGroupID]),
"icon" : relation(Icon),
"ID" : synonym("marketGroupID"),
"name" : synonym("marketGroupName"),
"description": deferred(marketgroups_table.c.description)
})

View File

@@ -1,29 +1,30 @@
#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
from sqlalchemy import Column, Table, String
from sqlalchemy.orm import mapper
from eos.types import MetaData
from eos.db import gamedata_meta
metadata_table = Table("metadata", gamedata_meta,
Column("field_name", String, primary_key=True),
Column("field_value", String))
mapper(MetaData, metadata_table)
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
# ===============================================================================
from sqlalchemy import Column, Table, String
from sqlalchemy.orm import mapper
from eos.db import gamedata_meta
from eos.gamedata import MetaData
metadata_table = Table("metadata", gamedata_meta,
Column("field_name", String, primary_key=True),
Column("field_value", String))
mapper(MetaData, metadata_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,33 +15,37 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, String
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import relation, mapper, synonym
from eos.db import gamedata_meta
from eos.db.gamedata.item import items_table
from eos.types import MetaGroup, Item, MetaType
from sqlalchemy.ext.associationproxy import association_proxy
from eos.gamedata import Item, MetaGroup, MetaType
metagroups_table = Table("invmetagroups", gamedata_meta,
Column("metaGroupID", Integer, primary_key = True),
Column("metaGroupID", Integer, primary_key=True),
Column("metaGroupName", String))
metatypes_table = Table("invmetatypes", gamedata_meta,
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key = True),
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
Column("parentTypeID", Integer, ForeignKey("invtypes.typeID")),
Column("metaGroupID", Integer, ForeignKey("invmetagroups.metaGroupID")))
mapper(MetaGroup, metagroups_table,
properties = {"ID" : synonym("metaGroupID"),
"name" : synonym("metaGroupName")})
properties={
"ID" : synonym("metaGroupID"),
"name": synonym("metaGroupName")
})
mapper(MetaType, metatypes_table,
properties = {"ID" : synonym("metaGroupID"),
"parent" : relation(Item, primaryjoin = metatypes_table.c.parentTypeID == items_table.c.typeID),
"items" : relation(Item, primaryjoin = metatypes_table.c.typeID == items_table.c.typeID),
"info": relation(MetaGroup, lazy=False)})
properties={
"ID" : synonym("metaGroupID"),
"parent": relation(Item, primaryjoin=metatypes_table.c.parentTypeID == items_table.c.typeID),
"items" : relation(Item, primaryjoin=metatypes_table.c.typeID == items_table.c.typeID),
"info" : relation(MetaGroup, lazy=False)
})
MetaType.name = association_proxy("info", "name")

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,21 +15,23 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy.orm import join, exc, aliased
from sqlalchemy.sql import and_, or_, select
import eos.config
from eos.db import gamedata_session
from eos.db.gamedata.metaGroup import metatypes_table, items_table
from sqlalchemy.sql import and_, or_, select, func
from sqlalchemy.orm import join, exc
from eos.types import Item, Category, Group, MarketGroup, AttributeInfo, MetaData, MetaGroup
from eos.db.gamedata.group import groups_table
from eos.db.util import processEager, processWhere
import eos.config
from eos.gamedata import AlphaClone, Attribute, Category, Group, Item, MarketGroup, MetaGroup, AttributeInfo, MetaData
cache = {}
configVal = getattr(eos.config, "gamedataCache", None)
if configVal is True:
def cachedQuery(amount, *keywords):
def deco(function):
cache = {}
def checkAndReturn(*args, **kwargs):
useCache = kwargs.pop("useCache", True)
cacheKey = []
@@ -45,6 +47,7 @@ if configVal is True:
return handler
return checkAndReturn
return deco
elif callable(configVal):
@@ -56,8 +59,10 @@ else:
return function(*args, **kwargs)
return checkAndReturn
return deco
def sqlizeString(line):
# Escape backslashes first, as they will be as escape symbol in queries
# Then escape percent and underscore signs
@@ -65,7 +70,10 @@ def sqlizeString(line):
line = line.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_").replace("*", "%")
return line
itemNameMap = {}
@cachedQuery(1, "lookfor")
def getItem(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -73,7 +81,7 @@ def getItem(lookfor, eager=None):
item = gamedata_session.query(Item).get(lookfor)
else:
item = gamedata_session.query(Item).options(*processEager(eager)).filter(Item.ID == lookfor).first()
elif isinstance(lookfor, basestring):
elif isinstance(lookfor, str):
if lookfor in itemNameMap:
id = itemNameMap[lookfor]
if eager is None:
@@ -88,7 +96,57 @@ def getItem(lookfor, eager=None):
raise TypeError("Need integer or string as argument")
return item
@cachedQuery(1, "lookfor")
def getItems(lookfor, eager=None):
"""
Gets a list of items. Does a bit of cache hackery to get working properly -- cache
is usually based on function calls with the parameters, needed to extract data directly.
Works well enough. Not currently used, but it's here for possible future inclusion
"""
toGet = []
results = []
for id in lookfor:
if (id, None) in cache:
results.append(cache.get((id, None)))
else:
toGet.append(id)
if len(toGet) > 0:
# Get items that aren't currently cached, and store them in the cache
items = gamedata_session.query(Item).filter(Item.ID.in_(toGet)).all()
for item in items:
cache[(item.ID, None)] = item
results += items
# sort the results based on the original indexing
results.sort(key=lambda x: lookfor.index(x.ID))
return results
@cachedQuery(1, "lookfor")
def getAlphaClone(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
item = gamedata_session.query(AlphaClone).get(lookfor)
else:
item = gamedata_session.query(AlphaClone).options(*processEager(eager)).filter(AlphaClone.ID == lookfor).first()
else:
raise TypeError("Need integer as argument")
return item
def getAlphaCloneList(eager=None):
eager = processEager(eager)
clones = gamedata_session.query(AlphaClone).options(*eager).all()
return clones
groupNameMap = {}
@cachedQuery(1, "lookfor")
def getGroup(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -96,7 +154,7 @@ def getGroup(lookfor, eager=None):
group = gamedata_session.query(Group).get(lookfor)
else:
group = gamedata_session.query(Group).options(*processEager(eager)).filter(Group.ID == lookfor).first()
elif isinstance(lookfor, basestring):
elif isinstance(lookfor, str):
if lookfor in groupNameMap:
id = groupNameMap[lookfor]
if eager is None:
@@ -111,78 +169,95 @@ def getGroup(lookfor, eager=None):
raise TypeError("Need integer or string as argument")
return group
categoryNameMap = {}
@cachedQuery(1, "lookfor")
def getCategory(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
category = gamedata_session.query(Category).get(lookfor)
else:
category = gamedata_session.query(Category).options(*processEager(eager)).filter(Category.ID == lookfor).first()
elif isinstance(lookfor, basestring):
category = gamedata_session.query(Category).options(*processEager(eager)).filter(
Category.ID == lookfor).first()
elif isinstance(lookfor, str):
if lookfor in categoryNameMap:
id = categoryNameMap[lookfor]
if eager is None:
category = gamedata_session.query(Category).get(id)
else:
category = gamedata_session.query(Category).options(*processEager(eager)).filter(Category.ID == id).first()
category = gamedata_session.query(Category).options(*processEager(eager)).filter(
Category.ID == id).first()
else:
# Category names are unique, so we can use first() instead of one()
category = gamedata_session.query(Category).options(*processEager(eager)).filter(Category.name == lookfor).first()
category = gamedata_session.query(Category).options(*processEager(eager)).filter(
Category.name == lookfor).first()
categoryNameMap[lookfor] = category.ID
else:
raise TypeError("Need integer or string as argument")
return category
metaGroupNameMap = {}
@cachedQuery(1, "lookfor")
def getMetaGroup(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
metaGroup = gamedata_session.query(MetaGroup).get(lookfor)
else:
metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(MetaGroup.ID == lookfor).first()
elif isinstance(lookfor, basestring):
metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(
MetaGroup.ID == lookfor).first()
elif isinstance(lookfor, str):
if lookfor in metaGroupNameMap:
id = metaGroupNameMap[lookfor]
if eager is None:
metaGroup = gamedata_session.query(MetaGroup).get(id)
else:
metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(MetaGroup.ID == id).first()
metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(
MetaGroup.ID == id).first()
else:
# MetaGroup names are unique, so we can use first() instead of one()
metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(MetaGroup.name == lookfor).first()
metaGroup = gamedata_session.query(MetaGroup).options(*processEager(eager)).filter(
MetaGroup.name == lookfor).first()
metaGroupNameMap[lookfor] = metaGroup.ID
else:
raise TypeError("Need integer or string as argument")
return metaGroup
@cachedQuery(1, "lookfor")
def getMarketGroup(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
marketGroup = gamedata_session.query(MarketGroup).get(lookfor)
else:
marketGroup = gamedata_session.query(MarketGroup).options(*processEager(eager)).filter(MarketGroup.ID == lookfor).first()
marketGroup = gamedata_session.query(MarketGroup).options(*processEager(eager)).filter(
MarketGroup.ID == lookfor).first()
else:
raise TypeError("Need integer as argument")
return marketGroup
@cachedQuery(2, "where", "filter")
def getItemsByCategory(filter, where=None, eager=None):
if isinstance(filter, int):
filter = Category.ID == filter
elif isinstance(filter, basestring):
elif isinstance(filter, str):
filter = Category.name == filter
else:
raise TypeError("Need integer or string as argument")
filter = processWhere(filter, where)
return gamedata_session.query(Item).options(*processEager(eager)).join(Item.group, Group.category).filter(filter).all()
return gamedata_session.query(Item).options(*processEager(eager)).join(Item.group, Group.category).filter(
filter).all()
@cachedQuery(3, "where", "nameLike", "join")
def searchItems(nameLike, where=None, join=None, eager=None):
if not isinstance(nameLike, basestring):
if not isinstance(nameLike, str):
raise TypeError("Need string as argument")
if join is None:
@@ -193,13 +268,33 @@ def searchItems(nameLike, where=None, join=None, eager=None):
items = gamedata_session.query(Item).options(*processEager(eager)).join(*join)
for token in nameLike.split(' '):
token_safe = u"%{0}%".format(sqlizeString(token))
items = items.filter(processWhere(Item.name.like(token_safe, escape="\\"), where))
token_safe = "%{0}%".format(sqlizeString(token))
if where is not None:
items = items.filter(and_(Item.name.like(token_safe, escape="\\"), where))
else:
items = items.filter(Item.name.like(token_safe, escape="\\"))
items = items.limit(100).all()
return items
@cachedQuery(3, "where", "nameLike", "join")
def searchSkills(nameLike, where=None, eager=None):
if not isinstance(nameLike, str):
raise TypeError("Need string as argument")
items = gamedata_session.query(Item).options(*processEager(eager)).join(Item.group, Group.category)
for token in nameLike.split(' '):
token_safe = "%{0}%".format(sqlizeString(token))
if where is not None:
items = items.filter(and_(Item.name.like(token_safe, escape="\\"), Category.ID == 16, where))
else:
items = items.filter(and_(Item.name.like(token_safe, escape="\\"), Category.ID == 16))
items = items.limit(100).all()
return items
@cachedQuery(2, "where", "itemids")
def getVariations(itemids, where=None, eager=None):
def getVariations(itemids, groupIDs=None, where=None, eager=None):
for itemid in itemids:
if not isinstance(itemid, int):
raise TypeError("All passed item IDs must be integers")
@@ -210,12 +305,24 @@ def getVariations(itemids, where=None, eager=None):
itemfilter = or_(*(metatypes_table.c.parentTypeID == itemid for itemid in itemids))
filter = processWhere(itemfilter, where)
joinon = items_table.c.typeID == metatypes_table.c.typeID
vars = gamedata_session.query(Item).options(*processEager(eager)).join((metatypes_table, joinon)).filter(filter).all()
vars = gamedata_session.query(Item).options(*processEager(eager)).join((metatypes_table, joinon)).filter(
filter).all()
if vars:
return vars
elif groupIDs:
itemfilter = or_(*(groups_table.c.groupID == groupID for groupID in groupIDs))
filter = processWhere(itemfilter, where)
joinon = items_table.c.groupID == groups_table.c.groupID
vars = gamedata_session.query(Item).options(*processEager(eager)).join((groups_table, joinon)).filter(
filter).all()
return vars
@cachedQuery(1, "attr")
def getAttributeInfo(attr, eager=None):
if isinstance(attr, basestring):
if isinstance(attr, str):
filter = AttributeInfo.name == attr
elif isinstance(attr, int):
filter = AttributeInfo.ID == attr
@@ -227,14 +334,16 @@ def getAttributeInfo(attr, eager=None):
result = None
return result
@cachedQuery(1, "field")
def getMetaData(field):
if isinstance(field, basestring):
if isinstance(field, str):
data = gamedata_session.query(MetaData).get(field)
else:
raise TypeError("Need string as argument")
return data
@cachedQuery(2, "itemIDs", "attributeID")
def directAttributeRequest(itemIDs, attrIDs):
for itemID in itemIDs:
@@ -244,9 +353,31 @@ def directAttributeRequest(itemIDs, attrIDs):
if not isinstance(itemID, int):
raise TypeError("All itemIDs must be integer")
q = select((eos.types.Item.typeID, eos.types.Attribute.attributeID, eos.types.Attribute.value),
and_(eos.types.Attribute.attributeID.in_(attrIDs), eos.types.Item.typeID.in_(itemIDs)),
from_obj=[join(eos.types.Attribute, eos.types.Item)])
q = select((Item.typeID, Attribute.attributeID, Attribute.value),
and_(Attribute.attributeID.in_(attrIDs), Item.typeID.in_(itemIDs)),
from_obj=[join(Attribute, Item)])
result = gamedata_session.execute(q).fetchall()
return result
def getRequiredFor(itemID, attrMapping):
Attribute1 = aliased(Attribute)
Attribute2 = aliased(Attribute)
skillToLevelClauses = []
for attrSkill, attrLevel in attrMapping.items():
skillToLevelClauses.append(and_(Attribute1.attributeID == attrSkill, Attribute2.attributeID == attrLevel))
queryOr = or_(*skillToLevelClauses)
q = select((Attribute2.typeID, Attribute2.value),
and_(Attribute1.value == itemID, queryOr),
from_obj=[
join(Attribute1, Attribute2, Attribute1.typeID == Attribute2.typeID)
])
result = gamedata_session.execute(q).fetchall()
return result

View File

@@ -1,11 +1,11 @@
from sqlalchemy import Column, Table, Integer, String, ForeignKey
from sqlalchemy.orm import mapper
from eos.types import Traits
from eos.db import gamedata_meta
from eos.gamedata import Traits
traits_table = Table("invtraits", gamedata_meta,
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
Column("traitText", String))
mapper(Traits, traits_table);
mapper(Traits, traits_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,19 +15,21 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, Table, Integer, String
from sqlalchemy.orm import mapper, synonym
from eos.db import gamedata_meta
from eos.types import Unit
from eos.gamedata import Unit
groups_table = Table("dgmunits", gamedata_meta,
Column("unitID", Integer, primary_key = True),
Column("unitID", Integer, primary_key=True),
Column("unitName", String),
Column("displayName", String))
mapper(Unit, groups_table,
properties = {"ID" : synonym("unitID"),
"name" : synonym("unitName")})
properties={
"ID" : synonym("unitID"),
"name": synonym("unitName")
})

View File

@@ -1,17 +1,22 @@
import config
from logbook import Logger
import shutil
import time
import re
import os
import migrations
import config
from . import migrations
pyfalog = Logger(__name__)
def getVersion(db):
cursor = db.execute('PRAGMA user_version')
return cursor.fetchone()[0]
def getAppVersion():
return migrations.appVersion
def update(saveddata_engine):
dbVersion = getVersion(saveddata_engine)
appVersion = getAppVersion()
@@ -21,7 +26,7 @@ def update(saveddata_engine):
if dbVersion < appVersion:
# Automatically backup database
toFile = "%s/saveddata_migration_%d-%d_%s.db"%(
toFile = "%s/saveddata_migration_%d-%d_%s.db" % (
config.savePath,
dbVersion,
appVersion,
@@ -29,11 +34,10 @@ def update(saveddata_engine):
shutil.copyfile(config.saveDB, toFile)
for version in xrange(dbVersion, appVersion):
func = migrations.updates[version+1]
for version in range(dbVersion, appVersion):
func = migrations.updates[version + 1]
if func:
print "applying update",version+1
pyfalog.info("Applying database update: {0}", version + 1)
func(saveddata_engine)
# when all is said and done, set version to current

View File

@@ -11,12 +11,31 @@ upgrade files 1-5)
import pkgutil
import re
updates = {}
appVersion = 0
prefix = __name__ + "."
for importer, modname, ispkg in pkgutil.iter_modules(__path__, prefix):
# load modules to work based with and without pyinstaller
# from: https://github.com/webcomics/dosage/blob/master/dosagelib/loader.py
# see: https://github.com/pyinstaller/pyinstaller/issues/1905
# load modules using iter_modules()
# (should find all filters in normal build, but not pyinstaller)
module_names = [m[1] for m in pkgutil.iter_modules(__path__, prefix)]
# special handling for PyInstaller
importers = map(pkgutil.get_importer, __path__)
toc = set()
for i in importers:
if hasattr(i, 'toc'):
toc |= i.toc
for elm in toc:
if elm.startswith(prefix):
module_names.append(elm)
for modname in module_names:
# loop through python files, extracting update number and function, and
# adding it to a list
modname_tail = modname.rsplit('.', 1)[-1]

View File

@@ -14,50 +14,50 @@ Migration 1
import sqlalchemy
CONVERSIONS = {
6135: [ # Scoped Cargo Scanner
6135 : [ # Scoped Cargo Scanner
6133, # Interior Type-E Cargo Identifier
],
6527: [ # Compact Ship Scanner
6527 : [ # Compact Ship Scanner
6525, # Ta3 Perfunctory Vessel Probe
6529, # Speculative Ship Identifier I
6531, # Practical Type-E Ship Probe
],
6569: [ # Scoped Survey Scanner
6569 : [ # Scoped Survey Scanner
6567, # ML-3 Amphilotite Mining Probe
6571, # Rock-Scanning Sensor Array I
6573, # 'Dactyl' Type-E Asteroid Analyzer
],
509: [ # 'Basic' Capacitor Flux Coil
509 : [ # 'Basic' Capacitor Flux Coil
8163, # Partial Power Plant Manager: Capacitor Flux
8165, # Alpha Reactor Control: Capacitor Flux
8167, # Type-E Power Core Modification: Capacitor Flux
8169, # Marked Generator Refitting: Capacitor Flux
],
8135: [ # Restrained Capacitor Flux Coil
8135 : [ # Restrained Capacitor Flux Coil
8131, # Local Power Plant Manager: Capacitor Flux I
],
8133: [ # Compact Capacitor Flux Coil
8133 : [ # Compact Capacitor Flux Coil
8137, # Mark I Generator Refitting: Capacitor Flux
],
3469: [ # Basic Co-Processor
3469 : [ # Basic Co-Processor
8744, # Nanoelectrical Co-Processor
8743, # Nanomechanical CPU Enhancer
8746, # Quantum Co-Processor
8745, # Photonic CPU Enhancer
15425, # Naiyon's Modified Co-Processor (never existed but convert
# anyway as some fits may include it)
# anyway as some fits may include it)
],
8748: [ # Upgraded Co-Processor
8748 : [ # Upgraded Co-Processor
8747, # Nanomechanical CPU Enhancer I
8750, # Quantum Co-Processor I
8749, # Photonic CPU Enhancer I
],
1351: [ # Basic Reactor Control Unit
1351 : [ # Basic Reactor Control Unit
8251, # Partial Power Plant Manager: Reaction Control
8253, # Alpha Reactor Control: Reaction Control
8257, # Marked Generator Refitting: Reaction Control
],
8263: [ # Compact Reactor Control Unit
8263 : [ # Compact Reactor Control Unit
8259, # Local Power Plant Manager: Reaction Control I
8265, # Mark I Generator Refitting: Reaction Control
8261, # Beta Reactor Control: Reaction Control I
@@ -69,19 +69,20 @@ CONVERSIONS = {
31936: [ # Navy Micro Auxiliary Power Core
16543, # Micro 'Vigor' Core Augmentation
],
8089: [ # Compact Light Missile Launcher
8093, # Prototype 'Arbalest' Light Missile Launcher
8089 : [ # Compact Light Missile Launcher
8093, # Prototype 'Arbalest' Light Missile Launcher
],
8091: [ # Ample Light Missile Launcher
8091 : [ # Ample Light Missile Launcher
7993, # Experimental TE-2100 Light Missile Launcher
],
# Surface Cargo Scanner I was removed from game, however no mention of
# replacement module in patch notes. Morphing it to meta 0 module to be safe
442: [ # Cargo Scanner I
442 : [ # Cargo Scanner I
6129, # Surface Cargo Scanner I
]
}
def upgrade(saveddata_engine):
# Update fits schema to include target resists attribute
try:
@@ -90,8 +91,9 @@ def upgrade(saveddata_engine):
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN targetResistsID INTEGER;")
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -6,6 +6,7 @@ Migration 10
import sqlalchemy
def upgrade(saveddata_engine):
# Update projectedFits schema to include active attribute
try:

View File

@@ -0,0 +1,116 @@
"""
Migration 11
- Converts modules based on December Release 2015 Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
"""
CONVERSIONS = {
16467: ( # Medium Gremlin Compact Energy Neutralizer
16471, # Medium Unstable Power Fluctuator I
),
22947: ( # 'Beatnik' Small Remote Armor Repairer
23414, # 'Brotherhood' Small Remote Armor Repairer
),
8295 : ( # Type-D Restrained Shield Flux Coil
8293, # Beta Reactor Control: Shield Flux I
),
16499: ( # Heavy Knave Scoped Energy Nosferatu
16501, # E500 Prototype Energy Vampire
),
16477: ( # Heavy Infectious Scoped Energy Neutralizer
16473, # Heavy Rudimentary Energy Destabilizer I
),
16475: ( # Heavy Gremlin Compact Energy Neutralizer
16479, # Heavy Unstable Power Fluctuator I
),
16447: ( # Medium Solace Scoped Remote Armor Repairer
16445, # Medium 'Arup' Remote Armor Repairer
),
508 : ( # 'Basic' Shield Flux Coil
8325, # Alpha Reactor Shield Flux
8329, # Marked Generator Refitting: Shield Flux
8323, # Partial Power Plant Manager: Shield Flux
8327, # Type-E Power Core Modification: Shield Flux
),
1419 : ( # 'Basic' Shield Power Relay
8341, # Alpha Reactor Shield Power Relay
8345, # Marked Generator Refitting: Shield Power Relay
8339, # Partial Power Plant Manager: Shield Power Relay
8343, # Type-E Power Core Modification: Shield Power Relay
),
16439: ( # Small Solace Scoped Remote Armor Repairer
16437, # Small 'Arup' Remote Armor Repairer
),
16505: ( # Medium Ghoul Compact Energy Nosferatu
16511, # Medium Diminishing Power System Drain I
),
8297 : ( # Mark I Compact Shield Flux Coil
8291, # Local Power Plant Manager: Reaction Shield Flux I
),
16455: ( # Large Solace Scoped Remote Armor Repairer
16453, # Large 'Arup' Remote Armor Repairer
),
6485 : ( # M51 Benefactor Compact Shield Recharger
6491, # Passive Barrier Compensator I
6489, # 'Benefactor' Ward Reconstructor
6487, # Supplemental Screen Generator I
),
5137 : ( # Small Knave Scoped Energy Nosferatu
5135, # E5 Prototype Energy Vampire
),
8579 : ( # Medium Murky Compact Remote Shield Booster
8581, # Medium 'Atonement' Remote Shield Booster
),
8531 : ( # Small Murky Compact Remote Shield Booster
8533, # Small 'Atonement' Remote Shield Booster
),
16497: ( # Heavy Ghoul Compact Energy Nosferatu
16503, # Heavy Diminishing Power System Drain I
),
4477 : ( # Small Gremlin Compact Energy Neutralizer
4475, # Small Unstable Power Fluctuator I
),
8337 : ( # Mark I Compact Shield Power Relay
8331, # Local Power Plant Manager: Reaction Shield Power Relay I
),
23416: ( # 'Peace' Large Remote Armor Repairer
22951, # 'Pacifier' Large Remote Armor Repairer
),
5141 : ( # Small Ghoul Compact Energy Nosferatu
5139, # Small Diminishing Power System Drain I
),
4471 : ( # Small Infectious Scoped Energy Neutralizer
4473, # Small Rudimentary Energy Destabilizer I
),
16469: ( # Medium Infectious Scoped Energy Neutralizer
16465, # Medium Rudimentary Energy Destabilizer I
),
8335 : ( # Type-D Restrained Shield Power Relay
8333, # Beta Reactor Control: Shield Power Relay I
),
405 : ( # 'Micro' Remote Shield Booster
8631, # Micro Asymmetric Remote Shield Booster
8627, # Micro Murky Remote Shield Booster
8629, # Micro 'Atonement' Remote Shield Booster
8633, # Micro S95a Remote Shield Booster
),
8635 : ( # Large Murky Compact Remote Shield Booster
8637, # Large 'Atonement' Remote Shield Booster
),
16507: ( # Medium Knave Scoped Energy Nosferatu
16509, # E50 Prototype Energy Vampire
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -0,0 +1,340 @@
"""
Migration 12
- Converts modules based on March 2016 Module Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
"""
CONVERSIONS = {
16457: ( # Crosslink Compact Ballistic Control System
16459, # Muon Coil Bolt Array I
16461, # Multiphasic Bolt Array I
16463, # 'Pandemonium' Ballistic Enhancement
),
5281 : ( # Coadjunct Scoped Remote Sensor Booster
7218, # Piercing ECCM Emitter I
),
5365 : ( # Cetus Scoped Burst Jammer
5359, # 1Z-3 Subversive ECM Eruption
),
1973 : ( # Sensor Booster I
1947, # ECCM - Radar I
2002, # ECCM - Ladar I
2003, # ECCM - Magnetometric I
2004, # ECCM - Gravimetric I
2005, # ECCM - Omni I
),
1951 : ( # 'Basic' Tracking Enhancer
6322, # Beta-Nought Tracking Mode
6323, # Azimuth Descalloping Tracking Enhancer
6324, # F-AQ Delay-Line Scan Tracking Subroutines
6321, # Beam Parallax Tracking Program
),
521 : ( # 'Basic' Damage Control
5829, # GLFF Containment Field
5831, # Interior Force Field Array
5835, # F84 Local Damage System
5833, # Systematic Damage Control
),
22925: ( # 'Bootleg' Remote Sensor Booster
22939, # 'Boss' Remote Sensor Booster
22941, # 'Entrepreneur' Remote Sensor Booster
),
5443 : ( # Faint Epsilon Scoped Warp Scrambler
5441, # Fleeting Progressive Warp Scrambler I
),
1963 : ( # Remote Sensor Booster I
1959, # ECCM Projector I
),
6325 : ( # Fourier Compact Tracking Enhancer
6326, # Sigma-Nought Tracking Mode I
6327, # Auto-Gain Control Tracking Enhancer I
6328, # F-aQ Phase Code Tracking Subroutines
),
21486: ( # 'Kindred' Gyrostabilizer
21488, # Monophonic Stabilization Actuator I
),
19927: ( # Hypnos Scoped Magnetometric ECM
9518, # Initiated Ion Field ECM I
),
10188: ( # 'Basic' Magnetic Field Stabilizer
11111, # Insulated Stabilizer Array
11109, # Linear Flux Stabilizer
11115, # Gauss Field Balancer
11113, # Magnetic Vortex Stabilizer
),
22919: ( # 'Monopoly' Magnetic Field Stabilizer
22917, # 'Capitalist' Magnetic Field Stabilizer I
),
5839 : ( # IFFA Compact Damage Control
5841, # Emergency Damage Control I
5843, # F85 Peripheral Damage System I
5837, # Pseudoelectron Containment Field I
),
522 : ( # 'Micro' Cap Battery
4747, # Micro Ld-Acid Capacitor Battery I
4751, # Micro Ohm Capacitor Reserve I
4745, # Micro F-4a Ld-Sulfate Capacitor Charge Unit
4749, # Micro Peroxide Capacitor Power Cell
3480, # Micro Capacitor Battery II
),
518 : ( # 'Basic' Gyrostabilizer
5915, # Lateral Gyrostabilizer
5919, # F-M2 Weapon Inertial Suspensor
5913, # Hydraulic Stabilization Actuator
5917, # Stabilized Weapon Mounts
),
19931: ( # Compulsive Scoped Multispectral ECM
19933, # 'Hypnos' Multispectral ECM I
),
5403 : ( # Faint Scoped Warp Disruptor
5401, # Fleeting Warp Disruptor I
),
23902: ( # 'Trebuchet' Heat Sink I
23900, # 'Mangonel' Heat Sink I
),
1893 : ( # 'Basic' Heat Sink
5845, # Heat Exhaust System
5856, # C3S Convection Thermal Radiator
5855, # 'Boreas' Coolant System
5854, # Stamped Heat Sink
),
6160 : ( # F-90 Compact Sensor Booster
20214, # Extra Radar ECCM Scanning Array I
20220, # Extra Ladar ECCM Scanning Array I
20226, # Extra Gravimetric ECCM Scanning Array I
20232, # Extra Magnetometric ECCM Scanning Array I
7948, # Gravimetric Positional ECCM Sensor System I
7964, # Radar Positional ECCM Sensor System I
7965, # Omni Positional ECCM Sensor System I
7966, # Ladar Positional ECCM Sensor System I
7970, # Magnetometric Positional ECCM Sensor System I
20218, # Conjunctive Radar ECCM Scanning Array I
20224, # Conjunctive Ladar ECCM Scanning Array I
20230, # Conjunctive Gravimetric ECCM Scanning Array I
20236, # Conjunctive Magnetometric ECCM Scanning Array I
6157, # Supplemental Scanning CPU I
),
23418: ( # 'Radical' Damage Control
22893, # 'Gonzo' Damage Control I
),
19952: ( # Umbra Scoped Radar ECM
9520, # 'Penumbra' White Noise ECM
),
1952 : ( # Sensor Booster II
2258, # ECCM - Omni II
2259, # ECCM - Gravimetric II
2260, # ECCM - Ladar II
2261, # ECCM - Magnetometric II
2262, # ECCM - Radar II
),
5282 : ( # Linked Enduring Sensor Booster
7219, # Scattering ECCM Projector I
),
1986 : ( # Signal Amplifier I
2579, # Gravimetric Backup Array I
2583, # Ladar Backup Array I
2587, # Magnetometric Backup Array I
2591, # Multi Sensor Backup Array I
4013, # RADAR Backup Array I
),
4871 : ( # Large Compact Pb-Acid Cap Battery
4875, # Large Ohm Capacitor Reserve I
4869, # Large F-4a Ld-Sulfate Capacitor Charge Unit
4873, # Large Peroxide Capacitor Power Cell
),
1964 : ( # Remote Sensor Booster II
1960, # ECCM Projector II
),
5933 : ( # Counterbalanced Compact Gyrostabilizer
5931, # Cross-Lateral Gyrostabilizer I
5935, # F-M3 Munition Inertial Suspensor
5929, # Pneumatic Stabilization Actuator I
),
4025 : ( # X5 Enduring Stasis Webifier
4029, # 'Langour' Drive Disruptor I
),
4027 : ( # Fleeting Compact Stasis Webifier
4031, # Patterned Stasis Web I
),
22937: ( # 'Enterprise' Remote Tracking Computer
22935, # 'Tycoon' Remote Tracking Computer
),
22929: ( # 'Marketeer' Tracking Computer
22927, # 'Economist' Tracking Computer I
),
1987 : ( # Signal Amplifier II
2580, # Gravimetric Backup Array II
2584, # Ladar Backup Array II
2588, # Magnetometric Backup Array II
2592, # Multi Sensor Backup Array II
4014, # RADAR Backup Array II
),
19939: ( # Enfeebling Scoped Ladar ECM
9522, # Faint Phase Inversion ECM I
),
5340 : ( # P-S Compact Remote Tracking Computer
5341, # 'Prayer' Remote Tracking Computer
),
19814: ( # Phased Scoped Target Painter
19808, # Partial Weapon Navigation
),
1949 : ( # 'Basic' Signal Amplifier
1946, # Basic RADAR Backup Array
1982, # Basic Ladar Backup Array
1983, # Basic Gravimetric Backup Array
1984, # Basic Magnetometric Backup Array
1985, # Basic Multi Sensor Backup Array
6193, # Emergency Magnetometric Scanners
6194, # Emergency Multi-Frequency Scanners
6202, # Emergency RADAR Scanners
6216, # Emergency Ladar Scanners
6217, # Emergency Gravimetric Scanners
6225, # Sealed RADAR Backup Cluster
6238, # Sealed Magnetometric Backup Cluster
6239, # Sealed Multi-Frequency Backup Cluster
6241, # Sealed Ladar Backup Cluster
6242, # Sealed Gravimetric Backup Cluster
6257, # Surplus RADAR Reserve Array
6258, # F-42 Reiterative RADAR Backup Sensors
6283, # Surplus Magnetometric Reserve Array
6284, # F-42 Reiterative Magnetometric Backup Sensors
6285, # Surplus Multi-Frequency Reserve Array
6286, # F-42 Reiterative Multi-Frequency Backup Sensors
6289, # Surplus Ladar Reserve Array
6290, # F-42 Reiterative Ladar Backup Sensors
6291, # Surplus Gravimetric Reserve Array
6292, # F-42 Reiterative Gravimetric Backup Sensors
6309, # Amplitude Signal Enhancer
6310, # 'Acolyth' Signal Booster
6311, # Type-E Discriminative Signal Augmentation
6312, # F-90 Positional Signal Amplifier
),
21527: ( # 'Firewall' Signal Amplifier
21521, # Gravimetric Firewall
21523, # Ladar Firewall
21525, # Magnetometric Firewall
21527, # Multi Sensor Firewall
21529, # RADAR Firewall
),
23416: ( # 'Peace' Large Remote Armor Repairer
None, # 'Pacifier' Large Remote Armor Repairer
),
6176 : ( # F-12 Enduring Tracking Computer
6174, # Monopulse Tracking Mechanism I
),
6159 : ( # Alumel-Wired Enduring Sensor Booster
7917, # Alumel Radar ECCM Sensor Array I
7918, # Alumel Ladar ECCM Sensor Array I
7922, # Alumel Gravimetric ECCM Sensor Array I
7926, # Alumel Omni ECCM Sensor Array I
7937, # Alumel Magnetometric ECCM Sensor Array I
7867, # Supplemental Ladar ECCM Scanning Array I
7869, # Supplemental Gravimetric ECCM Scanning Array I
7870, # Supplemental Omni ECCM Scanning Array I
7887, # Supplemental Radar ECCM Scanning Array I
7889, # Supplemental Magnetometric ECCM Scanning Array I
20216, # Incremental Radar ECCM Scanning Array I
20222, # Incremental Ladar ECCM Scanning Array I
20228, # Incremental Gravimetric ECCM Scanning Array I
20234, # Incremental Magnetometric ECCM Scanning Array I
7892, # Prototype ECCM Radar Sensor Cluster
7893, # Prototype ECCM Ladar Sensor Cluster
7895, # Prototype ECCM Gravimetric Sensor Cluster
7896, # Prototype ECCM Omni Sensor Cluster
7914, # Prototype ECCM Magnetometric Sensor Cluster
6158, # Prototype Sensor Booster
),
5849 : ( # Extruded Compact Heat Sink
5846, # Thermal Exhaust System I
5858, # C4S Coiled Circuit Thermal Radiator
5857, # 'Skadi' Coolant System I
),
22895: ( # 'Shady' Sensor Booster
22897, # 'Forger' ECCM - Magnetometric I
),
11105: ( # Vortex Compact Magnetic Field Stabilizer
11103, # Insulated Stabilizer Array I
11101, # Linear Flux Stabilizer I
11107, # Gauss Field Balancer I
),
22945: ( # 'Executive' Remote Sensor Dampener
22943, # 'Broker' Remote Sensor Dampener I
),
6173 : ( # Optical Compact Tracking Computer
6175, # 'Orion' Tracking CPU I
),
5279 : ( # F-23 Compact Remote Sensor Booster
7217, # Spot Pulsing ECCM I
7220, # Phased Muon ECCM Caster I
5280, # Connected Remote Sensor Booster
),
4787 : ( # Small Compact Pb-Acid Cap Battery
4791, # Small Ohm Capacitor Reserve I
4785, # Small F-4a Ld-Sulfate Capacitor Charge Unit
4789, # Small Peroxide Capacitor Power Cell
),
19946: ( # BZ-5 Scoped Gravimetric ECM
9519, # FZ-3 Subversive Spatial Destabilizer ECM
),
6073 : ( # Medium Compact Pb-Acid Cap Battery
6097, # Medium Ohm Capacitor Reserve I
6111, # Medium F-4a Ld-Sulfate Capacitor Charge Unit
6083, # Medium Peroxide Capacitor Power Cell
),
21484: ( # 'Full Duplex' Ballistic Control System
21482, # Ballistic 'Purge' Targeting System I
),
6296 : ( # F-89 Compact Signal Amplifier
6218, # Protected Gravimetric Backup Cluster I
6222, # Protected Ladar Backup Cluster I
6226, # Protected Magnetometric Backup Cluster I
6230, # Protected Multi-Frequency Backup Cluster I
6234, # Protected RADAR Backup Cluster I
6195, # Reserve Gravimetric Scanners
6199, # Reserve Ladar Scanners
6203, # Reserve Magnetometric Scanners
6207, # Reserve Multi-Frequency Scanners
6212, # Reserve RADAR Scanners
20238, # Secure Gravimetric Backup Cluster I
20244, # Secure Ladar Backup Cluster I
20250, # Secure Magnetometric Backup Cluster I
20260, # Secure Radar Backup Cluster I
6244, # F-43 Repetitive Gravimetric Backup Sensors
6252, # F-43 Repetitive Ladar Backup Sensors
6260, # F-43 Repetitive Magnetometric Backup Sensors
6268, # F-43 Repetitive Multi-Frequency Backup Sensors
6276, # F-43 Repetitive RADAR Backup Sensors
20240, # Shielded Gravimetric Backup Cluster I
20246, # Shielded Ladar Backup Cluster I
20252, # Shielded Magnetometric Backup Cluster I
20262, # Shielded Radar Backup Cluster I
6243, # Surrogate Gravimetric Reserve Array I
6251, # Surrogate Ladar Reserve Array I
6259, # Surrogate Magnetometric Reserve Array I
6267, # Surrogate Multi-Frequency Reserve Array I
6275, # Surrogate RADAR Reserve Array I
20242, # Warded Gravimetric Backup Cluster I
20248, # Warded Ladar Backup Cluster I
20254, # Warded Magnetometric Backup Cluster I
20264, # Warded Radar Backup Cluster I
6294, # 'Mendicant' Signal Booster I
6293, # Wavelength Signal Enhancer I
6295, # Type-D Attenuation Signal Augmentation
),
5302 : ( # Phased Muon Scoped Sensor Dampener
5300, # Indirect Scanning Dampening Unit I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -0,0 +1,16 @@
"""
Migration 13
- Alters fits table to introduce implant location attribute
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update fits schema to include implant location attribute
try:
saveddata_engine.execute("SELECT implantLocation FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN implantLocation INTEGER;")
saveddata_engine.execute("UPDATE fits SET implantLocation = 0")

View File

@@ -0,0 +1,21 @@
"""
Migration 14
- This should take care of issue #586.
"""
import sqlalchemy
def upgrade(saveddata_engine):
if saveddata_engine.execute(
"SELECT name FROM sqlite_master WHERE type='table' AND name='fighters'").scalar() == 'fighters':
# Fighters table exists
try:
saveddata_engine.execute("SELECT active FROM fighters LIMIT 1")
except sqlalchemy.exc.DatabaseError:
# if we don't have the active column, we are on an old pre-release version. Drop the tables and move on
# (they will be recreated)
saveddata_engine.execute("DROP TABLE fighters")
saveddata_engine.execute("DROP TABLE fightersAbilities")

View File

@@ -0,0 +1,19 @@
"""
Migration 15
- Delete projected modules on citadels
"""
def upgrade(saveddata_engine):
sql = """
DELETE FROM modules WHERE ID IN
(
SELECT m.ID FROM modules AS m
JOIN fits AS f ON m.fitID = f.ID
WHERE f.shipID IN ("35832", "35833", "35834", "40340")
AND m.projected = 1
)
"""
saveddata_engine.execute(sql)

View File

@@ -0,0 +1,15 @@
"""
Migration 16
- Alters fits table to introduce notes attribute
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update fits schema to include notes attribute
try:
saveddata_engine.execute("SELECT notes FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN notes VARCHAR;")

View File

@@ -0,0 +1,42 @@
"""
Migration 17
- Moves all fleet boosters to the new schema
"""
def upgrade(saveddata_engine):
from eos.db import saveddata_session
from eos.db.saveddata.fit import commandFits_table
sql = """
SELECT sm.memberID as boostedFit, s.leaderID AS squadBoost, w.leaderID AS wingBoost, g.leaderID AS gangBoost
FROM squadmembers sm
JOIN squads s ON s.ID = sm.squadID
JOIN wings w on w.ID = s.wingID
JOIN gangs g on g.ID = w.gangID
"""
try:
results = saveddata_session.execute(sql)
inserts = []
for row in results:
boosted = row["boostedFit"]
types = ("squad", "wing", "gang")
for x in types:
value = row["{}Boost".format(x)]
if value is None:
continue
inserts.append({"boosterID": value, "boostedID": boosted, "active": 1})
try:
saveddata_session.execute(commandFits_table.insert(),
{"boosterID": value, "boostedID": boosted, "active": 1})
except Exception:
pass
saveddata_session.commit()
except:
# Shouldn't fail unless you have updated database without the old fleet schema and manually modify the database version
# If it does, simply fail. Fleet data migration isn't critically important here
pass

View File

@@ -0,0 +1,68 @@
"""
Migration 8
- Converts modules from old Warfare Links to Command Modules
"""
CONVERSIONS = {
42526: ( # Armor Command Burst I
20069, # Armored Warfare Link - Damage Control I
20409, # Armored Warfare Link - Passive Defense I
22227, # Armored Warfare Link - Rapid Repair I
),
43552: ( # Armor Command Burst II
4264, # Armored Warfare Link - Damage Control II
4266, # Armored Warfare Link - Passive Defense II
4266, # Armored Warfare Link - Rapid Repair II
),
42527: ( # Information Command Burst I
11052, # Information Warfare Link - Sensor Integrity I
20405, # Information Warfare Link - Recon Operation I
20406, # Information Warfare Link - Electronic Superiority I
),
43554: ( # Information Command Burst II
4268, # Information Warfare Link - Electronic Superiority II
4270, # Information Warfare Link - Recon Operation II
4272, # Information Warfare Link - Sensor Integrity II
),
42529: ( # Shield Command Burst I
20124, # Siege Warfare Link - Active Shielding I
20514, # Siege Warfare Link - Shield Harmonizing I
22228, # Siege Warfare Link - Shield Efficiency I
),
43555: ( # Shield Command Burst II
4280, # Siege Warfare Link - Active Shielding II
4282, # Siege Warfare Link - Shield Efficiency II
4284 # Siege Warfare Link - Shield Harmonizing II
),
42530: ( # Skirmish Command Burst I
11017, # Skirmish Warfare Link - Interdiction Maneuvers I
20070, # Skirmish Warfare Link - Evasive Maneuvers I
20408, # Skirmish Warfare Link - Rapid Deployment I
),
43556: ( # Skirmish Command Burst II
4286, # Skirmish Warfare Link - Evasive Maneuvers II
4288, # Skirmish Warfare Link - Interdiction Maneuvers II
4290 # Skirmish Warfare Link - Rapid Deployment II
),
42528: ( # Mining Foreman Burst I
22553, # Mining Foreman Link - Harvester Capacitor Efficiency I
22555, # Mining Foreman Link - Mining Laser Field Enhancement I
22557, # Mining Foreman Link - Laser Optimization I
),
43551: ( # Mining Foreman Burst II
4274, # Mining Foreman Link - Harvester Capacitor Efficiency II
4276, # Mining Foreman Link - Laser Optimization II
4278 # Mining Foreman Link - Mining Laser Field Enhancement II
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -0,0 +1,18 @@
"""
Migration 19
- Deletes broken references to fits from the commandFits table (see GH issue #844)
"""
def upgrade(saveddata_engine):
from eos.db import saveddata_session
sql = """
DELETE FROM commandFits
WHERE boosterID NOT IN (select ID from fits)
OR boostedID NOT IN (select ID from fits)
"""
saveddata_session.execute(sql)
saveddata_session.commit()

View File

@@ -6,6 +6,7 @@ Migration 2
import sqlalchemy
def upgrade(saveddata_engine):
# Update characters schema to include default chars
try:

View File

@@ -0,0 +1,15 @@
"""
Migration 20
- Adds support for alpha clones to the characters table
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update characters schema to include alphaCloneID
try:
saveddata_engine.execute("SELECT alphaCloneID FROM characters LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN alphaCloneID INTEGER;")

View File

@@ -0,0 +1,10 @@
"""
Migration 21
- Fixes discrepancy in drone table where we may have an amount active that is not equal to the amount in the stack
(we don't support activating only 2/5 drones). See GH issue #728
"""
def upgrade(saveddata_engine):
saveddata_engine.execute("UPDATE drones SET amountActive = amount where amountActive > 0 AND amountActive <> amount;")

View File

@@ -0,0 +1,45 @@
"""
Migration 22
- Adds the created and modified fields to most tables
"""
import sqlalchemy
def upgrade(saveddata_engine):
# 1 = created only
# 2 = created and modified
tables = {
"boosters": 2,
"cargo": 2,
"characters": 2,
"crest": 1,
"damagePatterns": 2,
"drones": 2,
"fighters": 2,
"fits": 2,
"projectedFits": 2,
"commandFits": 2,
"implants": 2,
"implantSets": 2,
"modules": 2,
"overrides": 2,
"characterSkills": 2,
"targetResists": 2
}
for table in list(tables.keys()):
# midnight brain, there's probably a much more simple way to do this, but fuck it
if tables[table] > 0:
try:
saveddata_engine.execute("SELECT created FROM {0} LIMIT 1;".format(table))
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE {} ADD COLUMN created DATETIME;".format(table))
if tables[table] > 1:
try:
saveddata_engine.execute("SELECT modified FROM {0} LIMIT 1;".format(table))
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE {} ADD COLUMN modified DATETIME;".format(table))

View File

@@ -0,0 +1,13 @@
"""
Migration 23
- Adds a sec status field to the character table
"""
import sqlalchemy
def upgrade(saveddata_engine):
try:
saveddata_engine.execute("SELECT secStatus FROM characters LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN secStatus FLOAT;")

View File

@@ -0,0 +1,14 @@
"""
Migration 24
- Adds a boolean value to fit to signify if fit should ignore restrictions
"""
import sqlalchemy
def upgrade(saveddata_engine):
try:
saveddata_engine.execute("SELECT ignoreRestrictions FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN ignoreRestrictions BOOLEAN")
saveddata_engine.execute("UPDATE fits SET ignoreRestrictions = 0")

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
"""
Migration 26
- Deletes invalid command fit relationships caused by a bug (see #1244)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute("DELETE FROM commandFits WHERE boosterID NOT IN (SELECT ID FROM fits) OR boostedID NOT IN (SELECT ID FROM fits)")

View File

@@ -0,0 +1,9 @@
"""
Migration 27
- Resets all alpha clones to 1 (CCP consolidated all alpha's into one skillset)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute("UPDATE characters SET alphaCloneID = 1 WHERE alphaCloneID IS NOT NULL")

View File

@@ -6,6 +6,7 @@ Migration 3
import sqlalchemy
def upgrade(saveddata_engine):
try:
saveddata_engine.execute("SELECT modeID FROM fits LIMIT 1")

View File

@@ -10,66 +10,65 @@ Migration 4
and output of itemDiff.py
"""
CONVERSIONS = {
506: ( # 'Basic' Capacitor Power Relay
506 : ( # 'Basic' Capacitor Power Relay
8205, # Alpha Reactor Control: Capacitor Power Relay
8209, # Marked Generator Refitting: Capacitor Power Relay
8203, # Partial Power Plant Manager: Capacity Power Relay
8207, # Type-E Power Core Modification: Capacitor Power Relay
),
8177: ( # Mark I Compact Capacitor Power Relay
8177 : ( # Mark I Compact Capacitor Power Relay
8173, # Beta Reactor Control: Capacitor Power Relay I
),
8175: ( # Type-D Restrained Capacitor Power Relay
8175 : ( # Type-D Restrained Capacitor Power Relay
8171, # Local Power Plant Manager: Capacity Power Relay I
),
421: ( # 'Basic' Capacitor Recharger
421 : ( # 'Basic' Capacitor Recharger
4425, # AGM Capacitor Charge Array,
4421, # F-a10 Buffer Capacitor Regenerator
4423, # Industrial Capacitor Recharger
4427, # Secondary Parallel Link-Capacitor
),
4435: ( # Eutectic Compact Cap Recharger
4435 : ( # Eutectic Compact Cap Recharger
4433, # Barton Reactor Capacitor Recharger I
4431, # F-b10 Nominal Capacitor Regenerator
4437, # Fixed Parallel Link-Capacitor I
),
1315: ( # 'Basic' Expanded Cargohold
1315 : ( # 'Basic' Expanded Cargohold
5483, # Alpha Hull Mod Expanded Cargo
5479, # Marked Modified SS Expanded Cargo
5481, # Partial Hull Conversion Expanded Cargo
5485, # Type-E Altered SS Expanded Cargo
),
5493: ( # Type-D Restrained Expanded Cargo
5493 : ( # Type-D Restrained Expanded Cargo
5491, # Beta Hull Mod Expanded Cargo
5489, # Local Hull Conversion Expanded Cargo I
5487, # Mark I Modified SS Expanded Cargo
),
1401: ( # 'Basic' Inertial Stabilizers
1401 : ( # 'Basic' Inertial Stabilizers
5523, # Alpha Hull Mod Inertial Stabilizers
5521, # Partial Hull Conversion Inertial Stabilizers
5525, # Type-E Altered SS Inertial Stabilizers
),
5533: ( # Type-D Restrained Inertial Stabilizers
5533 : ( # Type-D Restrained Inertial Stabilizers
5531, # Beta Hull Mod Inertial Stabilizers
5529, # Local Hull Conversion Inertial Stabilizers I
5527, # Mark I Modified SS Inertial Stabilizers
5519, # Marked Modified SS Inertial Stabilizers
),
5239: ( # EP-S Gaussian Scoped Mining Laser
5239 : ( # EP-S Gaussian Scoped Mining Laser
5241, # Dual Diode Mining Laser I
),
5233: ( # Single Diode Basic Mining Laser
5233 : ( # Single Diode Basic Mining Laser
5231, # EP-R Argon Ion Basic Excavation Pulse
5237, # Rubin Basic Particle Bore Stream
5235, # Xenon Basic Drilling Beam
),
5245: ( # Particle Bore Compact Mining Laser
5245 : ( # Particle Bore Compact Mining Laser
5243, # XeCl Drilling Beam I
),
@@ -80,62 +79,63 @@ CONVERSIONS = {
22609, # Erin Mining Laser Upgrade
),
1242: ( # 'Basic' Nanofiber Internal Structure
1242 : ( # 'Basic' Nanofiber Internal Structure
5591, # Alpha Hull Mod Nanofiber Structure
5595, # Marked Modified SS Nanofiber Structure
5559, # Partial Hull Conversion Nanofiber Structure
5593, # Type-E Altered SS Nanofiber Structure
),
5599: ( # Type-D Restrained Nanofiber Structure
5599 : ( # Type-D Restrained Nanofiber Structure
5597, # Beta Hull Mod Nanofiber Structure
5561, # Local Hull Conversion Nanofiber Structure I
5601, # Mark I Modified SS Nanofiber Structure
),
1192: ( # 'Basic' Overdrive Injector System
1192 : ( # 'Basic' Overdrive Injector System
5613, # Alpha Hull Mod Overdrive Injector
5617, # Marked Modified SS Overdrive Injector
5611, # Partial Hull Conversion Overdrive Injector
5615, # Type-E Altered SS Overdrive Injector
),
5631: ( # Type-D Restrained Overdrive Injector
5631 : ( # Type-D Restrained Overdrive Injector
5629, # Beta Hull Mod Overdrive Injector
5627, # Local Hull Conversion Overdrive Injector I
5633, # Mark I Modified SS Overdrive Injector
),
1537: ( # 'Basic' Power Diagnostic System
1537 : ( # 'Basic' Power Diagnostic System
8213, # Alpha Reactor Control: Diagnostic System
8217, # Marked Generator Refitting: Diagnostic System
8211, # Partial Power Plant Manager: Diagnostic System
8215, # Type-E Power Core Modification: Diagnostic System
8255, # Type-E Power Core Modification: Reaction Control
),
8225: ( # Mark I Compact Power Diagnostic System
8225 : ( # Mark I Compact Power Diagnostic System
8221, # Beta Reactor Control: Diagnostic System I
8219, # Local Power Plant Manager: Diagnostic System I
8223, # Type-D Power Core Modification: Diagnostic System
),
1240: ( # 'Basic' Reinforced Bulkheads
1240 : ( # 'Basic' Reinforced Bulkheads
5677, # Alpha Hull Mod Reinforced Bulkheads
5681, # Marked Modified SS Reinforced Bulkheads
5675, # Partial Hull Conversion Reinforced Bulkheads
5679, # Type-E Altered SS Reinforced Bulkheads
),
5649: ( # Mark I Compact Reinforced Bulkheads
5649 : ( # Mark I Compact Reinforced Bulkheads
5645, # Beta Hull Mod Reinforced Bulkheads
),
5647: ( # Type-D Restrained Reinforced Bulkheads
5647 : ( # Type-D Restrained Reinforced Bulkheads
5643, # Local Hull Conversion Reinforced Bulkheads I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -4,5 +4,6 @@ Migration 5
Simply deletes damage profiles with a blank name. See GH issue #256
"""
def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ?', ("",))

View File

@@ -4,6 +4,8 @@ Migration 6
Overwrites damage profile 0 to reset bad uniform values (bad values set with bug)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ? OR ID LIKE ?', ("Uniform", "1"))
saveddata_engine.execute('INSERT INTO damagePatterns VALUES (?, ?, ?, ?, ?, ?, ?)', (1, "Uniform", 25, 25, 25, 25, None))
saveddata_engine.execute('INSERT INTO damagePatterns (ID, name, emAmount, thermalAmount, kineticAmount, explosiveAmount, ownerID) VALUES (?, ?, ?, ?, ?, ?, ?)',
(1, "Uniform", 25, 25, 25, 25, None))

View File

@@ -8,17 +8,16 @@ Migration 7
Pyfa.
"""
CONVERSIONS = {
640: ( # Scorpion
4005, # Scorpion Ishukone Watch
)
}
def upgrade(saveddata_engine):
# Convert ships
for replacement_item, list in CONVERSIONS.iteritems():
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "fits" SET "shipID" = ? WHERE "shipID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "fits" SET "shipID" = ? WHERE "shipID" = ?',
(replacement_item, retired_item))

View File

@@ -7,18 +7,17 @@ Migration 8
modules with their new replacements
"""
CONVERSIONS = {
8529: ( # Large F-S9 Regolith Compact Shield Extender
8529 : ( # Large F-S9 Regolith Compact Shield Extender
8409, # Large Subordinate Screen Stabilizer I
),
8419: ( # Large Azeotropic Restrained Shield Extender
8419 : ( # Large Azeotropic Restrained Shield Extender
8489, # Large Supplemental Barrier Emitter I
),
8517: ( # Medium F-S9 Regolith Compact Shield Extender
8517 : ( # Medium F-S9 Regolith Compact Shield Extender
8397, # Medium Subordinate Screen Stabilizer I
),
8433: ( # Medium Azeotropic Restrained Shield Extender
8433 : ( # Medium Azeotropic Restrained Shield Extender
8477, # Medium Supplemental Barrier Emitter I
),
20627: ( # Small 'Trapper' Shield Extender
@@ -29,10 +28,10 @@ CONVERSIONS = {
8387, # Micro Subordinate Screen Stabilizer I
8465, # Micro Supplemental Barrier Emitter I
),
8521: ( # Small F-S9 Regolith Compact Shield Extender
8521 : ( # Small F-S9 Regolith Compact Shield Extender
8401, # Small Subordinate Screen Stabilizer I
),
8427: ( # Small Azeotropic Restrained Shield Extender
8427 : ( # Small Azeotropic Restrained Shield Extender
8481, # Small Supplemental Barrier Emitter I
),
11343: ( # 100mm Crystalline Carbonide Restrained Plates
@@ -71,15 +70,16 @@ CONVERSIONS = {
11321, # 800mm Reinforced Nanofiber Plates I
),
11317: ( # 800mm Rolled Tungsten Compact Plates
11315, # 800mm Reinforced Titanium Plates I
11315, # 800mm Reinforced Titanium Plates I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -16,8 +16,10 @@ CREATE TABLE boostersTemp (
)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute(tmpTable)
saveddata_engine.execute("INSERT INTO boostersTemp (ID, itemID, fitID, active) SELECT ID, itemID, fitID, active FROM boosters")
saveddata_engine.execute(
"INSERT INTO boostersTemp (ID, itemID, fitID, active) SELECT ID, itemID, fitID, active FROM boosters")
saveddata_engine.execute("DROP TABLE boosters")
saveddata_engine.execute("ALTER TABLE boostersTemp RENAME TO boosters")

View File

@@ -8,11 +8,10 @@ __all__ = [
"booster",
"drone",
"implant",
"fleet",
"damagePattern",
"miscData",
"targetResists",
"override",
"crest"
"implantSet",
"loadDefaultDatabaseValues"
]

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,33 +15,41 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, ForeignKey, Integer, UniqueConstraint, Boolean
from sqlalchemy import Table, Column, ForeignKey, Integer, Boolean, DateTime
from sqlalchemy.orm import mapper, relation
from sqlalchemy.ext.associationproxy import association_proxy
import datetime
from eos.db import saveddata_meta
from eos.types import Booster
from eos.saveddata.booster import Booster
from eos.saveddata.boosterSideEffect import BoosterSideEffect
boosters_table = Table("boosters", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("ID", Integer, primary_key=True),
Column("itemID", Integer),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False),
Column("active", Boolean),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now),
)
activeSideEffects_table = Table("boostersActiveSideEffects", saveddata_meta,
Column("boosterID", ForeignKey("boosters.ID"), primary_key = True),
Column("effectID", Integer, primary_key = True))
class ActiveSideEffectsDummy(object):
def __init__(self, effectID):
self.effectID = effectID
booster_side_effect_table = Table("boosterSideEffects", saveddata_meta,
Column("boosterID", Integer, ForeignKey("boosters.ID"), primary_key=True, index=True),
Column("effectID", Integer, nullable=False, primary_key=True),
Column("active", Boolean, default=False)
)
mapper(ActiveSideEffectsDummy, activeSideEffects_table)
mapper(Booster, boosters_table,
properties = {"_Booster__activeSideEffectDummies" : relation(ActiveSideEffectsDummy)})
properties={
"_Booster__sideEffects": relation(
BoosterSideEffect,
backref="booster",
cascade='all, delete, delete-orphan'),
}
)
Booster._Booster__activeSideEffectIDs = association_proxy("_Booster__activeSideEffectDummies", "effectID")
mapper(BoosterSideEffect, booster_side_effect_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,18 +15,27 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean
from sqlalchemy.orm import mapper
from sqlalchemy import Table, Column, Integer, ForeignKey, DateTime
from sqlalchemy.orm import mapper, relation
import datetime
from eos.db import saveddata_meta
from eos.types import Cargo
from eos.saveddata.cargo import Cargo
from eos.saveddata.fit import Fit
cargo_table = Table("cargo", saveddata_meta,
Column("ID", Integer, primary_key=True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False, index = True),
Column("itemID", Integer, nullable = False),
Column("amount", Integer, nullable = False))
Column("ID", Integer, primary_key=True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False, index=True),
Column("itemID", Integer, nullable=False),
Column("amount", Integer, nullable=False),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now),
)
mapper(Cargo, cargo_table)
mapper(Cargo, cargo_table,
properties={
"owner": relation(Fit)
}
)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,30 +15,80 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, String
from sqlalchemy import Table, Column, Integer, ForeignKey, String, DateTime, Float, UniqueConstraint
from sqlalchemy.orm import relation, mapper
import datetime
from eos.db import saveddata_meta
from eos.db.saveddata.implant import charImplants_table
from eos.types import Character, User, Skill, Implant
from eos.effectHandlerHelpers import HandledImplantBoosterList
from eos.effectHandlerHelpers import HandledImplantBoosterList, HandledSsoCharacterList
from eos.saveddata.implant import Implant
from eos.saveddata.user import User
from eos.saveddata.character import Character, Skill
from eos.saveddata.ssocharacter import SsoCharacter
characters_table = Table("characters", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("name", String, nullable = False),
Column("apiID", Integer),
Column("apiKey", String),
Column("defaultChar", Integer),
Column("chars", String, nullable = True),
Column("ID", Integer, primary_key=True),
Column("name", String, nullable=False),
Column("defaultLevel", Integer, nullable=True),
Column("ownerID", ForeignKey("users.ID"), nullable = True))
Column("alphaCloneID", Integer, nullable=True),
Column("ownerID", ForeignKey("users.ID"), nullable=True),
Column("secStatus", Float, nullable=True, default=0.0),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now))
sso_table = Table("ssoCharacter", saveddata_meta,
Column("ID", Integer, primary_key=True),
Column("client", String, nullable=False),
Column("characterID", Integer, nullable=False),
Column("characterName", String, nullable=False),
Column("refreshToken", String, nullable=False),
Column("accessToken", String, nullable=False),
Column("accessTokenExpires", DateTime, nullable=False),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now),
UniqueConstraint('client', 'characterID', name='uix_client_characterID'),
UniqueConstraint('client', 'characterName', name='uix_client_characterName')
)
sso_character_map_table = Table("ssoCharacterMap", saveddata_meta,
Column("characterID", ForeignKey("characters.ID"), primary_key=True),
Column("ssoCharacterID", ForeignKey("ssoCharacter.ID"), primary_key=True),
)
mapper(SsoCharacter, sso_table)
mapper(Character, characters_table,
properties = {"_Character__owner" : relation(User, backref = "characters"),
"_Character__skills" : relation(Skill, backref="character", cascade = "all,delete-orphan"),
"_Character__implants" : relation(Implant, collection_class = HandledImplantBoosterList, cascade='all,delete-orphan', single_parent=True,
primaryjoin = charImplants_table.c.charID == characters_table.c.ID,
secondaryjoin = charImplants_table.c.implantID == Implant.ID,
secondary = charImplants_table),})
properties={
"_Character__alphaCloneID": characters_table.c.alphaCloneID,
"savedName" : characters_table.c.name,
"_Character__secStatus": characters_table.c.secStatus,
"_Character__owner" : relation(
User,
backref="characters"),
"_Character__skills" : relation(
Skill,
backref="character",
cascade="all,delete-orphan"),
"_Character__implants" : relation(
Implant,
collection_class=HandledImplantBoosterList,
cascade='all,delete-orphan',
backref='character',
single_parent=True,
primaryjoin=charImplants_table.c.charID == characters_table.c.ID,
secondaryjoin=charImplants_table.c.implantID == Implant.ID,
secondary=charImplants_table),
"_Character__ssoCharacters" : relation(
SsoCharacter,
collection_class=HandledSsoCharacterList,
backref='characters',
secondary=sso_character_map_table)
}
)

View File

@@ -1,31 +0,0 @@
#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
from sqlalchemy import Table, Column, Integer, String, Boolean
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import CrestChar
crest_table = Table("crest", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("name", String, nullable = False, unique = True),
Column("refresh_token", String, nullable = False))
mapper(CrestChar, crest_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,21 +15,25 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, String
from sqlalchemy import Table, Column, Integer, ForeignKey, String, DateTime
from sqlalchemy.orm import mapper
import datetime
from eos.db import saveddata_meta
from eos.types import DamagePattern
from eos.saveddata.damagePattern import DamagePattern
damagePatterns_table = Table("damagePatterns", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("ID", Integer, primary_key=True),
Column("name", String),
Column("emAmount", Integer),
Column("thermalAmount", Integer),
Column("kineticAmount", Integer),
Column("explosiveAmount", Integer),
Column("ownerID", ForeignKey("users.ID"), nullable=True))
Column("ownerID", ForeignKey("users.ID"), nullable=True),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(DamagePattern, damagePatterns_table)

View File

@@ -0,0 +1,239 @@
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# 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/>.
# ===============================================================================
from sqlalchemy.exc import DatabaseError
from logbook import Logger
pyfalog = Logger(__name__)
class DatabaseCleanup(object):
def __init__(self):
pass
@staticmethod
def ExecuteSQLQuery(saveddata_engine, query):
try:
results = saveddata_engine.execute(query)
return results
except DatabaseError:
pyfalog.error("Failed to connect to database or error executing query:\n{0}", query)
return None
@staticmethod
def OrphanedCharacterSkills(saveddata_engine):
# Find orphaned character skills.
# This solves an issue where the character doesn't exist, but skills for that character do.
# See issue #917
pyfalog.debug("Running database cleanup for character skills.")
query = "SELECT COUNT(*) AS num FROM characterSkills WHERE characterID NOT IN (SELECT ID from characters)"
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
query = "DELETE FROM characterSkills WHERE characterID NOT IN (SELECT ID from characters)"
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)
@staticmethod
def OrphanedFitDamagePatterns(saveddata_engine):
# Find orphaned damage patterns.
# This solves an issue where the damage pattern doesn't exist, but fits reference the pattern.
# See issue #777
pyfalog.debug("Running database cleanup for orphaned damage patterns attached to fits.")
query = "SELECT COUNT(*) AS num FROM fits WHERE damagePatternID NOT IN (SELECT ID FROM damagePatterns) OR damagePatternID IS NULL"
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
# Get Uniform damage pattern ID
uniform_query = "SELECT ID FROM damagePatterns WHERE name = 'Uniform'"
uniform_results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, uniform_query)
if uniform_results is None:
return
rows = uniform_results.fetchall()
if len(rows) == 0:
pyfalog.error("Missing uniform damage pattern.")
elif len(rows) > 1:
pyfalog.error("More than one uniform damage pattern found.")
else:
uniform_damage_pattern_id = rows[0]['ID']
update_query = "UPDATE 'fits' SET 'damagePatternID' = {} " \
"WHERE damagePatternID NOT IN (SELECT ID FROM damagePatterns) OR damagePatternID IS NULL".format(uniform_damage_pattern_id)
update_results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, update_query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", update_results.rowcount)
@staticmethod
def OrphanedFitCharacterIDs(saveddata_engine):
# Find orphaned character IDs. This solves an issue where the character doesn't exist, but fits reference the pattern.
pyfalog.debug("Running database cleanup for orphaned characters attached to fits.")
query = "SELECT COUNT(*) AS num FROM fits WHERE characterID NOT IN (SELECT ID FROM characters) OR characterID IS NULL"
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
# Get All 5 character ID
all5_query = "SELECT ID FROM characters WHERE name = 'All 5'"
all5_results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, all5_query)
if all5_results is None:
return
rows = all5_results.fetchall()
if len(rows) == 0:
pyfalog.error("Missing 'All 5' character.")
elif len(rows) > 1:
pyfalog.error("More than one 'All 5' character found.")
else:
all5_id = rows[0]['ID']
update_query = "UPDATE 'fits' SET 'characterID' = " + str(all5_id) + \
" WHERE characterID not in (select ID from characters) OR characterID IS NULL"
update_results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, update_query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", update_results.rowcount)
@staticmethod
def NullDamagePatternNames(saveddata_engine):
# Find damage patterns that are missing the name.
# This solves an issue where the damage pattern ends up with a name that is null.
# See issue #949
pyfalog.debug("Running database cleanup for missing damage pattern names.")
query = "SELECT COUNT(*) AS num FROM damagePatterns WHERE name IS NULL OR name = ''"
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
query = "DELETE FROM damagePatterns WHERE name IS NULL OR name = ''"
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)
@staticmethod
def NullTargetResistNames(saveddata_engine):
# Find target resists that are missing the name.
# This solves an issue where the target resist ends up with a name that is null.
# See issue #949
pyfalog.debug("Running database cleanup for missing target resist names.")
query = "SELECT COUNT(*) AS num FROM targetResists WHERE name IS NULL OR name = ''"
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
query = "DELETE FROM targetResists WHERE name IS NULL OR name = ''"
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)
@staticmethod
def OrphanedFitIDItemID(saveddata_engine):
# Orphaned items that are missing the fit ID or item ID.
# See issue #954
for table in ['drones', 'cargo', 'fighters']:
pyfalog.debug("Running database cleanup for orphaned {0} items.", table)
query = "SELECT COUNT(*) AS num FROM {} WHERE itemID IS NULL OR itemID = '' or itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'".format(
table)
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
query = "DELETE FROM {} WHERE itemID IS NULL OR itemID = '' or itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'".format(
table)
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)
for table in ['modules']:
pyfalog.debug("Running database cleanup for orphaned {0} items.", table)
query = "SELECT COUNT(*) AS num FROM {} WHERE itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'".format(
table)
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
query = "DELETE FROM {} WHERE itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'".format(table)
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)
@staticmethod
def NullDamageTargetPatternValues(saveddata_engine):
# Find patterns that have null values
# See issue #954
for profileType in ['damagePatterns', 'targetResists']:
for damageType in ['em', 'thermal', 'kinetic', 'explosive']:
pyfalog.debug("Running database cleanup for null {0} values. ({1})", profileType, damageType)
query = "SELECT COUNT(*) AS num FROM {0} WHERE {1}Amount IS NULL OR {1}Amount = ''".format(profileType,
damageType)
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num']:
query = "UPDATE '{0}' SET '{1}Amount' = '0' WHERE {1}Amount IS NULL OR {1}Amount = ''".format(profileType,
damageType)
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)
@staticmethod
def DuplicateSelectedAmmoName(saveddata_engine):
# Orphaned items that are missing the fit ID or item ID.
# See issue #954
pyfalog.debug("Running database cleanup for duplicated selected ammo profiles.")
query = "SELECT COUNT(*) AS num FROM damagePatterns WHERE name = 'Selected Ammo'"
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
if results is None:
return
row = results.first()
if row and row['num'] > 1:
query = "DELETE FROM damagePatterns WHERE name = 'Selected Ammo'"
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,19 +15,29 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean, DateTime
from sqlalchemy.orm import mapper, relation
import datetime
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import Drone
from eos.saveddata.drone import Drone
from eos.saveddata.fit import Fit
drones_table = Table("drones", saveddata_meta,
Column("groupID", Integer, primary_key=True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False, index = True),
Column("itemID", Integer, nullable = False),
Column("amount", Integer, nullable = False),
Column("amountActive", Integer, nullable = False),
Column("projected", Boolean, default = False))
Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False, index=True),
Column("itemID", Integer, nullable=False),
Column("amount", Integer, nullable=False),
Column("amountActive", Integer, nullable=False),
Column("projected", Boolean, default=False),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(Drone, drones_table)
mapper(Drone, drones_table,
properties={
"owner": relation(Fit)
}
)

View File

@@ -0,0 +1,55 @@
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean, DateTime
from sqlalchemy.orm import mapper, relation
import datetime
from eos.db import saveddata_meta
from eos.saveddata.fighterAbility import FighterAbility
from eos.saveddata.fighter import Fighter
from eos.saveddata.fit import Fit
fighters_table = Table("fighters", saveddata_meta,
Column("groupID", Integer, primary_key=True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False, index=True),
Column("itemID", Integer, nullable=False),
Column("active", Boolean, nullable=True),
Column("amount", Integer, nullable=False),
Column("projected", Boolean, default=False),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
fighter_abilities_table = Table("fightersAbilities", saveddata_meta,
Column("groupID", Integer, ForeignKey("fighters.groupID"), primary_key=True,
index=True),
Column("effectID", Integer, nullable=False, primary_key=True),
Column("active", Boolean, default=False))
mapper(Fighter, fighters_table,
properties={
"owner" : relation(Fit),
"_Fighter__abilities": relation(
FighterAbility,
backref="fighter",
cascade='all, delete, delete-orphan'),
})
mapper(FighterAbility, fighter_abilities_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,41 +15,71 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.sql import and_
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm.collections import attribute_mapped_collection
from sqlalchemy.sql import and_
from sqlalchemy.orm import relation, reconstructor, mapper, relationship
from sqlalchemy import ForeignKey, Column, Integer, String, Table, Boolean, DateTime
import datetime
from eos.db import saveddata_meta
from eos.db.saveddata.module import modules_table
from eos.db.saveddata.drone import drones_table
from eos.db import saveddata_session
from eos.db.saveddata.cargo import cargo_table
from eos.db.saveddata.drone import drones_table
from eos.db.saveddata.fighter import fighters_table
from eos.db.saveddata.implant import fitImplants_table
from eos.types import Fit, Module, User, Booster, Drone, Cargo, Implant, Character, DamagePattern, TargetResists
from eos.effectHandlerHelpers import *
from eos.db.saveddata.module import modules_table
from eos.effectHandlerHelpers import HandledModuleList, HandledImplantBoosterList, HandledProjectedModList, \
HandledDroneCargoList, HandledProjectedDroneList
from eos.saveddata.implant import Implant
from eos.saveddata.character import Character
from eos.saveddata.user import User
from eos.saveddata.fighter import Fighter
from eos.saveddata.fit import Fit as es_Fit, ImplantLocation
from eos.saveddata.drone import Drone
from eos.saveddata.booster import Booster
from eos.saveddata.module import Module
from eos.saveddata.cargo import Cargo
from eos.saveddata.damagePattern import DamagePattern
from eos.saveddata.targetResists import TargetResists
fits_table = Table("fits", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("ownerID", ForeignKey("users.ID"), nullable = True, index = True),
Column("shipID", Integer, nullable = False, index = True),
Column("name", String, nullable = False),
Column("timestamp", Integer, nullable = False),
Column("characterID", ForeignKey("characters.ID"), nullable = True),
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True),
Column("booster", Boolean, nullable = False, index = True, default = 0),
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
Column("modeID", Integer, nullable=True),
)
Column("ID", Integer, primary_key=True),
Column("ownerID", ForeignKey("users.ID"), nullable=True, index=True),
Column("shipID", Integer, nullable=False, index=True),
Column("name", String, nullable=False),
Column("timestamp", Integer, nullable=False),
Column("characterID", ForeignKey("characters.ID"), nullable=True),
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True),
Column("booster", Boolean, nullable=False, index=True, default=0),
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
Column("modeID", Integer, nullable=True),
Column("implantLocation", Integer, nullable=False, default=ImplantLocation.FIT),
Column("notes", String, nullable=True),
Column("ignoreRestrictions", Boolean, default=0),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, default=datetime.datetime.now, onupdate=datetime.datetime.now)
)
projectedFits_table = Table("projectedFits", saveddata_meta,
Column("sourceID", ForeignKey("fits.ID"), primary_key = True),
Column("victimID", ForeignKey("fits.ID"), primary_key = True),
Column("amount", Integer, nullable = False, default = 1),
Column("active", Boolean, nullable = False, default = 1),
)
Column("sourceID", ForeignKey("fits.ID"), primary_key=True),
Column("victimID", ForeignKey("fits.ID"), primary_key=True),
Column("amount", Integer, nullable=False, default=1),
Column("active", Boolean, nullable=False, default=1),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
commandFits_table = Table("commandFits", saveddata_meta,
Column("boosterID", ForeignKey("fits.ID"), primary_key=True),
Column("boostedID", ForeignKey("fits.ID"), primary_key=True),
Column("active", Boolean, nullable=False, default=1),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
class ProjectedFit(object):
def __init__(self, sourceID, source_fit, amount=1, active=True):
@@ -62,9 +92,9 @@ class ProjectedFit(object):
def init(self):
if self.source_fit.isInvalid:
# Very rare for this to happen, but be prepared for it
eos.db.saveddata_session.delete(self.source_fit)
eos.db.saveddata_session.flush()
eos.db.saveddata_session.refresh(self.victim_fit)
saveddata_session.delete(self.source_fit)
saveddata_session.flush()
saveddata_session.refresh(self.victim_fit)
# We have a series of setters and getters here just in case someone
# downgrades and screws up the table with NULL values
@@ -78,88 +108,151 @@ class ProjectedFit(object):
def __repr__(self):
return "ProjectedFit(sourceID={}, victimID={}, amount={}, active={}) at {}".format(
self.sourceID, self.victimID, self.amount, self.active, hex(id(self))
self.sourceID, self.victimID, self.amount, self.active, hex(id(self))
)
Fit._Fit__projectedFits = association_proxy(
"victimOf", # look at the victimOf association...
"source_fit", # .. and return the source fits
creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit)
class CommandFit(object):
def __init__(self, boosterID, booster_fit, active=True):
self.boosterID = boosterID
self.booster_fit = booster_fit
self.active = active
@reconstructor
def init(self):
if self.booster_fit.isInvalid:
# Very rare for this to happen, but be prepared for it
saveddata_session.delete(self.booster_fit)
saveddata_session.flush()
saveddata_session.refresh(self.boosted_fit)
def __repr__(self):
return "CommandFit(boosterID={}, boostedID={}, active={}) at {}".format(
self.boosterID, self.boostedID, self.active, hex(id(self))
)
es_Fit._Fit__projectedFits = association_proxy(
"victimOf", # look at the victimOf association...
"source_fit", # .. and return the source fits
creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit)
)
mapper(Fit, fits_table,
properties = {
"_Fit__modules": relation(
Module,
collection_class=HandledModuleList,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False),
order_by=modules_table.c.position,
cascade='all, delete, delete-orphan'),
"_Fit__projectedModules": relation(
Module,
collection_class=HandledProjectedModList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)),
"owner": relation(
User,
backref="fits"),
"itemID": fits_table.c.shipID,
"shipID": fits_table.c.shipID,
"_Fit__boosters": relation(
Booster,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
single_parent=True),
"_Fit__drones": relation(
Drone,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)),
"_Fit__cargo": relation(
Cargo,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(cargo_table.c.fitID == fits_table.c.ID)),
"_Fit__projectedDrones": relation(
Drone,
collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)),
"_Fit__implants": relation(
Implant,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
backref='fit',
single_parent=True,
primaryjoin=fitImplants_table.c.fitID == fits_table.c.ID,
secondaryjoin=fitImplants_table.c.implantID == Implant.ID,
secondary=fitImplants_table),
"_Fit__character": relation(
Character,
backref="fits"),
"_Fit__damagePattern": relation(DamagePattern),
"_Fit__targetResists": relation(TargetResists),
"projectedOnto": relationship(
ProjectedFit,
primaryjoin=projectedFits_table.c.sourceID == fits_table.c.ID,
backref='source_fit',
collection_class=attribute_mapped_collection('victimID'),
cascade='all, delete, delete-orphan'),
"victimOf": relationship(
ProjectedFit,
primaryjoin=fits_table.c.ID == projectedFits_table.c.victimID,
backref='victim_fit',
collection_class=attribute_mapped_collection('sourceID'),
cascade='all, delete, delete-orphan'),
es_Fit._Fit__commandFits = association_proxy(
"boostedOf", # look at the boostedOf association...
"booster_fit", # .. and return the booster fit
creator=lambda boosterID, booster_fit: CommandFit(boosterID, booster_fit)
)
# These relationships are broken out so that we can easily access it in the events stuff
# We sometimes don't want particular relationships to cause a fit modified update (eg: projecting
# a fit onto another would 'modify' both fits unless the following relationship is ignored)
projectedFitSourceRel = relationship(
ProjectedFit,
primaryjoin=projectedFits_table.c.sourceID == fits_table.c.ID,
backref='source_fit',
collection_class=attribute_mapped_collection('victimID'),
cascade='all, delete, delete-orphan')
boostedOntoRel = relationship(
CommandFit,
primaryjoin=commandFits_table.c.boosterID == fits_table.c.ID,
backref='booster_fit',
collection_class=attribute_mapped_collection('boostedID'),
cascade='all, delete, delete-orphan')
mapper(es_Fit, fits_table,
properties={
"_Fit__modules": relation(
Module,
collection_class=HandledModuleList,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False), # noqa
order_by=modules_table.c.position,
cascade='all, delete, delete-orphan'),
"_Fit__projectedModules": relation(
Module,
collection_class=HandledProjectedModList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)), # noqa
"owner": relation(
User,
backref="fits"),
"itemID": fits_table.c.shipID,
"shipID": fits_table.c.shipID,
"_Fit__boosters": relation(
Booster,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
backref='owner',
single_parent=True),
"_Fit__drones": relation(
Drone,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)), # noqa
"_Fit__fighters": relation(
Fighter,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == False)), # noqa
"_Fit__cargo": relation(
Cargo,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(cargo_table.c.fitID == fits_table.c.ID)),
"_Fit__projectedDrones": relation(
Drone,
collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)), # noqa
"_Fit__projectedFighters": relation(
Fighter,
collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(fighters_table.c.fitID == fits_table.c.ID, fighters_table.c.projected == True)), # noqa
"_Fit__implants": relation(
Implant,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
backref='owner',
single_parent=True,
primaryjoin=fitImplants_table.c.fitID == fits_table.c.ID,
secondaryjoin=fitImplants_table.c.implantID == Implant.ID,
secondary=fitImplants_table),
"_Fit__character": relation(
Character,
backref="fits"),
"_Fit__damagePattern": relation(DamagePattern),
"_Fit__targetResists": relation(TargetResists),
"projectedOnto": projectedFitSourceRel,
"victimOf": relationship(
ProjectedFit,
primaryjoin=fits_table.c.ID == projectedFits_table.c.victimID,
backref='victim_fit',
collection_class=attribute_mapped_collection('sourceID'),
cascade='all, delete, delete-orphan'),
"boostedOnto": boostedOntoRel,
"boostedOf": relationship(
CommandFit,
primaryjoin=fits_table.c.ID == commandFits_table.c.boostedID,
backref='boosted_fit',
collection_class=attribute_mapped_collection('boosterID'),
cascade='all, delete, delete-orphan'),
}
)
mapper(ProjectedFit, projectedFits_table,
properties = {
"_ProjectedFit__amount": projectedFits_table.c.amount,
}
properties={
"_ProjectedFit__amount": projectedFits_table.c.amount,
}
)
mapper(CommandFit, commandFits_table)

View File

@@ -1,66 +0,0 @@
#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, String
from sqlalchemy.orm import mapper, relation
from eos.db import saveddata_meta
from eos.types import Fleet, Wing, Squad, Fit
from eos.db.saveddata.fit import fits_table
gangs_table = Table("gangs", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("leaderID", ForeignKey("fits.ID")),
Column("boosterID", ForeignKey("fits.ID")),
Column("name", String))
wings_table = Table("wings", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("gangID", ForeignKey("gangs.ID")),
Column("boosterID", ForeignKey("fits.ID")),
Column("leaderID", ForeignKey("fits.ID")))
squads_table = Table("squads", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("wingID", ForeignKey("wings.ID")),
Column("leaderID", ForeignKey("fits.ID")),
Column("boosterID", ForeignKey("fits.ID")))
squadmembers_table = Table("squadmembers", saveddata_meta,
Column("squadID", ForeignKey("squads.ID"), primary_key = True),
Column("memberID", ForeignKey("fits.ID"), primary_key = True))
mapper(Fleet, gangs_table,
properties = {"wings" : relation(Wing, backref="gang"),
"leader" : relation(Fit, primaryjoin = gangs_table.c.leaderID == fits_table.c.ID),
"booster": relation(Fit, primaryjoin = gangs_table.c.boosterID == fits_table.c.ID)})
mapper(Wing, wings_table,
properties = {"squads" : relation(Squad, backref="wing"),
"leader" : relation(Fit, primaryjoin = wings_table.c.leaderID == fits_table.c.ID),
"booster": relation(Fit, primaryjoin = wings_table.c.boosterID == fits_table.c.ID)})
mapper(Squad, squads_table,
properties = {"leader" : relation(Fit, primaryjoin = squads_table.c.leaderID == fits_table.c.ID),
"booster" : relation(Fit, primaryjoin = squads_table.c.boosterID == fits_table.c.ID),
"members" : relation(Fit,
primaryjoin = squads_table.c.ID == squadmembers_table.c.squadID,
secondaryjoin = squadmembers_table.c.memberID == fits_table.c.ID,
secondary = squadmembers_table)})

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,25 +15,33 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean, DateTime
from sqlalchemy.orm import mapper
import datetime
from eos.db import saveddata_meta
from eos.types import Implant
from eos.saveddata.implant import Implant
implants_table = Table("implants", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("itemID", Integer),
Column("active", Boolean))
Column("ID", Integer, primary_key=True),
Column("itemID", Integer),
Column("active", Boolean),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
fitImplants_table = Table("fitImplants", saveddata_meta,
Column("fitID", ForeignKey("fits.ID"), index = True),
Column("implantID", ForeignKey("implants.ID"), primary_key = True))
Column("fitID", ForeignKey("fits.ID"), index=True),
Column("implantID", ForeignKey("implants.ID"), primary_key=True))
charImplants_table = Table("charImplants", saveddata_meta,
Column("charID", ForeignKey("characters.ID"), index = True),
Column("implantID", ForeignKey("implants.ID"), primary_key = True))
Column("charID", ForeignKey("characters.ID"), index=True),
Column("implantID", ForeignKey("implants.ID"), primary_key=True))
implantsSetMap_table = Table("implantSetMap", saveddata_meta,
Column("setID", ForeignKey("implantSets.ID"), index=True),
Column("implantID", ForeignKey("implants.ID"), primary_key=True))
mapper(Implant, implants_table)

View File

@@ -0,0 +1,49 @@
# ===============================================================================
# Copyright (C) 2016 Ryan Holmes
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
# ===============================================================================
from sqlalchemy import Table, Column, Integer, String, DateTime
from sqlalchemy.orm import relation, mapper
import datetime
from eos.db import saveddata_meta
from eos.db.saveddata.implant import implantsSetMap_table
from eos.effectHandlerHelpers import HandledImplantBoosterList
from eos.saveddata.implant import Implant
from eos.saveddata.implantSet import ImplantSet
implant_set_table = Table("implantSets", saveddata_meta,
Column("ID", Integer, primary_key=True),
Column("name", String, nullable=False),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(ImplantSet, implant_set_table,
properties={
"_ImplantSet__implants": relation(
Implant,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
backref='set',
single_parent=True,
primaryjoin=implantsSetMap_table.c.setID == implant_set_table.c.ID,
secondaryjoin=implantsSetMap_table.c.implantID == Implant.ID,
secondary=implantsSetMap_table),
}
)

View File

@@ -0,0 +1,198 @@
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# 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 eos.db
from eos.saveddata.damagePattern import DamagePattern as es_DamagePattern
from eos.saveddata.targetResists import TargetResists as es_TargetResists
class ImportError(Exception):
pass
class DefaultDatabaseValues(object):
def __init__(self):
pass
instance = None
@classmethod
def importDamageProfileDefaults(cls):
damageProfileList = [["Uniform", "25", "25", "25", "25"], ["[Generic]EM", "100", "0", "0", "0"],
["[Generic]Thermal", "0", "100", "0", "0"], ["[Generic]Kinetic", "0", "0", "100", "0"],
["[Generic]Explosive", "0", "0", "0", "100"],
["[NPC][Asteroid] Blood Raiders", "5067", "4214", "0", "0"],
["[Bombs]Concussion Bomb", "0", "0", "6400", "0"],
["[Bombs]Electron Bomb", "6400", "0", "0", "0"],
["[Bombs]Scorch Bomb", "0", "6400", "0", "0"],
["[Bombs]Shrapnel Bomb", "0", "0", "0", "6400"],
["[Frequency Crystals][T2] Gleam", "56", "56", "0", "0"],
["[Frequency Crystals][T2] Aurora", "40", "24", "0", "0"],
["[Frequency Crystals][T2] Scorch", "72", "16", "0", "0"],
["[Frequency Crystals][T2] Conflagration", "61.6", "61.6", "0", "0"],
["[Frequency Crystals]Gamma", "61.6", "35.2", "0", "0"],
["[Frequency Crystals]Infrared", "44", "17.6", "0", "0"],
["[Frequency Crystals]Microwave", "35.2", "17.6", "0", "0"],
["[Frequency Crystals]Multifrequency", "61.6", "44", "0", "0"],
["[Frequency Crystals]Radio", "44", "0", "0", "0"],
["[Frequency Crystals]Standard", "44", "26.4", "0", "0"],
["[Frequency Crystals]Ultraviolet", "52.8", "26.4", "0", "0"],
["[Frequency Crystals]Xray", "52.8", "35.2", "0", "0"],
["[Hybrid Charges][T2] Void", "0", "61.6", "61.6", "0"],
["[Hybrid Charges][T2] Null", "0", "48", "40", "0"],
["[Hybrid Charges][T2] Javelin", "0", "64", "48", "0"],
["[Hybrid Charges][T2] Spike", "0", "32", "32", "0"],
["[Hybrid Charges]Antimatter", "0", "48", "67.2", "0"],
["[Hybrid Charges]Iridium", "0", "28.8", "38.4", "0"],
["[Hybrid Charges]Iron", "0", "19.2", "28.8", "0"],
["[Hybrid Charges]Lead", "0", "28.8", "48", "0"],
["[Hybrid Charges]Plutonium", "0", "48", "57.6", "0"],
["[Hybrid Charges]Thorium", "0", "38.4", "48", "0"],
["[Hybrid Charges]Tungsten", "0", "19.2", "38.4", "0"],
["[Hybrid Charges]Uranium", "0", "38.4", "57.6", "0"],
["[Missiles]Mjolnir", "100", "0", "0", "0"], ["[Missiles]Inferno", "0", "100", "0", "0"],
["[Missiles]Scourge", "0", "0", "100", "0"], ["[Missiles]Nova", "0", "0", "0", "100"],
["[Missiles][Structure] Standup Missile", "100", "100", "100", "100"],
["[Projectile Ammo][T2] Tremor", "0", "0", "24", "40"],
["[Projectile Ammo][T2] Quake", "0", "0", "40", "72"],
["[Projectile Ammo][T2] Hail", "0", "0", "26.4", "96.8"],
["[Projectile Ammo][T2] Barrage", "0", "0", "40", "48"],
["[Projectile Ammo]Carbonized Lead", "0", "0", "35.2", "8.8"],
["[Projectile Ammo]Depleted Uranium", "0", "26.4", "17.6", "26.4"],
["[Projectile Ammo]EMP", "79.2", "0", "8.8", "17.6"],
["[Projectile Ammo]Fusion", "0", "0", "17.6", "88"],
["[Projectile Ammo]Nuclear", "0", "0", "8.8", "35.2"],
["[Projectile Ammo]Phased Plasma", "0", "88", "17.6", "0"],
["[Projectile Ammo]Proton", "26.4", "0", "17.6", "0"],
["[Projectile Ammo]Titanium Sabot", "0", "0", "52.8", "176"],
["[NPC][Burner] Cruor (Blood Raiders)", "90", "90", "0", "0"],
["[NPC][Burner] Dramiel (Angel)", "55", "0", "20", "96"],
["[NPC][Burner] Daredevil (Serpentis)", "0", "110", "154", "0"],
["[NPC][Burner] Succubus (Sanshas Nation)", "135", "30", "0", "0"],
["[NPC][Burner] Worm (Guristas)", "0", "0", "228", "0"],
["[NPC][Burner] Enyo", "0", "147", "147", "0"],
["[NPC][Burner] Hawk", "0", "0", "247", "0"],
["[NPC][Burner] Jaguar", "36", "0", "50", "182"],
["[NPC][Burner] Vengeance", "232", "0", "0", "0"],
["[NPC][Burner] Ashimmu (Blood Raiders)", "260", "100", "0", "0"],
["[NPC][Burner] Talos", "0", "413", "413", "0"],
["[NPC][Burner] Sentinel", "0", "75", "0", "90"],
["[NPC][Asteroid] Angel Cartel", "1838", "562", "2215", "3838"],
["[NPC][Deadspace] Angel Cartel", "369", "533", "1395", "3302"],
["[NPC][Deadspace] Blood Raiders", "6040", "5052", "10", "15"],
["[NPC][Asteroid] Guristas", "0", "1828", "7413", "0"],
["[NPC][Deadspace] Guristas", "0", "1531", "9680", "0"],
["[NPC][Asteroid] Rogue Drone", "394", "666", "1090", "1687"],
["[NPC][Deadspace] Rogue Drone", "276", "1071", "1069", "871"],
["[NPC][Asteroid] Sanshas Nation", "5586", "4112", "0", "0"],
["[NPC][Deadspace] Sanshas Nation", "3009", "2237", "0", "0"],
["[NPC][Asteroid] Serpentis", "0", "5373", "4813", "0"],
["[NPC][Deadspace] Serpentis", "0", "3110", "1929", "0"],
["[NPC][Mission] Amarr Empire", "4464", "3546", "97", "0"],
["[NPC][Mission] Caldari State", "0", "2139", "4867", "0"],
["[NPC][Mission] CONCORD", "336", "134", "212", "412"],
["[NPC][Mission] Gallente Federation", "9", "3712", "2758", "0"],
["[NPC][Mission] Khanid", "612", "483", "43", "6"],
["[NPC][Mission] Minmatar Republic", "1024", "388", "1655", "4285"],
["[NPC][Mission] Mordus Legion", "25", "262", "625", "0"],
["[NPC][Mission] Thukker", "0", "52", "10", "79"],
["[NPC][Other] Sleepers", "1472", "1472", "1384", "1384"],
["[NPC][Other] Sansha Incursion", "1682", "1347", "3678", "3678"]]
for damageProfileRow in damageProfileList:
name, em, therm, kin, exp = damageProfileRow
damageProfile = eos.db.getDamagePattern(name)
if damageProfile is None:
damageProfile = es_DamagePattern(em, therm, kin, exp)
damageProfile.name = name
eos.db.save(damageProfile)
@classmethod
def importResistProfileDefaults(cls):
targetResistProfileList = [["Uniform (25%)", "0.25", "0.25", "0.25", "0.25"],
["Uniform (50%)", "0.50", "0.50", "0.50", "0.50"],
["Uniform (75%)", "0.75", "0.75", "0.75", "0.75"],
["Uniform (90%)", "0.90", "0.90", "0.90", "0.90"],
["[T1 Resist]Shield", "0.0", "0.20", "0.40", "0.50"],
["[T1 Resist]Armor", "0.50", "0.45", "0.25", "0.10"],
["[T1 Resist]Hull", "0.33", "0.33", "0.33", "0.33"],
["[T1 Resist]Shield (+T2 DCU)", "0.125", "0.30", "0.475", "0.562"],
["[T1 Resist]Armor (+T2 DCU)", "0.575", "0.532", "0.363", "0.235"],
["[T1 Resist]Hull (+T2 DCU)", "0.598", "0.598", "0.598", "0.598"],
["[T2 Resist]Amarr (Shield)", "0.0", "0.20", "0.70", "0.875"],
["[T2 Resist]Amarr (Armor)", "0.50", "0.35", "0.625", "0.80"],
["[T2 Resist]Caldari (Shield)", "0.20", "0.84", "0.76", "0.60"],
["[T2 Resist]Caldari (Armor)", "0.50", "0.8625", "0.625", "0.10"],
["[T2 Resist]Gallente (Shield)", "0.0", "0.60", "0.85", "0.50"],
["[T2 Resist]Gallente (Armor)", "0.50", "0.675", "0.8375", "0.10"],
["[T2 Resist]Minmatar (Shield)", "0.75", "0.60", "0.40", "0.50"],
["[T2 Resist]Minmatar (Armor)", "0.90", "0.675", "0.25", "0.10"],
["[NPC][Asteroid] Angel Cartel", "0.54", "0.42", "0.37", "0.32"],
["[NPC][Asteroid] Blood Raiders", "0.34", "0.39", "0.45", "0.52"],
["[NPC][Asteroid] Guristas", "0.55", "0.35", "0.3", "0.48"],
["[NPC][Asteroid] Rogue Drones", "0.35", "0.38", "0.44", "0.49"],
["[NPC][Asteroid] Sanshas Nation", "0.35", "0.4", "0.47", "0.53"],
["[NPC][Asteroid] Serpentis", "0.49", "0.38", "0.29", "0.51"],
["[NPC][Deadspace] Angel Cartel", "0.59", "0.48", "0.4", "0.32"],
["[NPC][Deadspace] Blood Raiders", "0.31", "0.39", "0.47", "0.56"],
["[NPC][Deadspace] Guristas", "0.57", "0.39", "0.31", "0.5"],
["[NPC][Deadspace] Rogue Drones", "0.42", "0.42", "0.47", "0.49"],
["[NPC][Deadspace] Sanshas Nation", "0.31", "0.39", "0.47", "0.56"],
["[NPC][Deadspace] Serpentis", "0.49", "0.38", "0.29", "0.56"],
["[NPC][Mission] Amarr Empire", "0.34", "0.38", "0.42", "0.46"],
["[NPC][Mission] Caldari State", "0.51", "0.38", "0.3", "0.51"],
["[NPC][Mission] CONCORD", "0.47", "0.46", "0.47", "0.47"],
["[NPC][Mission] Gallente Federation", "0.51", "0.38", "0.31", "0.52"],
["[NPC][Mission] Khanid", "0.51", "0.42", "0.36", "0.4"],
["[NPC][Mission] Minmatar Republic", "0.51", "0.46", "0.41", "0.35"],
["[NPC][Mission] Mordus Legion", "0.32", "0.48", "0.4", "0.62"],
["[NPC][Other] Sleeper", "0.61", "0.61", "0.61", "0.61"],
["[NPC][Other] Sansha Incursion", "0.65", "0.63", "0.64", "0.65"],
["[NPC][Burner] Cruor (Blood Raiders)", "0.8", "0.73", "0.69", "0.67"],
["[NPC][Burner] Dramiel (Angel)", "0.35", "0.48", "0.61", "0.68"],
["[NPC][Burner] Daredevil (Serpentis)", "0.69", "0.59", "0.59", "0.43"],
["[NPC][Burner] Succubus (Sanshas Nation)", "0.35", "0.48", "0.61", "0.68"],
["[NPC][Burner] Worm (Guristas)", "0.48", "0.58", "0.69", "0.74"],
["[NPC][Burner] Enyo", "0.58", "0.72", "0.86", "0.24"],
["[NPC][Burner] Hawk", "0.3", "0.86", "0.79", "0.65"],
["[NPC][Burner] Jaguar", "0.78", "0.65", "0.48", "0.56"],
["[NPC][Burner] Vengeance", "0.66", "0.56", "0.75", "0.86"],
["[NPC][Burner] Ashimmu (Blood Raiders)", "0.8", "0.76", "0.68", "0.7"],
["[NPC][Burner] Talos", "0.68", "0.59", "0.59", "0.43"],
["[NPC][Burner] Sentinel", "0.58", "0.45", "0.52", "0.66"]]
for targetResistProfileRow in targetResistProfileList:
name, em, therm, kin, exp = targetResistProfileRow
resistsProfile = eos.db.eos.db.getTargetResists(name)
if resistsProfile is None:
resistsProfile = es_TargetResists(em, therm, kin, exp)
resistsProfile.name = name
eos.db.save(resistsProfile)
@classmethod
def importRequiredDefaults(cls):
damageProfileList = [["Uniform", "25", "25", "25", "25"]]
for damageProfileRow in damageProfileList:
name, em, therm, kin, exp = damageProfileRow
damageProfile = eos.db.getDamagePattern(name)
if damageProfile is None:
damageProfile = es_DamagePattern(em, therm, kin, exp)
damageProfile.name = name
eos.db.save(damageProfile)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2011 Anton Vorobyov
#
# This file is part of eos.
@@ -15,15 +15,16 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Column, Table, String
from sqlalchemy.orm import mapper
from eos.types import MiscData
from eos.db import saveddata_meta
from eos.saveddata.miscData import MiscData
miscdata_table = Table("miscdata", saveddata_meta,
Column("fieldName", String, primary_key=True),
Column("fieldValue", String))
Column("fieldName", String, primary_key=True),
Column("fieldValue", String))
mapper(MiscData, miscdata_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,25 +15,28 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, CheckConstraint, Boolean
from sqlalchemy import Table, Column, Integer, ForeignKey, CheckConstraint, Boolean, DateTime
from sqlalchemy.orm import relation, mapper
import datetime
from eos.db import saveddata_meta
from eos.types import Module, Fit
from eos.saveddata.module import Module
from eos.saveddata.fit import Fit
modules_table = Table("modules", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False, index = True),
Column("itemID", Integer, nullable = True),
Column("dummySlot", Integer, nullable = True, default = None),
Column("ID", Integer, primary_key=True),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False, index=True),
Column("itemID", Integer, nullable=True),
Column("dummySlot", Integer, nullable=True, default=None),
Column("chargeID", Integer),
Column("state", Integer, CheckConstraint("state >= -1"), CheckConstraint("state <= 2")),
Column("projected", Boolean, default = False, nullable = False),
Column("projected", Boolean, default=False, nullable=False),
Column("position", Integer),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now),
CheckConstraint('("dummySlot" = NULL OR "itemID" = NULL) AND "dummySlot" != "itemID"'))
mapper(Module, modules_table,
properties = {"owner" : relation(Fit)})
properties={"owner": relation(Fit)})

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,17 +15,21 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, Float
from sqlalchemy import Table, Column, Integer, Float, DateTime
from sqlalchemy.orm import mapper
import datetime
from eos.db import saveddata_meta
from eos.types import Override
from eos.saveddata.override import Override
overrides_table = Table("overrides", saveddata_meta,
Column("itemID", Integer, primary_key=True, index = True),
Column("attrID", Integer, primary_key=True, index = True),
Column("value", Float, nullable = False))
Column("itemID", Integer, primary_key=True, index=True),
Column("attrID", Integer, primary_key=True, index=True),
Column("value", Float, nullable=False),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(Override, overrides_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,17 +15,20 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Float, Integer
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import Price
from eos.saveddata.price import Price
prices_table = Table("prices", saveddata_meta,
Column("typeID", Integer, primary_key=True),
Column("price", Float),
Column("time", Integer, nullable = False),
Column("price", Float, default=0.0),
Column("time", Integer, nullable=False),
Column("failed", Integer))
mapper(Price, prices_table)
mapper(Price, prices_table, properties={
"_Price__price": prices_table.c.price,
})

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,27 +15,44 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from eos.db.util import processEager, processWhere
from eos.db import saveddata_session, sd_lock
import sys
from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad, TargetResists, Override, CrestChar
from eos.db.saveddata.fleet import squadmembers_table
from eos.db.saveddata.fit import projectedFits_table
from sqlalchemy.sql import and_
from sqlalchemy import desc, select
from eos.db import saveddata_session, sd_lock
from eos.db.saveddata.fit import projectedFits_table
from eos.db.util import processEager, processWhere
from eos.saveddata.price import Price
from eos.saveddata.user import User
from eos.saveddata.ssocharacter import SsoCharacter
from eos.saveddata.damagePattern import DamagePattern
from eos.saveddata.targetResists import TargetResists
from eos.saveddata.character import Character
from eos.saveddata.implantSet import ImplantSet
from eos.saveddata.fit import Fit
from eos.saveddata.module import Module
from eos.saveddata.miscData import MiscData
from eos.saveddata.override import Override
import eos.config
configVal = getattr(eos.config, "saveddataCache", None)
if configVal is True:
import weakref
itemCache = {}
queryCache = {}
def cachedQuery(type, amount, *keywords):
itemCache[type] = localItemCache = weakref.WeakValueDictionary()
queryCache[type] = typeQueryCache = {}
def deco(function):
localQueryCache = typeQueryCache[function] = {}
def setCache(cacheKey, args, kwargs):
items = function(*args, **kwargs)
IDs = set()
@@ -44,7 +61,7 @@ if configVal is True:
for item in stuff:
ID = getattr(item, "ID", None)
if ID is None:
#Some uncachable data, don't cache this query
# Some uncachable data, don't cache this query
del localQueryCache[cacheKey]
break
localItemCache[ID] = item
@@ -55,6 +72,7 @@ if configVal is True:
def checkAndReturn(*args, **kwargs):
useCache = kwargs.pop("useCache", True)
cacheKey = []
items = None
cacheKey.extend(args)
for keyword in keywords:
cacheKey.append(kwargs.get(keyword))
@@ -70,7 +88,7 @@ if configVal is True:
for ID in IDs:
data = localItemCache.get(ID)
if data is None:
#Fuck, some of our stuff isn't cached it seems.
# Fuck, some of our stuff isn't cached it seems.
items = setCache(cacheKey, args, kwargs)
break
items.append(data)
@@ -82,16 +100,18 @@ if configVal is True:
break
return items
return checkAndReturn
return deco
def removeCachedEntry(type, ID):
if not type in queryCache:
if type not in queryCache:
return
functionCache = queryCache[type]
for _, localCache in functionCache.iteritems():
for _, localCache in functionCache.items():
toDelete = set()
for cacheKey, info in localCache.iteritems():
for cacheKey, info in localCache.items():
IDs = info[1]
if ID in IDs:
toDelete.add(cacheKey)
@@ -111,11 +131,13 @@ else:
return function(*args, **kwargs)
return checkAndReturn
return deco
def removeCachedEntry(*args, **kwargs):
return
def sqlizeString(line):
# Escape backslashes first, as they will be as escape symbol in queries
# Then escape percent and underscore signs
@@ -123,6 +145,7 @@ def sqlizeString(line):
line = line.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_").replace("*", "%")
return line
@cachedQuery(User, 1, "lookfor")
def getUser(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -133,7 +156,7 @@ def getUser(lookfor, eager=None):
eager = processEager(eager)
with sd_lock:
user = saveddata_session.query(User).options(*eager).filter(User.ID == lookfor).first()
elif isinstance(lookfor, basestring):
elif isinstance(lookfor, str):
eager = processEager(eager)
with sd_lock:
user = saveddata_session.query(User).options(*eager).filter(User.username == lookfor).first()
@@ -141,6 +164,7 @@ def getUser(lookfor, eager=None):
raise TypeError("Need integer or string as argument")
return user
@cachedQuery(Character, 1, "lookfor")
def getCharacter(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -151,20 +175,23 @@ def getCharacter(lookfor, eager=None):
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(Character).options(*eager).filter(Character.ID == lookfor).first()
elif isinstance(lookfor, basestring):
elif isinstance(lookfor, str):
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(Character).options(*eager).filter(Character.name == lookfor).first()
character = saveddata_session.query(Character).options(*eager).filter(
Character.savedName == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return character
def getCharacterList(eager=None):
eager = processEager(eager)
with sd_lock:
characters = saveddata_session.query(Character).options(*eager).all()
return characters
def getCharactersForUser(lookfor, eager=None):
if isinstance(lookfor, int):
eager = processEager(eager)
@@ -174,6 +201,7 @@ def getCharactersForUser(lookfor, eager=None):
raise TypeError("Need integer as argument")
return characters
@cachedQuery(Fit, 1, "lookfor")
def getFit(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -194,47 +222,6 @@ def getFit(lookfor, eager=None):
return fit
@cachedQuery(Fleet, 1, "fleetID")
def getFleet(fleetID, eager=None):
if isinstance(fleetID, int):
if eager is None:
with sd_lock:
fleet = saveddata_session.query(Fleet).get(fleetID)
else:
eager = processEager(eager)
with sd_lock:
fleet = saveddata_session.query(Fleet).options(*eager).filter(Fleet.ID == fleetID).first()
else:
raise TypeError("Need integer as argument")
return fleet
@cachedQuery(Wing, 1, "wingID")
def getWing(wingID, eager=None):
if isinstance(wingID, int):
if eager is None:
with sd_lock:
wing = saveddata_session.query(Wing).get(wingID)
else:
eager = processEager(eager)
with sd_lock:
wing = saveddata_session.query(Wing).options(*eager).filter(Wing.ID == wingID).first()
else:
raise TypeError("Need integer as argument")
return wing
@cachedQuery(Squad, 1, "squadID")
def getSquad(squadID, eager=None):
if isinstance(squadID, int):
if eager is None:
with sd_lock:
squad = saveddata_session.query(Squad).get(squadID)
else:
eager = processEager(eager)
with sd_lock:
squad = saveddata_session.query(Squad).options(*eager).filter(Fleet.ID == squadID).first()
else:
raise TypeError("Need integer as argument")
return squad
def getFitsWithShip(shipID, ownerID=None, where=None, eager=None):
"""
@@ -257,50 +244,73 @@ def getFitsWithShip(shipID, ownerID=None, where=None, eager=None):
return fits
def getBoosterFits(ownerID=None, where=None, eager=None):
"""
Get all the fits that are flagged as a boosting ship
If no user is passed, do this for all users.
"""
if ownerID is not None and not isinstance(ownerID, int):
raise TypeError("OwnerID must be integer")
filter = Fit.booster == 1
if ownerID is not None:
filter = and_(filter, Fit.ownerID == ownerID)
filter = processWhere(filter, where)
def getRecentFits(ownerID=None, where=None, eager=None):
eager = processEager(eager)
with sd_lock:
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).filter(filter).all())
q = select((
Fit.ID,
Fit.shipID,
Fit.name,
Fit.modified,
Fit.created,
Fit.timestamp,
Fit.notes
)).order_by(desc(Fit.modified), desc(Fit.timestamp)).limit(50)
fits = eos.db.saveddata_session.execute(q).fetchall()
return fits
def getFitsWithModules(typeIDs, eager=None):
"""
Get all the fits that have typeIDs fitted to them
"""
if not hasattr(typeIDs, "__iter__"):
typeIDs = (typeIDs,)
eager = processEager(eager)
with sd_lock:
fits = removeInvalid(saveddata_session.query(Fit).join(Module).options(*eager).filter(Module.itemID.in_(typeIDs)).all())
return fits
def countAllFits():
with sd_lock:
count = saveddata_session.query(Fit).count()
return count
def countFitsWithShip(shipID, ownerID=None, where=None, eager=None):
def countFitsWithShip(lookfor, ownerID=None, where=None, eager=None):
"""
Get all the fits using a certain ship.
If no user is passed, do this for all users.
"""
if isinstance(shipID, int):
if ownerID is not None and not isinstance(ownerID, int):
raise TypeError("OwnerID must be integer")
filter = Fit.shipID == shipID
if ownerID is not None:
filter = and_(filter, Fit.ownerID == ownerID)
if ownerID is not None and not isinstance(ownerID, int):
raise TypeError("OwnerID must be integer")
filter = processWhere(filter, where)
eager = processEager(eager)
with sd_lock:
count = saveddata_session.query(Fit).options(*eager).filter(filter).count()
if isinstance(lookfor, int):
filter = Fit.shipID == lookfor
elif isinstance(lookfor, list):
if len(lookfor) == 0:
return 0
filter = Fit.shipID.in_(lookfor)
else:
raise TypeError("ShipID must be integer")
raise TypeError("You must supply either an integer or ShipID must be integer")
if ownerID is not None:
filter = and_(filter, Fit.ownerID == ownerID)
filter = processWhere(filter, where)
eager = processEager(eager)
with sd_lock:
count = saveddata_session.query(Fit).options(*eager).filter(filter).count()
return count
def getFitList(eager=None):
eager = processEager(eager)
with sd_lock:
@@ -308,11 +318,6 @@ def getFitList(eager=None):
return fits
def getFleetList(eager=None):
eager = processEager(eager)
with sd_lock:
fleets = saveddata_session.query(Fleet).options(*eager).all()
return fleets
@cachedQuery(Price, 1, "typeID")
def getPrice(typeID):
@@ -323,32 +328,58 @@ def getPrice(typeID):
raise TypeError("Need integer as argument")
return price
def clearPrices():
with sd_lock:
deleted_rows = saveddata_session.query(Price).delete()
commit()
return deleted_rows
def getMiscData(field):
if isinstance(field, basestring):
if isinstance(field, str):
with sd_lock:
data = saveddata_session.query(MiscData).get(field)
else:
raise TypeError("Need string as argument")
return data
def getDamagePatternList(eager=None):
eager = processEager(eager)
with sd_lock:
patterns = saveddata_session.query(DamagePattern).options(*eager).all()
return patterns
def clearDamagePatterns():
with sd_lock:
deleted_rows = saveddata_session.query(DamagePattern).filter(DamagePattern.name != 'Uniform').delete()
commit()
return deleted_rows
def getTargetResistsList(eager=None):
eager = processEager(eager)
with sd_lock:
patterns = saveddata_session.query(TargetResists).options(*eager).all()
return patterns
def clearTargetResists():
with sd_lock:
deleted_rows = saveddata_session.query(TargetResists).delete()
commit()
return deleted_rows
def getImplantSetList(eager=None):
eager = processEager(eager)
with sd_lock:
sets = saveddata_session.query(ImplantSet).options(*eager).all()
return sets
@cachedQuery(DamagePattern, 1, "lookfor")
def getDamagePattern(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -358,15 +389,18 @@ def getDamagePattern(lookfor, eager=None):
else:
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(DamagePattern).options(*eager).filter(DamagePattern.ID == lookfor).first()
elif isinstance(lookfor, basestring):
pattern = saveddata_session.query(DamagePattern).options(*eager).filter(
DamagePattern.ID == lookfor).first()
elif isinstance(lookfor, str):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(DamagePattern).options(*eager).filter(DamagePattern.name == lookfor).first()
pattern = saveddata_session.query(DamagePattern).options(*eager).filter(
DamagePattern.name == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return pattern
@cachedQuery(TargetResists, 1, "lookfor")
def getTargetResists(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -376,22 +410,45 @@ def getTargetResists(lookfor, eager=None):
else:
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(TargetResists.ID == lookfor).first()
elif isinstance(lookfor, basestring):
pattern = saveddata_session.query(TargetResists).options(*eager).filter(
TargetResists.ID == lookfor).first()
elif isinstance(lookfor, str):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(TargetResists.name == lookfor).first()
pattern = saveddata_session.query(TargetResists).options(*eager).filter(
TargetResists.name == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return pattern
@cachedQuery(ImplantSet, 1, "lookfor")
def getImplantSet(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
with sd_lock:
pattern = saveddata_session.query(ImplantSet).get(lookfor)
else:
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(ImplantSet).options(*eager).filter(
TargetResists.ID == lookfor).first()
elif isinstance(lookfor, str):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(ImplantSet).options(*eager).filter(TargetResists.name == lookfor).first()
else:
raise TypeError("Improper argument")
return pattern
def searchFits(nameLike, where=None, eager=None):
if not isinstance(nameLike, basestring):
if not isinstance(nameLike, str):
raise TypeError("Need string as argument")
# Prepare our string for request
nameLike = u"%{0}%".format(sqlizeString(nameLike))
nameLike = "%{0}%".format(sqlizeString(nameLike))
#Add any extra components to the search to our where clause
# Add any extra components to the search to our where clause
filter = processWhere(Fit.name.like(nameLike, escape="\\"), where)
eager = processEager(eager)
with sd_lock:
@@ -399,14 +456,6 @@ def searchFits(nameLike, where=None, eager=None):
return fits
def getSquadsIDsWithFitID(fitID):
if isinstance(fitID, int):
with sd_lock:
squads = saveddata_session.query(squadmembers_table.c.squadID).filter(squadmembers_table.c.memberID == fitID).all()
squads = tuple(entry[0] for entry in squads)
return squads
else:
raise TypeError("Need integer as argument")
def getProjectedFits(fitID):
if isinstance(fitID, int):
@@ -417,63 +466,71 @@ def getProjectedFits(fitID):
else:
raise TypeError("Need integer as argument")
def getCrestCharacters(eager=None):
def getSsoCharacters(clientHash, eager=None):
eager = processEager(eager)
with sd_lock:
characters = saveddata_session.query(CrestChar).options(*eager).all()
characters = saveddata_session.query(SsoCharacter).filter(SsoCharacter.client == clientHash).options(*eager).all()
return characters
@cachedQuery(CrestChar, 1, "lookfor")
def getCrestCharacter(lookfor, eager=None):
@cachedQuery(SsoCharacter, 1, "lookfor", "clientHash")
def getSsoCharacter(lookfor, clientHash, eager=None):
filter = SsoCharacter.client == clientHash
if isinstance(lookfor, int):
if eager is None:
with sd_lock:
character = saveddata_session.query(CrestChar).get(lookfor)
else:
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(CrestChar).options(*eager).filter(CrestChar.ID == lookfor).first()
elif isinstance(lookfor, basestring):
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(CrestChar).options(*eager).filter(CrestChar.name == lookfor).first()
filter = and_(filter, SsoCharacter.ID == lookfor)
elif isinstance(lookfor, str):
filter = and_(filter, SsoCharacter.characterName == lookfor)
else:
raise TypeError("Need integer or string as argument")
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(SsoCharacter).options(*eager).filter(filter).first()
return character
def getOverrides(itemID, eager=None):
if isinstance(itemID, int):
return saveddata_session.query(Override).filter(Override.itemID == itemID).all()
else:
raise TypeError("Need integer as argument")
def clearOverrides():
with sd_lock:
deleted_rows = saveddata_session.query(Override).delete()
commit()
return deleted_rows
def getAllOverrides(eager=None):
return saveddata_session.query(Override).all()
def removeInvalid(fits):
invalids = [f for f in fits if f.isInvalid]
if invalids:
map(fits.remove, invalids)
map(saveddata_session.delete, invalids)
list(map(fits.remove, invalids))
list(map(saveddata_session.delete, invalids))
saveddata_session.commit()
return fits
def add(stuff):
with sd_lock:
saveddata_session.add(stuff)
def save(stuff):
add(stuff)
commit()
def remove(stuff):
removeCachedEntry(type(stuff), stuff.ID)
with sd_lock:
@@ -483,5 +540,10 @@ def remove(stuff):
def commit():
with sd_lock:
saveddata_session.commit()
saveddata_session.flush()
try:
saveddata_session.commit()
saveddata_session.flush()
except Exception as ex:
saveddata_session.rollback()
exc_info = sys.exc_info()
raise exc_info[0](exc_info[1]).with_traceback(exc_info[2])

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,17 +15,22 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey
from sqlalchemy import Table, Column, Integer, ForeignKey, DateTime
from sqlalchemy.orm import mapper
import datetime
from eos.db import saveddata_meta
from eos.types import Skill
from eos.saveddata.character import Skill
skills_table = Table("characterSkills", saveddata_meta,
Column("characterID", ForeignKey("characters.ID"), primary_key = True, index = True),
Column("itemID", Integer, primary_key = True),
Column("_Skill__level", Integer, nullable = True))
Column("characterID", ForeignKey("characters.ID"), primary_key=True, index=True),
Column("itemID", Integer, primary_key=True),
Column("_Skill__level", Integer, nullable=True),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(Skill, skills_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2014 Ryan Holmes
#
# This file is part of eos.
@@ -15,21 +15,25 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, Float, ForeignKey, String
from sqlalchemy import Table, Column, Integer, Float, ForeignKey, String, DateTime
from sqlalchemy.orm import mapper
import datetime
from eos.db import saveddata_meta
from eos.types import TargetResists
from eos.saveddata.targetResists import TargetResists
targetResists_table = Table("targetResists", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("name", String),
Column("emAmount", Float),
Column("thermalAmount", Float),
Column("kineticAmount", Float),
Column("explosiveAmount", Float),
Column("ownerID", ForeignKey("users.ID"), nullable=True))
Column("ID", Integer, primary_key=True),
Column("name", String),
Column("emAmount", Float),
Column("thermalAmount", Float),
Column("kineticAmount", Float),
Column("explosiveAmount", Float),
Column("ownerID", ForeignKey("users.ID"), nullable=True),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(TargetResists, targetResists_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,18 +15,18 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy import Table, Column, Integer, String, Boolean
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import User
from eos.saveddata.user import User
users_table = Table("users", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("username", String, nullable = False, unique = True),
Column("password", String, nullable = False),
Column("admin", Boolean, nullable = False))
Column("ID", Integer, primary_key=True),
Column("username", String, nullable=False, unique=True),
Column("password", String, nullable=False),
Column("admin", Boolean, nullable=False))
mapper(User, users_table)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,28 +15,31 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
from sqlalchemy.orm import eagerload
from sqlalchemy.sql import and_
replace = {"attributes": "_Item__attributes",
"modules": "_Fit__modules",
"projectedModules": "_Fit__projectedModules",
"boosters": "_Fit__boosters",
"drones": "_Fit__drones",
"projectedDrones": "_Fit__projectedDrones",
"implants": "_Fit__implants",
"character": "_Fit__character",
"damagePattern": "_Fit__damagePattern",
"projectedFits": "_Fit__projectedFits"}
replace = {
"attributes" : "_Item__attributes",
"modules" : "_Fit__modules",
"projectedModules": "_Fit__projectedModules",
"boosters" : "_Fit__boosters",
"drones" : "_Fit__drones",
"projectedDrones" : "_Fit__projectedDrones",
"implants" : "_Fit__implants",
"character" : "_Fit__character",
"damagePattern" : "_Fit__damagePattern",
"projectedFits" : "_Fit__projectedFits"
}
def processEager(eager):
if eager == None:
if eager is None:
return tuple()
else:
l = []
if isinstance(eager, basestring):
if isinstance(eager, str):
eager = (eager,)
for e in eager:
@@ -44,9 +47,10 @@ def processEager(eager):
return l
def _replacements(eagerString):
splitEager = eagerString.split(".")
for i in xrange(len(splitEager)):
for i in range(len(splitEager)):
part = splitEager[i]
replacement = replace.get(part)
if replacement:
@@ -54,6 +58,7 @@ def _replacements(eagerString):
return ".".join(splitEager)
def processWhere(clause, where):
if where is not None:
if not hasattr(where, "__iter__"):

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
@@ -15,14 +15,12 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================
#from sqlalchemy.orm.attributes import flag_modified
import eos.db
import eos.types
import logging
from logbook import Logger
pyfalog = Logger(__name__)
logger = logging.getLogger(__name__)
class HandledList(list):
def filteredItemPreAssign(self, filter, *args, **kwargs):
@@ -108,15 +106,16 @@ class HandledList(list):
def remove(self, thing):
# We must flag it as modified, otherwise it not be removed from the database
# @todo: flag_modified isn't in os x skel. need to rebuild to include
#flag_modified(thing, "itemID")
# flag_modified(thing, "itemID")
if thing.isInvalid: # see GH issue #324
thing.itemID = 0
list.remove(self, thing)
class HandledModuleList(HandledList):
def append(self, mod):
emptyPosition = float("Inf")
for i in xrange(len(self)):
for i in range(len(self)):
currMod = self[i]
if currMod.isEmpty and not mod.isEmpty and currMod.slot == mod.slot:
currPos = mod.position or i
@@ -135,6 +134,7 @@ class HandledModuleList(HandledList):
HandledList.append(self, mod)
if mod.isInvalid:
self.remove(mod)
return
def insert(self, index, mod):
mod.position = index
@@ -149,13 +149,13 @@ class HandledModuleList(HandledList):
oldPos = mod.position
mod.position = None
for i in xrange(oldPos, len(self)):
for i in range(oldPos, len(self)):
self[i].position -= 1
def toDummy(self, index):
mod = self[index]
if not mod.isEmpty:
dummy = eos.types.Module.buildEmpty(mod.slot)
dummy = mod.buildEmpty(mod.slot)
dummy.position = index
self[index] = dummy
@@ -164,10 +164,12 @@ class HandledModuleList(HandledList):
self[index] = mod
def freeSlot(self, slot):
for i in range(len(self) -1, -1, -1):
for i in range(len(self)):
mod = self[i]
if mod.getModifiedItemAttr("subSystemSlot") == slot:
del self[i]
self.toDummy(i)
break
class HandledDroneCargoList(HandledList):
def find(self, item):
@@ -185,6 +187,7 @@ class HandledDroneCargoList(HandledList):
if thing.isInvalid:
self.remove(thing)
class HandledImplantBoosterList(HandledList):
def append(self, thing):
if thing.isInvalid:
@@ -195,12 +198,23 @@ class HandledImplantBoosterList(HandledList):
# if needed, remove booster that was occupying slot
oldObj = next((m for m in self if m.slot == thing.slot), None)
if oldObj:
logging.info("Slot %d occupied with %s, replacing with %s", thing.slot, oldObj.item.name, thing.item.name)
pyfalog.info("Slot {0} occupied with {1}, replacing with {2}", thing.slot, oldObj.item.name, thing.item.name)
oldObj.itemID = 0 # hack to remove from DB. See GH issue #324
self.remove(oldObj)
HandledList.append(self, thing)
class HandledSsoCharacterList(list):
def append(self, character):
old = next((x for x in self if x.client == character.client), None)
if old is not None:
pyfalog.warning("Removing SSO Character with same hash: {}".format(repr(old)))
list.remove(self, old)
list.append(self, character)
class HandledProjectedModList(HandledList):
def append(self, proj):
if proj.isInvalid:
@@ -218,7 +232,7 @@ class HandledProjectedModList(HandledList):
oldEffect = next((m for m in self if m.item.group.name == "Effect Beacon"), None)
if oldEffect:
logging.info("System effect occupied with %s, replacing with %s", oldEffect.item.name, proj.item.name)
pyfalog.info("System effect occupied with {0}, replacing with {1}", oldEffect.item.name, proj.item.name)
self.remove(oldEffect)
HandledList.append(self, proj)
@@ -227,6 +241,7 @@ class HandledProjectedModList(HandledList):
if not proj.item.isType("projected") and not isSystemEffect:
self.remove(proj)
class HandledProjectedDroneList(HandledDroneCargoList):
def append(self, proj):
proj.projected = True
@@ -236,6 +251,7 @@ class HandledProjectedDroneList(HandledDroneCargoList):
if proj.isInvalid or not proj.item.isType("projected"):
self.remove(proj)
class HandledItem(object):
def preAssignItemAttr(self, *args, **kwargs):
self.itemModifiedAttributes.preAssign(*args, **kwargs)
@@ -252,6 +268,7 @@ class HandledItem(object):
def forceItemAttr(self, *args, **kwargs):
self.itemModifiedAttributes.force(*args, **kwargs)
class HandledCharge(object):
def preAssignChargeAttr(self, *args, **kwargs):
self.chargeModifiedAttributes.preAssign(*args, **kwargs)

View File

@@ -1,4 +1,4 @@
#===============================================================================
# ===============================================================================
# Copyright (C) 2010 Diego Duclos
# 2010 Anton Vorobyov
#
@@ -16,4 +16,4 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
# ===============================================================================

View File

@@ -3,6 +3,8 @@
# Used by:
# Modules named like: Dynamic Fuel Valve (8 of 8)
type = "passive"
def handler(fit, container, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
"capacitorNeed", container.getModifiedItemAttr("capNeedBonus"))

View File

@@ -4,6 +4,8 @@
# Implant: Zor's Custom Navigation Hyper-Link
# Skill: Acceleration Control
type = "passive"
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",

View File

@@ -3,6 +3,8 @@
# Used by:
# Implants named like: Eifyr and Co. 'Rogue' Acceleration Control AC (6 of 6)
type = "passive"
def handler(fit, implant, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module",
"speedFactor", implant.getModifiedItemAttr("speedFBonus"))

Some files were not shown because too many files have changed in this diff Show More