No Description
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.

utils.py 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf8 -*-
  2. from Lodel.settings import Settings
  3. common_tables = {
  4. 'relation': 'relation',
  5. 'object': 'object'
  6. }
  7. table_preffix = {
  8. 'relation': 'rel_',
  9. 'object': 'class_',
  10. }
  11. ## @brief indicates if we want ON DELETE CASCADE on foreign keys
  12. # @todo implementation in migration handler
  13. fk_on_delete_cascade = False
  14. ## @brief Lodel_id for the hierachy root
  15. leroot_lodel_id = 0
  16. ## @brief Return a table name given a EmClass or LeClass name
  17. # @param class_name str : The class name
  18. # @return a table name
  19. def object_table_name(class_name):
  20. return ("%s%s" % (table_preffix['object'], class_name)).lower()
  21. ## @brief Return a table name given a class name and a type name
  22. # @param class_name str : The (Em|Le)Class name
  23. # @param type_name str : The (Em|Le)Type name
  24. # @return a table name
  25. def r2t_table_name(class_name, type_name):
  26. return ("%s%s_%s" % (table_preffix['relation'], class_name, type_name)).lower()
  27. ## @brief Return a column name given a field name
  28. # @param field_name : The EmField or LeObject field name
  29. # @return A column name
  30. def column_name(field_name):
  31. return field_name.lower()
  32. ## @brief gets the fk name between two tables
  33. # @param src_table_name str
  34. # @param dst_table_name str
  35. # @return str
  36. def get_fk_name(src_table_name, dst_table_name):
  37. return ("fk_%s_%s" % (src_table_name, dst_table_name)).lower()
  38. ## @brief Exec a query
  39. # @param query str : SQL query
  40. def query(connection, query_string):
  41. if Settings.debug_sql:
  42. print("SQL : ", query_string)
  43. with connection as cur:
  44. try:
  45. cur.execute(query_string)
  46. except Exception as err:
  47. raise err
  48. return cur
  49. ## @brief Identifier escaping
  50. # @param idname str : An SQL identifier
  51. def escape_idname(idname):
  52. if '`' in idname:
  53. raise ValueError("Invalid name : '%s'" % idname)
  54. return '`%s`' % idname
  55. ## Brief add table prefix to a column name
  56. # @param name string: column name to prefix
  57. # @param prefixes dict(prefix:list(name,))
  58. # @return prefixed_name string: the name prefixed
  59. # find the same name in some list of names, prepend the key of the dict to the name
  60. def find_prefix(name, prefixes):
  61. for prefix, names in prefixes:
  62. if name in names:
  63. return column_prefix(prefix, name)
  64. return name
  65. ## prefix a column name with the table name
  66. def column_prefix(table, column):
  67. return '%s.%s' % (table, column)