ebi-eva-common-pyutils 0.6.8.dev0__tar.gz → 0.6.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/CHANGELOG.md +7 -2
  2. {ebi_eva_common_pyutils-0.6.8.dev0/ebi_eva_common_pyutils.egg-info → ebi_eva_common_pyutils-0.6.9}/PKG-INFO +2 -10
  3. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/contig_alias/contig_alias.py +46 -2
  4. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9/ebi_eva_common_pyutils.egg-info}/PKG-INFO +3 -11
  5. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils.egg-info/SOURCES.txt +1 -3
  6. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/setup.py +1 -1
  7. ebi_eva_common_pyutils-0.6.8.dev0/tests/test_common.py +0 -22
  8. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/LICENSE +0 -0
  9. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/MANIFEST.in +0 -0
  10. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/README.md +0 -0
  11. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/__init__.py +0 -0
  12. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/assembly/__init__.py +0 -0
  13. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/assembly/assembly.py +0 -0
  14. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/assembly_utils.py +0 -0
  15. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/biosamples_communicators.py +0 -0
  16. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/command_utils.py +0 -0
  17. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/common_utils.py +0 -0
  18. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/config.py +0 -0
  19. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/contig_alias/__init__.py +0 -0
  20. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/ena_utils.py +0 -0
  21. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/file_utils.py +0 -0
  22. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/logger.py +0 -0
  23. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/ncbi_utils.py +0 -0
  24. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/network_utils.py +0 -0
  25. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/reference/__init__.py +0 -0
  26. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/reference/assembly.py +0 -0
  27. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/reference/sequence.py +0 -0
  28. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/taxonomy/__init__.py +0 -0
  29. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/taxonomy/taxonomy.py +0 -0
  30. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/variation/__init__.py +0 -0
  31. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils/variation/contig_utils.py +0 -0
  32. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils.egg-info/dependency_links.txt +0 -0
  33. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils.egg-info/requires.txt +0 -0
  34. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_common_pyutils.egg-info/top_level.txt +0 -0
  35. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/__init__.py +0 -0
  36. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/archive_directory.py +0 -0
  37. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/config_utils.py +0 -0
  38. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/metadata_utils.py +0 -0
  39. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/mongo_utils.py +0 -0
  40. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/mongodb/__init__.py +0 -0
  41. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/mongodb/mongo_database.py +0 -0
  42. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/nextflow/__init__.py +0 -0
  43. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/nextflow/nextflow_pipeline.py +0 -0
  44. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/pg_utils.py +0 -0
  45. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/ebi_eva_internal_pyutils/spring_properties.py +0 -0
  46. {ebi_eva_common_pyutils-0.6.8.dev0 → ebi_eva_common_pyutils-0.6.9}/setup.cfg +0 -0
@@ -2,10 +2,15 @@
2
2
  Changelog for ebi_eva_common_pyutils
3
3
  ===========================
4
4
 
5
- ## 0.6.8 (unreleased)
5
+ ## 0.6.9 (2024-07-29)
6
6
  ---------------------
7
7
 
8
- - Nothing changed yet.
8
+ - Add get methods to Contig alias client
9
+
10
+ ## 0.6.8 (2024-07-12)
11
+ ---------------------
12
+
13
+ - Add biosamples communicators
9
14
 
10
15
 
11
16
  ## 0.6.7 (2024-05-15)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ebi_eva_common_pyutils
3
- Version: 0.6.8.dev0
3
+ Version: 0.6.9
4
4
  Summary: EBI EVA - Common Python Utilities
5
5
  Home-page: https://github.com/EBIVariation/eva-common-pyutils
6
6
  License: Apache
@@ -10,13 +10,5 @@ Classifier: Intended Audience :: Developers
10
10
  Classifier: Topic :: Software Development :: Build Tools
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Programming Language :: Python :: 3
13
- License-File: LICENSE
14
- Requires-Dist: requests
15
- Requires-Dist: lxml
16
- Requires-Dist: pyyaml
17
- Requires-Dist: cached-property
18
- Requires-Dist: retry
19
13
  Provides-Extra: eva-internal
20
- Requires-Dist: psycopg2-binary; extra == "eva-internal"
21
- Requires-Dist: pymongo; extra == "eva-internal"
22
- Requires-Dist: networkx<=2.5; extra == "eva-internal"
14
+ License-File: LICENSE
@@ -22,6 +22,9 @@ class InternalServerError(Exception):
22
22
  pass
23
23
 
24
24
 
25
+ CONTING_ALIAS_URL = 'https://www.ebi.ac.uk/eva/webservices/contig-alias'
26
+
27
+
25
28
  # TODO add the get methods
26
29
  class ContigAliasClient(AppLogger):
27
30
  """
@@ -29,8 +32,13 @@ class ContigAliasClient(AppLogger):
29
32
  Authentication is required if using admin endpoints.
30
33
  """
31
34
 
32
- def __init__(self, base_url, username=None, password=None):
33
- self.base_url = base_url
35
+ def __init__(self, base_url=None, username=None, password=None, default_page_size=1000):
36
+ if base_url:
37
+ self.base_url = base_url
38
+ else:
39
+ self.base_url = os.environ.get('CONTING_ALIAS_URL') or CONTING_ALIAS_URL
40
+ # Used for get method
41
+ self.default_page_size=default_page_size
34
42
  # Only required for admin endpoints
35
43
  self.username = username
36
44
  self.password = password
@@ -69,3 +77,39 @@ class ContigAliasClient(AppLogger):
69
77
  raise InternalServerError
70
78
  else:
71
79
  self.error(f'Assembly accession {assembly} could not be deleted. Response: {response.text}')
