tradedangerous 10.17.0__py3-none-any.whl → 11.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of tradedangerous might be problematic. Click here for more details.

Files changed (74) hide show
  1. tradedangerous/__init__.py +4 -4
  2. tradedangerous/cache.py +183 -148
  3. tradedangerous/cli.py +2 -7
  4. tradedangerous/commands/TEMPLATE.py +1 -2
  5. tradedangerous/commands/__init__.py +2 -4
  6. tradedangerous/commands/buildcache_cmd.py +6 -11
  7. tradedangerous/commands/buy_cmd.py +11 -12
  8. tradedangerous/commands/commandenv.py +16 -15
  9. tradedangerous/commands/exceptions.py +6 -4
  10. tradedangerous/commands/export_cmd.py +2 -4
  11. tradedangerous/commands/import_cmd.py +3 -5
  12. tradedangerous/commands/local_cmd.py +16 -25
  13. tradedangerous/commands/market_cmd.py +9 -8
  14. tradedangerous/commands/nav_cmd.py +17 -25
  15. tradedangerous/commands/olddata_cmd.py +9 -15
  16. tradedangerous/commands/parsing.py +9 -6
  17. tradedangerous/commands/rares_cmd.py +9 -10
  18. tradedangerous/commands/run_cmd.py +25 -26
  19. tradedangerous/commands/sell_cmd.py +9 -9
  20. tradedangerous/commands/shipvendor_cmd.py +4 -7
  21. tradedangerous/commands/station_cmd.py +8 -14
  22. tradedangerous/commands/trade_cmd.py +5 -10
  23. tradedangerous/commands/update_cmd.py +10 -7
  24. tradedangerous/commands/update_gui.py +1 -3
  25. tradedangerous/corrections.py +1 -3
  26. tradedangerous/csvexport.py +8 -8
  27. tradedangerous/edscupdate.py +4 -6
  28. tradedangerous/edsmupdate.py +4 -4
  29. tradedangerous/formatting.py +53 -40
  30. tradedangerous/fs.py +6 -6
  31. tradedangerous/gui.py +53 -62
  32. tradedangerous/jsonprices.py +8 -16
  33. tradedangerous/mapping.py +4 -3
  34. tradedangerous/mfd/__init__.py +2 -4
  35. tradedangerous/mfd/saitek/__init__.py +0 -1
  36. tradedangerous/mfd/saitek/directoutput.py +8 -11
  37. tradedangerous/mfd/saitek/x52pro.py +5 -7
  38. tradedangerous/misc/checkpricebounds.py +2 -3
  39. tradedangerous/misc/clipboard.py +2 -3
  40. tradedangerous/misc/coord64.py +2 -1
  41. tradedangerous/misc/derp-sentinel.py +1 -1
  42. tradedangerous/misc/diff-system-csvs.py +3 -0
  43. tradedangerous/misc/eddb.py +1 -3
  44. tradedangerous/misc/eddn.py +2 -2
  45. tradedangerous/misc/edsc.py +7 -14
  46. tradedangerous/misc/edsm.py +1 -8
  47. tradedangerous/misc/importeddbstats.py +2 -1
  48. tradedangerous/misc/prices-json-exp.py +7 -5
  49. tradedangerous/misc/progress.py +2 -2
  50. tradedangerous/plugins/__init__.py +2 -2
  51. tradedangerous/plugins/edapi_plug.py +13 -19
  52. tradedangerous/plugins/edcd_plug.py +4 -5
  53. tradedangerous/plugins/eddblink_plug.py +11 -15
  54. tradedangerous/plugins/edmc_batch_plug.py +3 -5
  55. tradedangerous/plugins/journal_plug.py +2 -1
  56. tradedangerous/plugins/netlog_plug.py +5 -5
  57. tradedangerous/plugins/spansh_plug.py +394 -170
  58. tradedangerous/prices.py +19 -20
  59. tradedangerous/submit-distances.py +3 -8
  60. tradedangerous/templates/TradeDangerous.sql +305 -306
  61. tradedangerous/trade.py +12 -5
  62. tradedangerous/tradecalc.py +30 -34
  63. tradedangerous/tradedb.py +140 -206
  64. tradedangerous/tradeenv.py +143 -69
  65. tradedangerous/tradegui.py +4 -2
  66. tradedangerous/transfers.py +23 -20
  67. tradedangerous/version.py +1 -1
  68. {tradedangerous-10.17.0.dist-info → tradedangerous-11.0.0.dist-info}/METADATA +2 -2
  69. tradedangerous-11.0.0.dist-info/RECORD +79 -0
  70. tradedangerous-10.17.0.dist-info/RECORD +0 -79
  71. {tradedangerous-10.17.0.dist-info → tradedangerous-11.0.0.dist-info}/LICENSE +0 -0
  72. {tradedangerous-10.17.0.dist-info → tradedangerous-11.0.0.dist-info}/WHEEL +0 -0
  73. {tradedangerous-10.17.0.dist-info → tradedangerous-11.0.0.dist-info}/entry_points.txt +0 -0
  74. {tradedangerous-10.17.0.dist-info → tradedangerous-11.0.0.dist-info}/top_level.txt +0 -0
