Giter VIP home page Giter VIP logo

elite-dangerous-classes-library's People

Contributors

mkaras93 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

nemwar001

elite-dangerous-classes-library's Issues

Relations on classes don't work properly during test

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
{}

faction_branches property returned duplicated faction_branches

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.