Explorar el Código

database update capability for new users. see #8

George C. Privon hace 8 años
padre
commit
e185ad9cbd
Se han modificado 2 ficheros con 84 adiciones y 0 borrados
  1. 9 0
      README.md
  2. 75 0
      update_database.py

+ 9 - 0
README.md

@@ -26,6 +26,15 @@ $ python CarcassonneScore.py
 
 This launches the interactive shell. Press `?` for a list of commands.
 
+To update the database (add new players toggle availability of expansions), use the `update_database.py` command. For example, to add a new player:
+
+```
+$ python update_database.py -n "NEW PLAYER"
+```
+
+Use `python update_database.py -h` to see the full list of options.
+
+
 ### Analysis
 
 A sample analysis jupyter notebook and a sample sqlite database containing one game is available in the `analysis/` directory.

+ 75 - 0
update_database.py

@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+"""
+Database management for Carcassonne score keeping system.
+
+Copyright 2018 George C. Privon
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
+import sys
+import argparse
+import re
+import sqlite3
+
+
+def parseArgs():
+    """
+    Command line arguments
+    """
+
+    parser = argparse.ArgumentParser(description="Update the Carcassonne \
+scoring database.")
+    parser.add_argument('-n', '--newplayer', type=str, default=None,
+                        help='Add a new player.')
+    parser.add_argument('-e', '--enableexpansion', action='store_true',
+                        default=False,
+                        help='Enable an expansion.')
+    parser.add_argument('-d', '--disableexpansion', action='store_true',
+                        default=False,
+                        help='Disable an expansion.')
+
+    return parser.parse_args()
+
+
+def main():
+    """
+    main routine
+    """
+
+    args = parseArgs()
+
+    conn = sqlite3.connect('CarcassonneScore.db')
+    cur = conn.cursor()
+
+    VALID = False
+
+    if args.newplayer:
+        sys.stdout.write("Adding new player: " + args.newplayer)
+        sys.stdout.write(" to the database.\n")
+        while not VALID:
+            ans = input("Is this correct (y/n)? ")
+            if re.match('y', ans, re.IGNORECASE):
+                cur.execute('INSERT INTO players (name) VALUES ("' + \
+                            args.newplayer + '")')
+                VALID = True
+            elif re.match('n', ans, re.IGNORECASE):
+                VALID = True
+
+    conn.commit()
+    conn.close()
+
+
+if __name__ == "__main__":
+    main()