mkaras93 / elite-dangerous-classes-library Goto Github PK
View Code? Open in Web Editor NEWPython library giving easy access to Systems, Factions and Stations in Elite Dangerous computer game.
License: MIT License
Python library giving easy access to Systems, Factions and Stations in Elite Dangerous computer game.
License: MIT License
Relations between objects behave differently during pytest tests and normal run.
This piece of code:
system = System.create(name="Super System")
station = OrbitalStation.create(system=system, name="Super Station", station_type=StationType.STATION)
assert station.system == system
assert system.stations == [station]
will fail during test on line assert system.stations == [station]
, but it will work totally correct when run in the console.
This makes writing tests for the lib pretty much impossible.
It seems like getter here cleared the relation:
relation_from_parent_side = system._stations_relation
relation_from_child_side = station._system_relation
relation_from_child_side is relation_from_parent_side
True
relation_from_child_side.child_side
{Station 'Super Station': System 'aaa'}
relation_from_child_side.parent_side
defaultdict(<class 'list'>, {System 'aaa': [Station 'Super Station']})
relation_from_parent_side.child_side
{Station 'Super Station': System 'aaa'}
relation_from_parent_side.parent_side
defaultdict(<class 'list'>, {System 'aaa': [Station 'Super Station']})
relation_from_parent_side.parent_side is relation_from_child_side.parent_side
True
relation_from_parent_side.child_side is relation_from_child_side.child_side
True
relation = relation_from_parent_side
relation is relation_from_child_side
True
relation is relation_from_parent_side
True
relation.get_for_parent(system)
[Station 'Super Station']
relation.get_for_child(station)
System 'aaa'
relation.get_for_parent(system)
[Station 'Super Station']
relation.get_for_child(station)
System 'aaa'
station.system
System 'aaa'
system.stations
[]
relation.parent_side
defaultdict(<class 'list'>, {System 'aaa': []})
relation.child_side
{}
While playing with the lib I've noticed I somehow ended up with multiple different instances of the same FactionBranch. This should not be possible.
commit:
5ddd18b
"reformat with black"
Log (the problem appears near the end):
shor = System.create(name="Shoribelu")
shor.faction_branches
[Faction 'Future of Shoribelu' in System 'Shoribelu', Faction 'Revolutionary Audumasi Coalition' in System 'Shoribelu', Faction 'Shoribelu Galactic Exchange' in System 'Shoribelu', Faction 'Shoribelu Public Interstellar' in System 'Shoribelu', Faction 'Conservatives of Shoribelu' in System 'Shoribelu', Faction 'Autocracy of Shoribelu' in System 'Shoribelu', Faction 'Independence Separatist Fleet' in System 'Shoribelu']
fos=shor.faction_branches[0]
fos.stations
[Onfootsettlement 'Osnovianenko Excavation Facility', Onfootsettlement 'Bruno Analytics Site']
fos.faction.systems
Traceback (most recent call last):
File "D:\GitRepos\elite-dangerous-classes-library\src\edclasses\utils.py", line 167, in __getattribute__
expiration_date = expiration_registry[item]
KeyError: 'systems'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "D:\GitRepos\elite-dangerous-classes-library\src\edclasses\utils.py", line 169, in __getattribute__
return get_atr(item)
AttributeError: 'Faction' object has no attribute 'systems'
fos.faction.faction_branches
[Faction 'Future of Shoribelu' in System 'Shoribelu', Faction 'Future of Shoribelu' in System 'Kishangumir']
fos.influence
Decimal('0.054671999999999998376409848788171075284481048583984375')
fos.faction.faction_branches[1].influence
Decimal('0.1596390000000000031210589668262400664389133453369140625')
kish=fos.faction.faction_branches[1].system
for fb in kish.faction_branches:
print(f"{fb} has {round(fb.influence, 2)} influence")
Faction 'Crimson Fortune Exchange' in System 'Kishangumir' has 0.04 influence
Faction 'Kishangumir Jet Raiders' in System 'Kishangumir' has 0.09 influence
Faction 'Odudu Partners' in System 'Kishangumir' has 0.49 influence
Faction 'Hajapai Galactic Solutions' in System 'Kishangumir' has 0.07 influence
Faction 'Future of Shoribelu' in System 'Kishangumir' has 0.16 influence
Faction 'Kishangumir Vision Commodities' in System 'Kishangumir' has 0.11 influence
Faction 'Kishangumir United' in System 'Kishangumir' has 0.03 influence
for station in kish.stations:
print(f"{station} is controlled by {station.controlling_faction.faction} with {round(station.controlling_faction.influence},2)*100}%")
Traceback (most recent call last):
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\code.py", line 63, in runsource
code = self.compile(source, filename, symbol)
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\codeop.py", line 185, in __call__
return _maybe_compile(self.compiler, source, filename, symbol)
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\codeop.py", line 102, in _maybe_compile
raise err1
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\codeop.py", line 91, in _maybe_compile
code1 = compiler(source + "\n", filename, symbol)
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\codeop.py", line 150, in __call__
codeob = compile(source, filename, symbol, self.flags, True)
File "<input>", line 2
print(f"{station} is controlled by {station.controlling_faction.faction} with {round(station.controlling_faction.influence},2)*100}%")
^
SyntaxError: f-string: closing parenthesis '}' does not match opening parenthesis '('
for station in kish.stations:
print(f"{station} is controlled by {station.controlling_faction.faction} with {round(station.controlling_faction.influence,2)*100}%")
Outpost 'Hayden's Exile' is controlled by Faction 'Odudu Partners' with 49.00%
Crateroutpost 'Alten Laboratory' is controlled by Faction 'Kishangumir Jet Raiders' with 9.00%
Onfootsettlement 'Markus Excavation Site' is controlled by Faction 'Odudu Partners' with 49.00%
Onfootsettlement 'Ortiz Metallurgic Station' is controlled by Faction 'Odudu Partners' with 49.00%
for station in shor.stations:
print(f"{station} is controlled by {station.controlling_faction.faction} with {round(station.controlling_faction.influence,2)*100}%")
Coriolis 'Johnson Dock' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
Outpost 'Jordan Station' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
Crateroutpost 'Coulomb Prospect' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
Outpost 'Ivens Enterprise' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
Onfootsettlement 'Osnovianenko Excavation Facility' is controlled by Faction 'Future of Shoribelu' with 5.00%
Onfootsettlement 'Bruno Analytics Site' is controlled by Faction 'Future of Shoribelu' with 5.00%
Onfootsettlement 'Blakytny Hydroponics Site' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
Onfootsettlement 'Brunt's Dream' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
Onfootsettlement 'Lawler Cultivation Biome' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
Onfootsettlement 'Valentino Excavation Enterprise' is controlled by Faction 'Independence Separatist Fleet' with 67.00%
for fb in kish.faction_branches:
print(f"{fb} has {round(fb.influence, 2)*100}% influence")
Faction 'Crimson Fortune Exchange' in System 'Kishangumir' has 4.00% influence
Faction 'Kishangumir Jet Raiders' in System 'Kishangumir' has 9.00% influence
Faction 'Odudu Partners' in System 'Kishangumir' has 49.00% influence
Faction 'Hajapai Galactic Solutions' in System 'Kishangumir' has 7.00% influence
Faction 'Future of Shoribelu' in System 'Kishangumir' has 16.00% influence
Faction 'Kishangumir Vision Commodities' in System 'Kishangumir' has 11.00% influence
Faction 'Kishangumir United' in System 'Kishangumir' has 3.00% influence
Faction 'Odudu Partners' in System 'Kishangumir' has 49.00% influence
Faction 'Kishangumir Jet Raiders' in System 'Kishangumir' has 9.00% influence
Faction 'Odudu Partners' in System 'Kishangumir' has 49.00% influence
Faction 'Odudu Partners' in System 'Kishangumir' has 49.00% influence
fbs = kish.faciton_branches
Traceback (most recent call last):
File "D:\GitRepos\elite-dangerous-classes-library\src\edclasses\utils.py", line 167, in __getattribute__
expiration_date = expiration_registry[item]
KeyError: 'faciton_branches'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "D:\GitRepos\elite-dangerous-classes-library\src\edclasses\utils.py", line 169, in __getattribute__
return get_atr(item)
AttributeError: 'System' object has no attribute 'faciton_branches'. Did you mean: 'faction_branches'?
fbs = kish.faction_branches
sorted(fbs, lambda fb: fb.influence)
Traceback (most recent call last):
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
TypeError: sorted expected 1 argument, got 2
sorted(fbs,key= lambda fb: fb.influence)
[Faction 'Kishangumir United' in System 'Kishangumir', Faction 'Crimson Fortune Exchange' in System 'Kishangumir', Faction 'Hajapai Galactic Solutions' in System 'Kishangumir', Faction 'Kishangumir Jet Raiders' in System 'Kishangumir', Faction 'Kishangumir Jet Raiders' in System 'Kishangumir', Faction 'Kishangumir Vision Commodities' in System 'Kishangumir', Faction 'Future of Shoribelu' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir']
fbs_sorted = sorted(fbs,key= lambda fb: fb.influence)
for fb in fbs_sorted:
print(f"{fb.faction} has {round(fb.influence, 2)*100}% influence.")
Faction 'Kishangumir United' has 3.00% influence.
Faction 'Crimson Fortune Exchange' has 4.00% influence.
Faction 'Hajapai Galactic Solutions' has 7.00% influence.
Faction 'Kishangumir Jet Raiders' has 9.00% influence.
Faction 'Kishangumir Jet Raiders' has 9.00% influence.
Faction 'Kishangumir Vision Commodities' has 11.00% influence.
Faction 'Future of Shoribelu' has 16.00% influence.
Faction 'Odudu Partners' has 49.00% influence.
Faction 'Odudu Partners' has 49.00% influence.
Faction 'Odudu Partners' has 49.00% influence.
Faction 'Odudu Partners' has 49.00% influence.
kish.faction_branches
[Faction 'Crimson Fortune Exchange' in System 'Kishangumir', Faction 'Kishangumir Jet Raiders' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Hajapai Galactic Solutions' in System 'Kishangumir', Faction 'Future of Shoribelu' in System 'Kishangumir', Faction 'Kishangumir Vision Commodities' in System 'Kishangumir', Faction 'Kishangumir United' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Kishangumir Jet Raiders' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir']
odudu = filter(kish.faction_branches, key=lambda fb: fb.faction.name=="Odudu Partners")
Traceback (most recent call last):
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
TypeError: filter() takes no keyword arguments
odudu = filter(kish.faction_branches, lambda fb: fb.faction.name=="Odudu Partners")
Traceback (most recent call last):
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
TypeError: 'function' object is not iterable
fbs
[Faction 'Crimson Fortune Exchange' in System 'Kishangumir', Faction 'Kishangumir Jet Raiders' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Hajapai Galactic Solutions' in System 'Kishangumir', Faction 'Future of Shoribelu' in System 'Kishangumir', Faction 'Kishangumir Vision Commodities' in System 'Kishangumir', Faction 'Kishangumir United' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Kishangumir Jet Raiders' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir']
odudu = filter(fbs, lambda fb: fb.faction.name=="Odudu Partners")
Traceback (most recent call last):
File "C:\Users\miczi\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
TypeError: 'function' object is not iterable
odudu = filter(lambda fb: fb.faction.name=="Odudu Partners", kish.faction_branches)
odudu
<filter object at 0x0000028D6F6E56F0>
odudu = list(odudu)
odudu
[Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir', Faction 'Odudu Partners' in System 'Kishangumir']
odudu[0] is odudu[1]
False
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.