|
| 1 | +from os import environ |
| 2 | + |
| 3 | +from testcontainers.core.generic import DbContainer |
| 4 | + |
| 5 | + |
| 6 | +class SqlServerContainer(DbContainer): |
| 7 | + SQLSERVER_PASSWORD = environ.get("SQLSERVER_PASSWORD", "1Secure*Password1") |
| 8 | + SQLSERVER_USER = "SA" |
| 9 | + SQLSERVER_DBNAME = "tempdb" |
| 10 | + |
| 11 | + def __init__(self, image="mcr.microsoft.com/mssql/server:2019-latest", **kwargs): |
| 12 | + super(SqlServerContainer, self).__init__(image) |
| 13 | + self.port_to_expose = 1433 |
| 14 | + self.with_exposed_ports(self.port_to_expose) |
| 15 | + self.ACCEPT_EULA = 'Y' |
| 16 | + self.MSSQL_PID = 'Developer' |
| 17 | + |
| 18 | + if 'SQLSERVER_PASSWORD' in kwargs: |
| 19 | + self.SQLSERVER_PASSWORD = kwargs['SQLSERVER_PASSWORD'] |
| 20 | + if 'SQLSERVER_USER' in kwargs: |
| 21 | + self.SQLSERVER_USER = kwargs['SQLSERVER_USER'] |
| 22 | + if 'SQLSERVER_DBNAME' in kwargs: |
| 23 | + self.SQLSERVER_DBNAME = kwargs['SQLSERVER_DBNAME'] |
| 24 | + |
| 25 | + def _configure(self): |
| 26 | + self.with_env("SA_PASSWORD", self.SQLSERVER_PASSWORD) |
| 27 | + self.with_env("SQLSERVER_USER", self.SQLSERVER_USER) |
| 28 | + self.with_env("SQLSERVER_DBNAME", self.SQLSERVER_DBNAME) |
| 29 | + self.with_env("ACCEPT_EULA", self.ACCEPT_EULA) |
| 30 | + self.with_env("MSSQL_PID", self.MSSQL_PID) |
| 31 | + |
| 32 | + def get_connection_url(self): |
| 33 | + return super()._create_connection_url(dialect="mssql+pymssql", |
| 34 | + username=self.SQLSERVER_USER, |
| 35 | + password=self.SQLSERVER_PASSWORD, |
| 36 | + db_name=self.SQLSERVER_DBNAME, |
| 37 | + port=self.port_to_expose) |
0 commit comments