geoseeq 0.5.6a1__py3-none-any.whl → 0.5.6a3__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
geoseeq/cli/main.py CHANGED
@@ -14,7 +14,7 @@ from .search import cli_search
14
14
  from geoseeq.vc.cli import cli_vc
15
15
  from geoseeq.knex import DEFAULT_ENDPOINT
16
16
  from geoseeq.utils import set_profile
17
- from .shared_params.opts_and_args import overwrite_option
17
+ from .shared_params.opts_and_args import overwrite_option, yes_option
18
18
  from .detail import cli_detail
19
19
  from .run import cli_app
20
20
  from .get_eula import cli_eula
@@ -53,7 +53,7 @@ def version():
53
53
  Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
54
54
  Run `geoseeq eula show` to view the EULA.
55
55
  """
56
- click.echo('0.5.6a1') # remember to update setup
56
+ click.echo('0.5.6a3') # remember to update setup
57
57
 
58
58
 
59
59
  @main.group('advanced')
@@ -74,9 +74,12 @@ def cli_experimental():
74
74
  cli_experimental.add_command(cli_vc)
75
75
 
76
76
  @main.command('config')
77
+ @yes_option
78
+ @click.option('--api-token', default=None, help='The API token to use.')
79
+ @click.option('--endpoint', default=None, help='The endpoint to use.')
77
80
  @click.option('-p', '--profile', default=None, help='The profile name to use.')
78
81
  @overwrite_option
79
- def cli_config(profile, overwrite):
82
+ def cli_config(yes, api_token, endpoint, profile, overwrite):
80
83
  """Configure the GeoSeeq API.
81
84
 
82
85
  ---
@@ -84,13 +87,16 @@ def cli_config(profile, overwrite):
84
87
  Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
85
88
  Run `geoseeq eula show` to view the EULA.
