You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
2.3KB

  1. #
  2. # Copyright (c) 2017-2018 Roxanne Gibson
  3. #
  4. # Permission is hereby granted, free of charge, to any person obtaining a copy
  5. # of this software and associated documentation files (the "Software"), to deal
  6. # in the Software without restriction, including without limitation the rights
  7. # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. # copies of the Software, and to permit persons to whom the Software is
  9. # furnished to do so, subject to the following conditions:
  10. #
  11. # The above copyright notice and this permission notice shall be included in all
  12. # copies or substantial portions of the Software.
  13. #
  14. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  20. # SOFTWARE.
  21. import sqlite3
  22. from os import getcwd
  23. from pony.orm import *
  24. db_dir = getcwd() + "/roxbot/settings/db.sqlite"
  25. db = Database()
  26. db.bind("sqlite", db_dir, create_db=True)
  27. # Entities are committed to the db in the main file during boot up
  28. async def populate_db(bot):
  29. db.generate_mapping(create_tables=True)
  30. await bot.wait_for("ready")
  31. populate_single_settings(bot)
  32. def populate_single_settings(bot):
  33. for guild in bot.guilds:
  34. for name, cog in bot.cogs.items():
  35. try:
  36. if cog.autogen_db:
  37. with db_session:
  38. cog.autogen_db(guild_id=guild.id)
  39. except (AttributeError, TransactionIntegrityError):
  40. pass # No DB settings or already in place
  41. def delete_single_settings(guild):
  42. database = sqlite3.connect(db_dir)
  43. cursor = database.cursor()
  44. cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
  45. for t in cursor.fetchall():
  46. table = t[0]
  47. try:
  48. cursor.execute("DELETE FROM {} WHERE guild_id={}".format(table, guild.id))
  49. except sqlite3.OperationalError:
  50. pass # Table doesn't store guild_id
  51. database.commit()
  52. database.close()