import asyncpg import asyncio from risotto.config import get_config VERSION_INIT = """ -- Source CREATE TABLE Source ( SourceId SERIAL PRIMARY KEY, SourceName VARCHAR(255) NOT NULL UNIQUE, SourceURL TEXT ); -- Release CREATE TABLE Release ( ReleaseId SERIAL PRIMARY KEY, ReleaseName VARCHAR(255) NOT NULL, ReleaseSourceId INTEGER NOT NULL, ReleaseDistribution VARCHAR(20) CONSTRAINT releasedistribution_choice CHECK (ReleaseDistribution IN ('last', 'n-1', 'n-2')), UNIQUE (ReleaseName, ReleaseSourceId), UNIQUE (ReleaseDistribution, ReleaseSourceId), FOREIGN KEY (ReleaseSourceId) REFERENCES Source(SourceId) ); -- Servermodel CREATE TABLE Servermodel ( ServermodelId SERIAL PRIMARY KEY, ServermodelName VARCHAR(255) NOT NULL, ServermodelDescription VARCHAR(255) NOT NULL, ServermodelParentsId INTEGER [] DEFAULT '{}', ServermodelReleaseId INTEGER NOT NULL, ServermodelApplicationserviceId INTEGER NOT NULL, UNIQUE (ServermodelName, ServermodelReleaseId) ); CREATE INDEX ServermodelApplicationserviceId_index ON Servermodel (ServermodelApplicationserviceId); -- Applicationservice CREATE TABLE Applicationservice ( ApplicationserviceId SERIAL PRIMARY KEY, ApplicationserviceName VARCHAR(255) NOT NULL, ApplicationserviceDescription VARCHAR(255) NOT NULL, ApplicationserviceReleaseId INTEGER NOT NULL, UNIQUE (ApplicationserviceName, ApplicationserviceReleaseId) ); CREATE TABLE ApplicationserviceDependency ( ApplicationserviceId INTEGER NOT NULL, ApplicationserviceDependencyId INTEGER NOT NULL, UNIQUE(ApplicationserviceId, ApplicationserviceDependencyId), FOREIGN KEY (ApplicationserviceId) REFERENCES Applicationservice(ApplicationserviceId), FOREIGN KEY (ApplicationserviceDependencyId) REFERENCES Applicationservice(ApplicationserviceId) ); -- Server CREATE TABLE Server ( ServerId SERIAL PRIMARY KEY, ServerName VARCHAR(255) NOT NULL UNIQUE, ServerDescription VARCHAR(255) NOT NULL, ServerServermodelId INTEGER NOT NULL ); -- User, Role and ACL CREATE TABLE RisottoUser ( UserId SERIAL PRIMARY KEY, UserLogin VARCHAR(100) NOT NULL UNIQUE, UserName VARCHAR(100) NOT NULL, UserSurname VARCHAR(100) NOT NULL ); CREATE TABLE UserRole ( RoleId SERIAL PRIMARY KEY, RoleUserId INTEGER NOT NULL, RoleName VARCHAR(255) NOT NULL, RoleAttribute VARCHAR(255), RoleAttributeValue VARCHAR(255), FOREIGN KEY (RoleUserId) REFERENCES RisottoUser(UserId) ); CREATE TABLE URI ( URIId SERIAL PRIMARY KEY, URIName VARCHAR(255) NOT NULL UNIQUE ); CREATE TABLE RoleURI ( RoleName VARCHAR(255) NOT NULL, URIId INTEGER NOT NULL, FOREIGN KEY (URIId) REFERENCES URI(URIId), PRIMARY KEY (RoleName, URIId) ); -- Log CREATE TABLE log( Msg VARCHAR(255) NOT NULL, Level VARCHAR(10) NOT NULL, Path VARCHAR(255), Username VARCHAR(100) NOT NULL, Data JSON, Date timestamp DEFAULT current_timestamp ); """ async def main(): db_conf = get_config()['database']['dsn'] pool = await asyncpg.create_pool(db_conf) async with pool.acquire() as connection: async with connection.transaction(): returns = await connection.execute(VERSION_INIT) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main()) # asyncio.run(main())