80
+
81
+ @retry(tries=3, delay=2, backoff=1.2, jitter=(1, 3))
82
+ def _get_page_for_contig_alias_url(self, sub_url, page=0):
83
+ """queries the contig alias to retrieve the page of the provided url"""
84
+ url = f'{self.base_url}/{sub_url}?page={page}&size={self.default_page_size}'
85
+ response = requests.get(url, headers={'accept': 'application/json'})
86
+ response.raise_for_status()
87
+ response_json = response.json()
88
+ return response_json
89
+
90
+ def _depaginate_iter(self, sub_url, entity_to_retrieve):
91
+ """Generator that provides the contigs in the assembly requested."""
92
+ page = 0
93
+ response_json = self._get_page_for_contig_alias_url(sub_url, page=page)
94
+ for entity in response_json.get('_embedded', {}).get(entity_to_retrieve, []):
95
+ yield entity
96
+ while 'next' in response_json['_links']:
97
+ page += 1
98
+ response_json = self._get_page_for_contig_alias_url(sub_url, page=page)
99
+ for entity in response_json.get('_embedded', {}).get(entity_to_retrieve, []):
100
+ yield entity
101
+
102
+ def assembly_contig_iter(self, assembly_accession):
103
+ """Generator that provides the contigs in the assembly requested."""
104
+ sub_url = f'v1/assemblies/{assembly_accession}/chromosomes'
105
+ return self._depaginate_iter(sub_url, 'chromosomeEntities')
106
+
107
+ def assembly(self, assembly_accession):
108
+ """provides the description of the requested assembly."""
109
+ sub_url = f'v1/assemblies/{assembly_accession}'
110
+ response_json = self._get_page_for_contig_alias_url(sub_url)
111
+ return response_json.get('_embedded', {}).get('assemblyEntities', [])[0]
112
+
113
+ def contig_iter(self, insdc_accession):
114
+ sub_url = f'v1/chromosomes/genbank/{insdc_accession}'
115
+ return self._depaginate_iter(sub_url, 'chromosomeEntities')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
- Name: ebi_eva_common_pyutils
3
- Version: 0.6.8.dev0
2
+ Name: ebi-eva-common-pyutils
3
+ Version: 0.6.9
4
4
  Summary: EBI EVA - Common Python Utilities
5
5
  Home-page: https://github.com/EBIVariation/eva-common-pyutils
6
6
  License: Apache
@@ -10,13 +10,5 @@ Classifier: Intended Audience :: Developers
10
10
  Classifier: Topic :: Software Development :: Build Tools
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Programming Language :: Python :: 3
13
- License-File: LICENSE
14
- Requires-Dist: requests
15
- Requires-Dist: lxml
16
- Requires-Dist: pyyaml
17
- Requires-Dist: cached-property
18
- Requires-Dist: retry
19
13
  Provides-Extra: eva-internal
20
- Requires-Dist: psycopg2-binary; extra == "eva-internal"
21
- Requires-Dist: pymongo; extra == "eva-internal"
22
- Requires-Dist: networkx<=2.5; extra == "eva-internal"
14
+ License-File: LICENSE
@@ -4,7 +4,6 @@ MANIFEST.in
4
4
  README.md
5
5
  setup.cfg
6
6
  setup.py
7
- /home/april/projects/eva-common-pyutils/ebi_eva_internal_pyutils/archive_directory.py
8
7
  ebi_eva_common_pyutils/__init__.py
9
8
  ebi_eva_common_pyutils/assembly_utils.py
10
9
  ebi_eva_common_pyutils/biosamples_communicators.py
@@ -42,5 +41,4 @@ ebi_eva_internal_pyutils/spring_properties.py
42
41
  ebi_eva_internal_pyutils/mongodb/__init__.py
43
42
  ebi_eva_internal_pyutils/mongodb/mongo_database.py
44
43
  ebi_eva_internal_pyutils/nextflow/__init__.py
45
- ebi_eva_internal_pyutils/nextflow/nextflow_pipeline.py
46
- tests/test_common.py
44
+ ebi_eva_internal_pyutils/nextflow/nextflow_pipeline.py
@@ -7,7 +7,7 @@ setup(
7
7
  name='ebi_eva_common_pyutils',
8
8
  scripts=[os.path.join(os.path.dirname(__file__), 'ebi_eva_internal_pyutils', 'archive_directory.py')],
9
9
  packages=find_packages(),
10
- version='0.6.8.dev0',
10
+ version='0.6.9',
11
11
  license='Apache',
12
12
  description='EBI EVA - Common Python Utilities',
13
13
  url='https://github.com/EBIVariation/eva-common-pyutils',
@@ -1,22 +0,0 @@
1
- import os
2
- from unittest import TestCase
3
-
4
- from ebi_eva_common_pyutils.common_utils import merge_two_dicts, pretty_print
5
-
6
-
7
- class TestCommon(TestCase):
8
-
9
- resources_folder = os.path.join(os.path.dirname(__file__), 'resources')
10
-
11
-
12
- class TestCommonUtils(TestCase):
13
-
14
- def test_merge_two_dicts(self):
15
- d1 = {'a': 1, 'b': 2, 'c': 3}
16
- d2 = {'d': 4, 'a': 5, 'e': 6}
17
- assert merge_two_dicts(d1, d2) == {'a': 5, 'b': 2, 'c': 3, 'd': 4, 'e': 6}
18
- assert merge_two_dicts(d2, d1) == {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 6}
19
-
20
- def test_pretty_print(self):
21
- pretty_print(['Header 1', 'Long Header 2'],
22
- [['row1 cell 1', 'row1 cell 2'], ['row2 cell 1', 'Super long row2 cell 2']])