Skip to content

Commit

Permalink
Optimize memory usage and remove globals
Browse files Browse the repository at this point in the history
Reduce top level variable declarations
Create function mapping dict in place of globals
Reuse stock report for robinhood summarization
  • Loading branch information
dormant-user committed May 8, 2023
1 parent fd95b72 commit 2ad7d29
Show file tree
Hide file tree
Showing 25 changed files with 225 additions and 91 deletions.
7 changes: 7 additions & 0 deletions docs/_sources/index.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,13 @@ Files
:members:
:undoc-members:

Functions
=========

.. automodule:: jarvis.executors.functions
:members:
:undoc-members:

Garage Door
===========

Expand Down
11 changes: 11 additions & 0 deletions docs/genindex.html
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,8 @@ <h2 id="F">F</h2>
<li><a href="index.html#jarvis.modules.models.classes.FileIO.frequent">frequent (jarvis.modules.models.classes.FileIO attribute)</a>
</li>
<li><a href="index.html#jarvis.modules.audio.speaker.frequently_used">frequently_used() (in module jarvis.modules.audio.speaker)</a>
</li>
<li><a href="index.html#jarvis.executors.functions.function_mapping">function_mapping() (in module jarvis.executors.functions)</a>
</li>
</ul></td>
</tr></table>
Expand Down Expand Up @@ -1291,6 +1293,13 @@ <h2 id="J">J</h2>

<ul>
<li><a href="index.html#module-jarvis.executors.files">module</a>
</li>
</ul></li>
<li>
jarvis.executors.functions

<ul>
<li><a href="index.html#module-jarvis.executors.functions">module</a>
</li>
</ul></li>
<li>
Expand Down Expand Up @@ -2056,6 +2065,8 @@ <h2 id="M">M</h2>
<li><a href="index.html#module-jarvis.executors.face">jarvis.executors.face</a>
</li>
<li><a href="index.html#module-jarvis.executors.files">jarvis.executors.files</a>
</li>
<li><a href="index.html#module-jarvis.executors.functions">jarvis.executors.functions</a>
</li>
<li><a href="index.html#module-jarvis.executors.github">jarvis.executors.github</a>
</li>
Expand Down
26 changes: 24 additions & 2 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1973,7 +1973,7 @@ <h1>Modals - Settings<a class="headerlink" href="#modals-settings" title="Permal
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="jarvis.api.triggers.stock_report.Investment.watcher">
<span class="sig-name descname"><span class="pre">watcher</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#jarvis.api.triggers.stock_report.Investment.watcher" title="Permalink to this definition">¶</a></dt>
<span class="sig-name descname"><span class="pre">watcher</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#jarvis.api.triggers.stock_report.Investment.watcher" title="Permalink to this definition">¶</a></dt>
<dd><p>Gathers all the information and wraps into parts of strings to create an HTML file.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
Expand Down Expand Up @@ -3010,6 +3010,27 @@ <h1>———-Executors———-<a class="headerlink" href="#executors" title="
</dl>
</dd></dl>

</section>
<section id="module-jarvis.executors.functions">
<span id="functions"></span><h1>Functions<a class="headerlink" href="#module-jarvis.executors.functions" title="Permalink to this heading">¶</a></h1>
<p>Creates a dictionary with the keyword category as key and the function to be called as value.</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Functions</span>
</pre></div>
</div>
<dl class="py function">
<dt class="sig sig-object py" id="jarvis.executors.functions.function_mapping">
<span class="sig-prename descclassname"><span class="pre">jarvis.executors.functions.</span></span><span class="sig-name descname"><span class="pre">function_mapping</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">OrderedDict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#jarvis.executors.functions.function_mapping" title="Permalink to this definition">¶</a></dt>
<dd><p>Returns an ordered dictionary of functions mapping.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>OrderedDict of category and keywords as key-value pairs.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>OrderedDict</p>
</dd>
</dl>
</dd></dl>

