Skip to content

Commit 074a913

Browse files
committed
Standardize code layout, add some missing details
1 parent ae2b295 commit 074a913

38 files changed

+106
-72
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Metis scientific backend
22

3-
<p align="center"><img src="https://github.com/basf/metis-backend/blob/master/metis-logo.png" width="300" /></p>
3+
<p align="center"><img src="https://github.com/basf/metis-backend/blob/master/logo.png" width="300" /></p>
44

55
**This is the third part of the whole Metis infra: [GUI](https://github.com/basf/metis-gui) &rlarr; [BFF](https://github.com/basf/metis-bff) &rlarr; [backend](https://github.com/basf/metis-backend).**
66

index.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
from flask import Flask
77
from netius.servers import WSGIServer
88

9-
from i_data.bp_data import bp_data
10-
from i_calculations.bp_calculations import bp_calculations
9+
from metis_backend.datasources.bp_data import bp_data
10+
from metis_backend.calculations.bp_calculations import bp_calculations
1111

1212

1313
app = Flask(__name__)

metis-logo.png renamed to logo.png

File renamed without changes.

utils.py renamed to metis_backend/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88

99
from flask import Response, current_app, request
1010

11-
from i_data import Data_storage
11+
from metis_backend.datasources import Data_storage
1212

1313

14-
CONFIG_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), 'conf/env.ini'))
14+
CONFIG_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '../conf/env.ini'))
1515
assert os.path.exists(CONFIG_PATH)
1616
config = ConfigParser()
1717
config.read(CONFIG_PATH)

i_calculations/__init__.py renamed to metis_backend/calculations/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
from yascheduler import Yascheduler
66

7-
from i_calculations.xrpd import get_pattern
8-
from i_data import Data_type
9-
from i_structures.topas import ase_to_topas
10-
from i_structures.fullprof import ase_to_fullprof
7+
from metis_backend.calculations.xrpd import get_pattern
8+
from metis_backend.datasources import Data_type
9+
from metis_backend.structures.topas import ase_to_topas
10+
from metis_backend.structures.fullprof import ase_to_fullprof
1111

1212