86
89
  """
87
- if not profile:
90
+ if not profile and not yes:
88
91
  profile = click.prompt(f'Set custom profile name? (Leave blank for default)', default="").strip(' \"\'')
89
- endpoint = click.prompt(f'Enter the URL to use for GeoSeeq (Most users can use the default)', default=DEFAULT_ENDPOINT).strip(' \"\'')
90
- api_token = click.prompt(f'Enter your GeoSeeq API token', hide_input=True).strip(' \"\'')
91
- eula_accepted = click.confirm(f'Have you read and accepted the GeoSeeq End User License Agreement? Use `geoseeq eula show` to view the EULA.')
92
- if not eula_accepted:
93
- click.echo('You must accept the EULA to use the GeoSeeq API.')
94
- return
92
+ if not endpoint:
93
+ endpoint = click.prompt(f'Enter the URL to use for GeoSeeq (Most users can use the default)', default=DEFAULT_ENDPOINT).strip(' \"\'')
94
+ if not api_token:
95
+ api_token = click.prompt(f'Enter your GeoSeeq API token', hide_input=True).strip(' \"\'')
96
+ if not yes:
97
+ eula_accepted = click.confirm(f'Have you read and accepted the GeoSeeq End User License Agreement? Use `geoseeq eula show` to view the EULA.')
98
+ if not eula_accepted:
99
+ click.echo('You must accept the EULA to use the GeoSeeq API.')
100
+ return
95
101
  set_profile(api_token, endpoint=endpoint, profile=profile, overwrite=overwrite)
96
102
  click.echo(f'Profile configured.')
@@ -2,7 +2,7 @@ import logging
2
2
 
3
3
  import click
4
4
  from geoseeq.knex import DEFAULT_ENDPOINT
5
-
5
+ import geoseeq.file_system_cache
6
6
  from geoseeq import Knex
7
7
  from geoseeq.utils import load_auth_profile
8
8
 
@@ -17,6 +17,7 @@ class State(object):
17
17
  self.outfile = None
18
18
  self.log_level = 20
19
19
  self._knex = None
20
+ self.use_cache = True
20
21
 
21
22
  def get_knex(self):
22
23
  logger.setLevel(self.log_level)
@@ -37,8 +38,8 @@ def log_level_option(f):
37
38
  state.log_level = value
38
39
  return value
39
40
  return click.option('-l', '--log-level',
40
- type=click.Choice(['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']),
41
- default='WARNING',
41
+ type=click.Choice(['CRITICAL', 'ERROR', 'WARN', 'INFO', 'DEBUG']),
42
+ default='WARN',
42
43
  envvar='GEOSEEQ_CLI_LOG_LEVEL',
43
44
  expose_value=False,
44
45
  callback=callback)(f)
@@ -103,11 +104,25 @@ def outfile_option(f):
103
104
  callback=callback)(f)
104
105
 
105
106
 
107
+ def cache_option(f):
108
+ def callback(ctx, param, value):
109
+ state = ctx.ensure_object(State)
110
+ state.use_cache = value
111
+ geoseeq.file_system_cache.USE_GEOSEEQ_CACHE = value
112
+ return value
113
+ return click.option('--use-cache/--no-cache',
114
+ default=True,
115
+ expose_value=False,
116
+ help='Cache data from the geoseeq server.',
117
+ callback=callback)(f)
118
+
119
+
106
120
  def common_options(f):
107
121
  f = outfile_option(f)
108
122
  f = log_level_option(f)
109
123
  f = endpoint_option(f)
110
124
  f = profile_option(f)
125
+ f = cache_option(f)
111
126
  return f
112
127
 
113
128
 
@@ -1,15 +1,20 @@
1
1
  import json
2
2
  import logging
3
3
  import os
4
+ from os.path import join, abspath
4
5
  from glob import glob
5
6
  from hashlib import sha256
6
7
  from random import randint
7
8
  from time import time
8
9
 
9
- logger = logging.getLogger(__name__) # Same name as calling module
10
+ logger = logging.getLogger("geoseeq_api") # Same name as calling module
10
11
  logger.addHandler(logging.NullHandler()) # No output unless configured by calling program
11
- CACHED_BLOB_TIME = 3 * 60 * 60 # 3 hours in seconds
12
- CACHE_DIR = os.environ.get('GEOSEEQ_API_CACHE_DIR', '.')
12
+ CACHED_BLOB_TIME = 5 * 60 # 5 minutes in seconds
13
+ CACHE_DIR = join(
14
+ os.environ.get('XDG_CACHE_HOME', join(os.environ["HOME"], ".cache")),
15
+ "geoseeq"
16
+ )
17
+ USE_GEOSEEQ_CACHE = None
13
18
 
14
19
 
15
20
  def hash_obj(obj):
@@ -30,8 +35,31 @@ def time_since_file_cached(blob_filepath):
30
35
  class FileSystemCache:
31
36
 
32
37
  def __init__(self, timeout=CACHED_BLOB_TIME):
33
- self.no_cache = 'false' in os.environ.get('USE_GEOSEEQ_CACHE', 'TRUE').lower()
34
38
  self.timeout = timeout
39
+ self._no_cache = False
40
+ self.setup()
41
+
42
+ @property
43
+ def cache_dir_path(self):
44
+ return abspath(f'{CACHE_DIR}/geoseeq_api_cache/v1/')
45
+
46
+ def setup(self):
47
+ if self.no_cache:
48
+ return
49
+ try:
50
+ os.makedirs(self.cache_dir_path, exist_ok=True)
51
+ open(join(self.cache_dir_path, 'flag'), 'w').close()
52
+ except Exception as e:
53
+ logger.warning(f'Could not create cache directory. {e}')
54
+ self._no_cache = True
55
+
56
+ @property
57
+ def no_cache(self):
58
+ if self._no_cache or not USE_GEOSEEQ_CACHE:
59
+ logger.debug('Cache is disabled.')
60
+ return True
61
+ logger.debug('Cache is enabled.')
62
+ return not USE_GEOSEEQ_CACHE
35
63
 
36
64
  def clear_blob(self, obj):
37
65
  if self.no_cache:
@@ -46,8 +74,7 @@ class FileSystemCache:
46
74
  pass
47
75
 
48
76
  def get_cached_blob_filepath(self, obj):
49
- path_base = f'{CACHE_DIR}/.geoseeq_api_cache/v1/geoseeq_api_cache__{hash_obj(obj)}'
50
- os.makedirs(os.path.dirname(path_base), exist_ok=True)
77
+ path_base = join(self.cache_dir_path, f'geoseeq_api_cache__{hash_obj(obj)}')
51
78
  paths = sorted(glob(f'{path_base}__*.json'))
52
79
  if paths:
53
80
  return paths[-1], True
@@ -93,6 +93,7 @@ def sample_result_file_from_blob(knex, blob, already_fetched=True, modified=Fals
93
93
  arf.load_blob(blob)
94
94
  ar._already_fetched = already_fetched
95
95
  ar._modified = modified
96
+ arf.cache_blob(blob)
96
97
  return arf
97
98
 
98
99
 
@@ -110,6 +111,7 @@ def project_result_file_from_blob(knex, blob, already_fetched=True, modified=Fal
110
111
  arf.load_blob(blob)
111
112
  ar._already_fetched = already_fetched
112
113
  ar._modified = modified
114
+ arf.cache_blob(blob)
113
115
  return arf
114
116
 
115
117
 
@@ -28,6 +28,7 @@ from geoseeq.knex import with_knex
28
28
  def _generic_from_id(knex, id, from_uuid_func, from_name_func):
29
29
  """Return the object which the id points to."""
30
30
  if is_grn_or_uuid(id):
31
+ id = id.split(':')[-1] # if this is a GRN, get the UUID. Won't hurt if it's already a UUID.
31
32
  return from_uuid_func(knex, id)
32
33
  if is_name(id):
33
34
  return from_name_func(knex, id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geoseeq
3
- Version: 0.5.6a1
3
+ Version: 0.5.6a3
4
4
  Summary: GeoSeeq command line tools and python API
5
5
  Author: David C. Danko
6
6
  Author-email: "David C. Danko" <dcdanko@biotia.io>
@@ -3,7 +3,7 @@ geoseeq/app.py,sha256=Y6d1UzxFLfE3RNccATbFCVi6kH3eFmzwoUbeR2Ry09A,2387
3
3
  geoseeq/blob_constructors.py,sha256=AkWpDQY0EdGMxF1p6eRspyHKubcUdiW4it-_Q7S2QWk,188
4
4
  geoseeq/bulk_creators.py,sha256=pdn-Dv7yv5SFv-PfDuQbuOnw2W4-BfIfRJVRAhM8U6s,2115
5
5
  geoseeq/constants.py,sha256=h9RURz4xs2bZyDrSGocej7ANJvRLr_H1H7JRxpNUXJM,431
6
- geoseeq/file_system_cache.py,sha256=7pdM-1VncOvjkYv2pOocPHOXnEWz0jKhH6sm1LaXtoU,3405
6
+ geoseeq/file_system_cache.py,sha256=fZrvqWmUtTLFOpm_qG0fz1Q0GWnw_yVOAcFVPloc75c,4101
7
7
  geoseeq/knex.py,sha256=6fPO8F8yxgBgBXZiliMJvYYjgf_16chfJPyWLe-kpPk,7898
8
8
  geoseeq/organization.py,sha256=a9xmGDE0tQsjPJfyFkYnWagxZ8xpdeckkwvkhH6LNIk,2462
9
9
  geoseeq/pipeline.py,sha256=89mhWaecsKnm6tyRkdkaVp4dmZh62_v42Ze0oXf8OTY,9873
@@ -22,7 +22,7 @@ geoseeq/cli/detail.py,sha256=q8Suu-j2k18knfSVFG-SWWGNsKM-n8y9RMA3LcIIi9Y,4132
22
22
  geoseeq/cli/download.py,sha256=ldpqpnRe00utb1EL1T_5CyPbFrZbtauIvOSOHtxz9qc,17656
23
23
  geoseeq/cli/fastq_utils.py,sha256=-bmeQLaiMBm57zWOF0R5OlWTU0_3sh1JBC1RYw2BOFM,3083
24
24
  geoseeq/cli/get_eula.py,sha256=79mbUwyiF7O1r0g6UTxG9kJGQEqKuH805E6eLkPC6Y4,997
25
- geoseeq/cli/main.py,sha256=RVAeSDuObgZpdMOh6R3yW7PWEBbZxCUQZ_WroI68Urk,2910
25
+ geoseeq/cli/main.py,sha256=EaKUewWBNapS9s71DPK-a1SX1POzvsGY5A3CB6ZDNFk,3199
26
26
  geoseeq/cli/manage.py,sha256=wGXAcVaXqE5JQEU8Jh6OlHr02nB396bpS_SFcOZdrEo,5929
27
27
  geoseeq/cli/progress_bar.py,sha256=p1Xl01nkYxSBZCB30ue2verIIi22W93m3ZAMAxipD0g,738
28
28
  geoseeq/cli/run.py,sha256=bx2AV6VIqOSTlxUda78xl0XxcZ8TXlQx02-e7iLQPwI,3838
@@ -31,7 +31,7 @@ geoseeq/cli/user.py,sha256=fARv_5vx-QYT765Hsjgwr6J5ddA_viCPQdv9iUoVX6w,925
31
31
  geoseeq/cli/utils.py,sha256=f0wX5-19uDrYZ8d-aBLplqfbGOkr5BH8x3AMSAyPCes,2873
32
32
  geoseeq/cli/view.py,sha256=P-o2YKBkTrPzSI-JOv7xROc63HLSUygZNZsjp9TGvSw,6783
33
33
  geoseeq/cli/shared_params/__init__.py,sha256=ckNHGCBJUpJbQmcYi7lW-lsC0xKud6CCMznwcG5Vte4,325
34
- geoseeq/cli/shared_params/common_state.py,sha256=XhyVPr7lw56GIyCrmlaFzZVyCeYfNMtakP8XARF3OKE,3555
34
+ geoseeq/cli/shared_params/common_state.py,sha256=jiHZtL3TATMjEoqhbO7HT8KkLJr1QPsy7ZHT4qcoQ1E,4095
35
35
  geoseeq/cli/shared_params/config.py,sha256=HQ0xQh_jdt3EKI5VXYqQXzo-s8Rm6YlziMyVX-kg598,1072
36
36
  geoseeq/cli/shared_params/id_handlers.py,sha256=501K9sCVkI0YGDQ62vXk_DM5lMMDrdB5spIS3cw9x9U,9299
37
37
  geoseeq/cli/shared_params/obj_getters.py,sha256=ZSkt6LnDkVFlNVYKgLrjzg60-6BthZMr3eeD3HNqzac,2741
@@ -47,8 +47,8 @@ geoseeq/contrib/ncbi/bioproject.py,sha256=_oThTd_iLDOC8cLOlJKAatSr362OBYZCEV3Yrq
47
47
  geoseeq/contrib/ncbi/cli.py,sha256=j9zEcaZPTryK3a4xluRxigcJKDhRpRxbp3KZSx-Bfhk,2400
48
48
  geoseeq/contrib/ncbi/setup_logging.py,sha256=Tp1bY1U0f-o739aHpvVYriG2qdd1lFvCYBXZeXQgt-w,175
49
49
  geoseeq/id_constructors/__init__.py,sha256=w5E0PNQ9UuAxBeZbDI7KBnUoERd85gGz3nScz45bd2o,126
50
- geoseeq/id_constructors/from_blobs.py,sha256=3JVmVf1hZI4B9Nwk9Ht_KLjM94hzFHqD_IgY29BdRcM,5652
51
- geoseeq/id_constructors/from_ids.py,sha256=zBAKTzv1ZY9kCKl1QBTWsKg610nCVQgJ0IA9c1umd40,3050
50
+ geoseeq/id_constructors/from_blobs.py,sha256=aj7M7NRpKGs3u3xUvuFJwmJdFeIcJPmaI2_bhwbFfEs,5702
51
+ geoseeq/id_constructors/from_ids.py,sha256=bbAJX4LnuN70v9bny6N-jAwOudb2-ztHvlMBgRuSDz0,3151
52
52
  geoseeq/id_constructors/from_names.py,sha256=RqgFjDsAwQcidMkZwX7oB00OvBAKTiilHYetTPogJ40,4174
53
53
  geoseeq/id_constructors/from_uuids.py,sha256=5NrQoRBNBfiB48SIB6QFZvO0lxNrxAHbu1MDkNRSu_4,3305
54
54
  geoseeq/id_constructors/resolvers.py,sha256=8hp5xJSCoZrAXtMT54Hp4okt63l909XqJU3IQx-VCgc,2676
@@ -80,8 +80,9 @@ geoseeq/vc/vc_stub.py,sha256=IQr8dI0zsWKVAeY_5ybDD6n49_3othcgfHS3P0O9tuY,3110
80
80
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  tests/test_api_client.py,sha256=TS5njc5pcPP_Ycy-ljcfPVT1hQRBsFVdQ0lCqBmoesU,12810
82
82
  tests/test_plotting.py,sha256=TcTu-2ARr8sxZJ7wPQxmbs3-gHw7uRvsgrhhhg0qKik,784
83
- geoseeq-0.5.6a1.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
84
- geoseeq-0.5.6a1.dist-info/METADATA,sha256=H66w27KgQL6Bq5pzO38uOv-hJpVBdbHYZyyYtik2EP4,4805
85
- geoseeq-0.5.6a1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
86
- geoseeq-0.5.6a1.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
87
- geoseeq-0.5.6a1.dist-info/RECORD,,
83
+ geoseeq-0.5.6a3.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
84
+ geoseeq-0.5.6a3.dist-info/METADATA,sha256=NbqTL5rlxCyYeDboJ6cmx6Ee8hvCrXkzHQei-xgCUEk,4805
85
+ geoseeq-0.5.6a3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
86
+ geoseeq-0.5.6a3.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
87
+ geoseeq-0.5.6a3.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
88
+ geoseeq-0.5.6a3.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ geoseeq = geoseeq.cli:main