"""Basic information about the program and changes to it."""
APP_NAME = 'Transport'
APP_FOLDER = 'Transport1'
DATA_FOLDER = 'transport'
VERSIONS = [[(1, 5, 0), '', '',
['Changed how file extensions work---now using parameters '
'defined in settings.py.',
'Added classes for handling getting run-time information from '
'the user.']],
[(1, 4, 0), '2014-05-30', '19:40',
['Rewrote the instrument loader to use Python introspection '
'features rather than regular expression parsing.',
'Removed some junk from the class hierarchy for instruments, '
'including all abstract base classes, which were rendered '
'superfluous by the change to proper introspection.',
'Modified the experiment open and save feature to use XML files '
'instead of pickle files.']],
[(1, 3, 1), '2014-04-24', '11:32',
['Cleaned up some code in experiment.py, removing duplication '
'with expression/conditional evaluation and deleting methods '
'which are never used.',
'Began writing a controller frame for the vector magnet.',
'Fixed some problems with opening and saving experiments.']],
[(1, 3, 0), '2014-04-19', '19:45',
['Created a basic system for defining postprocessor functions '
'and a new Action subclass to go with it.',
'Created a frame for displaying experiment info on request.',
'Fixed a bug triggered when double-clicking on the end-of-'
'container lines in the Sequence Editor.',
'Wrote code for turning an experiment into XML and began '
'writing a script to convert it back.',
'Modified the method for setting experiment interaction '
'parameters to accept only keyword arguments (eliminating the '
'method for clearing said parameters).']],
[(1, 2, 0), '2014-04-07', '14:48',
['Removed seconds from the changelog timestamps.',
'Fixed some docstrings to be in accord with recent changes.',
'Changed the logging system to show only a single character for'
'the logging level.',
'Wrote some summary-level docstrings for the src package.',
'Made oxford_common.py load visa from instrument.py rather '
'than from pyvisa directly.',
'Removed the oxford_common_fake garbage.',
'Changed the formatting of the logging system slightly.',
'Significantly expanded the available lock-in amplifier '
'methods and actions to the point of possible usefulness.']],
[(1, 1, 5), '2014-03-27', '17:52',
['Made it so that moving things in the SequenceFrame does not '
'affect the clipboard.',
'Fixed Parameter cloning behavior so that the instantiate '
'attribute is set to False for clones.',
'Fixed some silly sizing issues in the filename panel for '
'premades.',
'Rewrote the versioning system to make the changelog an in-code '
'system.',
'Reformatted the log file header',
'Modified the SVN update system so that the message comes '
'from the in-code changelog rather than from a dialog. The '
'update no longer affects anything locally---it only updates '
'the repository. It may still optionally update documentation.',
'Removed versioning.py.']],
[(1, 1, 4), '2014-03-09', '12:32',
['Fixed a problem with the sizing on the while-loop dialogs.']],
[(1, 1, 3), '2014-03-05', '09:24',
['Started writing some dummy Oxford classes for testing '
'purposes.']],
[(1, 1, 2), '2014-02-19', '12:00',
['Made progress on single, unified configuration parser, and set '
'it up for use in base_premade.py and configuration.py',
'Made the help data be loaded on use rather than on '
'initialization.']],
[(1, 1, 1), '2014-02-07', '10:33',
['Got sizing working properly on the custom grid (scan) panel',
'Reorganized things slightly.']],
[(1, 1, 0), '2014-02-04', '09:18',
['Added a way to interrupt manual loop actions in the '
'SequenceFrame',
'Added a basic way to prompt for user input from the command '
'line.',
'Renamed status_monitor.py to progress.py.',
'Put basic version information into an about.py module.',
'Moved file-naming stuff into appropriate modules---'
'file_naming.py and instrument.py, under System---out of '
'pathtools.py.',
'Got rid of some pointless methods regarding forcing lengths to '
'three in path_tools.py.',
'Moved stability checkers from general.py to stability.py.']],
[(1, 0, 8), '2014-01-27', '15:41',
['Minor changes to the organization, moving all development-'
'related things into a separate dev package.']],
[(1, 0, 7), '2014-01-23', '11:31',
['Began writing a new scrolled grid panel.']],
[(1, 0, 6), '2014-01-22', '11:31',
['Finished the dialog for auto-naming files. Wrote a panel for '
'displaying the results. Changed the auto-naming data storage to '
'use a specialized container class.']],
[(1, 0, 5), '2014-01-21', '20:14',
['Made minor modifications to the SVN Updater dialog.']],
[(1, 0, 4), '2014-01-21', '20:11',
['Wrote a dialog to take parameters for generating filenames '
'according to group customs.']],
[(1, 0, 3), '2014-01-20', '09:06',
['Fixed a bug related to disabled graphs being improperly '
're-enabled.',
'Stopped trying to save graphs when none have been defined and '
'enabled.',
'Cleaned up the handling of displaying graph information '
'slightly, so that experiment.py can give a list of tuples '
'consisting of graph title and enabled state.',
'Changed SequenceFrame to never show the extension for '
'experiment filenames.',
'Got rid of unusedbutpossiblyuseful.']],
[(1, 0, 2), '2014-01-20', '06:29',
['Changed experiment.py to do calculations using the math module '
'rather than the numpy module; it is significantly faster.',
'Changed the format of log messages somewhat in experiment.py.',
'Recompiled the documentation.',
'Made other minor stylistic changes.']],
[(1, 0, 1), '2014-01-19', '20:25',
['Refactored data saving in experiment.py, inlining stuff and '
'switching to a list comprehension. Timed it to make sure it was '
'in fact faster. Removed some short, single-line methods.',
'Experiment objects now can return only single graph objects and '
'lists of the names of graphs, rather than full lists of graph '
'objects.',
'Fixed a bug where children inserted in some ways would not be'
'properly instantiated.',
'Moved the junk specific to ExperimentEditor experiments into'
'expt_editor.py out of base_experiment.py (mostly stuff '
'involving menus, toolbars, and copy-and-paste).',
'Fixed a bug where graphs would not work when trying to run the '
'same experiment a second time.',
'Made the graphs clear their extrema at the end of each run.',
'Made the GraphPanel toolbar work the way I wanted---buttons '
'now are Zoom, Pan, Fit, and Toggle Updates.']],
[(1, 0, 0), '2014-01-13', '09:58',
['Starting point (the end of version 0)']]]
[docs]def getVersion():
"""Return a string representing the current version."""
return '%d.%d.%d' % VERSIONS[0][0]
[docs]def getLatestMessage():
"""Get a string representing the latest change information."""
text = VERSIONS[0][3]
return '\n'.join(text)
[docs]def getChangelog(lineLength=50):
"""Return the change log.
Parameters
----------
lineLength : int
The maximum number of characters per line in the changelog string.
Returns
-------
str
A string indicating all recorded changes to the software.
"""
answer = []
for item in VERSIONS:
version, date, time, text = item
major, minor, rev = version
answer.append('v%d.%d.%d | %s | %s' %
(major, minor, rev, date, time))
for line in text:
logLines = []
current = ' -'
for word in line.split():
if len(current + ' ' + word) < lineLength:
current += ' ' + word
else:
logLines.append(current)
current = ' ' + word
logLines.append(current)
answer.append('\n'.join(logLines))
answer.append('-' * lineLength)
return '\n'.join(answer)
[docs]def writeChangelog(logFile, lineLength=80):
"""Write the change log to a file.
Parameters
----------
logFile : str
The path to which the change log should be written.
lineLength : int
The maximum number of columns in a single line of text.
"""
with open(logFile, 'w') as outputFile:
outputFile.write(getChangelog(lineLength))