Release Trade Dangerous (Est. 2015) Power user's highly configurable trade optimizer

On reflection I suspect that you might not have chosen to install python for all users, which is why it installed into your profile.
I can absolutely and categorically tell you that I did select to install for all users. I checked so many times before pressing the install button.
However, we got there in the end. Now I just have to learn how to use it. Thanks again
 
Sorry to report that it still doesn't work. As was suggested I installed TDHelper in a folder on my desktop. I ran the TDHelper.exe file, I said no to the update and then at the UI tried the Cmdr Profile. It seemed to run and then closed. On opening again, the Output window reports that "Commander Profile Update completed"
Next I clicked the Update DB - the output is enclosed below. I fully accept that this is now perhaps beyond me :) But I welcome any suggestions. I could start again and perhaps stream the installation and someone more knowledgeable than me might spot what's going wrong.
Thanks once again for the help

Command line: import -P eddblink -O listings
NOTE: Rebuilding cache file: this may take a few moments.
NOTE: Missing "C:\Users\stewa\Desktop\TDH\data\TradeDangerous.prices" file - no price data.
Traceback (most recent call last):
NOTE: Checking for update to 'modules.json'.
File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
WARNING: Problem with download:
return _run_code(code, main_globals, None,
URL: https://elite.tromador.com/files/modules.json
File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
exec(code, run_globals)
WARNING: Problem with download (fallback enabled):
File "C:\Users\stewa\AppData\Roaming\Python\Python310\Scripts\trade.exe\main.py", line 7, in <module>
URL: https://eddb.io/archive/v6/modules.json
File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\trade.py", line 43, in main
cli.main(sys.argv)
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\cli.py", line 70, in main
NOTE: Processing Upgrades: Start time = 2022-01-31 17:06:10.194589
trade(argv)
File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\cli.py", line 125, in trade
results = cmdenv.run(tdb)
File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\commands\commandenv.py", line 83, in run
return self._cmd.run(results, self, tdb)
File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\commands\import_cmd.py", line 126, in run
if not plugin.run():
File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\plugins\eddblink_plug.py", line 1064, in run
self.importUpgrades()
File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\plugins\eddblink_plug.py", line 246, in importUpgrades
with open(str(self.dataPath / self.upgradesPath), "rU") as fh:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\stewa\\Desktop\\TDH\\data\\eddb\\modules.json'

Command completed.
 
That is your python complaining that both my server and then the fallback server have out of date SSL certificates.

I haven't checked fallback but I have no reason to think there's any problem, mine expires at the end of March (and I will renew it before then).

I am not a TDH expert, so lets start with basics.

If you do from command line
trade import -P eddblink -O clean, skipvend
what happens?

If this works, it's a problem with TDH. If it fails, then we need to really think about why your python install is so borked.
 
That is your python complaining that both my server and then the fallback server have out of date SSL certificates.

I haven't checked fallback but I have no reason to think there's any problem, mine expires at the end of March (and I will renew it before then).

I am not a TDH expert, so lets start with basics.

If you do from command line
trade import -P eddblink -O clean, skipvend
what happens?

If this works, it's a problem with TDH. If it fails, then we need to really think about why your python install is so borked.

I did as you requested. If there is some way of reinstalling in order that I don't have this unusual file location, then I am more than willing to make that happen.

Microsoft Windows [Version 10.0.19043.1466]
(c) Microsoft Corporation. All rights reserved.

C:\Users\stewa>trade import -P eddblink -O clean, skipvend
C:\Users\stewa\AppData\Roaming\Python\Python310\Scripts\trade: ERROR: argument filename: not allowed with argument --plug/-P

usage: trade import [--plug PLUG] [--url URL] [--download] [--ignore-unknown] [--option PLUGINOPTIONS]
[--reset-all | --merge-import] [--help] [--debug] [--detail] [--color] [--quiet] [--db DBFILENAME]
[--cwd CWD] [--link-ly MAXSYSTEMLINKLY]
[filename]


C:\Users\stewa>
 
I would uninstall everything again, including Python. This is actually quite fast.
And then install Python again with the path according to the instructions. I have started the update/upgrade via PIP.
That also worked. And earlier I did an update of the DB, also without problems.
 
I would uninstall everything again, including Python. This is actually quite fast.
And then install Python again with the path according to the instructions. I have started the update/upgrade via PIP.
That also worked. And earlier I did an update of the DB, also without problems.
Hi nepomuk, this will be the third time of doing this and I absolutely don't mind. I really would like to stream it so someone can check what I'm doing. on the python install, I know that I selected as the instructions told me to
 
Hi, thanks. I just copied it from the post. I will try again now.
Code:
Microsoft Windows [Version 10.0.19043.1466]
(c) Microsoft Corporation. All rights reserved.

C:\Users\stewa>trade import -P eddblink -O clean,skipvend
NOTE: Rebuilding cache file: this may take a few moments.
NOTE: Missing "C:\Users\stewa\data\TradeDangerous.prices" file - no price data.
NOTE: Checking for update to 'modules.json'.
WARNING: Problem with download:
URL: https://elite.tromador.com/files/modules.json
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
WARNING: Problem with download (fallback enabled):
URL: https://eddb.io/archive/v6/modules.json
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
NOTE: Processing Upgrades: Start time = 2022-01-31 19:37:11.799051
Traceback (most recent call last):
  File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\Scripts\trade.exe\__main__.py", line 7, in <module>
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\trade.py", line 43, in main
    cli.main(sys.argv)
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\cli.py", line 70, in main
    trade(argv)
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\cli.py", line 125, in trade
    results = cmdenv.run(tdb)
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\commands\commandenv.py", line 83, in run
    return self._cmd.run(results, self, tdb)
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\commands\import_cmd.py", line 126, in run
    if not plugin.run():
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\plugins\eddblink_plug.py", line 1064, in run
    self.importUpgrades()
  File "C:\Users\stewa\AppData\Roaming\Python\Python310\site-packages\tradedangerous\plugins\eddblink_plug.py", line 246, in importUpgrades
    with open(str(self.dataPath / self.upgradesPath), "rU") as fh:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\stewa\\data\\eddb\\modules.json'

C:\Users\stewa>
 
When you installed python for all users did you have
Hi nepomuk, this will be the third time of doing this and I absolutely don't mind. I really would like to stream it so someone can check what I'm doing. on the python install, I know that I selected as the instructions told me to

when you installed python for all users were you prompted to elevatate?

According to python docs, if you install the Pyhton Launcher for all users you have to be an admin. If Python was installed under elevation then you will need to run pip under an elevated CMD (Administrator)

I had the same issue. Running CMD as an administrator allowed pip to install to the correct location defined in PATH (C:\Program Files\Python310) instead of installing it into the users roaming directory.
 
When you installed python for all users did you have


when you installed python for all users were you prompted to elevatate?

According to python docs, if you install the Pyhton Launcher for all users you have to be an admin. If Python was installed under elevation then you will need to run pip under an elevated CMD (Administrator)

I had the same issue. Running CMD as an administrator allowed pip to install to the correct location defined in PATH (C:\Program Files\Python310) instead of installing it into the users roaming directory.
I ran the python installer as admin, as it said in the instructions. For the CMD I just got it from the start button. so I will try and run the pip from admin CMD

Thanks
 
I think haffoc might have found what was wrong. Here is what I have just done.
  • uninstalled python
  • at CMD pip uninstall tradedangerous
  • removed everything that was going to my user location
  • restarted my computer
  • installed python as per the instructions and obviously making sure that the installer was running under admin and that it was installing for all users.
  • Launched CMD as admin
  • I was then unsure as to what to do,. should I be here C:\Users\stewa> or here, C:\WINDOWS\system32>
  • I did the following. at the CMD I typed this command "C:\WINDOWS\system32>pip install tradedangerous"
This is what happened

C:\WINDOWS\system32>pip install tradedangerous
Collecting tradedangerous
Downloading tradedangerous-10.13.1-py3-none-any.whl (243 kB)
|████████████████████████████████| 243 kB 3.3 MB/s
Collecting requests
Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)
|████████████████████████████████| 63 kB 4.8 MB/s
Collecting appJar
Downloading appJar-0.94.0.tar.gz (556 kB)
|████████████████████████████████| 556 kB 6.4 MB/s
Collecting certifi>=2017.4.17
Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
|████████████████████████████████| 149 kB 6.4 MB/s
Collecting charset-normalizer~=2.0.0
Downloading charset_normalizer-2.0.11-py3-none-any.whl (39 kB)
Collecting idna<4,>=2.5
Downloading idna-3.3-py3-none-any.whl (61 kB)
|████████████████████████████████| 61 kB 3.8 MB/s
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.8-py2.py3-none-any.whl (138 kB)
|████████████████████████████████| 138 kB 6.4 MB/s
Using legacy 'setup.py install' for appJar, since package 'wheel' is not installed.
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests, appJar, tradedangerous
Running setup.py install for appJar ... done
Successfully installed appJar-0.94.0 certifi-2021.10.8 charset-normalizer-2.0.11 idna-3.3 requests-2.27.1 tradedangerous-10.13.1 urllib3-1.26.8
WARNING: You are using pip version 21.2.4; however, version 22.0.2 is available.
You should consider upgrading via the 'C:\Program Files\Python310\python.exe -m pip install --upgrade pip' command.

