8000 Merge pull request #4 from smallintro/python-micro-branch · cloudintro/python-microservices@e997bcd · GitHub
[go: up one dir, main page]

Skip to content

Commit e997bcd

Browse files
authored
Merge pull request #4 from smallintro/python-micro-branch
Added REST end point for asset assignment to user
2 parents 0ad7376 + e2474ee commit e997bcd

File tree

5 files changed

+88
-31
lines changed

5 files changed

+88
-31
lines changed

asset_mgr/app/src/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
# uvicorn app_assetmgr:app_v1 --reload
1+
# uvicorn app_assetmgr:app_v1 --port 8001 --reload

asset_mgr/app/src/app_assetmgr.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,45 @@
1-
from fastapi import FastAPI
1+
from fastapi import FastAPI, Query
22
from logzero import logger as log
33
from app_services import AssetInfoService
44
from app_models import AssetInfo, AssetInfoReq
55

66
app_v1 = FastAPI()
77

8-
assetservice = AssetInfoService()
8+
asset_service = AssetInfoService()
99

1010

1111
@app_v1.get("/v1/assetmgr/{assetid}")
1212
def get_asset_info(assetid: str = "-1"):
1313
log.info(f"get_asset_info {assetid}")
14-
result = assetservice.get_asset_info(assetid)
14+
result = asset_service.get_asset_info(assetid)
1515
return {"asset_info": result}
1616

1717

1818
@app_v1.post("/v1/assetmgr")
1919
def add_asset_info(asset_info: AssetInfoReq):
2020
log.info(f"add_asset_info {AssetInfoReq}")
21-
result = assetservice.add_asset_info(asset_info)
21+
result = asset_service.add_asset_info(asset_info)
2222
return {"asset_info": result}
2323

2424

25+
@app_v1.put("/v1/assetmgr/assign")
26+
def assign_asset_to_user(asset_category: str = Query(...), userid: str = Query(...)):
27+
log.info(f"assign_asset_to_user {asset_category} {userid}")
28+
result = asset_service.assign_asset_to_user(asset_category, userid)
29+
return {"message": result}
30+
31+
2532
@app_v1.put("/v1/assetmgr/{assetid}")
2633
def update_asset_info(assetid: str, asset_info: AssetInfoReq):
2734
log.info(f"update_asset_info {AssetInfoReq}")
28-
result = assetservice.update_asset_info(assetid, asset_info)
35+
result = asset_service.update_asset_info(assetid, asset_info)
2936
return {"asset_info": result}
3037

3138

3239
@app_v1.delete("/v1/assetmgr/{assetid}")
3340
def del_asset_info(assetid: str):
3441
log.info(f"del_asset_info {assetid}")
35-
result = assetservice.del_asset_info(assetid)
42+
result = asset_service.del_asset_info(assetid)
3643
return {"message": result}
44+
45+

asset_mgr/app/src/app_models.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,12 @@ class AssetCategory(Base):
2929
asset_count = Column(Numeric)
3030

3131
def __repr__(self):
32-
return "AssetCategory(%s, %d)" % (
33-
self.category_name,
34-
self.asset_count,
35-
)
32+
return "AssetCategory(%s, %d)" % (self.category_name, self.asset_count,)
3633

3734

3835
class AssetInfoReq(BaseModel):
3936
asset_id: str
4037
asset_name: str
4138
asset_owner: str = None
4239
asset_category: str
40+

