def create_version_from_metadata( channel_name: str, user_id: bytes, package_file_name: str, package_data: dict, dao: Dao, ): package_name = package_data["name"] package = dao.get_package(channel_name, package_name) if not package: package_info = rest_models.Package( name=package_name, summary=package_data.get("summary", ""), description=package_data.get("description", ""), ) dao.create_package(channel_name, package_info, user_id, "owner") pkg_format = "tarbz2" if package_file_name.endswith( ".tar.bz2") else ".conda" version = dao.create_version( channel_name, package_name, pkg_format, get_subdir_compat(package_data), package_data["version"], int(package_data["build_number"]), package_data["build"], package_file_name, json.dumps(package_data), user_id, package_data["size"], ) return version
def create_packages_from_channeldata(channel_name: str, user_id: bytes, channeldata: dict, dao: Dao): packages = channeldata.get("packages", {}) for package_name, metadata in packages.items(): description = metadata.get("description", "") summary = metadata.get("summary", "") package_data = rest_models.Package( name=package_name, summary=summary, description=description, ) try: package = dao.create_package(channel_name, package_data, user_id, role=authorization.OWNER) except DBError: # package already exists so skip it so we retrieve and update it package = dao.get_package(channel_name, package_name) package.description = description package.summary = summary package.url = metadata.get("home", "") package.platforms = ":".join(metadata.get("subdirs", [])) package.channeldata = json.dumps(metadata) dao.db.commit()
def get_package_or_fail( package_name: str, channel: db_models.Channel = Depends(get_channel_or_fail), dao: Dao = Depends(get_dao)) -> db_models.Package: package = dao.get_package(channel.name, package_name) if not package: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f'Package {channel.name}/{package_name} not found') return package
def post_package(new_package: rest_models.Package, channel: db_models.Channel = Depends(get_channel_or_fail), auth: authorization.Rules = Depends(get_rules), dao: Dao = Depends(get_dao)): user_id = auth.assert_user() package = dao.get_package(channel.name, new_package.name) if package: raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail=f'Package {channel.name}/{new_package.name} exists') dao.create_package(channel.name, new_package, user_id, authorization.OWNER)
def get_package_or_fail( package_name: str, channel_name: str, dao: Dao = Depends(get_dao), auth: authorization.Rules = Depends(get_rules), ) -> db_models.Package: package = dao.get_package(channel_name.lower(), package_name) if not package: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"Package {channel_name}/{package_name} not found", ) auth.assert_package_read(package) return package
def post_package( new_package: rest_models.Package, channel: db_models.Channel = Depends( ChannelChecker(allow_proxy=False, allow_mirror=False), ), auth: authorization.Rules = Depends(get_rules), dao: Dao = Depends(get_dao), ): user_id = auth.assert_user() auth.assert_create_package(channel.name) package = dao.get_package(channel.name, new_package.name) if package: raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail=f"Package {channel.name}/{new_package.name} exists", ) dao.create_package(channel.name, new_package, user_id, authorization.OWNER)