File tree 27 files changed +330
-0
lines changed
27 files changed +330
-0
lines changed Original file line number Diff line number Diff line change
1
+ from authlib .integrations .starlette_client import OAuth
2
+ from starlette .config import Config
3
+ from ..config import config
4
+
5
+ oauth = OAuth (Config (".env" ))
6
+
7
+ oauth .register (
8
+ name = "github" ,
9
+ client_id = config .GITHUB_CLIENT_ID ,
10
+ client_secret = config .GITHUB_CLIENT_SECRET ,
11
+ authorize_url = "https://github.com/login/oauth/authorize" ,
12
+ access_token_url = "https://github.com/login/oauth/access_token" ,
13
+ api_base_url = "https://api.github.com/" ,
14
+ )
15
+
16
+ oauth .register (
17
+ name = "gitlab" ,
18
+ client_id = config .GITLAB_CLIENT_ID ,
19
+ client_secret = config .GITLAB_CLIENT_SECRET ,
20
+ authorize_url = "https://gitlab.com/oauth/authorize" ,
21
+ access_token_url = "https://gitlab.com/oauth/token" ,
22
+ api_base_url = "https://gitlab.com/api/v4/" ,
23
+ )
Original file line number Diff line number Diff line change
1
+ from dotenv import load_dotenv
2
+ import os
3
+
4
+ load_dotenv ()
5
+
6
+ class Config :
7
+ GITHUB_CLIENT_ID = os .getenv ("GITHUB_CLIENT_ID" )
8
+ GITHUB_CLIENT_SECRET = os .getenv ("GITHUB_CLIENT_SECRET" )
9
+ GITLAB_CLIENT_ID = os .getenv ("GITLAB_CLIENT_ID" )
10
+ GITLAB_CLIENT_SECRET = os .getenv ("GITLAB_CLIENT_SECRET" )
11
+ DATABASE_URL = os .getenv ("DATABASE_URL" , "sqlite:///database.db" )
12
+
13
+ config = Config ()
Original file line number Diff line number Diff line change
1
+ from sqlmodel import Session
2
+ from ..main import engine
3
+
4
+ def get_session ():
5
+ with Session (engine ) as session :
6
+ yield session
Original file line number Diff line number Diff line change
1
+ from sqlmodel import SQLModel , Field , Relationship
2
+ from typing import Optional , List
3
+ from datetime import datetime
4
+ import json
5
+ from ..user .model import User # Import User from its new location
6
+
7
+ class Repository (SQLModel , table = True ):
8
+ id : Optional [int ] = Field (default = None , primary_key = True , index = True )
9
+ owner_id : int = Field (foreign_key = "user.id" )
10
+ name : str
11
+ platform : str = Field (regex = "^(github|gitlab)$" )
12
+ api_token : str
13
+ custom_prompt : Optional [str ] = Field (default = None )
14
+ settings : str = Field (default = "{}" )
15
+ created_at : datetime = Field (default_factory = datetime .utcnow )
16
+
17
+ owner : User = Relationship (back_populates = "repositories" )
18
+ reviews : List ["Review" ] = Relationship (back_populates = "repository" )
19
+
20
+ def get_settings (self ) -> dict :
21
+ return json .loads (self .settings )
22
+
23
+ def set_settings (self , settings : dict ):
24
+ self .settings = json .dumps (settings )
Original file line number Diff line number Diff line change
1
+ from fastapi import APIRouter , Depends
2
+ from sqlmodel import Session
3
+ from ..dependencies import get_session
4
+ from .model import Repository
5
+ from .schema import RepositoryCreate , RepositoryResponse
6
+
7
+ router = APIRouter ()
8
+
9
+ @router .post ("/" , response_model = RepositoryResponse )
10
+ def create_repository (repo : RepositoryCreate , session : Session = Depends (get_session )):
11
+ db_repo = Repository .from_orm (repo , update = {"owner_id" : 1 }) # Hardcoded owner_id for now
12
+ db_repo .set_settings (repo .settings .dict ())
13
+ session .add (db_repo )
14
+ session .commit ()
15
+ session .refresh (db_repo )
16
+ return db_repo
Original file line number Diff line number Diff line change
1
+ from pydantic import Field
2
+ from typing import Optional
3
+ from datetime import datetime
4
+ from sqlmodel import SQLModel as SQLModelBase
5
+
6
+ class RepositorySettings (SQLModelBase ):
7
+ ai_provider : Optional [str ] = "openai"
8
+ model : Optional [str ] = "gpt-4"
9
+
10
+ class RepositoryCreate (SQLModelBase ):
11
+ name : str
12
+ platform : str = Field (..., regex = "^(github|gitlab)$" )
13
+ api_token : str
14
+ custom_prompt : Optional [str ] = None
15
+ settings : Optional [RepositorySettings ] = Field (default_factory = lambda : RepositorySettings ())
16
+
17
+ class RepositoryResponse (SQLModelBase ):
18
+ id : int
19
+ owner_id : int
20
+ name : str
21
+ platform : str
22
+ custom_prompt : Optional [str ]
23
+ settings : RepositorySettings
24
+ created_at : datetime
25
+
26
+ class Config :
27
+ orm_mode = True
28
+ property_getters = {"settings" : lambda obj : obj .get_settings ()}
Original file line number Diff line number Diff line change
1
+ from sqlmodel import SQLModel , Field , Relationship
2
+ from typing import Optional , List
3
+ from datetime import datetime
4
+ from ..user .model import User
5
+ from ..repository .model import Repository
6
+
7
+ class Review (SQLModel , table = True ):
8
+ id : Optional [int ] = Field (default = None , primary_key = True , index = True )
9
+ repository_id : int = Field (foreign_key = "repository.id" )
10
+ reviewer_id : Optional [int ] = Field (default = None , foreign_key = "user.id" )
11
+ pr_or_mr_id : str
12
+ title : str
13
+ summary : Optional [str ] = Field (default = None )
14
+ status : str = Field (default = "pending" )
15
+ created_at : datetime = Field (default_factory = datetime .utcnow )
16
+ updated_at : datetime = Field (default_factory = datetime .utcnow )
17
+
18
+ repository : Repository = Relationship (back_populates = "reviews" )
19
+ reviewer : Optional [User ] = Relationship (back_populates = "reviews" )
20
+ comments : List ["ReviewComment" ] = Relationship (back_populates = "review" )
Original file line number Diff line number Diff line change
1
+ from fastapi import APIRouter , Depends
2
+ from sqlmodel import Session
3
+ from ..dependencies import get_session
4
+ from .model import Review
5
+ from .schema import ReviewCreate , ReviewResponse
6
+
7
+ router = APIRouter ()
8
+
9
+ @router .post ("/" , response_model = ReviewResponse )
10
+ def create_review (review : ReviewCreate , session : Session = Depends (get_session )):
11
+ db_review = Review .from_orm (review )
12
+ session .add (db_review )
13
+ session .commit ()
14
+ session .refresh (db_review )
15
+ return db_review
Original file line number Diff line number Diff line change
1
+ from typing import Optional , List
2
+ from datetime import datetime
3
+ from sqlmodel import SQLModel as SQLModelBase
4
+ from ..review_comment .schema import ReviewCommentResponse
5
+
6
+ class ReviewCreate (SQLModelBase ):
7
+ repository_id : int
8
+ pr_or_mr_id : str
9
+ title : str
10
+
11
+ class ReviewResponse (SQLModelBase ):
12
+ id : int
13
+ repository_id : int
14
+ reviewer_id : Optional [int ]
15
+ pr_or_mr_id : str
16
+ title : str
17
+ summary : Optional [str ]
18
+ status : str
19
+ created_at : datetime
20
+ updated_at : datetime
21
+ comments : List [ReviewCommentResponse ] = []
22
+
23
+ class Config :
24
+ orm_mode = True
Original file line number Diff line number Diff line change
1
+ from sqlmodel import SQLModel , Field , Relationship
2
+ from typing import Optional
3
+ from datetime import datetime
4
+ from ..review .model import Review
5
+
6
+ class ReviewComment (SQLModel , table = True ):
7
+ id : Optional [int ] = Field (default = None , primary_key = True , index = True )
8
+ review_id : int = Field (foreign_key = "review.id" )
9
+ file_path : str
10
+ line_number : int
11
+ comment : str
12
+ created_at : datetime = Field (default_factory = datetime .utcnow )
13
+
14
+ review : Review = Relationship (back_populates = "comments" )
Original file line number Diff line number Diff line change
1
+ from fastapi import APIRouter , Depends
2
+ from sqlmodel import Session
3
+ from ..dependencies import get_session
4
+ from .model import ReviewComment
5
+ from .schema import ReviewCommentCreate , ReviewCommentResponse
6
+
7
+ router = APIRouter ()
8
+
9
+ @router .post ("/" , response_model = ReviewCommentResponse )
10
+ def create_review_comment (comment : ReviewCommentCreate , session : Session = Depends (get_session )):
11
+ db_comment = ReviewComment .from_orm (comment )
12
+ session .add (db_comment )
13
+ session .commit ()
14
+ session .refresh (db_comment )
15
+ return db_comment
Original file line number Diff line number Diff line change
1
+ from typing import Optional
2
+ from datetime import datetime
3
+ from sqlmodel import SQLModel as SQLModelBase
4
+
5
+ class ReviewCommentCreate (SQLModelBase ):
6
+ file_path : str
7
+ line_number : int
8
+ comment : str
9
+
10
+ class ReviewCommentResponse (SQLModelBase ):
11
+ id : int
12
+ review_id : int
13
+ file_path : str
14
+ line_number : int
15
+ comment : str
16
+ created_at : datetime
17
+
18
+ class Config :
19
+ orm_mode = True
Original file line number Diff line number Diff line change
1
+ # app/user/__init__.py
2
+ from .model import User
3
+ from .schema import UserCreate , UserResponse
4
+ from .route import router as user_router
Original file line number Diff line number Diff line change
1
+ from sqlmodel import SQLModel , Field , Relationship
2
+ from typing import Optional , List
3
+ from datetime import datetime
4
+
5
+ class User (SQLModel , table = True ):
6
+ id : Optional [int ] = Field (default = None , primary_key = True , index = True )
7
+ email : str = Field (unique = True , index = True )
8
+ username : str = Field (unique = True )
9
+ github_access_token : Optional [str ] = Field (default = None )
10
+ github_refresh_token : Optional [str ] = Field (default = None )
11
+ gitlab_access_token : Optional [str ] = Field (default = None )
12
+ gitlab_refresh_token : Optional [str ] = Field (default = None )
13
+ created_at : datetime = Field (default_factory = datetime .utcnow )
14
+
15
+ repositories : List ["Repository" ] = Relationship (back_populates = "owner" )
16
+ reviews : List ["Review" ] = Relationship (back_populates = "reviewer" )
Original file line number Diff line number Diff line change
1
+ from fastapi import APIRouter , Depends
2
+ from sqlmodel import Session , select
3
+ from ..dependencies import get_session
4
+ from .model import User
5
+ from .schema import UserCreate , UserResponse
6
+
7
+ router = APIRouter ()
8
+
9
+ @router .post ("/" , response_model = UserResponse )
10
+ def create_user (user : UserCreate , session : Session = Depends (get_session )):
11
+ db_user = User .from_orm (user )
12
+ session .add (db_user )
13
+ session .commit ()
14
+ session .refresh (db_user )
15
+ return db_user
Original file line number Diff line number Diff line change
1
+ from pydantic import EmailStr
2
+ from typing import Optional
3
+ from datetime import datetime
4
+ from sqlmodel import SQLModel as SQLModelBase
5
+
6
+ class UserCreate (SQLModelBase ):
7
+ email : EmailStr
8
+ username : str
9
+
10
+ class UserResponse (SQLModelBase ):
11
+ id : int
12
+ email : EmailStr
13
+ username : str
14
+ created_at : datetime
15
+
16
+ class Config :
17
+ orm_mode = True
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ dependencies = [
11
11
" pygithub>=2.6.1" ,
12
12
" python-dotenv>=1.0.1" ,
13
13
" python-gitlab>=5.6.0" ,
14
+ " sqlmodel>=0.0.23" ,
14
15
" tiktoken>=0.9.0" ,
15
16
" uvicorn>=0.34.0" ,
16
17
]
You can’t perform that action at this time.
0 commit comments