Skip to content

Commit

Permalink
Merge pull request NelsonDane#165 from NelsonDane/develop
Browse files Browse the repository at this point in the history
Package Version Checker at Start
  • Loading branch information
NelsonDane authored Feb 8, 2024
2 parents 420e646 + 3a223e4 commit a32427b
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 3 deletions.
6 changes: 4 additions & 2 deletions autoRSA.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@
# Custom API libraries
from fidelityAPI import *
from firstradeAPI import *
from helperAPI import stockOrder, updater
from helperAPI import check_package_versions, stockOrder, updater
from robinhoodAPI import *
from schwabAPI import *
from tastyAPI import *
from tradierAPI import *
except Exception as e:
print(f"Error importing libraries: {e}")
print("Please run 'pip install -r requirements.txt'")
print(traceback.format_exc())
print("Please run 'pip install -r requirements.txt'")
sys.exit(1)

# Initialize .env file
Expand Down Expand Up @@ -164,10 +164,12 @@ def argParser(args: list) -> stockOrder:
# If discord argument, run discord bot, no docker, no prompt
elif sys.argv[1].lower() == "discord":
updater()
check_package_versions()
print("Running Discord bot from command line")
DISCORD_BOT = True
else: # If any other argument, run bot, no docker or discord bot
updater()
check_package_versions()
print("Running bot from command line")
cliOrderObj = argParser(sys.argv[1:])
if not cliOrderObj.get_holdings():
Expand Down
79 changes: 79 additions & 0 deletions helperAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@

import asyncio
import os
import subprocess
import sys
import textwrap
from pathlib import Path
from queue import Queue
from time import sleep

import pkg_resources
import requests
from dotenv import load_dotenv
from selenium import webdriver
Expand Down Expand Up @@ -359,6 +362,82 @@ def updater():
return


def check_package_versions():
print("Checking package versions...")
# Check if pip packages are up to date
required_packages = []
required_repos = []
f = open("requirements.txt", "r")
for line in f:
# Not commented pip packages
if not line.startswith("#") and "==" in line:
required_packages.append(line.strip())
# Not commented git repos
elif not line.startswith("#") and "git+" in line:
required_repos.append(line.strip())
SHOULD_CONTINUE = True
for package in required_packages:
if "==" not in package:
continue
package_name = package.split("==")[0].lower()
required_version = package.split("==")[1]
installed_version = pkg_resources.get_distribution(package_name).version
if installed_version < required_version:
print(
f"Required package {package_name} is out of date (Want {required_version} but have {installed_version})."
)
SHOULD_CONTINUE = False
elif installed_version > required_version:
print(
f"WARNING: Required package {package_name} is newer than required (Want {required_version} but have {installed_version})."
)
for repo in required_repos:
repo_name = repo.split("/")[-1].split(".")[0].lower()
package_name = repo.split("egg=")[-1].lower()
required_version = repo.split("@")[-1].split("#")[0]
if len(required_version) != 40:
# Invalid hash
print(f"Required repo {repo_name} has invalid hash {required_version}.")
continue
package_data = subprocess.run(
["pip", "show", package_name], capture_output=True, text=True, check=True
).stdout
if "Editable project location:" in package_data:
epl = (
package_data.split("Editable project location:")[1]
.split("\n")[0]
.strip()
)
installed_hash = subprocess.run(
["git", "rev-parse", "HEAD"],
capture_output=True,
cwd=epl,
text=True,
check=True,
)
installed_hash = installed_hash.stdout.strip()
if installed_hash != required_version:
print(
f"Required repo {repo_name} is out of date (Want {required_version} but have {installed_hash})."
)
SHOULD_CONTINUE = False
else:
print(
f"Required repo {repo_name} is installed as a package, not a git repo."
)
SHOULD_CONTINUE = False
continue
if not SHOULD_CONTINUE:
print(
'Please run "pip install -r requirements.txt" to install/update required packages.'
)
sys.exit(1)
else:
print("All required packages are installed and up to date.")
print()
return


def type_slowly(element, string, delay=0.3):
# Type slower
for character in string:
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ GitPython==3.1.41
pyotp==2.9.0
python-dotenv==1.0.1
requests==2.31.0
-e git+https://github.com/NelsonDane/robin_stocks.git@f490a2eb0d5fc53afc93e077b3ea2a555124e105#egg=robin_stocks
-e git+https://github.com/NelsonDane/robin_stocks.git@f490a2eb0d5fc53afc93e077b3ea2a555124e105#egg=robin-stocks
schwab-api==0.3.9
selenium==4.17.2
tastytrade==6.6
Expand Down

0 comments on commit a32427b

Please sign in to comment.