I take it that this is what should have happened originally.
This was my next step

C:\WINDOWS\system32>trade
C:\Program Files\Python310\Scripts\trade: TradeDangerous provides a set of trade database facilities for Elite:Dangerous.

Usage: C:\Program Files\Python310\Scripts\trade <command>

Where <command> is one of:

buildcache Build TradeDangerous cache file from sources
buy Find places to buy a given item within range of a given
station.
export CSV exporter for TradeDangerous database.
import TD data import system. On its own, this command lets you
merge station prices from a '.prices' file (entries in the
file that are older than your local data are not loaded).
local Calculate local systems.
market Lists items bought/sold at a given station.
nav Calculate a route between two systems.
olddata Show oldest data in database.
rares Find rares near your current local.
run Calculate best trade run.
sell Find places to sell a given item within range of a given
station.
shipvendor List, add or update available ships to a station
station Add (or update) a station entry
trade Find places to buy a given item within range of a given
station.
update Update prices for a station.

For additional help on a specific command, such as 'update' use
C:\Program Files\Python310\Scripts\trade update -h

C:\WINDOWS\system32>

So I'm thinking that It nearly is working.
I finally tried the following command: trade import -P eddblink -o clean,skipvend
I tried this with and without the space as was commented on above and always receive this output.

C:\WINDOWS\system32>trade import -P eddblink -o clean, skipvend
C:\Program Files\Python310\Scripts\trade: ERROR: argument filename: not allowed with argument --plug/-P

