Skip to content

Commit

Permalink
Merge pull request #25 from decarlof/master
Browse files Browse the repository at this point in the history
clean-up and minor improvements
  • Loading branch information
decarlof committed Apr 23, 2024
2 parents 51b5337 + 35775f5 commit 7feae2d
Show file tree
Hide file tree
Showing 8 changed files with 82 additions and 154 deletions.
8 changes: 0 additions & 8 deletions bld.bat

This file was deleted.

8 changes: 0 additions & 8 deletions build.sh

This file was deleted.

1 change: 0 additions & 1 deletion dmagic/__init__.py
Expand Up @@ -47,5 +47,4 @@
# #########################################################################

from dmagic.scheduling import *
from dmagic.pv import *
from dmagic.utils import *
74 changes: 52 additions & 22 deletions dmagic/__main__.py
Expand Up @@ -59,15 +59,43 @@
import datetime
import argparse
import datetime as dt
from epics import PV

from dmagic import scheduling
from dmagic import pv
from dmagic import log
from dmagic import config
from dmagic import authorize
from dmagic import utils


def init_PVs(args):
"""
Initialize the EPICS PVs that will hold user and experiment information
Parameters
----------
args.tomoscan_prefix : EPICS IOC prefix, e.g. 2bma:TomoScan:
Returns
-------
user_pvs : dict
A dictionary of EPICS PVs
"""

user_pvs = {}
tomoscan_prefix = args.tomoscan_prefix
log.info("Trying to initiale EPICS PVs")
user_pvs['pi_name'] = PV(tomoscan_prefix + 'UserName')
user_pvs['pi_last_name'] = PV(tomoscan_prefix + 'UserLastName')
user_pvs['pi_affiliation'] = PV(tomoscan_prefix + 'UserInstitution')
user_pvs['pi_badge'] = PV(tomoscan_prefix + 'UserBadge')
user_pvs['pi_email'] = PV(tomoscan_prefix + 'UserEmail')
user_pvs['proposal_number'] = PV(tomoscan_prefix + 'ProposalNumber')
user_pvs['proposal_title'] = PV(tomoscan_prefix + 'ProposalTitle')
user_pvs['user_info_update_time'] = PV(tomoscan_prefix + 'UserInfoUpdate')
user_pvs['experiment_date'] = PV(tomoscan_prefix + 'ExperimentYearMonth')
return user_pvs

def init(args):
if not os.path.exists(str(args.config)):
config.write(str(args.config))
Expand Down Expand Up @@ -102,24 +130,26 @@ def show(args):
proposal = scheduling.get_current_proposal(proposals, args)
if proposal != None:
proposal_pi = scheduling.get_current_pi(proposal)
user_name = proposal_pi['firstName']
user_last_name = proposal_pi['lastName']
user_affiliation = proposal_pi['institution']
user_email = proposal_pi['email']
user_badge = proposal_pi['badge']
pi_name = proposal_pi['firstName']
pi_last_name = proposal_pi['lastName']
pi_affiliation = proposal_pi['institution']
pi_email = proposal_pi['email']
pi_badge = proposal_pi['badge']

proposal_gup = scheduling.get_current_proposal_id(proposal)
proposal_id = scheduling.get_current_proposal_id(proposal)
proposal_title = scheduling.get_current_proposal_title(proposal)
proposal_user_emails = scheduling.get_current_emails(proposal, False)
proposal_start_date = scheduling.get_proposal_starting_date(proposal)
proposal_start = dt.datetime.fromisoformat(utils.fix_iso(proposal['startTime']))
proposal_end = dt.datetime.fromisoformat(utils.fix_iso(proposal['endTime']))
log.info("\tRun: %s" % run)
log.info("\tPI Name: %s %s" % (user_name, user_last_name))
log.info("\tPI affiliation: %s" % (user_affiliation))
log.info("\tPI e-mail: %s" % (user_email))
log.info("\tPI badge: %s" % (user_badge))
log.info("\tProposal GUP: %s" % (proposal_gup))
log.info("\tPI Name: %s %s" % (pi_name, pi_last_name))
log.info("\tPI affiliation: %s" % (pi_affiliation))
log.info("\tPI e-mail: %s" % (pi_email))
log.info("\tPI badge: %s" % (pi_badge))
log.info("\tProposal GUP: %s" % (proposal_id))
log.info("\tProposal Title: %s" % (proposal_title))
log.info("\tStart date: %s" % (proposal_start_date))
log.info("\tStart time: %s" % (proposal_start))
log.info("\tEnd Time: %s" % (proposal_end))
log.info("\tUser email address: ")
Expand Down Expand Up @@ -166,16 +196,16 @@ def tag(args):
user_pvs = pv.init_PVs(args)