asset_mgr/app/src/app_repo.py

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def query_asset_info(asset_id):
1919
log.debug(result)
2020
except Exception as e:
2121
session.rollback
22-
log.exception(f"query_asset_info operation failed {e}")
22+
log.exception(f"query_asset_info failed {e}")
2323
finally:
2424
if session is not None:
2525
session.close()
@@ -42,7 +42,6 @@ def add_asset_info(asset_info):
4242
new_asset = AssetInfo(
4343
asset_id=asset_info.asset_id,
4444
asset_name=asset_info.asset_name,
45-
asset_owner=asset_info.asset_owner,
4645
asset_category=asset_info.asset_category,
4746
)
4847
log.debug(f"add_asset_info {new_asset}")
@@ -51,7 +50,7 @@ def add_asset_info(asset_info):
5150
result = new_asset
5251
except Exception as e:
5352
session.rollback
54-
log.exception(f"add_asset_info operation failed {e}")
53+
log.exception(f"add_asset_info failed {e}")
5554
finally:
5655
if session is not None:
5756
session.close()
@@ -83,7 +82,7 @@ def update_asset_info(asset_id, asset_info):
8382
result = AssetInfo
8483
except Exception as e:
8584
session.rollback
86-
log.exception(f"update_asset_info operation failed {e}")
85+
log.exception(f"update_asset_info failed {e}")
8786
finally:
8887
if session is not None:
8988
session.close()
@@ -94,7 +93,9 @@ def update_asset_info(asset_id, asset_info):
9493
def delete_asset_info(asset_id):
9594
session = db_obj.get_db_session()
9695
try:
97-
query_result = session.query(AssetInfo).filter(AssetInfo.asset_id == asset_id)
96+
query_result = session.query(AssetInfo).filter(
97+
AssetInfo.asset_id == asset_id
98+
)
9899
if query_result.count() == 0:
99100
log.error(f" asset not found {asset_id}")
100101
result = 0
@@ -105,7 +106,7 @@ def delete_asset_info(asset_id):
105106
session.commit()
106107
except Exception as e:
107108
session.rollback
108-
log.exception(f"delete_asset_info operation failed {e}")
109+
log.exception(f"delete_asset_info failed {e}")
109110
finally:
110111
if session is not None:
111112
session.close()
@@ -117,26 +118,64 @@ def update_asset_category(category, count):
117118
log.debug(f"update_asset_category {category} {count}")
118119
session = db_obj.get_db_session()
119120
try:
120-
query_result = session.query(AssetCategory).filter(AssetCategory.category_name == category)
121+
query_result = session.query(AssetCategory).filter(
122+
AssetCategory.category_name == category
123+
)
121124
if query_result.count() == 0:
122-
new_category = AssetCategory(
123-
category_name=category,
124-
asset_count=1,
125-
)
125+
new_category = AssetCategory(category_name=category, asset_count=1,)
126126
log.debug(f"adding asset category {category}")
127127
session.add(new_category)
128128
else:
129129
query_result.update(
130130
{
131-
AssetCategory.asset_count: query_result.first().asset_count+count,
131+
AssetCategory.asset_count: query_result.first().asset_count
132+
+ count,
132133
}
133134
)
134135
log.debug(f"updating asset category {category}")
135136
session.commit()
136137
except Exception as e:
137138
session.rollback
138-
log.exception(f"update_asset_category operation failed {e}")
139+
log.exception(f"update_asset_category failed {e}")
140+
finally:
141+
if session is not None:
142+
session.close()
143+
log.debug(f"session closed")
144+
145+
146+
class AssetUserDao:
147+
@staticmethod
148+
def get_available_asset_by_category(asset_category):
149+
session = db_obj.get_db_session()
150+
try:
151+
asset_id = (
152+
session.query(AssetInfo.asset_id)
153+
.filter(AssetInfo.asset_category == asset_category, AssetInfo.asset_owner is None)
154+
.first()
155+
)
156+
except Exception as e:
157+
log.exception(f"get_available_asset_by_category failed {e}")
158+
finally:
159+
if session is not None:
160+
session.close()
161+
log.debug(f"session closed")
162+
return asset_id
163+
164+
@staticmethod
165+
def assign_asset_to_user(asset_id, user_id):
166+
session = db_obj.get_db_session()
167+
try:
168+
result = (
169+
session.query(AssetInfo)
170+
.filter(AssetInfo.asset_id == asset_id)
171+
.update({AssetInfo.asset_owner: user_id})
172+
)
173+
session.commit()
174+
except Exception as e:
175+
session.rollback
176+
log.exception(f"assign_asset_to_user failed {e}")
139177
finally:
140178
if session is not None:
141179
session.close()
142180
log.debug(f"session closed")
181+
return result

asset_mgr/app/src/app_services.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,44 @@
11
from logzero import logger
2-
from app_repo import AssetInfoDao
2+
from app_repo import AssetInfoDao, AssetUserDao
33
from app_models import AssetInfo, AssetInfoReq
44

55

6-
assetdao = AssetInfoDao()
6+
asset_dao = AssetInfoDao()
7+
asset_user_dao = AssetUserDao()
78

89

910
class AssetInfoService(object):
1011
@staticmethod
1112
def get_asset_info(asset_id):
1213
logger.debug(f"get_asset_info")
13-
result = assetdao.query_asset_info(asset_id)
14+
result = asset_dao.query_asset_info(asset_id)
1415
return result
1516

1617
@staticmethod
1718
def add_asset_info(asset_info):
1819
logger.debug(f"add_asset_info")
19-
assetdao.add_asset_info(asset_info)
20-
result = assetdao.query_asset_info(asset_info.asset_id)
20+
asset_dao.add_asset_info(asset_info)
21+
result = asset_dao.query_asset_info(asset_info.asset_id)
2122
return result
2223

2324
@staticmethod
2425
def update_asset_info(asset_id, asset_info):
2526
logger.debug(f"update_asset_info")
26-
result = assetdao.update_asset_info(asset_id, asset_info)
27+
result = asset_dao.update_asset_info(asset_id, asset_info)
2728
return result
2829

2930
@staticmethod
3031
def del_asset_info(asset_id):
3132
logger.debug(f"del_asset_info")
32-
result = assetdao.delete_asset_info(asset_id)
33+
result = asset_dao.delete_asset_info(asset_id)
3334
return result
35+
36+
@staticmethod
37+
def assign_asset_to_user(asset_category, user_id):
38+
logger.debug(f"assign_asset_to_user")
39+
asset_id = asset_user_dao.get_available_asset_by_category(asset_category)
40+
if asset_id is not None:
41+
asset_user_dao.assign_asset_to_user(asset_id, user_id)
42+
return asset_id
43+
else:
44+
return "No {} available, Please contact asset admin".format(asset_category)

0 commit comments

Comments
 (0)
0