maximumstock / poe-currency-flip-planner Goto Github PK
View Code? Open in Web Editor NEWThis tool is an attempt at planning short-term arbitrage deals of currency in Path of Exile.
License: MIT License
This tool is an attempt at planning short-term arbitrage deals of currency in Path of Exile.
License: MIT License
So just found this and i have no idea at all how to use it. I never used Python and and step by step or video guide would help.
is there a way to blacklist one trade by a user?
Third party trading sites like poe.trade seem to provide vastly different offers than pathofexile.com/trade.
Apparently, the former need to do indexing first, which the latter does not.
Therefore, when requesting data from both sites at the same time, pathofexile.com/trade will provide more recent data than others.
Idea: Each item pair should have an average offer lifetime. Depending on these lifetimes, it might be beneficial to schedule certain item pair offer requests for a specific backend implementation, ie. more frequently changing data via pathofexile.com/trade and rarely changing data via poe.trade.
Needs interactive UI and quite a bit more thoughts on additional graph traversal
Most conversions we end up displaying to the user contain similar sellers and make it really annoying if one of them doesn't answer. I think it might be more desirable to get a list of completely independent conversions.
Currently, the offer fetching performance is rather slow, taking about 150s using the first 13 currencies in src/constants.py#currencies
(equaling 156 requests). This is waaay to much to actually use this tool. Ideally, support for a larger variety of currencies (eg. league-specific currencies, maps, etc.) would be desirable. But at the moment this is simply not possible.
However, this shows that most profitable conversions focus around a few currency pairs, such as buying Chaos
for Regrets
.
-> Try to reduce number of API requests by limiting irrelevant currency pairs
Not an issue with the code but how can we get around price fixers when using it?
When searching for example on temp hardcore league such as "Hardcore Metamorph" no results are returned. If you use softcore instead "Metamorph" everything works fine and lots of offers appears
We need some kind of interface to configure how much of a given currency should be tradable for a given session/graph query in order to...
config/config.json
with suitable formatIdea: Don't let PathFinder do its whole thing every time the CLI starts up. Instead, separate offer fetching, traversal and post-processing from each other and let users specify what to do, eg. traversing twice before refreshing specific offers
poe.ninja provides historical economy data dumps that provide conversion rates between currencies per day. Based on the high confidence rates we can analyse which graph edges are profitable. This should complement previous self-collected data insights.
Currently getting errors for running on either poetrade or poeofficial.
Fetching Delirium offers for 114 pairs
Filter: Enabled
Backend: poetrade
Spent 43.64s fetching offers
Spent 0.0s building the graph
Checking for profitable conversions...
Traceback (most recent call last):
File "D:/bt stuff/poe-currency-flip-planner-master (3)/poe-currency-flip-planner-master/cli.py", line 114, in
p.run(2)
File "D:\bt stuff\poe-currency-flip-planner-master (3)\poe-currency-flip-planner-master\src\pathfinder.py", line 147, in run
self._find_profitable_paths(max_transaction_length)
File "D:\bt stuff\poe-currency-flip-planner-master (3)\poe-currency-flip-planner-master\src\pathfinder.py", line 120, in _find_profitable_paths
paths = graph.find_paths(self.graph, c, c, self.user_config, max_transaction_length)
File "D:\bt stuff\poe-currency-flip-planner-master (3)\poe-currency-flip-planner-master\src\core\graph.py", line 53, in find_paths
if edge["stock"] < minimum or edge["stock"] > maximum:
TypeError: '>' not supported between instances of 'int' and 'NoneType'
Process finished with exit code 1
$:~/dev/poe-currency-flip-planner$ sudo sh run_collector.sh
Fetching Delve offers for 17 currencies - 272 pairs
^CTraceback (most recent call last):
File "data_analysis/collector.py", line 30, in <module>
run()
File "data_analysis/collector.py", line 22, in run
p.run(3)
File "/home/$$$$/dev/poe-currency-flip-planner/src/pathfinder.py", line 57, in run
self.offers = self.backend.fetch_offers(self.league, currency_combinations)
File "/home/$$$$/dev/poe-currency-flip-planner/src/backends/poeofficial.py", line 15, in fetch_offers
offers = list(map(lambda x: x, futures))
File "/usr/lib/python3.6/concurrent/futures/_base.py", line 586, in result_iterator
yield fs.pop().result()
File "/usr/lib/python3.6/concurrent/futures/_base.py", line 427, in result
self._condition.wait(timeout)
File "/usr/lib/python3.6/threading.py", line 295, in wait
waiter.acquire()
KeyboardInterrupt
It isn't making any .pickle files for some reason
...or find a new way to visualize this
Hi,
Great script. How can we edit it so we are looking at smaller trade rather than in the hundreds? I would like to start small and build up, but most of the trades are 300+ chaos trades.
I think this is the issue, correct me if I'm wrong.
e.g. running cli.py --currency "Chaos Orb"
currently outputs on my MacBook Pro:
Fetching Delirium offers for 120 pairs | Filters Enabled
Spent 27.77s fetching offers
Spent 0.0s building the graph
Checking for profitable conversions...
Spent 0.0s finding paths
But if I run in debug mode and wait for the background task scheduled in PathFinder._fetch
I get results below.
I think that PathFinder._build_graph
should wait until the PathFinder.backend_pool
has finished running the fetch job.
Fetching Delirium offers for 120 pairs | Filters Enabled
Spent 59.98s fetching offers
Spent 0.0s building the graph
Checking for profitable conversions...
Checking Chaos Orb -> 51 Conversions
Checking Jagged Fossil -> 2 Conversions
Checking Serrated Fossil -> 10 Conversions
Checking Shuddering Fossil -> 1 Conversions
Spent 208.14s finding paths
153 Chaos Orb -> 174 Chaos Orb: 21 Chaos Orb
@SC_WayoftheRoad Hi, I'd like to buy your 6 Gilded Divination Scarab for 153 Chaos Orb in Delirium. (0.0455x)
@fast_legs Hi, I'd like to buy your 174 Chaos Orb for 6 Gilded Divination Scarab in Delirium. (29.0x)
52 Chaos Orb -> 66 Chaos Orb: 14 Chaos Orb
@BoTemplar Hi, I'd like to buy your 13 Serrated Fossil for 52 Chaos Orb in Delirium. (0.25x)
@LostSoul_Not_AFK Hi, I'd like to buy your 66 Chaos Orb for 13 Serrated Fossil in Delirium. (5.1x)
69 Chaos Orb -> 78 Chaos Orb: 9 Chaos Orb
@BallguardianDelirium Hi, I'd like to buy your 9 Shuddering Fossil for 69 Chaos Orb in Delirium. (0.1429x)
@Delirium_Shocker Hi, I'd like to buy your 78 Chaos Orb for 9 Shuddering Fossil in Delirium. (8.75x)
19 Chaos Orb -> 25 Chaos Orb: 6 Chaos Orb
@I_like_them_juicy Hi, I'd like to buy your 5 Serrated Fossil for 19 Chaos Orb in Delirium. (0.3077x)
@PathofPunch Hi, I'd like to buy your 25 Chaos Orb for 5 Serrated Fossil in Delirium. (5.0x)
16 Chaos Orb -> 20 Chaos Orb: 4 Chaos Orb
@TheOncomingPlague Hi, I'd like to buy your 4 Serrated Fossil for 16 Chaos Orb in Delirium. (0.25x)
@trankvilizator Hi, I'd like to buy your 20 Chaos Orb for 4 Serrated Fossil in Delirium. (5.0x)
would be nice to have an automated flip inventory coming from poe.ninja trending items or hidden champions.
https://poe.ninja/swagger/index.html
im willing to help out on the project also. If there is any interest, please let me know (german speaking here also)
This league the default PoE trade forum https://pathofexile.com/trade appears to be operating faster than poe.trade. I'd recommend updating the default backend.
If you don't wish to do so, could you please provide what we should set the backend variable equal to in line 74 of cli.py?
Thanks.
I saw this mentioned in a thread on Reddit - getting the session if from the logged browser session as a way to get around the rate limit.
Can you add it as a an arg to cli.py and pass it along?
If you try to use russian characters in excluded_traders.txt you receive the following error:
Traceback (most recent call last):
File "cli.py", line 83, in
excluded_traders = [x.strip() for x in f.readlines()]
File "c:\users\byrdc\appdata\local\programs\python\python37\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 159: character maps to
I assume this would happen with any non-standard unicode character such as korean characters as well.
Ideally, I want to support all kinds of currency/bulk items, eg. maps, fossils, essences, etc. Adding/removing these manually is tedious.
The current error handling situation is a bit weird. A consistent exception strategy from the backend implementations upwards would be appropriate, I guess. The cli.py module should also act as a means of integration test which can be added to the test modules.
Having to install pipenv and all deps is cumbersome, look into https://docs.python.org/3/distutils/builtdist.html
Is there any way to change it to work for hardcore?
pathofexile.com/trade returns internationalised whisper messages as formattable strings which we should use
I know this might be silly as to why someone wouldn't want to see this type of transaction, but sometimes one might only profit 1-5 of a given currency. Depending on the number of transactions a user specifies, this can sometimes not be worthwhile. I don't know if this is filtered out already for lower currencies. For higher currencies like Divines, Exalted, Ancient orbs, etc, it might be worthwhile but for smaller currencies not so much.
With my previously misconfigured pair_filter I was getting transactions for Vaal Orbs that would only profit 1-2 per trade, in bulk exchanges.
I don't know if that's something to look into in the future. Would be difficult to limit that for smaller currencies but also consider it for higher ones.
I thought of something like, if the number of interactions (hops) is greater than the amount you profit by, then the trade is really not worth doing.
Originally posted by @HiPoEGH in #25 (comment)
I hate the deployment situation right now. The whole jsonpickle incident could have been avoided by Docker I think. Also, Poetry it is.
solved.
thank you so much for awesome work!
Currently, poe.trade supports a much higher fetching concurrency than pathofexile.com/trade (5 requests per 5 seconds). However, the latter seems to filter out (some) obvious price-fixing offers, which is not the case for poe.trade.
If poe.trade supports a considerable speedup compared to pathofexile.com/trade, it might be efficient to use the former, while adding some way to filter out price-fixing offers locally.
Hey I want to use this in my own small project. I just want to output the cli stuff on a website and let Flask expose an API and the API-endpoint call pathfinder.run().
I managed to get my setup rdy and imported your project as git submodule in its own folder within the project.
However it seems to mess up everything with the absolute paths.
client
client stuff
server
app.py (calls pathfinder.py)
poecfp (your project as git submodule)
cli.py
src
pathfinder.py
...
When I run everything, your commons.py
says No such file or directory: 'config/excluded_traders.txt'
I just don't know, how to do it properly. Maybe you can give me an advise on how to use your pathfinder.py as an external 3rd party lib in my own project.
EDIT: btw I used Docker to setup everything. So i have NOT used any python virtual environments.
Currently, after finding a list of profitable conversions, that list is sorted by total winnings. The higher the rank in the sorted list, the higher the amount of "good" conversion rates. The better the conversion rate, the riskier the transaction. However, the goal should be to provide reliable, low- to medium-reward instead of unreliable, high reward trades.
Idea: Introduce an additional edge weight that counteracts high-reward but possibly high-risk trades. The worse an offer's conversion rate is, the higher this weight is.
Ideally, this pushes the final conversions that are presented to the user towards the more reliable although less lucrative side. Overall I think this is desirable. Some interesting data mining can and has to be done here before implementing this.
Leads to trades such as
18 Chaos Orb -> 25 Chaos Orb: 7 Chaos Orb
@CalliNoPantsMeta Hi, I'd like to buy your 5 Chaos Orb for 18 Chaos Orb in Delirium. (0.3333x)
@CallItRegret Hi, I'd like to buy your 25 Chaos Orb for 5 Chaos Orb in Delirium. (5.0x)
Fix below in cli.py:log_conversion
:
def log_conversion(c):
logging.info("\t{} {} -> {} {}: {} {}".format(c["starting"], c["from"], c["ending"],
c["to"], c["winnings"], c["to"]))
for t in c["transactions"]:
logging.info("\t\t@{} Hi, I'd like to buy your {} {} for {} {} in {}. ({}x)".format(
t.contact_ign,
t.received,
t.want,
t.paid,
t.have,
t.league,
t.conversion_rate,
))
logging.info("\n")
i have 0 experience with python and coding overall, maybe ive done something wrong while installing something but i had this issue while running cli.py:
PS C:\Users\Demetr> python C:\Users\Demetr\Desktop\poe\poe-currency-flip-planner-master\cli.py
Traceback (most recent call last):
File "C:\Users\Demetr\Desktop\poe\poe-currency-flip-planner-master\cli.py", line 85, in
p = PathFinder(league, chosen_currencies, backend, excluded_traders,
File "C:\Users\Demetr\Desktop\poe\poe-currency-flip-planner-master\src\pathfinder.py", line 52, in init
self.pair_filter = load_pair_filter()
File "C:\Users\Demetr\Desktop\poe\poe-currency-flip-planner-master\src\items.py", line 11, in load_pair_filter
with open("assets/pair_filter.json", "r") as f:
FileNotFoundError: [Errno 2] No such file or directory: 'assets/pair_filter.json'
not sure what i was doing wrong, but i couldnt install pipenv and maybe its something to do with this, seemed to work fine tho after editing paths to "C:/Users/Demetr/Desktop/poe/poe-currency-flip-planner-master/assets/pair_filter.json" in 3 files
Hey,
I just wanted to try this out but. The cli.py work.
But I can't run the .sh.
Thank you ^^"
Getting this error
(poe-currency-flip-planner) root@ubuntu:~/poe-currency-flip-planner# python cli.py --league hardcore
Fetching hardcore offers for 120 pairs
Filter: Enabled
Backend: poeofficial
Rate limited during: Chaos Orb -> Ancient Orb
Rate limited during: Chaos Orb -> Aetheric Fossil
Rate limited during: Chaos Orb -> Awakened Sextant
Rate limited during: Chaos Orb -> Simple Sextant
Rate limited during: Awakened Sextant -> Chaos Orb
Rate limited during: Jeweller's Orb -> Blessed Orb
Rate limited during: Aetheric Fossil -> Chaos Orb
Rate limited during: Blessed Orb -> Chaos Orb
Rate limited during: Chromatic Orb -> Chaos Orb
Rate limited during: Divine Orb -> Chaos Orb
Rate limited during: Cartographer's Chisel -> Chaos Orb
Rate limited during: Gilded Divination Scarab -> Chaos Orb
Rate limited during: Jeweller's Orb -> Chaos Orb
Rate limited during: Gemcutter's Prism -> Chaos Orb
Rate limited during: Jagged Fossil -> Chaos Orb
Rate limited during: Orb of Alchemy -> Chaos Orb
Rate limited during: Potent Alchemical Resonator -> Chaos Orb
Rate limited during: Orb of Alteration -> Chaos Orb
Rate limited during: Potent Chaotic Resonator -> Chaos Orb
Rate limited during: Orb of Scouring -> Chaos Orb
Rate limited during: Orb of Regret -> Chaos Orb
Rate limited during: Orb of Fusing -> Chaos Orb
Rate limited during: Regal Orb -> Chaos Orb
Rate limited during: Orb of Chance -> Chaos Orb
Rate limited during: Chaos Orb -> Jagged Fossil
Rate limited during: Chaos Orb -> Orb of Annulment
Rate limited during: Chaos Orb -> Gilded Divination Scarab
Rate limited during: Vaal Orb -> Chaos Orb
Rate limited during: Shuddering Fossil -> Chaos Orb
Rate limited during: Serrated Fossil -> Chaos Orb
Rate limited during: Simple Sextant -> Chaos Orb
Rate limited during: Chaos Orb -> Encrusted Fossil
Rate limited during: Jeweller's Orb -> Cartographer's Chisel
Rate limited during: Chaos Orb -> Cartographer's Chisel
Rate limited during: Chromatic Orb -> Cartographer's Chisel
Rate limited during: Gemcutter's Prism -> Cartographer's Chisel
Rate limited during: Orb of Alchemy -> Cartographer's Chisel
Rate limited during: Orb of Alteration -> Cartographer's Chisel
Rate limited during: Orb of Regret -> Cartographer's Chisel
Rate limited during: Orb of Fusing -> Cartographer's Chisel
Rate limited during: Orb of Alchemy -> Chromatic Orb
Rate limited during: Orb of Fusing -> Chromatic Orb
Rate limited during: Chaos Orb -> Chromatic Orb
Rate limited during: Cartographer's Chisel -> Chromatic Orb
Rate limited during: Exalted Orb -> Chromatic Orb
Rate limited during: Orb of Alteration -> Chromatic Orb
Rate limited during: Orb of Chance -> Chromatic Orb
Rate limited during: Jeweller's Orb -> Chromatic Orb
Rate limited during: Cartographer's Chisel -> Exalted Orb
Rate limited during: Vaal Orb -> Chromatic Orb
Rate limited during: Regal Orb -> Chromatic Orb
Rate limited during: Chaos Orb -> Divine Orb
Rate limited during: Chaos Orb -> Exalted Orb
Rate limited during: Gemcutter's Prism -> Exalted Orb
Rate limited during: Chromatic Orb -> Exalted Orb
Rate limited during: Blessed Orb -> Exalted Orb
Rate limited during: Chaos Orb -> Regal Orb
Rate limited during: Cartographer's Chisel -> Regal Orb
Rate limited during: Orb of Annulment -> Exalted Orb
Rate limited during: Orb of Fusing -> Exalted Orb
Rate limited during: Orb of Alchemy -> Exalted Orb
Rate limited during: Chaos Orb -> Serrated Fossil
Rate limited during: Chaos Orb -> Prime Sextant
Rate limited during: Orb of Chance -> Exalted Orb
Rate limited during: Chaos Orb -> Gemcutter's Prism
Rate limited during: Orb of Scouring -> Exalted Orb
Rate limited during: Exalted Orb -> Jeweller's Orb
Rate limited during: Regal Orb -> Exalted Orb
Rate limited during: Chromatic Orb -> Jeweller's Orb
Rate limited during: Orb of Regret -> Exalted Orb
Rate limited during: Chaos Orb -> Harbinger's Orb
Rate limited during: Chaos Orb -> Jeweller's Orb
Rate limited during: Orb of Alteration -> Jeweller's Orb
Rate limited during: Cartographer's Chisel -> Orb of Alchemy
Rate limited during: Orb of Alchemy -> Jeweller's Orb
Rate limited during: Orb of Fusing -> Jeweller's Orb
Rate limited during: Chromatic Orb -> Orb of Alchemy
Rate limited during: Jeweller's Orb -> Orb of Alchemy
Rate limited during: Orb of Alteration -> Orb of Alchemy
Rate limited during: Chaos Orb -> Orb of Alchemy
Rate limited during: Orb of Transmutation -> Orb of Alchemy
Rate limited during: Orb of Chance -> Orb of Alchemy
Rate limited during: Gemcutter's Prism -> Orb of Alteration
Rate limited during: Orb of Fusing -> Orb of Alchemy
Rate limited during: Exalted Orb -> Orb of Alteration
Rate limited during: Chromatic Orb -> Orb of Alteration
Rate limited during: Chaos Orb -> Orb of Alteration
Rate limited during: Jeweller's Orb -> Orb of Alteration
Rate limited during: Orb of Transmutation -> Orb of Alteration
Rate limited during: Orb of Scouring -> Orb of Alteration
Rate limited during: Orb of Alchemy -> Orb of Alteration
Rate limited during: Orb of Alchemy -> Orb of Chance
Rate limited during: Orb of Fusing -> Orb of Alteration
Rate limited during: Chaos Orb -> Orb of Chance
Rate limited during: Orb of Scouring -> Orb of Chance
Rate limited during: Vaal Orb -> Orb of Alteration
Rate limited during: Exalted Orb -> Orb of Fusing
Rate limited during: Chaos Orb -> Orb of Fusing
Rate limited during: Chaos Orb -> Orb of Regret
Rate limited during: Vaal Orb -> Orb of Fusing
Rate limited during: Cartographer's Chisel -> Orb of Regret
Rate limited during: Vaal Orb -> Orb of Chance
Rate limited during: Chromatic Orb -> Orb of Fusing
Rate limited during: Orb of Alteration -> Orb of Fusing
Rate limited during: Orb of Alteration -> Orb of Scouring
Rate limited during: Orb of Fusing -> Orb of Scouring
Rate limited during: Orb of Regret -> Orb of Scouring
Rate limited during: Orb of Alteration -> Orb of Regret
Rate limited during: Chaos Orb -> Orb of Transmutation
Rate limited during: Chaos Orb -> Potent Chaotic Resonator
Rate limited during: Chaos Orb -> Orb of Scouring
Rate limited during: Chaos Orb -> Potent Alchemical Resonator
Rate limited during: Chaos Orb -> Shuddering Fossil
Rate limited during: Cartographer's Chisel -> Vaal Orb
Rate limited during: Orb of Alteration -> Regal Orb
Rate limited during: Orb of Alchemy -> Vaal Orb
Rate limited during: Chaos Orb -> Vaal Orb
Rate limited during: Exalted Orb -> Vaal Orb
Rate limited during: Orb of Alteration -> Vaal Orb
Rate limited during: Orb of Fusing -> Vaal Orb
Failed to fetch offers for 120 pairs
Traceback (most recent call last):
File "cli.py", line 114, in <module>
p.run(3)
File "/root/poe-currency-flip-planner/src/pathfinder.py", line 143, in run
self._fetch()
File "/root/poe-currency-flip-planner/src/pathfinder.py", line 97, in _fetch
self.offers = self._filter_traders(self.offers, self.excluded_traders)
File "/root/poe-currency-flip-planner/src/pathfinder.py", line 75, in _filter_traders
offers[idx]["offers"],
TypeError: 'NoneType' object is not subscriptable
(poe-currency-flip-planner) root@ubuntu:~/poe-currency-flip-planner#
Should change or update the message to read:
print("\t@{} Hi, I'd like to buy your {} {} for my {} {} in {}. ({})"
Where the text " in {}." would specify the league name.
Somehow not having jsonpickle installed wasn't detected in any CI runs of the last 30 days, which majorly sucks. The cli and data collector components should be tested via CI as well.
I tried to install your 'poe-currency-flip-planner' using Kali Linux, did according to the instructions, but when entering pip install -r requirements.txt
return error. I on Win 10, python is installed. I attached the part of the output where the error appears.
error.txt
Currently, we can either request data for:
assets/pair_filter.json
(default)This is not what we want. Ideally, there is an easy way to build custom presets on what item pairs to use. I think most items are easily grouped, eg. maps, fossils, essences, etc. Maybe this is even too sophisticated as most elements of each group are worthless, but let'ss see.
Clean python install doesn't necessarily have deserialize :
On a clean python 3.7 on debian buster, for instance with this Dockerfile :
FROM python:3.7-buster
RUN git clone https://github.com/maximumstock/poe-currency-flip-planner.git
RUN cd poe-currency-flip-planner ; pip install -r requirements.txt
You still have to pip install deserialize
:
root@174e58b83184:/poe-currency-flip-planner# python cli.py --league "Harvest"
Traceback (most recent call last):
File "cli.py", line 5, in <module>
from src.config.user_config import UserConfig
File "/poe-currency-flip-planner/src/config/user_config.py", line 8, in <module>
from src.trading import StackSizeHelper
File "/poe-currency-flip-planner/src/trading/__init__.py", line 1, in <module>
from .items import Item, ItemList, UnknownBackendException, UnsupportedItemException
File "/poe-currency-flip-planner/src/trading/items.py", line 24, in <module>
import deserialize
ModuleNotFoundError: No module named 'deserialize'
root@174e58b83184:/poe-currency-flip-planner# pip install deserialize
Collecting deserialize
Downloading deserialize-1.8.0-py3-none-any.whl (15 kB)
Installing collected packages: deserialize
Successfully installed deserialize-1.8.0
root@174e58b83184:/poe-currency-flip-planner# python cli.py --league "Harvest"
Fetching Harvest offers for 120 pairs
We need some more league data for bulk trades to infer edge profitablity. A comparison with previous league's datasets should be easy as well, in order to see if they differ in terms of which edges remain profitable throughout a league.
Spent 10.8s finding paths
Traceback (most recent call last):
File "cli.py", line 49, in <module>
log_conversions(p.results, currency, limit)
File "cli.py", line 10, in log_conversions
for c in conversions[currency][:limit]:
TypeError: slice indices must be integers or None or have an __index__ method
Fixed by Changing
poe-currency-flip-planner/cli.py
Line 10 in 0506f9c
def log_conversions(conversions, currency, limit):
for c in conversions[currency][:limit]:
log_conversion(c)
to
make the slice use an int.
def log_conversions(conversions, currency, limit):
for c in conversions[currency][:int(limit)]:
log_conversion(c)
Ran with
python cli.py --limit 10 --league "Betrayal" --currency "Exalted Orb"
class Offer is not serializable
The current version specified in requirements.txt
of typed-ast
unfortunately doesn't build on current 3.8.
I ran in docker for ease of reproducability, here's the Dockerfile :
FROM python:3.8-buster
RUN git clone https://github.com/maximumstock/poe-currency-flip-planner.git
RUN cd poe-currency-flip-planner ; pip install -r requirements.txt
And the error is
ast3/Python/ast.c:22:1: error: conflicting types for ‘_PyObject_FastCall’
_PyObject_FastCall(PyObject *func, PyObject *const *args, int nargs)
^~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/python3.8/abstract.h:837,
from /usr/local/include/python3.8/Python.h:147,
from ast3/Python/ast.c:6:
/usr/local/include/python3.8/cpython/abstract.h:145:1: note: previous definition of ‘_PyObject_FastCall’ was here
_PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
^~~~~~~~~~~~~~~~~~
error: command 'gcc' failed with exit status 1
----------------------------------------
From looking at various error reports all over e.g. python/typed_ast#124 and ethereum/py-evm#1872, I guess this indicates a requirement to update both typed-ast and mypy.
Changing 3.8 to 3.7 works fine, at least for build.
Dependabot couldn't authenticate with https://pypi.python.org/simple/.
You can provide authentication details in your Dependabot dashboard by clicking into the account menu (in the top right) and selecting 'Config variables'.
Idea: Top 10 profitable edges per league per day/week among the latest league datasets we have.
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.