mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Add the pkm subcommand to pokedex
This commit is contained in:
parent
4dcff2e343
commit
93aa4ca60e
1 changed files with 84 additions and 0 deletions
|
@ -2,11 +2,15 @@
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import textwrap
|
||||||
|
import json
|
||||||
|
import base64
|
||||||
|
|
||||||
import pokedex.db
|
import pokedex.db
|
||||||
import pokedex.db.load
|
import pokedex.db.load
|
||||||
import pokedex.db.tables
|
import pokedex.db.tables
|
||||||
import pokedex.lookup
|
import pokedex.lookup
|
||||||
|
import pokedex.struct
|
||||||
from pokedex import defaults
|
from pokedex import defaults
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
@ -260,6 +264,85 @@ def command_lookup(*args):
|
||||||
print
|
print
|
||||||
|
|
||||||
|
|
||||||
|
def command_pkm(*args):
|
||||||
|
if args and args[0] == 'encode':
|
||||||
|
mode = 'encode'
|
||||||
|
elif args and args[0] == 'decode':
|
||||||
|
mode = 'decode'
|
||||||
|
else:
|
||||||
|
print textwrap.dedent(u"""
|
||||||
|
Convert binary Pokémon data (aka PKM files) to/from JSON/YAML.
|
||||||
|
usage: pokedex pkm (encode|decode) [options] <file> ...
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
encode Convert a JSON or YAML representation of a
|
||||||
|
Pokémon to the binary format.
|
||||||
|
decode Convert the binary format to a JSON/YAML
|
||||||
|
representation.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--gen=NUM, -g Generation to use (4 or 5)
|
||||||
|
--crypt, -c Use encrypted binary format.
|
||||||
|
--yaml, -y Use YAML as the human-readable format.
|
||||||
|
Requires the PyYAML library to be installed.
|
||||||
|
Default is to use JSON.
|
||||||
|
--base64, -b Use Base64 encoding for the binary format.
|
||||||
|
By default, on for 'encode' but off for 'decode'
|
||||||
|
--binary, -B Output raw binary data, do not use Base64
|
||||||
|
|
||||||
|
If no files are given, reads from standard input.
|
||||||
|
""").encode(sys.getdefaultencoding(), 'replace')
|
||||||
|
return
|
||||||
|
parser = get_parser(verbose=False)
|
||||||
|
parser.add_option('-g', '--gen', default=5, type=int)
|
||||||
|
parser.add_option('-c', '--crypt', action='store_true')
|
||||||
|
parser.add_option('-y', '--yaml', action='store_true')
|
||||||
|
parser.add_option('-b', '--base64', action='store_true',
|
||||||
|
default=(mode == 'encode'))
|
||||||
|
parser.add_option('-B', '--no-base64', action='store_false', dest='base64')
|
||||||
|
options, files = parser.parse_args(list(args[1:]))
|
||||||
|
|
||||||
|
session = get_session(options)
|
||||||
|
cls = pokedex.struct.save_file_pokemon_classes[options.gen]
|
||||||
|
if options.yaml:
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
if not files:
|
||||||
|
# Use sys.stdin in place of name, handle specially later
|
||||||
|
files = [sys.stdin]
|
||||||
|
|
||||||
|
for filename in files:
|
||||||
|
if filename is sys.stdin:
|
||||||
|
content = sys.stdin.read()
|
||||||
|
else:
|
||||||
|
with open(filename) as f:
|
||||||
|
content = f.read()
|
||||||
|
if mode == 'encode':
|
||||||
|
if options.yaml:
|
||||||
|
dict_ = yaml.load(content)
|
||||||
|
else:
|
||||||
|
dict_ = json.loads(content)
|
||||||
|
struct = cls(session=session, dict_=dict_)
|
||||||
|
if options.crypt:
|
||||||
|
data = struct.as_encrypted
|
||||||
|
else:
|
||||||
|
data = struct.as_struct
|
||||||
|
if options.base64:
|
||||||
|
print base64.b64encode(data)
|
||||||
|
else:
|
||||||
|
sys.stdout.write(data)
|
||||||
|
else:
|
||||||
|
if options.base64:
|
||||||
|
content = base64.b64decode(content)
|
||||||
|
struct = cls(
|
||||||
|
blob=content, encrypted=options.crypt, session=session)
|
||||||
|
dict_ = struct.export_dict()
|
||||||
|
if options.yaml:
|
||||||
|
print yaml.safe_dump(dict_, explicit_start=True),
|
||||||
|
else:
|
||||||
|
print json.dumps(dict_),
|
||||||
|
|
||||||
|
|
||||||
def command_help():
|
def command_help():
|
||||||
print u"""pokedex -- a command-line Pokédex interface
|
print u"""pokedex -- a command-line Pokédex interface
|
||||||
usage: pokedex {command} [options...]
|
usage: pokedex {command} [options...]
|
||||||
|
@ -269,6 +352,7 @@ See http://bugs.veekun.com/projects/pokedex/wiki/CLI for more documentation.
|
||||||
Commands:
|
Commands:
|
||||||
help Displays this message.
|
help Displays this message.
|
||||||
lookup [thing] Look up something in the Pokédex.
|
lookup [thing] Look up something in the Pokédex.
|
||||||
|
pkm Binary Pokémon format encoding/decoding. (experimental)
|
||||||
|
|
||||||
System commands:
|
System commands:
|
||||||
load Load Pokédex data into a database from CSV files.
|
load Load Pokédex data into a database from CSV files.
|
||||||
|
|
Loading…
Reference in a new issue