Skip to content

Commit f7c0f0b

Browse files
committed
fix steam ids and update tests
1 parent 865d800 commit f7c0f0b

File tree

6 files changed

+107
-28
lines changed

6 files changed

+107
-28
lines changed

src/tf2_utils/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
__title__ = "tf2-utils"
22
__author__ = "offish"
3-
__version__ = "2.1.0"
3+
__version__ = "2.1.1"
44
__license__ = "MIT"
55

66
from .sku import (
77
get_sku,
88
get_sku_properties,
99
sku_to_defindex,
1010
sku_to_quality,
11+
sku_to_color,
1112
sku_is_uncraftable,
13+
is_sku,
14+
is_pure,
15+
is_metal,
16+
get_metal,
1217
)
1318
from .item import Item
1419
from .offer import Offer

src/tf2_utils/sku.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from .item import Item
22

3-
from tf2_data import EFFECTS
3+
from tf2_data import EFFECTS, COLORS
44
from tf2_sku import to_sku
55

66

@@ -46,7 +46,38 @@ def get_sku_properties(item: Item | dict) -> dict:
4646
return sku_properties
4747

4848

49+
def is_sku(item: str) -> bool:
50+
return item.find(";") != -1
51+
52+
53+
def is_pure(sku: str) -> bool:
54+
return sku in ["5000;6", "5001;6", "5002;6", "5021;6"]
55+
56+
57+
def is_metal(sku: str) -> bool:
58+
return sku in ["5000;6", "5001;6", "5002;6"]
59+
60+
61+
def get_metal(sku: str) -> int:
62+
assert is_metal(sku), f"sku {sku} is not metal"
63+
64+
match sku:
65+
# refined
66+
case "5002;6":
67+
return 9
68+
69+
# reclaimed
70+
case "5001;6":
71+
return 3
72+
73+
# scrap
74+
case "5000;6":
75+
return 1
76+
77+
4978
def get_property(sku: str, index: int) -> str:
79+
assert is_sku(sku), f"sku {sku} is not valid"
80+
5081
return sku.split(";")[index]
5182

5283

@@ -58,6 +89,10 @@ def sku_to_quality(sku: str) -> int:
5889
return int(get_property(sku, 1))
5990

6091

92+
def sku_to_color(sku: str) -> str:
93+
return COLORS[str(sku_to_quality(sku))]
94+
95+
6196
def sku_is_uncraftable(sku: str) -> bool:
6297
return sku.find(";uncraftable") != -1
6398

src/tf2_utils/utils.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import struct
12
import math
23
import json
34

@@ -43,9 +44,13 @@ def get_token_from_trade_url(trade_url: str) -> str:
4344
return trade_url[token_index:]
4445

4546

46-
def account_id_to_steam_id(account_id: int | str) -> str:
47-
return str(76561197960265728 + int(account_id))
47+
# implementation from bukson's steampy
48+
def account_id_to_steam_id(account_id: str | int) -> str:
49+
first_bytes = int(account_id).to_bytes(4, byteorder="big")
50+
last_bytes = 0x1100001.to_bytes(4, byteorder="big")
51+
return str(struct.unpack(">Q", last_bytes + first_bytes)[0])
4852

4953

54+
# implementation from bukson's steampy
5055
def steam_id_to_account_id(steam_id: str | int) -> str:
51-
return str(int(steam_id) - 76561197960265728)
56+
return str(struct.unpack(">L", int(steam_id).to_bytes(8, byteorder="big")[4:])[0])

tests/test_item.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,39 +24,39 @@ def test_craft_hat(self):
2424
is_special = ELLIS_CAP.is_special()
2525
is_painted = ELLIS_CAP.is_painted()
2626

27-
self.assertEqual(True, is_craft_hat)
28-
self.assertEqual(False, is_special)
29-
self.assertEqual(False, is_painted)
27+
self.assertTrue(is_craft_hat)
28+
self.assertFalse(is_special)
29+
self.assertFalse(is_painted)
3030

3131
def test_uncraftable_hat(self):
3232
is_craftable = UNCRAFTABLE_HAT.is_craftable()
3333
is_craft_hat = UNCRAFTABLE_HAT.is_craft_hat()
3434
is_uncraftable = UNCRAFTABLE_HAT.is_uncraftable()
3535

36-
self.assertEqual(False, is_craftable)
37-
self.assertEqual(False, is_craft_hat)
38-
self.assertEqual(True, is_uncraftable)
36+
self.assertFalse(is_craftable)
37+
self.assertFalse(is_craft_hat)
38+
self.assertTrue(is_uncraftable)
3939

4040
def test_painted(self):
4141
is_special = PAINTED_HAT.is_special()
4242
is_painted = PAINTED_HAT.is_painted()
4343
paint = PAINTED_HAT.get_paint()
4444
is_craft_hat = PAINTED_HAT.is_craft_hat()
4545