</section>
<section id="module-jarvis.executors.myq_controller">
<span id="garage-door"></span><h1>Garage Door<a class="headerlink" href="#module-jarvis.executors.myq_controller" title="Permalink to this heading">¶</a></h1>
Expand Down Expand Up @@ -6082,7 +6103,7 @@ <h1>Conditions<a class="headerlink" href="#id2" title="Permalink to this heading
<dl class="py function">
<dt class="sig sig-object py" id="jarvis.modules.conditions.keywords_base.keyword_mapping">
<span class="sig-prename descclassname"><span class="pre">jarvis.modules.conditions.keywords_base.</span></span><span class="sig-name descname"><span class="pre">keyword_mapping</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">OrderedDict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#jarvis.modules.conditions.keywords_base.keyword_mapping" title="Permalink to this definition">¶</a></dt>
<dd><p>Returns a dictionary of base keywords mapping.</p>
<dd><p>Returns an ordered dictionary of base keywords mapping.</p>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<ul class="simple">
Expand Down Expand Up @@ -10395,6 +10416,7 @@ <h3><a href="#">Table of Contents</a></h3>
<li><a class="reference internal" href="#module-jarvis.executors.display_functions">DisplayFunctions</a></li>
<li><a class="reference internal" href="#module-jarvis.executors.face">Face</a></li>
<li><a class="reference internal" href="#module-jarvis.executors.files">Files</a></li>
<li><a class="reference internal" href="#module-jarvis.executors.functions">Functions</a></li>
<li><a class="reference internal" href="#module-jarvis.executors.myq_controller">Garage Door</a></li>
<li><a class="reference internal" href="#module-jarvis.executors.github">GitHub</a></li>
<li><a class="reference internal" href="#module-jarvis.executors.guard">Guard</a></li>
Expand Down
Binary file modified docs/objects.inv
Binary file not shown.
5 changes: 5 additions & 0 deletions docs/py-modindex.html
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,11 @@ <h1>Python Module Index</h1>
<td>&#160;&#160;&#160;
<a href="index.html#module-jarvis.executors.files"><code class="xref">jarvis.executors.files</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="index.html#module-jarvis.executors.functions"><code class="xref">jarvis.executors.functions</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
Expand Down
2 changes: 1 addition & 1 deletion docs/searchindex.js

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions docs_gen/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,13 @@ Files
:members:
:undoc-members:

Functions
=========

.. automodule:: jarvis.executors.functions
:members:
:undoc-members:

Garage Door
===========

Expand Down
2 changes: 1 addition & 1 deletion jarvis/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
from multiprocessing import current_process

version = "3.0b"
version = "3.0a"

install_script = os.path.join(os.path.dirname(__file__), 'lib', 'install.sh')

Expand Down
39 changes: 26 additions & 13 deletions jarvis/api/triggers/stock_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,22 @@ def __init__(self, logger: logging.Logger):
self.result = []
self.rh = rh