@@ -1,306 +1,305 @@
1
- -- Definitions for all of the tables used in the SQLite
2
- -- cache database.
3
- --
4
- -- Source data for TradeDangerous is stored in various
5
- -- ".csv" files which provide relatively constant data
6
- -- such as star names, the list of known tradeable items,
7
- -- etc.
8
- --
9
- -- Per-station price data is sourced from ".prices" files
10
- -- which are designed to be human readable text that
11
- -- closely aproximates the in-game UI.
12
- --
13
- -- When the .SQL file or the .CSV files change, TD will
14
- -- destroy and rebuild the cache next time it is run.
15
- --
16
- -- When the .prices file is changed, only the price data
17
- -- is reset.
18
- --
19
- -- You can edit this file, if you really need to, if you know
20
- -- what you are doing. Or you can use the 'sqlite3' command
21
- -- to edit the .db database and then use the '.dump' command
22
- -- to regenerate this file, except then you'll lose this nice
23
- -- header and I might have to wag my finger at you.
24
- --
25
- -- -Oliver
26
-
27
- PRAGMA foreign_keys=ON;
28
- PRAGMA synchronous=OFF;
29
- PRAGMA temp_store=MEMORY;
30
- PRAGMA journal_mode=WAL;
31
- PRAGMA auto_vacuum=INCREMENTAL;
32
-
33
- BEGIN TRANSACTION;
34
-
35
-
36
- CREATE TABLE Added
37
- (
38
- added_id INTEGER PRIMARY KEY AUTOINCREMENT,
39
- name VARCHAR(40) COLLATE nocase,
40
-
41
- UNIQUE(name)
42
- );
43
-
44
-
45
- CREATE TABLE System
46
- (
47
- system_id INTEGER PRIMARY KEY,
48
- name VARCHAR(40) COLLATE nocase,
49
- pos_x DOUBLE NOT NULL,
50
- pos_y DOUBLE NOT NULL,
51
- pos_z DOUBLE NOT NULL,
52
- added_id INTEGER,
53
- modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
54
-
55
- UNIQUE (system_id),
56
-
57
- FOREIGN KEY (added_id) REFERENCES Added(added_id)
58
- ON UPDATE CASCADE
59
- ON DELETE CASCADE
60
- );
61
- CREATE INDEX idx_system_by_pos ON System (pos_x, pos_y, pos_z, system_id);
62
-
63
-
64
- CREATE TABLE Station
65
- (
66
- station_id INTEGER PRIMARY KEY,
67
- name VARCHAR(40) COLLATE nocase,
68
- system_id INTEGER NOT NULL,
69
- ls_from_star INTEGER NOT NULL DEFAULT 0
70
- CHECK (ls_from_star >= 0),
71
- blackmarket TEXT(1) NOT NULL DEFAULT '?'
72
- CHECK (blackmarket IN ('?', 'Y', 'N')),
73
- max_pad_size TEXT(1) NOT NULL DEFAULT '?'
74
- CHECK (max_pad_size IN ('?', 'S', 'M', 'L')),
75
- market TEXT(1) NOT NULL DEFAULT '?'
76
- CHECK (market IN ('?', 'Y', 'N')),
77
- shipyard TEXT(1) NOT NULL DEFAULT '?'
78
- CHECK (shipyard IN ('?', 'Y', 'N')),
79
- modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
80
- outfitting TEXT(1) NOT NULL DEFAULT '?'
81
- CHECK (outfitting IN ('?', 'Y', 'N')),
82
- rearm TEXT(1) NOT NULL DEFAULT '?'
83
- CHECK (rearm IN ('?', 'Y', 'N')),
84
- refuel TEXT(1) NOT NULL DEFAULT '?'
85
- CHECK (refuel IN ('?', 'Y', 'N')),
86
- repair TEXT(1) NOT NULL DEFAULT '?'
87
- CHECK (repair IN ('?', 'Y', 'N')),
88
- planetary TEXT(1) NOT NULL DEFAULT '?'
89
- CHECK (planetary IN ('?', 'Y', 'N')),
90
- type_id INTEGER DEFAULT 0 NOT NULL,
91
-
92
- UNIQUE (station_id),
93
-
94
- FOREIGN KEY (system_id) REFERENCES System(system_id)
95
- ON UPDATE CASCADE
96
- ON DELETE CASCADE
97
- );
98
- CREATE INDEX idx_station_by_system ON Station (system_id, station_id);
99
- CREATE INDEX idx_station_by_name ON Station (name);
100
-
101
-
102
- CREATE TABLE Ship
103
- (
104
- ship_id INTEGER PRIMARY KEY,
105
- name VARCHAR(40) COLLATE nocase,
106
- cost INTEGER NOT NULL,
107
-
108
- UNIQUE (ship_id)
109
- );
110
-
111
-
112
- CREATE TABLE ShipVendor
113
- (
114
- ship_id INTEGER NOT NULL,
115
- station_id INTEGER NOT NULL,
116
- modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
117
-
118
- PRIMARY KEY (ship_id, station_id),
119
-
120
- FOREIGN KEY (ship_id) REFERENCES Ship(ship_id)
121
- ON UPDATE CASCADE
122
- ON DELETE CASCADE,
123
- FOREIGN KEY (station_id) REFERENCES Station(station_id)
124
- ON UPDATE CASCADE
125
- ON DELETE CASCADE
126
- ) WITHOUT ROWID
127
- ;
128
-
129
-
130
- CREATE TABLE Upgrade
131
- (
132
- upgrade_id INTEGER PRIMARY KEY,
133
- name VARCHAR(40) COLLATE nocase,
134
- weight NUMBER NOT NULL,
135
- cost NUMBER NOT NULL,
136
-
137
- UNIQUE (upgrade_id)
138
- );
139
-
140
-
141
- CREATE TABLE UpgradeVendor
142
- (
143
- upgrade_id INTEGER NOT NULL,
144
- station_id INTEGER NOT NULL,
145
- cost INTEGER,
146
- modified DATETIME NOT NULL,
147
-
148
- PRIMARY KEY (upgrade_id, station_id),
149
-
150
- FOREIGN KEY (upgrade_id) REFERENCES Upgrade(upgrade_id)
151
- ON UPDATE CASCADE
152
- ON DELETE CASCADE,
153
- FOREIGN KEY (station_id) REFERENCES Station(station_id)
154
- ON UPDATE CASCADE
155
- ON DELETE CASCADE
156
- ) WITHOUT ROWID
157
- ;
158
- CREATE INDEX idx_vendor_by_station_id ON UpgradeVendor (station_id);
159
-
160
- CREATE TABLE RareItem
161
- (
162
- rare_id INTEGER PRIMARY KEY,
163
- station_id INTEGER NOT NULL,
164
- category_id INTEGER NOT NULL,
165
- name VARCHAR(40) COLLATE nocase,
166
- cost INTEGER,
167
- max_allocation INTEGER,
168
- illegal TEXT(1) NOT NULL DEFAULT '?'
169
- CHECK (illegal IN ('?', 'Y', 'N')),
170
- suppressed TEXT(1) NOT NULL DEFAULT '?'
171
- CHECK (suppressed IN ('?', 'Y', 'N')),
172
-
173
- UNIQUE (name),
174
-
175
- FOREIGN KEY (station_id) REFERENCES Station(station_id)
176
- ON UPDATE CASCADE
177
- ON DELETE CASCADE,
178
- FOREIGN KEY (category_id) REFERENCES Category(category_id)
179
- ON UPDATE CASCADE
180
- ON DELETE CASCADE
181
- )
182
- ;
183
-
184
- CREATE TABLE Category
185
- (
186
- category_id INTEGER PRIMARY KEY,
187
- name VARCHAR(40) COLLATE nocase,
188
-
189
- UNIQUE (category_id)
190
- );
191
-
192
-
193
- CREATE TABLE Item
194
- (
195
- item_id INTEGER PRIMARY KEY,
196
- name VARCHAR(40) COLLATE nocase,
197
- category_id INTEGER NOT NULL,
198
- ui_order INTEGER NOT NULL DEFAULT 0,
199
- avg_price INTEGER,
200
- fdev_id INTEGER,
201
-
202
- UNIQUE (item_id),
203
- UNIQUE (fdev_id),
204
-
205
- FOREIGN KEY (category_id) REFERENCES Category(category_id)
206
- ON UPDATE CASCADE
207
- ON DELETE CASCADE
208
- );
209
- CREATE INDEX idx_item_by_fdev_id ON Item (fdev_id);
210
-
211
-
212
- CREATE TABLE StationItem
213
- (
214
- station_id INTEGER NOT NULL,
215
- item_id INTEGER NOT NULL,
216
- demand_price INT NOT NULL,
217
- demand_units INT NOT NULL,
218
- demand_level INT NOT NULL,
219
- supply_price INT NOT NULL,
220
- supply_units INT NOT NULL,
221
- supply_level INT NOT NULL,
222
- modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
223
- from_live INTEGER DEFAULT 0 NOT NULL,
224
-
225
- PRIMARY KEY (station_id, item_id),
226
- FOREIGN KEY (station_id) REFERENCES Station(station_id)
227
- ON UPDATE CASCADE ON DELETE CASCADE,
228
- FOREIGN KEY (item_id) REFERENCES Item(item_id)
229
- ON UPDATE CASCADE ON DELETE CASCADE
230
- );
231
- CREATE INDEX si_mod_stn_itm ON StationItem(modified, station_id, item_id);
232
- CREATE INDEX si_itm_dmdpr ON StationItem(item_id, demand_price) WHERE demand_price > 0;
233
- CREATE INDEX si_itm_suppr ON StationItem(item_id, supply_price) WHERE supply_price > 0;
234
-
235
- CREATE VIEW StationBuying AS
236
- SELECT station_id,
237
- item_id,
238
- demand_price AS price,
239
- demand_units AS units,
240
- demand_level AS level,
241
- modified
242
- FROM StationItem
243
- WHERE demand_price > 0
244
- ;
245
-
246
- CREATE VIEW StationSelling AS
247
- SELECT station_id,
248
- item_id,
249
- supply_price AS price,
250
- supply_units AS units,
251
- supply_level AS level,
252
- modified
253
- FROM StationItem
254
- WHERE supply_price > 0
255
- ;
256
-
257
-
258
- --
259
- -- The next two tables (FDevShipyard, FDevOutfitting) are
260
- -- used to map the FDev API IDs to data ready for EDDN.
261
- --
262
- -- The column names are the same as the header line from
263
- -- the EDCD/FDevIDs csv files, so we can just download the
264
- -- files (shipyard.csv, outfitting.csv) and save them
265
- -- as (FDevShipyard.csv, FDevOutfitting.csv) into the
266
- -- data directory.
267
- --
268
- -- see https://github.com/EDCD/FDevIDs
269
- --
270
- -- The commodity.csv is not needed because TD and EDDN
271
- -- are using the same names.
272
- --
273
- -- -Bernd
274
-
275
- CREATE TABLE FDevShipyard
276
- (
277
- id INTEGER NOT NULL,
278
- symbol VARCHAR(40),
279
- name VARCHAR(40) COLLATE nocase,
280
- entitlement VARCHAR(50),
281
-
282
- UNIQUE (id)
283
- );
284
-
285
-
286
- CREATE TABLE FDevOutfitting
287
- (
288
- id INTEGER NOT NULL,
289
- symbol VARCHAR(40),
290
- category CHAR(10)
291
- CHECK (category IN ('hardpoint','internal','standard','utility')),
292
- name VARCHAR(40) COLLATE nocase,
293
- mount CHAR(10)
294
- CHECK (mount IN (NULL, 'Fixed','Gimballed','Turreted')),
295
- guidance CHAR(10)
296
- CHECK (guidance IN (NULL, 'Dumbfire','Seeker','Swarm')),
297
- ship VARCHAR(40) COLLATE nocase,
298
- class CHAR(1) NOT NULL,
299
- rating CHAR(1) NOT NULL,
300
- entitlement VARCHAR(50),
301
-
302
- UNIQUE (id)
303
- );
304
-
305
-
306
- COMMIT;
1
+ -- Definitions for all of the tables used in the SQLite
2
+ -- cache database.
3
+ --
4
+ -- Source data for TradeDangerous is stored in various
5
+ -- ".csv" files which provide relatively constant data
6
+ -- such as star names, the list of known tradeable items,
7
+ -- etc.
8
+ --
9
+ -- Per-station price data is sourced from ".prices" files
10
+ -- which are designed to be human readable text that
11
+ -- closely aproximates the in-game UI.
12
+ --
13
+ -- When the .SQL file or the .CSV files change, TD will
14
+ -- destroy and rebuild the cache next time it is run.
15
+ --
16
+ -- When the .prices file is changed, only the price data
17
+ -- is reset.
18
+ --
19
+ -- You can edit this file, if you really need to, if you know
20
+ -- what you are doing. Or you can use the 'sqlite3' command
21
+ -- to edit the .db database and then use the '.dump' command
22
+ -- to regenerate this file, except then you'll lose this nice
23
+ -- header and I might have to wag my finger at you.
24
+ --
25
+ -- -Oliver
26
+
27
+ PRAGMA foreign_keys=ON;
28
+ PRAGMA synchronous=OFF;
29
+ PRAGMA temp_store=MEMORY;
30
+ PRAGMA journal_mode=WAL;
31
+ PRAGMA auto_vacuum=INCREMENTAL;
32
+
33
+ BEGIN TRANSACTION;
34
+
35
+
36
+ CREATE TABLE Added
37
+ (
38
+ added_id INTEGER PRIMARY KEY AUTOINCREMENT,
39
+ name VARCHAR(40) COLLATE nocase,
40
+
41
+ UNIQUE(name)
42
+ );
43
+
44
+
45
+ CREATE TABLE System
46
+ (
47
+ system_id INTEGER PRIMARY KEY,
48
+ name VARCHAR(40) COLLATE nocase,
49
+ pos_x DOUBLE NOT NULL,
50
+ pos_y DOUBLE NOT NULL,
51
+ pos_z DOUBLE NOT NULL,
52
+ added_id INTEGER,
53
+ modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
54
+
55
+ UNIQUE (system_id),
56
+
57
+ FOREIGN KEY (added_id) REFERENCES Added(added_id)
58
+ ON UPDATE CASCADE
59
+ ON DELETE CASCADE
60
+ );
61
+ CREATE INDEX idx_system_by_pos ON System (pos_x, pos_y, pos_z, system_id);
62
+
63
+
64
+ CREATE TABLE Station
65
+ (
66
+ station_id INTEGER PRIMARY KEY,
67
+ name VARCHAR(40) COLLATE nocase,
68
+ system_id INTEGER NOT NULL,
69
+ ls_from_star INTEGER NOT NULL DEFAULT 0
70
+ CHECK (ls_from_star >= 0),
71
+ blackmarket TEXT(1) NOT NULL DEFAULT '?'
72
+ CHECK (blackmarket IN ('?', 'Y', 'N')),
73
+ max_pad_size TEXT(1) NOT NULL DEFAULT '?'
74
+ CHECK (max_pad_size IN ('?', 'S', 'M', 'L')),
75
+ market TEXT(1) NOT NULL DEFAULT '?'
76
+ CHECK (market IN ('?', 'Y', 'N')),
77
+ shipyard TEXT(1) NOT NULL DEFAULT '?'
78
+ CHECK (shipyard IN ('?', 'Y', 'N')),
79
+ modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
80
+ outfitting TEXT(1) NOT NULL DEFAULT '?'
81
+ CHECK (outfitting IN ('?', 'Y', 'N')),
82
+ rearm TEXT(1) NOT NULL DEFAULT '?'
83
+ CHECK (rearm IN ('?', 'Y', 'N')),
84
+ refuel TEXT(1) NOT NULL DEFAULT '?'
85
+ CHECK (refuel IN ('?', 'Y', 'N')),
86
+ repair TEXT(1) NOT NULL DEFAULT '?'
87
+ CHECK (repair IN ('?', 'Y', 'N')),
88
+ planetary TEXT(1) NOT NULL DEFAULT '?'
89
+ CHECK (planetary IN ('?', 'Y', 'N')),
90
+ type_id INTEGER DEFAULT 0 NOT NULL,
91
+
92
+ UNIQUE (station_id),
93
+
94
+ FOREIGN KEY (system_id) REFERENCES System(system_id)
95
+ ON UPDATE CASCADE
96
+ ON DELETE CASCADE
97
+ );
98
+ CREATE INDEX idx_station_by_system ON Station (system_id, station_id);
99
+ CREATE INDEX idx_station_by_name ON Station (name);
100
+
101
+
102
+ CREATE TABLE Ship
103
+ (
104
+ ship_id INTEGER PRIMARY KEY,
105
+ name VARCHAR(40) COLLATE nocase,
106
+ cost INTEGER NOT NULL,
107
+
108
+ UNIQUE (ship_id)
109
+ );
110
+
111
+
112
+ CREATE TABLE ShipVendor
113
+ (
114
+ ship_id INTEGER NOT NULL,
115
+ station_id INTEGER NOT NULL,
116
+ modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
117
+
118
+ PRIMARY KEY (ship_id, station_id),
119
+
120
+ FOREIGN KEY (ship_id) REFERENCES Ship(ship_id)
121
+ ON UPDATE CASCADE
122
+ ON DELETE CASCADE,
123
+ FOREIGN KEY (station_id) REFERENCES Station(station_id)
124
+ ON UPDATE CASCADE
125
+ ON DELETE CASCADE
126
+ ) WITHOUT ROWID
127
+ ;
128
+
129
+
130
+ CREATE TABLE Upgrade
131
+ (
132
+ upgrade_id INTEGER PRIMARY KEY,
133
+ name VARCHAR(40) COLLATE nocase,
134
+ weight NUMBER NOT NULL,
135
+ cost NUMBER NOT NULL,
136
+
137
+ UNIQUE (upgrade_id)
138
+ );
139
+
140
+
141
+ CREATE TABLE UpgradeVendor
142
+ (
143
+ upgrade_id INTEGER NOT NULL,
144
+ station_id INTEGER NOT NULL,
145
+ cost INTEGER,
146
+ modified DATETIME NOT NULL,
147
+
148
+ PRIMARY KEY (upgrade_id, station_id),
149
+
150
+ FOREIGN KEY (upgrade_id) REFERENCES Upgrade(upgrade_id)
151
+ ON UPDATE CASCADE
152
+ ON DELETE CASCADE,
153
+ FOREIGN KEY (station_id) REFERENCES Station(station_id)
154
+ ON UPDATE CASCADE
155
+ ON DELETE CASCADE
156
+ ) WITHOUT ROWID
157
+ ;
158
+ CREATE INDEX idx_vendor_by_station_id ON UpgradeVendor (station_id);
159
+
160
+ CREATE TABLE RareItem
161
+ (
162
+ rare_id INTEGER PRIMARY KEY,
163
+ station_id INTEGER NOT NULL,
164
+ category_id INTEGER NOT NULL,
165
+ name VARCHAR(40) COLLATE nocase,
166
+ cost INTEGER,
167
+ max_allocation INTEGER,
168
+ illegal TEXT(1) NOT NULL DEFAULT '?'
169
+ CHECK (illegal IN ('?', 'Y', 'N')),
170
+ suppressed TEXT(1) NOT NULL DEFAULT '?'
171
+ CHECK (suppressed IN ('?', 'Y', 'N')),
172
+
173
+ UNIQUE (name),
174
+
175
+ FOREIGN KEY (station_id) REFERENCES Station(station_id)
176
+ ON UPDATE CASCADE
177
+ ON DELETE CASCADE,
178
+ FOREIGN KEY (category_id) REFERENCES Category(category_id)
179
+ ON UPDATE CASCADE
180
+ ON DELETE CASCADE
181
+ )
182
+ ;
183
+
184
+ CREATE TABLE Category
185
+ (
186
+ category_id INTEGER PRIMARY KEY,
187
+ name VARCHAR(40) COLLATE nocase,
188
+
189
+ UNIQUE (category_id)
190
+ );
191
+
192
+
193
+ CREATE TABLE Item
194
+ (
195
+ item_id INTEGER PRIMARY KEY,
196
+ name VARCHAR(40) COLLATE nocase,
197
+ category_id INTEGER NOT NULL,
198
+ ui_order INTEGER NOT NULL DEFAULT 0,
199
+ avg_price INTEGER,
200
+ fdev_id INTEGER,
201
+
202
+ UNIQUE (item_id),
203
+
204
+ FOREIGN KEY (category_id) REFERENCES Category(category_id)
205
+ ON UPDATE CASCADE
206
+ ON DELETE CASCADE
207
+ );
208
+ CREATE INDEX idx_item_by_fdev_id ON Item (fdev_id);
209
+
210
+
211
+ CREATE TABLE StationItem
212
+ (
213
+ station_id INTEGER NOT NULL,
214
+ item_id INTEGER NOT NULL,
215
+ demand_price INT NOT NULL,
216
+ demand_units INT NOT NULL,
217
+ demand_level INT NOT NULL,
218
+ supply_price INT NOT NULL,
219
+ supply_units INT NOT NULL,
220
+ supply_level INT NOT NULL,
221
+ modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
222
+ from_live INTEGER DEFAULT 0 NOT NULL,
223
+
224
+ PRIMARY KEY (station_id, item_id),
225
+ FOREIGN KEY (station_id) REFERENCES Station(station_id)
226
+ ON UPDATE CASCADE ON DELETE CASCADE,
227
+ FOREIGN KEY (item_id) REFERENCES Item(item_id)
228
+ ON UPDATE CASCADE ON DELETE CASCADE
229
+ );
230
+ CREATE INDEX si_mod_stn_itm ON StationItem(modified, station_id, item_id);
231
+ CREATE INDEX si_itm_dmdpr ON StationItem(item_id, demand_price) WHERE demand_price > 0;
232
+ CREATE INDEX si_itm_suppr ON StationItem(item_id, supply_price) WHERE supply_price > 0;
233
+
234
+ CREATE VIEW StationBuying AS
235
+ SELECT station_id,
236
+ item_id,
237
+ demand_price AS price,
238
+ demand_units AS units,
239
+ demand_level AS level,
240
+ modified
241
+ FROM StationItem
242
+ WHERE demand_price > 0
243
+ ;
244
+
245
+ CREATE VIEW StationSelling AS
246
+ SELECT station_id,
247
+ item_id,
248
+ supply_price AS price,
249
+ supply_units AS units,
250
+ supply_level AS level,
251
+ modified
252
+ FROM StationItem
253
+ WHERE supply_price > 0
254
+ ;
255
+
256
+
257
+ --
258
+ -- The next two tables (FDevShipyard, FDevOutfitting) are
259
+ -- used to map the FDev API IDs to data ready for EDDN.
260
+ --
261
+ -- The column names are the same as the header line from
262
+ -- the EDCD/FDevIDs csv files, so we can just download the
263
+ -- files (shipyard.csv, outfitting.csv) and save them
264
+ -- as (FDevShipyard.csv, FDevOutfitting.csv) into the
265
+ -- data directory.
266
+ --
267
+ -- see https://github.com/EDCD/FDevIDs
268
+ --
269
+ -- The commodity.csv is not needed because TD and EDDN
270
+ -- are using the same names.
271
+ --
272
+ -- -Bernd
273
+
274
+ CREATE TABLE FDevShipyard
275
+ (
276
+ id INTEGER NOT NULL,
277
+ symbol VARCHAR(40),
278
+ name VARCHAR(40) COLLATE nocase,
279
+ entitlement VARCHAR(50),
280
+
281
+ UNIQUE (id)
282
+ );
283
+
284
+
285
+ CREATE TABLE FDevOutfitting
286
+ (
287
+ id INTEGER NOT NULL,
288
+ symbol VARCHAR(40),
289
+ category CHAR(10)
290
+ CHECK (category IN ('hardpoint','internal','standard','utility')),
291
+ name VARCHAR(40) COLLATE nocase,
292
+ mount CHAR(10)
293
+ CHECK (mount IN (NULL, 'Fixed','Gimballed','Turreted')),
294
+ guidance CHAR(10)
295
+ CHECK (guidance IN (NULL, 'Dumbfire','Seeker','Swarm')),
296
+ ship VARCHAR(40) COLLATE nocase,
297
+ class CHAR(1) NOT NULL,
298
+ rating CHAR(1) NOT NULL,
299
+ entitlement VARCHAR(50),
300
+
301
+ UNIQUE (id)
302
+ );
303
+
304
+
305
+ COMMIT;
tradedangerous/trade.py CHANGED
@@ -33,12 +33,19 @@
33
33
  # DEVELOPERS: If you are a programmer who wants TD to do something
34
34
  # cool, please see the TradeDB and TradeCalc modules. TD is designed
35
35
  # to empower other programmers to do cool stuff.
36
+ from __future__ import annotations
37
+
36
38
  from tradedangerous import cli
37
39
 
38
- def main(argv = None):
39
- import sys
40
- cli.main(sys.argv)
40
+ import sys
41
+
42
+
43
+ def main(argv: list[tuple] = None) -> None:
44
+ """ Entry point for the TradeDangerous command-line app. """
45
+ if argv is None:
46
+ argv = sys.argv
47
+ cli.main(argv)
48
+
41
49
 
42
50
  if __name__ == "__main__":
43
- import sys
44
- cli.main(sys.argv)
51
+ cli.main(sys.argv)