46-
self.assertEqual(True, is_special)
47-
self.assertEqual(True, is_painted)
46+
self.assertTrue(is_special)
47+
self.assertTrue(is_painted)
4848
self.assertEqual("Australium Gold", paint)
49-
self.assertEqual(True, is_craft_hat)
49+
self.assertTrue(is_craft_hat)
5050

5151
def test_spell(self):
5252
is_special = SPELLED_ITEM.is_special()
5353
has_spell = SPELLED_ITEM.has_spell()
5454
is_strange = SPELLED_ITEM.is_strange()
5555
# spell=SPELLED_ITEM.get_spell()
5656

57-
self.assertEqual(True, is_special)
58-
self.assertEqual(True, has_spell)
59-
self.assertEqual(True, is_strange)
57+
self.assertTrue(is_special)
58+
self.assertTrue(has_spell)
59+
self.assertTrue(is_strange)
6060
# self.assertEqual("Exorcism", spell)
6161

6262
def test_unusual(self):
@@ -66,11 +66,11 @@ def test_unusual(self):
6666
is_craft_hat = HONG_KONG_CONE.is_craft_hat()
6767
strange_in_name = HONG_KONG_CONE.has_strange_in_name()
6868

69-
self.assertEqual(True, is_unusual)
69+
self.assertTrue(is_unusual)
7070
self.assertEqual("Neutron Star", effect)
7171
self.assertEqual("An Extraordinary Abundance of Tinge", paint)
72-
self.assertEqual(False, is_craft_hat)
73-
self.assertEqual(True, strange_in_name)
72+
self.assertFalse(is_craft_hat)
73+
self.assertTrue(strange_in_name)
7474

7575
def test_sku_from_item_class(self):
7676
sku = get_sku(ELLIS_CAP)

tests/test_offer.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@
1010

1111
class TestUtils(TestCase):
1212
def test_offer_state(self):
13-
self.assertEqual(False, offer.is_active())
14-
self.assertEqual(False, offer.is_declined())
15-
self.assertEqual(True, offer.is_accepted())
13+
self.assertFalse(offer.is_active())
14+
self.assertFalse(offer.is_declined())
15+
self.assertTrue(offer.is_accepted())
1616

1717
def test_offer_sides(self):
18-
self.assertEqual(False, offer.is_our_offer())
19-
self.assertEqual(False, offer.is_scam())
20-
self.assertEqual(False, offer.is_gift())
21-
self.assertEqual(True, offer.is_two_sided())
18+
self.assertFalse(offer.is_our_offer())
19+
self.assertFalse(offer.is_scam())
20+
self.assertFalse(offer.is_gift())
21+
self.assertTrue(offer.is_two_sided())
2222

2323
def test_offer_partner(self):
24-
self.assertEqual(False, offer.has_trade_hold())
24+
self.assertFalse(offer.has_trade_hold())
2525
self.assertEqual("76561198253325712", offer.get_partner())

tests/test_sku.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
sku_to_defindex,
66
sku_to_quality,
77
sku_is_uncraftable,
8+
is_sku,
9+
sku_to_color,
10+
is_pure,
11+
is_metal,
12+
get_metal,
813
)
914

1015
from unittest import TestCase
@@ -70,3 +75,32 @@ def test_properties(self):
7075
self.assertEqual(734, sku_to_defindex(sku))
7176
self.assertEqual(6, sku_to_quality(sku))
7277
self.assertEqual(True, sku_is_uncraftable(sku))
78+
79+
def test_is_sku(self):
80+
self.assertTrue(is_sku("734;6;uncraftable"))
81+
self.assertTrue(is_sku("something;text"))
82+
self.assertFalse(is_sku("734"))
83+
84+
def test_is_metal(self):
85+
self.assertTrue(is_metal("5000;6"))
86+
self.assertTrue(is_metal("5001;6"))
87+
self.assertTrue(is_metal("5002;6"))
88+
self.assertFalse(is_metal("5021;6"))
89+
90+
def test_is_pure(self):
91+
self.assertTrue(is_pure("5000;6"))
92+
self.assertTrue(is_pure("5001;6"))
93+
self.assertTrue(is_pure("5002;6"))
94+
self.assertTrue(is_pure("5021;6"))
95+
self.assertFalse(is_pure("5021;7"))
96+
97+
def test_get_metal(self):
98+
self.assertEqual(9, get_metal("5002;6"))
99+
self.assertEqual(3, get_metal("5001;6"))
100+
self.assertEqual(1, get_metal("5000;6"))
101+
self.assertRaises(AssertionError, get_metal, "5021;6")
102+
103+
def test_sku_to_color(self):
104+
self.assertEqual("7D6D00", sku_to_color("734;6;uncraftable"))
105+
self.assertEqual("4D7455", sku_to_color("30469;1"))
106+
self.assertRaises(AssertionError, sku_to_color, "notsku")

0 commit comments

Comments
 (0)