usage: trade import [--plug PLUG] [--url URL] [--download] [--ignore-unknown] [--option PLUGINOPTIONS]
[--reset-all | --merge-import] [--help] [--debug] [--detail] [--color] [--quiet] [--db DBFILENAME]
[--cwd CWD] [--link-ly MAXSYSTEMLINKLY]
[filename]


C:\WINDOWS\system32>

I really feel that its nearly there and I completely and utterly appreciate the help from everyone.

Thanks
 
Ok, the result in the first screenshot looks good.
You could also do the PIP update (last line in the screenshot). But it is not a must.
...

The next step could be done with TDHelper.
The easiest way is to create a TDH directory on the desktop and so on...
You know ... and then make an update via TDH with the switches ALL and CLEAN.
 
Last edited:
Ok, the result in the first screenshot looks good.
You could also do the PIP update (last line in the screenshot). But it is not a must.
...

The next step could be done with TDHelper.
The easiest way is to create a TDH directory on the desktop and so on...
You know ... and then make an update via TDH with the switches ALL and CLEAN.
OK I think i have updated pip, but I still cant get the eddb stuff. I really feel its nearly there, but just not quite. :)
 
OK I think i have updated pip, but I still cant get the eddb stuff. I really feel its nearly there, but just not quite. :)
I have TDHelper on the desktop and I run the exe.
TD opens and the Cmdr Profile works - maybe it crashes, but the info is correct, it has my latest ship listed
but when I run the Update DB I get all this.

