Added a __main__ script
Now you can run via `python3 -m asciifarm`, `python asciifarm`, or install it via pip. Can probably run the sdist zip file too, if you were into that sort of thing.
This commit is contained in:
parent
ac01332de0
commit
4bd76c2b8c
|
@ -58,6 +58,8 @@ start up a new shell:
|
||||||
cd asciifarm
|
cd asciifarm
|
||||||
pipenv shell --three
|
pipenv shell --three
|
||||||
|
|
||||||
|
Next time you'll just need to `cd asciifarm && pipenv shell`.
|
||||||
|
|
||||||
### `venv` style
|
### `venv` style
|
||||||
|
|
||||||
What's that? You can't install pipenv (not even with `--user`)? That's OK, you
|
What's that? You can't install pipenv (not even with `--user`)? That's OK, you
|
||||||
|
|
140
asciifarm/__main__.py
Normal file
140
asciifarm/__main__.py
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
if sys.version_info[0] < 3:
|
||||||
|
sys.exit('asciifarm currently only supports python3. Try `python3 {}`'.format(' '.join(sys.argv)))
|
||||||
|
|
||||||
|
# Munge the path if we're called without `-m`
|
||||||
|
if not __package__:
|
||||||
|
import pathlib
|
||||||
|
sys.path.append(str(pathlib.Path(__file__).parent.parent.absolute()))
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import getpass
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
from textwrap import dedent
|
||||||
|
|
||||||
|
from asciifarm import client
|
||||||
|
|
||||||
|
|
||||||
|
thisPath = os.path.dirname(__file__)
|
||||||
|
charMapPath = os.path.join(thisPath, "charmaps")
|
||||||
|
keybindingsPath = os.path.join(thisPath, "keybindings")
|
||||||
|
|
||||||
|
standardCharFiles = [name[:-5] for name in os.listdir(charMapPath) if name[-5:] == ".json"]
|
||||||
|
standardKeyFiles = [name[:-5] for name in os.listdir(keybindingsPath) if name[-5:] == ".json"]
|
||||||
|
|
||||||
|
|
||||||
|
default_addresses = {
|
||||||
|
"abstract": "asciifarm",
|
||||||
|
"unix": "asciifarm.socket",
|
||||||
|
"inet": "localhost:9021",
|
||||||
|
}
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="The asciifarm client and server."
|
||||||
|
" Run client --help or server --help for more help",
|
||||||
|
)
|
||||||
|
subparser = parser.add_subparsers(dest='command')
|
||||||
|
client_parser = subparser.add_parser(
|
||||||
|
'client',
|
||||||
|
epilog=dedent(
|
||||||
|
"""
|
||||||
|
Gameplay information:
|
||||||
|
Walk around and explore the rooms.
|
||||||
|
Kill the goblins and plant the seeds.
|
||||||
|
|
||||||
|
~troido
|
||||||
|
"""
|
||||||
|
),
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
)
|
||||||
|
server_parser = subparser.add_parser('server')
|
||||||
|
|
||||||
|
for p in client_parser, server_parser:
|
||||||
|
p.add_argument("-a", "--address",
|
||||||
|
help="""
|
||||||
|
The address of the socket.
|
||||||
|
When the socket type is 'abstract' this is just a name.
|
||||||
|
When it is 'unix' this is a filename.
|
||||||
|
When it is 'inet' is should be in the format
|
||||||
|
'address:port', eg 'localhost:8080'.
|
||||||
|
Defaults depends on the socket type
|
||||||
|
""")
|
||||||
|
p.add_argument("-s", "--socket",
|
||||||
|
help="""
|
||||||
|
The socket type. 'unix' is unix domain sockets,
|
||||||
|
'abstract' is abstract unix domain sockets
|
||||||
|
and 'inet' is inet sockets.
|
||||||
|
""",
|
||||||
|
choices=["abstract", "unix", "inet"],
|
||||||
|
default="abstract",
|
||||||
|
)
|
||||||
|
|
||||||
|
client_parser.add_argument('-n', '--name',
|
||||||
|
help='Your player name (must be unique!). Defaults to username',
|
||||||
|
default=getpass.getuser(),
|
||||||
|
)
|
||||||
|
client_parser.add_argument('-k', '--keybindings',
|
||||||
|
help='''
|
||||||
|
The file with the keybindings.
|
||||||
|
If it is either of these names: {} it will be
|
||||||
|
loaded from the keybindings directory.
|
||||||
|
'''.format(standardKeyFiles),
|
||||||
|
default="default",
|
||||||
|
)
|
||||||
|
client_parser.add_argument('-c', '--characters',
|
||||||
|
help='''
|
||||||
|
The file with the character mappings for the graphics.
|
||||||
|
If it is either of these names: {} it will be loaded
|
||||||
|
from the charmaps directory.
|
||||||
|
'''.format(standardCharFiles),
|
||||||
|
default="default",
|
||||||
|
)
|
||||||
|
client_parser.add_argument('-l', '--colours', '--colors',
|
||||||
|
help='Use ANSI color escape sequences',
|
||||||
|
action="store_true",
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.command is None:
|
||||||
|
parser.print_help()
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
address = args.address or default_addresses[args.socket]
|
||||||
|
if args.socket == "abstract":
|
||||||
|
address = '\0' + address
|
||||||
|
elif args.socket == "inet":
|
||||||
|
hostname, port = address.split(':')
|
||||||
|
address = (hostname, int(port))
|
||||||
|
|
||||||
|
if args.command == 'client':
|
||||||
|
charFile = args.characters
|
||||||
|
if args.characters in standardCharFiles:
|
||||||
|
charFile = os.path.join(charMapPath, args.characters + ".json")
|
||||||
|
with open(charFile, 'r') as cf:
|
||||||
|
charMap = json.load(cf)
|
||||||
|
|
||||||
|
keyFile = args.keybindings
|
||||||
|
if keyFile in standardKeyFiles:
|
||||||
|
keyFile = os.path.join(keybindingsPath, keyFile + ".json")
|
||||||
|
with open(keyFile, 'r') as kf:
|
||||||
|
keybindings = json.load(kf)
|
||||||
|
|
||||||
|
client.main(args.name, args.socket, address, keybindings, charMap, args.colours)
|
||||||
|
elif args.command == 'server':
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
worldData = loader.loadWorld(args.world)
|
||||||
|
mainloop.Game(args.socket, worldData).start(address)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
5
setup.py
5
setup.py
|
@ -17,10 +17,13 @@ setup(
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'asciifarm = asciifarm.playgame:main',
|
'asciifarm = asciifarm.playgame:main',
|
||||||
'hostfarm = asciifarm.hostfarms:main',
|
'hostfarm = asciifarm.hostfarms:main',
|
||||||
|
# TODO: troido, if you want just one asciifarm command, change
|
||||||
|
# this to asccifarm and remove the previous two lines -wangofett, 2017-10-27
|
||||||
|
'testasciifarm = asciifarm.__main__:main',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
install_requires=[
|
install_requires=[
|
||||||
# TODO: Put requirements here -wangofett, 2017-10-26
|
# TODO: Put other requirements here -wangofett, 2017-10-26
|
||||||
],
|
],
|
||||||
tests_require=[
|
tests_require=[
|
||||||
# TODO: put tests requirements here -wangofett, 2017-10-26
|
# TODO: put tests requirements here -wangofett, 2017-10-26
|
||||||
|
|
Loading…
Reference in New Issue
Block a user