cassini
Home
Bases: HomeTierBase
Home Tier
.
This, or a subclass of this should generally be the first entry in your hierarchy, essentially represents the top level folder in your hierarchy.
Source code in cassini/defaults/tiers.py
19 20 21 22 23 24 25 26 27 |
|
WorkPackage
Bases: NotebookTierBase
WorkPackage Tier.
Intended to contain all the work towards a particular goal. i.e. prove that we can do this.
Next level down are Experiment
s.
Source code in cassini/defaults/tiers.py
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
exps
property
exps
Gets a list of all this WorkPackage
s experiments.
Experiment
Bases: NotebookTierBase
Experiment Tier
.
Just below WorkPackage
, experiments are intended to be collections of samples and datasets that work towards the
goal of the parent WorkPackage
.
Each Experiment
has a number of samples.
Source code in cassini/defaults/tiers.py
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
|
techniques
property
techniques
Convenience property for looking up all the techniques that have been performed on samples in this experiment.
Notes
This just checks for the existence of DataSet folders, and not if they have anything in them!
smpls
property
smpls
Get a list of this Experiment
s samples.
setup_technique
setup_technique(name)
Convenience method for adding a new technique to this experiment.
Essentially just creates a new folder for it in the appropriate location.
This folder can then be filled with DataSet
s
Source code in cassini/defaults/tiers.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
|
Sample
Bases: NotebookTierBase
Sample Tier
.
A Sample
is intended to represent some object that you collect data on.
As such, each sample has its own DataSet
s.
Notes
A Sample
id can't start with a number and can't contain '-'
(dashes), as these confuse the name parser.
Source code in cassini/defaults/tiers.py
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
|
datasets
property
datasets
Convenient way of getting a list of DataSet
s this sample has.
DataSet
Bases: FolderTierBase
DataSet
Tier.
The final tier, intended to represent a folder containing a collection of files relating to a particular Sample
.
Source code in cassini/defaults/tiers.py
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
|
__iter__
__iter__()
Call os.scandir
on self.folder
.
Source code in cassini/defaults/tiers.py
174 175 176 177 178 |
|
Project
Represents your project. Understands your naming convention, and your project hierarchy.
Some hooks are provided to customize setup and launching behaviour, see
__before_setup_files__
, __after_setup_files__
, __before_launch__
and __after_launch__
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
hierarchy |
Sequence[Type[BaseTier]]
|
Sequence of |
required |
project_folder |
Union[str, Path]
|
path to home directory. Note this also accepts a path to a file, but will take |
required |
Attributes:
Name | Type | Description |
---|---|---|
__before_setup_files__ |
List[Callable[[Project], None]]
|
Sequence of callables that are called, in order, first thing when |
__after_setup_files__ |
List[Callable[[Project], None]]
|
Sequence of callables that are called, in order, last thing Note
|
__before_launch__ |
List[Callable[[Project, Union[LabApp, None]], None]]
|
Sequence of callables that are called first thing when |
__after_launch__ |
List[Callable[[Project, Union[LabApp, None]], None]]
|
Sequence of callables that are called last thing after |
Notes
This class is a singleton i.e. only 1 instance per interpreter can be created.
Source code in cassini/core.py
773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 |
|
hierarchy
property
writable
hierarchy
Sequence of TierBase
subclasses representing the hierarchy for this project. i.e. earlier entries are stored
in higher level directories.
rank_map
property
rank_map
Maps Tier
types to their position in the hierarchy.
home
property
home
Get the home Tier
.
env
env(name)
Initialise the global environment to a particular Tier
that is retrieved by parsing name
.
This will set the value of env.o
.
Warnings
This should only really be called once (or only with 1 name). Otherwise this could create some unexpected behaviour.
Source code in cassini/core.py
880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 |
|
get_tier
get_tier(identifiers)
Get a tier for a given set of identifiers.
Source code in cassini/core.py
905 906 907 908 909 910 |
|
get_child_cls
get_child_cls(tier_cls)
Get the child class of a given tier class. Returns None if there is no child class
Source code in cassini/core.py
912 913 914 915 916 917 918 919 920 921 |
|
get_parent_cls
get_parent_cls(tier_cls)
Get the parent class of a given tier class. Returns None if there is no parent class
Source code in cassini/core.py
923 924 925 926 927 928 929 930 931 932 |
|
__getitem__
__getitem__(name)
Retrieve a tier object from the project by name.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name |
str
|
Parsable name to get the tier object by. To get your |
required |
Returns:
Name | Type | Description |
---|---|---|
tier |
TierBase
|
Tier retrieved from project. |
Source code in cassini/core.py
934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 |
|
template_folder
template_folder()
Overwritable property providing where templates will be stored for this project.
Source code in cassini/core.py
957 958 959 960 961 962 |
|
setup_files
setup_files()
Setup files needed for this project.
Will put everything you need in project_folder
to get going.
Note
This does not call __after_setup_files__
if the project already exists.
Source code in cassini/core.py
964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 |
|
launch
launch(app=None, patch_pythonpath=True)
Jump off point for a cassini project.
Sets up required files for your project, monkeypatches PYTHONPATH
to make your project available throughout
and launches a jupyterlab server.
This explicitly associates an instance of the Jupyter server with a particular project.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
app |
LabApp
|
A ready made Jupyter Lab app (By defuault will just create a new one). |
None
|
patch_pythonpath |
bool
|
Add |
True
|
Source code in cassini/core.py
1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 |
|
parse_name
parse_name(name)
Parses a string that corresponds to a Tier
and returns a list of its identifiers.
returns an empty tuple if not a valid name.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name |
str
|
name to parse |
required |
Returns:
Name | Type | Description |
---|---|---|
identifiers |
tuple
|
identifiers extracted from name, empty tuple if |
Notes
This works in a slightly strange - but robust way!
e.g.
>>> name = 'WP2.3c'
it will loop through each entry in cls.hierarchy
(skipping home!), and then perform a search on name
with
that regex:
>>> WorkPackage.name_part_regex
WP(\d+)
>>> match = re.search(WorkPackage.name_part_regex, name)
If there's no match, it will return ()
, if there is, it stores the id
part:
>>> wp_id = match.group(1) # in python group 0 is the whole match
>>> wp_id
2
Then it removes the whole match from the name:
>>> name = name[match.end(0):]
>>> name
.3c
Then it moves on to the next tier
>>> Experiment.name_part_regex
'\.(\d+)'
>>> match = re.search(WorkPackage.name_part_regex, name)
If there's a match it extracts the id, and substracts the whole string from name and moves on, continuing this loop until it's gone through the whole hierarchy.
The whole name has to be a valid id, or it will return ()
e.g.
>>> TierBase.parse_name('WP2.3')
('2', '3')
>>> TierBase.parse_name('WP2.u3')
()
Source code in cassini/core.py
1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 |
|