Command line: import -P eddblink -O clean
NOTE: Rebuilding cache file: this may take a few moments.
NOTE: Missing "C:\Users\stewa\Desktop\TDH\data\TradeDangerous.prices" file - no price data.
Traceback (most recent call last):
NOTE: Checking for update to 'modules.json'.
File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
WARNING: Problem with download:
return _run_code(code, main_globals, None,
URL: https://elite.tromador.com/files/modules.json
File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
exec(code, run_globals)
WARNING: Problem with download (fallback enabled):
File "C:\Program Files\Python310\Scripts\trade.exe\main.py", line 7, in <module>
URL: https://eddb.io/archive/v6/modules.json
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\trade.py", line 43, in main
cli.main(sys.argv)
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\cli.py", line 70, in main
NOTE: Processing Upgrades: Start time = 2022-01-31 23:14:11.179958
trade(argv)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\cli.py", line 125, in trade
results = cmdenv.run(tdb)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\commands\commandenv.py", line 83, in run
return self._cmd.run(results, self, tdb)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\commands\import_cmd.py", line 126, in run
if not plugin.run():
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\plugins\eddblink_plug.py", line 1064, in run
self.importUpgrades()
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\plugins\eddblink_plug.py", line 246, in importUpgrades
with open(str(self.dataPath / self.upgradesPath), "rU") as fh:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\stewa\\Desktop\\TDH\\data\\eddb\\modules.json'

Command completed.

so now again I'm stuck -- but nepomuk, you must agree its a lot better than it was :)
 
... and CLEAN an FALLBACK the same ?

Have you updated TD via PIP >> pip install --upgrade tradedangerous
Sorry, I have overlooked. Is the latest version (10.13.1)

I don't like the mistakes, though. You can't work with it like that either.
 
Last edited:
C:\Users\stewa>pip install --upgrade tradedangerous
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: tradedangerous in c:\program files\python310\lib\site-packages (10.13.1)
Requirement already satisfied: requests in c:\program files\python310\lib\site-packages (from tradedangerous) (2.27.1)
Requirement already satisfied: appJar in c:\program files\python310\lib\site-packages (from tradedangerous) (0.94.0)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\program files\python310\lib\site-packages (from requests->tradedangerous) (1.26.8)
Requirement already satisfied: idna<4,>=2.5 in c:\program files\python310\lib\site-packages (from requests->tradedangerous) (3.3)
Requirement already satisfied: charset-normalizer~=2.0.0 in c:\program files\python310\lib\site-packages (from requests->tradedangerous) (2.0.11)
Requirement already satisfied: certifi>=2017.4.17 in c:\program files\python310\lib\site-packages (from requests->tradedangerous) (2021.10.8)

C:\Users\stewa>

I think that has worked it seems there are no errors

But then going to TDHelper I get this - seems there is a file missing on the bottom line?
Command line: import -P eddblink -O fallback,clean
NOTE: Rebuilding cache file: this may take a few moments.
NOTE: Missing "C:\Users\stewa\Desktop\TDH\data\TradeDangerous.prices" file - no price data.
Traceback (most recent call last):
NOTE: Checking for update to 'modules.json'.
WARNING: Problem with download (fallback enabled):
File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
URL: https://eddb.io/archive/v6/modules.json
File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
NOTE: Processing Upgrades: Start time = 2022-01-31 23:41:46.683280
exec(code, run_globals)
File "C:\Program Files\Python310\Scripts\trade.exe\main.py", line 7, in <module>
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\trade.py", line 43, in main
cli.main(sys.argv)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\cli.py", line 70, in main
trade(argv)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\cli.py", line 125, in trade
results = cmdenv.run(tdb)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\commands\commandenv.py", line 83, in run
return self._cmd.run(results, self, tdb)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\commands\import_cmd.py", line 126, in run
if not plugin.run():
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\plugins\eddblink_plug.py", line 1064, in run
self.importUpgrades()
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\plugins\eddblink_plug.py", line 246, in importUpgrades
with open(str(self.dataPath / self.upgradesPath), "rU") as fh:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\stewa\\Desktop\\TDH\\data\\eddb\\modules.json'
 
Very strange ...
I do not have this message. Why don't you get the modules.json file ? I do get it.
But I can put it here no problem and you copy it into the directory ...eddb
The error message at the end must look @Tromador. I have no idea about Python.

My update looks like this ... (still running)

1643673459925.png


Ok, enough for me now. Have a good night.
 

Attachments

  • modules.zip
    24 KB · Views: 145
Last edited:
Very strange ...
I do not have this message. Why don't you get the modules.json file ? I do get it.
But I can put it here no problem and you copy it into the directory ...eddb
The error message at the end must look @Tromador. I have no idea about Python.

My update looks like this ... (still running)

View attachment 289086

Ok, enough for me now. Have a good night.
Ok I tried putting the file in the correct location and I thought it was going to run. But failed again. I will post here in case anyone can help.
thanks again nepomuk

Command line: import -P eddblink -O clean
NOTE: Rebuilding cache file: this may take a few moments.
NOTE: Missing "C:\Users\stewa\Desktop\TDH\data\TradeDangerous.prices" file - no price data.
Traceback (most recent call last):
NOTE: Checking for update to 'modules.json'.
File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
WARNING: Problem with download:
URL: https://elite.tromador.com/files/modules.json
File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
File "C:\Program Files\Python310\Scripts\trade.exe\main.py", line 7, in <module>
WARNING: Problem with download (fallback enabled):
URL: https://eddb.io/archive/v6/modules.json
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\trade.py", line 43, in main
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
cli.main(sys.argv)
NOTE: Processing Upgrades: Start time = 2022-02-01 00:09:09.468470
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\cli.py", line 70, in main
NOTE: Finished processing Upgrades. End time = 2022-02-01 00:09:09.480818
trade(argv)
NOTE: Checking for update to 'index.json'.
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\cli.py", line 125, in trade
WARNING: Problem with download:
results = cmdenv.run(tdb)
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\commands\commandenv.py", line 83, in run
URL: https://beta.coriolis.io/data/index.json
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
return self._cmd.run(results, self, tdb)
NOTE: Using Default Ship Index.
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\commands\import_cmd.py", line 126, in run
if not plugin.run():
NOTE: Processing Ships: Start time = 2022-02-01 00:09:10.581847
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\plugins\eddblink_plug.py", line 1084, in run
NOTE: Finished processing Ships. End time = 2022-02-01 00:09:10.586307
self.importSystems()
NOTE: Checking for update to 'systems_populated.jsonl'.
WARNING: Problem with download (fallback enabled):
File "C:\Program Files\Python310\lib\site-packages\tradedangerous\plugins\eddblink_plug.py", line 345, in importSystems
with open(str(self.dataPath / self.sysPopPath), "r", encoding = "utf-8", errors = 'ignore') as f:
URL: https://eddb.io/archive/v6/systems_populated.jsonl
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\stewa\\Desktop\\TDH\\data\\eddb\\systems_populated.jsonl'
Error: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)>
NOTE: Processing Systems: Start time = 2022-02-01 00:09:10.690677

Command completed.
 
Back
Top Bottom