1313
_scheduler_status_mapping = {

i_calculations/bp_calculations.py renamed to metis_backend/calculations/bp_calculations.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import requests
1212
from yascheduler import Yascheduler
1313

14-
from utils import (
14+
from metis_backend import (
1515
get_data_storage,
1616
fmt_msg,
1717
key_auth,
@@ -24,11 +24,11 @@
2424
TMP_PHASEID_DIR,
2525
TMP_PHASEID_URL,
2626
)
27-
from i_calculations import Calc_setup, _scheduler_status_mapping
28-
from i_data import Data_type
29-
from i_structures import html_formula
30-
from i_structures.struct_utils import ase_unserialize
31-
from i_phaseid import (
27+
from metis_backend.calculations import Calc_setup, _scheduler_status_mapping
28+
from metis_backend.datasources import Data_type
29+
from metis_backend.structures import html_formula
30+
from metis_backend.structures.struct_utils import ase_unserialize
31+
from metis_backend.phaseid import (
3232
WAVELENGTH, MIN_Q, MAX_Q, N_BINS, N_BEST_MATCHES,
3333
background,
3434
get_best_match,

i_calculations/xrpd.py renamed to metis_backend/calculations/xrpd.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import random
22
import string
33

4-
from i_data import Data_type
4+
from metis_backend.datasources import Data_type
55

66

77
def get_pattern(resource):

i_data/__init__.py renamed to metis_backend/datasources/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""
22
A simple persistence layer implementation;
3-
only a few Postgres tables are used;
4-
of course we use SQL here only and nowhere else
3+
a few Postgres tables are used
4+
(of course we must use raw SQL here only and nowhere else)
55
"""
66
import json
77
import logging
@@ -185,7 +185,7 @@ def drop_item(self, uuid):
185185

186186
def get_refdis(self, els, strict=False):
187187

188-
from i_phaseid import MAX_PATT_LEN
188+
from metis_backend.phaseid import MAX_PATT_LEN
189189

190190
pg_arrays, pattern_ids, names = [], [], []
191191
els.sort()
@@ -220,7 +220,7 @@ def import_item(self, ext_id):
220220
# FIXME only allow from a certain phase ID session
221221
# FIXME specify parent node
222222

223-
from i_structures.struct_utils import provider_to_ase, ase_serialize
223+
from metis_backend.structures.struct_utils import provider_to_ase, ase_serialize
224224

225225
self.cursor.execute(f"SELECT provider, name, content FROM {REFSTRS_TABLE} WHERE ext_id = '{ext_id}';")
226226
row = self.cursor.fetchone()

i_data/bp_data.py renamed to metis_backend/datasources/bp_data.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@
77
from flask import Blueprint, current_app, request, abort, Response, send_file
88
from ase import io as ase_io
99

10-
from i_data import Data_type
11-
from i_data.fmt import detect_format
12-
from i_data.xrpd import extract_pattern
10+
from metis_backend import MAX_UPLOAD_SIZE, get_data_storage, fmt_msg, key_auth, is_plain_text, is_valid_uuid
1311

14-
from i_structures import html_formula
15-
from i_structures.cif_utils import cif_to_ase
16-
from i_structures.struct_utils import (
12+
from metis_backend.datasources import Data_type
13+
from metis_backend.datasources.fmt import detect_format
14+
from metis_backend.datasources.xrpd import extract_pattern
15+
16+
from metis_backend.structures import html_formula
17+
from metis_backend.structures.cif_utils import cif_to_ase
18+
from metis_backend.structures.struct_utils import (
1719
poscar_to_ase,
1820
optimade_to_ase,
1921
refine,
2022
get_formula,
2123
ase_serialize,
2224
ase_unserialize,
2325
)
24-
from i_calculations.xrpd import get_pattern, get_pattern_name
25-
26-
from utils import MAX_UPLOAD_SIZE, get_data_storage, fmt_msg, key_auth, is_plain_text, is_valid_uuid
26+
from metis_backend.calculations.xrpd import get_pattern, get_pattern_name
2727

2828

2929
bp_data = Blueprint("data", __name__, url_prefix="/data")

i_data/fmt.py renamed to metis_backend/datasources/fmt.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11

2-
#from utils import is_plain_text
3-
4-
52
def is_ascii(test):
6-
try: test.decode("utf-8")
7-
except: return False
8-
else: return True
3+
try:
4+
test.decode("utf-8")
5+
except:
6+
return False
7+
else:
8+
return True
99

1010

1111
def detect_format(string):
1212
"""
13-
Detect data format checking the most common features
13+
Detect data format, checking the most common features
1414
"""
1515
try: string = string.encode("utf-8")
1616
except: pass # keep strings as bytes FIXME
File renamed without changes.

i_data/xrpd.py renamed to metis_backend/datasources/xrpd.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#import numpy as np
55
import xylib
66

7-
from i_phaseid import MAX_PATT_LEN
8-
from i_data import Data_type
7+
from metis_backend.phaseid import MAX_PATT_LEN
8+
from metis_backend.datasources import Data_type
99

1010

1111
def extract_pattern(binary):

i_phaseid/__init__.py renamed to metis_backend/phaseid/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11

22
import numpy as np
33

4-
from i_phaseid.el_groups import groups_abbreviations, chemical_symbols_and_groups, get_elements_or_groups
5-
from i_phaseid.background import background
6-
from i_phaseid.histogram import get_best_match
4+
from metis_backend.phaseid.el_groups import groups_abbreviations, chemical_symbols_and_groups, get_elements_or_groups
5+
from metis_backend.phaseid.background import background
6+
from metis_backend.phaseid.histogram import get_best_match
77

88

99
WAVELENGTH = 0.1610184395 # experimental, switch between wavelengths based on 2theta
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

schema/db_unseed.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
TRUNCATE TABLE backend_data_links;
2+
TRUNCATE TABLE backend_data_nodes CASCADE;
3+
-- TRUNCATE TABLE yascheduler_nodes;
4+
TRUNCATE TABLE yascheduler_tasks;

scripts/assign_phases.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
from phase_utils import assign_phase, save_as_phase
1111

1212
import set_path
13-
from i_data import Data_type, NODE_TABLE, PHASE_TABLE
14-
from i_structures import html_formula
15-
from i_structures.struct_utils import get_formula, sgn_to_crsystem, crsystem_to_sgn, ase_unserialize
16-
from utils import get_data_storage
13+
from metis_backend import get_data_storage
14+
from metis_backend.datasources import Data_type, NODE_TABLE, PHASE_TABLE
15+
from metis_backend.structures import html_formula
16+
from metis_backend.structures.struct_utils import get_formula, sgn_to_crsystem, crsystem_to_sgn, ase_unserialize
1717

1818

1919
accuracy = 1E-02

scripts/convert_to_ase.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import sys
44

55
import set_path
6-
from i_data import detect_format
7-
from i_structures.struct_utils import poscar_to_ase, optimade_to_ase, refine, get_formula
8-
from i_structures.cif_utils import cif_to_ase
6+
from metis_backend.datasources.fmt import detect_format
7+
from metis_backend.structures.struct_utils import poscar_to_ase, optimade_to_ase, refine, get_formula
8+
from metis_backend.structures.cif_utils import cif_to_ase
99

1010

1111
structure = open(sys.argv[1]).read()

scripts/convert_to_topas.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
import sys
44

55
import set_path
6-
from i_structures.struct_utils import detect_format, poscar_to_ase, optimade_to_ase, refine, get_formula
7-
from i_structures.cif_utils import cif_to_ase
8-
from i_structures.topas import ase_to_topas
9-
from i_calculations import Calc_setup
6+
from metis_backend.datasources.fmt import detect_format
7+
from metis_backend.structures.struct_utils import poscar_to_ase, optimade_to_ase, refine, get_formula
8+
from metis_backend.structures.cif_utils import cif_to_ase
9+
from metis_backend.structures.topas import ase_to_topas
10+
from metis_backend.calculations import Calc_setup
1011

1112

1213
structure = open(sys.argv[1]).read()

scripts/phase_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import random # TODO
55

66
import set_path
7-
from i_structures.chemical_formulae import parse_formula
7+
from metis_backend.structures.chemical_formulae import parse_formula
88

99

1010
BFF_PREFIX = 'bff_'
@@ -66,7 +66,7 @@ def get_or_create_tag(conn, cursor, user_id, type_id, title, descr):
6666

6767
def save_as_phase(db, node_uuid, phase):
6868

69-
logging.warning(f"Assing phase {phase} to node {node_uuid}")
69+
logging.warning(f"Assigning phase {phase} to node {node_uuid}")
7070

7171
db.cursor.execute("""SELECT id FROM {} WHERE uuid = '{}';""".format(
7272
BFF_TABLES['datasources'], node_uuid

tests/integration/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import httplib2
77

88
import set_path
9-
from utils import API_KEY
9+
from metis_backend import API_KEY
1010

1111

1212
# see BFF server
Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,60 @@
11
#!/usr/bin/env python
22
"""
3-
NB
3+
NB this is equivalent to the curl calls, e.g.
44
curl -XPOST -HKey:... http://localhost:7050/data/create -d 'content={"attributes":{"immutable_id":42,"species":[{"chemical_symbols":["Au"]}],"cartesian_site_positions":[[0,0,0]],"lattice_vectors":[[0,2,2],[2,0,2],[2,2,0]]}}'
5-
curl -XPOST -HKey:... http://localhost:7050/calculations/create -d 'engine=dummy&uuid=0ee24493-5f4a-41f6-a5d7-171e408f4048'
5+
curl -XPOST -HKey:... http://localhost:7050/calculations/create -d 'engine=dummy&uuid=$UUID'
6+
curl -XPOST -HKey:... http://localhost:7050/calculations/phaseid -d 'uuid=$UUID&els=Al-K-O'
7+
curl -XPOST -HKey:... http://localhost:7050/data/import -d 'id=S1254081'
68
"""
9+
710
import sys
11+
import os.path
12+
import base64
813

914
from common import make_request
15+
1016
import set_path
11-
from utils import API_KEY
17+
from metis_backend import API_KEY
18+
from metis_backend.datasources.fmt import detect_format
1219

1320

1421
host = 'http://localhost:7050'
15-
#API_KEY = 'XXX' # for production server
22+
#API_KEY = 'XXX' # redefine for production
1623

17-
try: content = open(sys.argv[1]).read()
18-
except IndexError: content = """{"attributes":{"immutable_id":42, "species":[{"chemical_symbols":
24+
try:
25+
fname = sys.argv[1]
26+
except IndexError:
27+
fname = None
28+
content = """{"attributes":{"immutable_id":42, "species":[{"chemical_symbols":
1929
["Au"]}],"cartesian_site_positions":[[0,0,0]],"lattice_vectors":[[0,2,2],[2,0,2],[2,2,0]]}}"""
2030

31+
try:
32+
content = open(fname).read()
33+
except UnicodeDecodeError:
34+
content = open(fname, "rb").read()
35+
except TypeError:
36+
pass
37+
38+
if fname:
39+
fname = os.path.basename(fname)
40+
41+
fmt = detect_format(content)
42+
if fmt == 'raw':
43+
content = b'base64,' + base64.b64encode(content)
44+
2145
try: engine = sys.argv[2]
22-
except IndexError: engine = 'topas'
46+
except IndexError: engine = None
47+
48+
print(f"Requested calculation: {engine or 'NO'}")
2349

24-
_, answer = make_request(host + '/data/create', {'content': content}, 'POST', headers={'Key': API_KEY})
50+
#_, answer = make_request(host + '/data/create', {'content': content, 'name': fname}, 'POST', headers={'Key': API_KEY})
51+
_, answer = make_request(host + '/data/create', {'content': content, 'fmt': fmt, 'name': fname}, 'POST', headers={'Key': API_KEY})
2552
print(answer)
2653
print('=' * 100 + 'Data uploaded correctly')
2754

28-
_, answer = make_request(host + '/calculations/create', {'uuid': answer['uuid'], 'engine': engine}, 'POST', headers={'Key': API_KEY})
29-
print(answer)
30-
print('=' * 100 + f'Calc via {engine} engine submitted correctly')
55+
if engine:
56+
_, answer = make_request(host + '/calculations/create', {'uuid': answer['uuid'], 'engine': engine}, 'POST', headers={'Key': API_KEY})
57+
print(answer)
58+
print('=' * 100 + f'Calc via {engine} engine submitted correctly')
59+
3160
print('=' * 100 + 'Test passed')

tests/stress/helpers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import random
22

33
import set_path
4-
from i_data import Data_type
5-
from i_structures.chemical_formulae import common_chem_elements
6-
from i_calculations.xrpd import get_pattern_name
4+
from metis_backend.datasources import Data_type
5+
from metis_backend.structures.chemical_formulae import common_chem_elements
6+
from metis_backend.calculations.xrpd import get_pattern_name
77

88

99
common_chem_elements = common_chem_elements.split()

tests/stress/test_prepare.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
from helpers import gen_data_item
88

99
import set_path
10-
from i_data import Data_type
11-
from utils import get_data_storage
10+
from metis_backend import get_data_storage
11+
from metis_backend.datasources import Data_type
1212

1313

1414
FAKE_NODES = 5000

tests/stress/test_stress.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from helpers import POSSIBLE_CONTENT
88

99
import set_path
10-
from utils import get_data_storage
10+
from metis_backend import get_data_storage
1111

1212

1313
db = get_data_storage()

0 commit comments

Comments
 (0)