apps.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import sys
  2. import inspect
  3. from typing import List, Dict, Any, Optional
  4. from pathlib import Path
  5. import django
  6. from django.apps import AppConfig
  7. from django.core.checks import Tags, Warning, register
  8. from django.db.backends.sqlite3.base import Database as sqlite3
  9. from pydantic import (
  10. Field,
  11. SerializeAsAny,
  12. )
  13. from pydantic_pkgr import SemVer, BinProvider, BinProviderName, ProviderLookupDict, BinName, Binary, EnvProvider, NpmProvider
  14. from plugantic.extractors import Extractor, ExtractorName
  15. from plugantic.plugins import Plugin
  16. from plugantic.configs import ConfigSet, ConfigSectionName
  17. from plugantic.replayers import Replayer
  18. class PythonBinary(Binary):
  19. name: BinName = 'python'
  20. providers_supported: List[BinProvider] = [EnvProvider()]
  21. provider_overrides: Dict[str, Any] = {
  22. 'env': {
  23. 'subdeps': \
  24. lambda: 'python3 python3-minimal python3-pip python3-virtualenv',
  25. 'abspath': \
  26. lambda: sys.executable,
  27. 'version': \
  28. lambda: '{}.{}.{}'.format(*sys.version_info[:3]),
  29. },
  30. }
  31. class SqliteBinary(Binary):
  32. name: BinName = 'sqlite'
  33. providers_supported: List[BinProvider] = [EnvProvider()]
  34. provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
  35. 'env': {
  36. 'abspath': \
  37. lambda: Path(inspect.getfile(sqlite3)),
  38. 'version': \
  39. lambda: SemVer(sqlite3.version),
  40. },
  41. }
  42. class DjangoBinary(Binary):
  43. name: BinName = 'django'
  44. providers_supported: List[BinProvider] = [EnvProvider()]
  45. provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
  46. 'env': {
  47. 'abspath': \
  48. lambda: inspect.getfile(django),
  49. 'version': \
  50. lambda: django.VERSION[:3],
  51. },
  52. }
  53. class BasicReplayer(Replayer):
  54. name: str = 'basic'
  55. class BasePlugin(Plugin):
  56. name: str = 'base'
  57. configs: List[SerializeAsAny[ConfigSet]] = []
  58. binaries: List[SerializeAsAny[Binary]] = [PythonBinary(), SqliteBinary(), DjangoBinary()]
  59. extractors: List[SerializeAsAny[Extractor]] = []
  60. replayers: List[SerializeAsAny[Replayer]] = [BasicReplayer()]
  61. PLUGINS = [BasePlugin()]
  62. class BaseConfig(AppConfig):
  63. default_auto_field = 'django.db.models.BigAutoField'
  64. name = 'builtin_plugins.base'