def watcher(self) -> Tuple[str, str, str, str]:
def watcher(self) -> Tuple[str, str, str, str, str]:
"""Gathers all the information and wraps into parts of strings to create an HTML file.
Returns:
tuple:
Returns a tuple of portfolio header, profit, loss, and current profit/loss compared from purchased.
"""
shares_total, loss_dict, profit_dict = [], {}, {}
n, n_ = 0, 0
num_stocks, num_shares = 0, 0
self.logger.info('Gathering portfolio.')
for data in self.result:
shares_count = int(data['quantity'].split('.')[0])
if not shares_count:
continue
n += 1
n_ += shares_count
num_stocks += 1
num_shares += shares_count
share_id = str(data['instrument'].split('/')[-2])
try:
raw_details = self.rh.get_quote(share_id)
Expand Down Expand Up @@ -101,15 +101,20 @@ def watcher(self) -> Tuple[str, str, str, str]:
'The above values might differ from overall profit/loss if multiple shares ' \
'of the stock were purchased at different prices.'
net_worth = round(float(self.rh.equity()), 2)
output = f'Total number of stocks purchased: {n:,}\n'
output += f'Total number of shares owned: {n_:,}\n'
output = f'Total number of stocks purchased: {num_stocks:,}\n'
output += f'Total number of shares owned: {num_shares:,}\n'
output += f'\nCurrent value of your total investment is: ${net_worth:,}'
total_buy = round(math.fsum(shares_total), 2)
output += f'\nValue of your total investment while purchase is: ${total_buy:,}'
total_diff = round(float(net_worth - total_buy), 2)
rh_text = f"You have purchased {num_stocks:,} stocks and currently own {num_shares:,} shares sir. " \
f"Your total investment is ${round(net_worth):,}, and it was ${round(total_buy):,} when you " \
f"purchased. Currently we are on an overall "
if total_diff < 0:
rh_text += f"loss of ${round(total_diff):,} {models.env.title}"
output += f'\n\nOverall Loss: ${total_diff:,}'
else:
rh_text += f"profit of ${round(total_diff):,} {models.env.title}"
output += f'\n\nOverall Profit: ${total_diff:,}'
yesterday_close = round(float(self.rh.equity_previous_close()), 2)
two_day_diff = round(float(net_worth - yesterday_close), 2)
Expand All @@ -118,7 +123,7 @@ def watcher(self) -> Tuple[str, str, str, str]:
output += f"\nCurrent Dip: ${two_day_diff:,}"
else:
output += f"\nCurrent Spike: ${two_day_diff:,}"
return port_msg, profit_output, loss_output, output
return port_msg, profit_output, loss_output, output, rh_text

def watchlist(self, interval: str = 'hour', strict: bool = False) -> Tuple[str, str]:
"""Sweeps all watchlist stocks and compares current price with historical data (24h ago) to wrap as a string.
Expand Down Expand Up @@ -178,7 +183,7 @@ def gatherer(self) -> NoReturn:
return
current_time = datetime.now()

port_head, profit, loss, overall_result = self.watcher()
port_head, profit, loss, overall_result, summary = self.watcher()
s1, s2 = self.watchlist()
self.logger.info('Generating HTMl file.')

Expand All @@ -199,6 +204,12 @@ def gatherer(self) -> NoReturn:
with open(models.fileio.robinhood, 'w') as static_file:
static_file.write(rendered)
self.logger.info("Static file '%s' has been generated.", models.fileio.robinhood)
with db.connection:
cursor = db.connection.cursor()
cursor.execute("DELETE FROM robinhood;")
cursor.execute("INSERT or REPLACE INTO robinhood (summary) VALUES (?);", (summary,))
db.connection.commit()
self.logger.info("Stored summary in database.")

def report_gatherer(self) -> NoReturn:
"""Runs gatherer to call other dependent methods."""
Expand All @@ -216,13 +227,15 @@ def report_gatherer(self) -> NoReturn:

current_process().name = "StockReport"
from jarvis.executors import crontab
from jarvis.modules.database import database
from jarvis.modules.exceptions import EgressErrors
from jarvis.modules.logger import config
from jarvis.modules.logger.custom_logger import logger as main_logger
from jarvis.modules.logger import config, custom_logger
from jarvis.modules.models import models
from jarvis.modules.templates import templates

config.multiprocessing_logger(filename=crontab.LOG_FILE)
for log_filter in main_logger.filters:
main_logger.removeFilter(filter=log_filter)
Investment(logger=main_logger).report_gatherer()
for log_filter in custom_logger.logger.filters:
custom_logger.logger.removeFilter(filter=log_filter)

db = database.Database(database=models.fileio.base_db)
Investment(logger=custom_logger.logger).report_gatherer()
Loading

0 comments on commit 2ad7d29

Please sign in to comment.