= dmda.DomoAuth(
auth =os.environ["DOMO_INSTANCE"],
domo_instance=os.environ["DOMO_ACCESS_TOKEN"],
access_token
) auth
Monitoring Source Code Project
DocumentSources
DocumentSources (auth:mbison.client.core.DomoAuth, documents:List[__main__.DocumentSource]=<factory>, log_dt:datetime.datetime=datetime.datetime(2024, 7, 30, 2, 0, 13, 827619))
Exported source
class SourceCode_Enum:
"""captures metadata about where source came from"""
= "Code Engine"
CODE_ENGINE = "Enterprise App"
ENTERPRISE_APP
@dataclass
class DocumentSource:
environment: SourceCode_Enumid: str
str
name: str
design_id: str
design_name:
log_dt: dt.datetimestr
code: str
version:
last_modified_dt: dt.datetimestr
domo_instance: str
owner:
def __eq__(self, other):
if not self.__class__.__name__ == other.__class__.__name__:
return False
return self.id == other.id and self.environment == other.environment
@classmethod
def from_codeengine_package_version(
= None
cls, dce_package: dmce.DomoCodeEngine_Package, log_dt: dt.datetime
):
= log_dt or dt.datetime.now()
log_dt
= dce_package.get_current_version()
dce_current_version
# from pprint import pprint
# pprint({"version": dce_current_version,
# "owner" : dce_package.owner})
= None
owner try:
= dmdu.DomoUser.get_by_id(
owner =dce_package.auth, user_id=dce_package.owner
auth
)
except dmdu.User_API_Exception as e:
print(e)
return cls(
=SourceCode_Enum.CODE_ENGINE,
environmentid=dce_package.id,
=dce_package.name,
name=dce_package.id,
design_id=dce_package.name,
design_name=log_dt,
log_dt=dce_current_version.code,
code=dce_current_version.version,
version=dce_package.updated_on_dt,
last_modified_dt=dce_package.auth.domo_instance,
domo_instance=owner,
owner
)
@classmethod
def from_source_file(
cls,
file_path,
design_id,
design_name,str,
domo_instance:
owner: dmdu.DomoUser,= None,
log_dt: dt.datetime str = None,
version: = None,
last_modified_dt: dt.datetime
):
with open(file_path, "r") as f:
= f.read()
code
= log_dt or dt.datetime.now()
log_dt
return cls(
id=file_path,
=os.path.split(file_path)[-1],
name=design_id,
design_id=design_name,
design_name=log_dt,
log_dt=code,
code=version,
version=last_modified_dt,
last_modified_dt=domo_instance,
domo_instance=owner,
owner=SourceCode_Enum.ENTERPRISE_APP,
environment
)
# custom_app, design_version, appdb_collection):
# document["ID"] = custom_app["id"]
# document["Name"] = custom_app["name"]
# document["Published Date"] = custom_app["updatedDate"]
@dataclass
class DocumentSources:
auth: dmda.DomoAuth= field(default_factory=lambda: [])
documents: List[DocumentSource]
= dt.datetime.now()
log_dt: dt.datetime
def get_codeengine(self):
= dmce.DomoCodeEngine_Packages(
domo_codenegine_packages =self.auth
auth
).get_packages()
= [
documents
DocumentSource.from_codeengine_package_version(=dce_package, log_dt=self.log_dt
dce_package
)for dce_package in domo_codenegine_packages
]
self.add_document(document) for document in documents]
[
return self.documents
@staticmethod
def _download_custom_app_sourcecode(app, download_folder, debug_api: bool = False):
= "_package.zip"
zip_name = f"{download_folder}/{app.name}/{app.current_version}"
_download_folder
try:
= app.get_source_code(download_folder=_download_folder, file_name=zip_name, debug_api = debug_api)
res
=os.path.join(
zip_file_path
_download_folder, zip_name
)
= dmut.download_zip(
path_ls =_download_folder,
output_folder=zip_file_path,
zip_file_path
)
= path_ls
res.response
return res
except dmap.App_API_Exception as e:
print(e)
return False
def get_custom_apps(self, download_folder="./EXPORT", debug_api : bool = False):
= dmap.DomoEnterpriseApps(auth=self.auth).get_apps()
domo_apps
return [self._download_custom_app_sourcecode(app = app, download_folder = download_folder, debug_api = debug_api) for app in domo_apps]
def add_document(self, document: DocumentSource):
if document in self.documents:
return False
self.documents.append(document)
return True
DocumentSource
DocumentSource (environment:__main__.SourceCode_Enum, id:str, name:str, design_id:str, design_name:str, log_dt:datetime.datetime, code:str, version:str, last_modified_dt:datetime.datetime, domo_instance:str, owner:str)
SourceCode_Enum
SourceCode_Enum ()
captures metadata about where source came from
= DocumentSources(auth= auth)
document_sources
= document_sources.get_custom_apps(download_folder= '../../TEST/' ,debug_api = False)
res_ls for res in res_ls if res ][0:5] [res
= DocumentSources(auth= auth)
document_sources
document_sources.get_codeengine()
0] document_sources.documents[
0].__dict__ document_sources.documents[