mirror of
https://github.com/BioArchLinux/bioarchlinux-tools.git
synced 2025-03-09 22:53:31 +00:00
add compare option
This commit is contained in:
parent
4b12e11e12
commit
dc693571ca
1 changed files with 36 additions and 20 deletions
|
@ -70,15 +70,13 @@ def get_bioc_versions(bioc_mirror="https://bioconductor.org") -> list[str]:
|
||||||
return bioc_versions
|
return bioc_versions
|
||||||
|
|
||||||
|
|
||||||
def get_package_meta(url, mtime=None,):
|
def get_package_meta(url, mtime=None, compare=False):
|
||||||
'''
|
'''
|
||||||
get package metadata from Bioconductor and CRAN.
|
get package metadata from Bioconductor and CRAN.
|
||||||
url: the url to be downloaded, e.g. https://bioconductor.org/packages/3.16/bioc/src/contrib/PACKAGES
|
url: the url to be downloaded, e.g. https://bioconductor.org/packages/3.16/bioc/src/contrib/PACKAGES
|
||||||
mtime: the last modified time of the local file. if remote is older than mtime, ignore it.
|
mtime: the last modified time of the local file. if remote is older than mtime, ignore it.
|
||||||
'''
|
'''
|
||||||
if not remote_is_newer(url, mtime):
|
if compare and not remote_is_newer(url, mtime):
|
||||||
logging.info(
|
|
||||||
f"Local Package List for is newer than remote, skip.")
|
|
||||||
return None
|
return None
|
||||||
meta = requests.get(url)
|
meta = requests.get(url)
|
||||||
if meta.status_code != requests.codes.ok:
|
if meta.status_code != requests.codes.ok:
|
||||||
|
@ -120,29 +118,18 @@ def update_DB(engine, min_ver=None, first_run=False, mtime=None,
|
||||||
cran_mirror: the CRAN mirror to use.
|
cran_mirror: the CRAN mirror to use.
|
||||||
'''
|
'''
|
||||||
bioc_vers = get_bioc_versions(bioc_mirror)
|
bioc_vers = get_bioc_versions(bioc_mirror)
|
||||||
bioc_vers.sort(reverse=True)
|
bioc_vers.sort()
|
||||||
if min_ver:
|
if min_ver:
|
||||||
min_ver = version.parse(min_ver)
|
min_ver = version.parse(min_ver)
|
||||||
else:
|
else:
|
||||||
if first_run:
|
if first_run:
|
||||||
min_ver = bioc_vers[-1]
|
min_ver = bioc_vers[0]
|
||||||
else:
|
else:
|
||||||
min_ver = bioc_vers[1]
|
min_ver = bioc_vers[-2]
|
||||||
|
min_ver = max(min_ver, version.parse("1.8"))
|
||||||
|
|
||||||
with Session(engine) as session:
|
with Session(engine) as session:
|
||||||
|
|
||||||
# CRAN
|
|
||||||
url = f"{cran_mirror}/src/contrib/PACKAGES"
|
|
||||||
logging.info("Downloading CRAN Package List")
|
|
||||||
f = get_package_meta(url, mtime)
|
|
||||||
if f:
|
|
||||||
descs = f.split('\n\n')
|
|
||||||
pkgmetas = map(lambda x: from_str(x, None, None), descs)
|
|
||||||
|
|
||||||
# insert or skip
|
|
||||||
for pkgmeta in pkgmetas:
|
|
||||||
add_or_skip(session, PkgMeta, pkgmeta)
|
|
||||||
|
|
||||||
# BIOC
|
# BIOC
|
||||||
for ver in bioc_vers:
|
for ver in bioc_vers:
|
||||||
if ver < min_ver:
|
if ver < min_ver:
|
||||||
|
@ -160,7 +147,18 @@ def update_DB(engine, min_ver=None, first_run=False, mtime=None,
|
||||||
|
|
||||||
# insert or skip
|
# insert or skip
|
||||||
for pkgmeta in pkgmetas:
|
for pkgmeta in pkgmetas:
|
||||||
add_or_skip(session, PkgMeta, pkgmeta)
|
add_or_update(session, PkgMeta, pkgmeta)
|
||||||
|
# CRAN
|
||||||
|
url = f"{cran_mirror}/src/contrib/PACKAGES"
|
||||||
|
logging.info("Downloading CRAN Package List")
|
||||||
|
f = get_package_meta(url, mtime)
|
||||||
|
if f:
|
||||||
|
descs = f.split('\n\n')
|
||||||
|
pkgmetas = map(lambda x: from_str(x, None, None), descs)
|
||||||
|
|
||||||
|
# insert or skip
|
||||||
|
for pkgmeta in pkgmetas:
|
||||||
|
add_or_update(session, PkgMeta, pkgmeta)
|
||||||
|
|
||||||
|
|
||||||
def add_or_skip(session, table, pkgmeta):
|
def add_or_skip(session, table, pkgmeta):
|
||||||
|
@ -174,6 +172,22 @@ def add_or_skip(session, table, pkgmeta):
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def add_or_update(session, table, pkgmeta):
|
||||||
|
if not pkgmeta:
|
||||||
|
return
|
||||||
|
if session.get(table, pkgmeta.name):
|
||||||
|
|
||||||
|
pkg = session.query(table).filter_by(
|
||||||
|
name=pkgmeta.name).first()
|
||||||
|
pkg.desc = pkgmeta.desc
|
||||||
|
pkg.repo = pkgmeta.repo
|
||||||
|
pkg.bioc_ver = pkgmeta.bioc_ver
|
||||||
|
pkg.bioc_category = pkgmeta.bioc_category
|
||||||
|
else:
|
||||||
|
session.add(pkgmeta)
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
logging.getLogger('sqlalchemy').setLevel(logging.ERROR)
|
logging.getLogger('sqlalchemy').setLevel(logging.ERROR)
|
||||||
|
@ -192,6 +206,8 @@ if __name__ == '__main__':
|
||||||
'--bioc_min_ver', help="The minimum version of Bioconductor supported, must be greater than 3.0", default=None)
|
'--bioc_min_ver', help="The minimum version of Bioconductor supported, must be greater than 3.0", default=None)
|
||||||
parser.add_argument('-f',
|
parser.add_argument('-f',
|
||||||
'--first_run', help="If this is the first run, the database will be created", action='store_true')
|
'--first_run', help="If this is the first run, the database will be created", action='store_true')
|
||||||
|
parser.add_argument(
|
||||||
|
'--compare', help="Compare mtime of database and remote, if database is newer, skip remote (This can be buggy)", action='store_true')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
if not args:
|
if not args:
|
||||||
|
|
Loading…
Add table
Reference in a new issue