Skip to content

Commit 75b92bd

Browse files
committed
Add new final source code folder
1 parent f6ae557 commit 75b92bd

File tree

6 files changed

+34
-40
lines changed

6 files changed

+34
-40
lines changed
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
anyio==3.5.0
2-
asgiref==3.5.0
3-
click==8.0.4
1+
anyio==3.6.0
2+
asgiref==3.5.1
3+
click==8.1.3
44
decorator==5.1.1
55
fastapi==0.75.0
66
h11==0.13.0
@@ -11,6 +11,6 @@ six==1.16.0
1111
sniffio==1.2.0
1212
SQLAlchemy==1.4.32
1313
starlette==0.17.1
14-
typing_extensions==4.1.1
14+
typing_extensions==4.2.0
1515
uvicorn==0.17.6
1616
validators==0.18.2

fastapi-url-shortener/source_code_final/shortener_app/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Config:
1212
env_file = ".env"
1313

1414

15-
@lru_cache()
15+
@lru_cache
1616
def get_settings() -> Settings:
1717
settings = Settings()
1818
print(f"Loading settings for: {settings.env_name}")

fastapi-url-shortener/source_code_final/shortener_app/crud.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
11
from sqlalchemy.orm import Session
22

3-
from . import utils, models, schemas
4-
5-
6-
def get_db_url_by_key(db: Session, url_key: str) -> models.URL:
7-
return (
8-
db.query(models.URL)
9-
.filter(models.URL.key == url_key, models.URL.is_active)
10-
.first()
11-
)
3+
from . import keygen, models, schemas
124

135

146
def create_db_url(db: Session, url: schemas.URLBase) -> models.URL:
15-
key = utils.generate_unique_key(db)
16-
secret_key = f"{key}_{utils.create_random_key(length=8)}"
7+
key = keygen.create_unique_random_key(db)
8+
secret_key = f"{key}_{keygen.create_random_key(length=8)}"
179
db_url = models.URL(
1810
target_url=url.target_url, key=key, secret_key=secret_key
1911
)
@@ -23,6 +15,14 @@ def create_db_url(db: Session, url: schemas.URLBase) -> models.URL:
2315
return db_url
2416

2517

18+
def get_db_url_by_key(db: Session, url_key: str) -> models.URL:
19+
return (
20+
db.query(models.URL)
21+
.filter(models.URL.key == url_key, models.URL.is_active)
22+
.first()
23+
)
24+
25+
2626
def get_db_url_by_secret_key(db: Session, secret_key: str) -> models.URL:
2727
return (
2828
db.query(models.URL)
@@ -38,9 +38,7 @@ def update_db_clicks(db: Session, db_url: schemas.URL) -> models.URL:
3838
return db_url
3939

4040

41-
def deactivate_db_url_by_secret_key(
42-
db: Session, secret_key: str
43-
) -> models.URL:
41+
def deactivate_db_url_by_secret_key(db: Session, secret_key: str) -> models.URL:
4442
db_url = get_db_url_by_secret_key(db, secret_key)
4543
if db_url:
4644
db_url.is_active = False

fastapi-url-shortener/source_code_final/shortener_app/database.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
from .config import get_settings
66

7-
87
engine = create_engine(
98
get_settings().db_url, connect_args={"check_same_thread": False}
109
)
11-
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
10+
SessionLocal = sessionmaker(
11+
autocommit=False, autoflush=False, bind=engine
12+
)
1213
Base = declarative_base()

fastapi-url-shortener/source_code_final/shortener_app/utils.py renamed to fastapi-url-shortener/source_code_final/shortener_app/keygen.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def create_random_key(length: int = 5) -> str:
1111
return "".join(secrets.choice(chars) for _ in range(length))
1212

1313

14-
def generate_unique_key(db: Session) -> str:
14+
def create_unique_random_key(db: Session) -> str:
1515
key = create_random_key()
1616
while crud.get_db_url_by_key(db, key):
1717
key = create_random_key()

fastapi-url-shortener/source_code_final/shortener_app/main.py

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from .database import SessionLocal, engine
1010
from .config import get_settings
1111

12-
1312
app = FastAPI()
1413
models.Base.metadata.create_all(bind=engine)
1514

@@ -22,15 +21,6 @@ def get_db():
2221
db.close()
2322

2423

25-
def raise_bad_request(message):
26-
raise HTTPException(status_code=400, detail=message)
27-
28-
29-
def raise_not_found(request):
30-
message = f"URL '{request.url}' doesn't exist"
31-
raise HTTPException(status_code=404, detail=message)
32-
33-
3424
def get_admin_info(db_url: models.URL) -> schemas.URLInfo:
3525
base_url = URL(get_settings().base_url)
3626
admin_endpoint = app.url_path_for(
@@ -41,12 +31,21 @@ def get_admin_info(db_url: models.URL) -> schemas.URLInfo:
4131
return db_url
4232

4333

34+
def raise_bad_request(message):
35+
raise HTTPException(status_code=400, detail=message)
36+
37+
38+
def raise_not_found(request):
39+
message = f"URL '{request.url}' doesn't exist"
40+
raise HTTPException(status_code=404, detail=message)
41+
42+
4443
@app.get("/")
4544
def read_root():
46-
return "Welcome to the URL Shortener API :)"
45+
return "Welcome to the URL shortener API :)"
4746

4847

49-
@app.post("/url/", response_model=schemas.URLInfo)
48+
@app.post("/url", response_model=schemas.URLInfo)
5049
def create_url(url: schemas.URLBase, db: Session = Depends(get_db)):
5150
if not validators.url(url.target_url):
5251
raise_bad_request(message="Your provided URL is not valid")
@@ -84,12 +83,8 @@ def get_url_info(
8483
def delete_url(
8584
secret_key: str, request: Request, db: Session = Depends(get_db)
8685
):
87-
if db_url := crud.deactivate_db_url_by_secret_key(
88-
db, secret_key=secret_key
89-
):
90-
message = (
91-
f"Successfully deleted shortened URL for '{db_url.target_url}'"
92-
)
86+
if db_url := crud.deactivate_db_url_by_secret_key(db, secret_key=secret_key):
87+
message = f"Successfully deleted shortened URL for '{db_url.target_url}'"
9388
return {"detail": message}
9489
else:
9590
raise_not_found(request)

0 commit comments

Comments
 (0)