log.info("User/Experiment PV update")
user_pvs['user_name'].put(pi['firstName'])
log.info('Updating user_name EPICS PV with: %s' % pi['firstName'])
user_pvs['user_last_name'].put(pi['lastName'])
log.info('Updating user_last_name EPICS PV with: %s' % pi['lastName'])
user_pvs['user_affiliation'].put(pi['institution'])
log.info('Updating user_affiliation EPICS PV with: %s' % pi['institution'])
user_pvs['user_email'].put(pi['email'])
log.info('Updating user_email EPICS PV with: %s' % pi['email'])
user_pvs['user_badge'].put(pi['badge'])
log.info('Updating user_badge EPICS PV with: %s' % pi['badge'])
user_pvs['pi_name'].put(pi['firstName'])
log.info('Updating pi_name EPICS PV with: %s' % pi['firstName'])
user_pvs['pi_last_name'].put(pi['lastName'])
log.info('Updating pi_last_name EPICS PV with: %s' % pi['lastName'])
user_pvs['pi_affiliation'].put(pi['institution'])
log.info('Updating pi_affiliation EPICS PV with: %s' % pi['institution'])
user_pvs['pi_email'].put(pi['email'])
log.info('Updating pi_email EPICS PV with: %s' % pi['email'])
user_pvs['pi_badge'].put(pi['badge'])
log.info('Updating pi_badge EPICS PV with: %s' % pi['badge'])

# set iso format time
central = pytz.timezone('US/Central')
Expand Down
88 changes: 0 additions & 88 deletions dmagic/pv.py

This file was deleted.

43 changes: 30 additions & 13 deletions dmagic/scheduling.py
Expand Up @@ -101,21 +101,24 @@ def current_run(auth, args):
run : string
Run name 2024-1.
"""
end_point = "sched-api/run/getAllRuns"
end_point = "beamline-scheduling/sched-api/run/getAllRuns"
api_url = args.url + "/" + end_point

reply = requests.get(api_url, auth=auth)

start_times = [item['startTime'] for item in reply.json()]
end_times = [item['endTime'] for item in reply.json()]
runs = [item['runName'] for item in reply.json()]

time_now = dt.datetime.now(pytz.timezone('America/Chicago')) + dt.timedelta(args.set)
for i in range(len(start_times)):
prop_start = dt.datetime.fromisoformat(utils.fix_iso(start_times[i]))
prop_end = dt.datetime.fromisoformat(utils.fix_iso(end_times[i]))
if prop_start <= time_now and prop_end >= time_now:
return runs[i]
if reply.status_code != 404:
start_times = [item['startTime'] for item in reply.json()]
end_times = [item['endTime'] for item in reply.json()]
runs = [item['runName'] for item in reply.json()]

time_now = dt.datetime.now(pytz.timezone('America/Chicago')) + dt.timedelta(args.set)
for i in range(len(start_times)):
prop_start = dt.datetime.fromisoformat(utils.fix_iso(start_times[i]))
prop_end = dt.datetime.fromisoformat(utils.fix_iso(end_times[i]))
if prop_start <= time_now and prop_end >= time_now:
return runs[i]
else:
log.error("No response from the restAPI. Error: %s" % reply.status_code)
return None


Expand All @@ -142,7 +145,7 @@ def beamtime_requests(run, auth, args):
if not run:
return None
else:
end_point="sched-api/activity/findByRunNameAndBeamlineId"
end_point="beamline-scheduling/sched-api/activity/findByRunNameAndBeamlineId"
api_url = args.url + "/" + end_point + "/" + run + "/" + args.beamline
reply = requests.get(api_url, auth=auth)

Expand Down Expand Up @@ -275,4 +278,18 @@ def get_current_emails(proposal, exclude_pi=True):
else:
print(" Missing e-mail for badge {0:6d}, {1:s} {2:s}, institution {3:s}"
.format(u['badge'], u['firstName'], u['lastName'], u['institution']))
return emails
return emails

def get_proposal_starting_date(proposal):
"""
Get the proposal starting date for the current proposal.
Returns
---------
proposal starting date as a string
"""
if not proposal:
log.error("No current valid proposal")
return None
log.info("Found valid proposal start time")
return str(dt.datetime.fromisoformat((proposal['startTime'])).strftime("%Y_%m_%d"))
1 change: 0 additions & 1 deletion docs/source/api.rst
Expand Up @@ -9,7 +9,6 @@ for `DMagic <https://github.com/decarlof/DMagic>`_.
.. toctree::

api/dmagic.authorize
api/dmagic.pv
api/dmagic.scheduling
api/dmagic.utils

Expand Down
13 changes: 0 additions & 13 deletions docs/source/api/dmagic.pv.rst

This file was deleted.

0 comments on commit 7feae2d

Please sign in to comment.