1 |
afanfani |
1.2 |
#!/usr/bin/env python
|
2 |
|
|
"""
|
3 |
|
|
_LFNBaseName_
|
4 |
|
|
"""
|
5 |
|
|
|
6 |
|
|
from crab_exceptions import *
|
7 |
spiga |
1.21 |
from crab_util import runCommand, getUserName
|
8 |
afanfani |
1.2 |
import common
|
9 |
afanfani |
1.12 |
import os, string, time
|
10 |
afanfani |
1.2 |
|
11 |
|
|
|
12 |
spiga |
1.21 |
def LFNBase(forced_path, PrimaryDataset='',ProcessedDataset='',merged=True,publish=False):
|
13 |
afanfani |
1.2 |
"""
|
14 |
|
|
"""
|
15 |
fanzago |
1.10 |
if (PrimaryDataset == 'null'):
|
16 |
|
|
PrimaryDataset = ProcessedDataset
|
17 |
spiga |
1.20 |
if PrimaryDataset != '':
|
18 |
|
|
if ( PrimaryDataset[0] == '/' ): PrimaryDataset=PrimaryDataset[1:]
|
19 |
spiga |
1.24 |
if forced_path.find('store/group')>0:
|
20 |
|
|
lfnbase = os.path.join(forced_path, PrimaryDataset, ProcessedDataset)
|
21 |
|
|
else:
|
22 |
|
|
lfnbase = os.path.join(forced_path, getUserName(), PrimaryDataset, ProcessedDataset)
|
23 |
fanzago |
1.23 |
if (publish == True):
|
24 |
fanzago |
1.25 |
checkSlash(ProcessedDataset)
|
25 |
fanzago |
1.23 |
checkLength(lfnbase, forced_path, PrimaryDataset, ProcessedDataset)
|
26 |
|
|
return lfnbase
|
27 |
ewv |
1.9 |
|
28 |
fanzago |
1.25 |
def checkSlash(ProcessedDataset):
|
29 |
|
|
"""
|
30 |
|
|
check if [USER].publish_data_name contains not allowed slash
|
31 |
|
|
"""
|
32 |
fanzago |
1.26 |
import re
|
33 |
fanzago |
1.25 |
|
34 |
fanzago |
1.26 |
#if (str(ProcessedDataset).find("/") > -1):
|
35 |
|
|
# raise CrabException("Warning: [USER] publication_data_name contains a '/' characters that is not allowed. Please change the publication_data_name value")
|
36 |
|
|
m = re.findall("[^-\w_\.%]+", str(ProcessedDataset))
|
37 |
|
|
if (m != []):
|
38 |
|
|
common.logger.debug("check not allowed characters in the publication_data_name = " + str(m))
|
39 |
|
|
raise CrabException("Warning: [USER] publication_data_name contains not allowed characters %s . Please change the publication_data_name value" % str(m))
|
40 |
fanzago |
1.25 |
|
41 |
fanzago |
1.23 |
def checkLength(lfnbase, forced_path, PrimaryDataset, ProcessedDataset):
|
42 |
|
|
"""
|
43 |
|
|
"""
|
44 |
|
|
|
45 |
|
|
len_primary = len(PrimaryDataset)
|
46 |
|
|
|
47 |
|
|
common.logger.debug("CheckLength of LFN and User DatasetName")
|
48 |
|
|
common.logger.debug("max length for complete LFN is 500 characters, max length for primary dataset is 100 characters")
|
49 |
|
|
common.logger.debug("PrimaryDataset = " + PrimaryDataset)
|
50 |
|
|
common.logger.debug("len_primary = " + str(len_primary))
|
51 |
|
|
|
52 |
|
|
if (len_primary > 100):
|
53 |
|
|
raise CrabException("Warning: you required user_data_publication. The PrimaryDatasetName has to be < 100 characters")
|
54 |
|
|
|
55 |
|
|
if (PrimaryDataset != ProcessedDataset):
|
56 |
|
|
common.logger.debug("ProcessedDataset = " + ProcessedDataset)
|
57 |
|
|
common.logger.debug("len(ProcessedDataset) = " + str(len(ProcessedDataset)))
|
58 |
afanfani |
1.2 |
|
59 |
fanzago |
1.23 |
common.logger.debug("forced_path = " + forced_path)
|
60 |
|
|
common.logger.debug("len(forced_path) = " + str(len(forced_path)))
|
61 |
|
|
|
62 |
|
|
user = getUserName()
|
63 |
|
|
len_user_name = len(user)
|
64 |
|
|
common.logger.debug("user = " + user)
|
65 |
|
|
common.logger.debug("len_user_name = " + str(len_user_name))
|
66 |
|
|
|
67 |
|
|
common.logger.debug("lfnbase = " + lfnbase)
|
68 |
|
|
common.logger.debug("len(lfnbase) = " + str(len(lfnbase)))
|
69 |
|
|
|
70 |
|
|
### we suppose a output_file_name of 50 characters ###
|
71 |
|
|
if len(lfnbase)>450:
|
72 |
|
|
if (PrimaryDataset != ProcessedDataset):
|
73 |
|
|
#500 - len_user_name - len_primary - len(forced) - len(PSETHASH = 32) - 4(/) - output(50)
|
74 |
|
|
#~400 - len_user_name - len_primary - len(forced)
|
75 |
|
|
if (len(ProcessedDataset) > (400 - len_user_name - len_primary - len(forced_path))):
|
76 |
|
|
raise CrabException("Warning: publication name too long. USER.publish_data_name has to be < " + str(400 - len_user_name - len_primary - len(forced_path)) + " characters")
|
77 |
|
|
else:
|
78 |
|
|
raise CrabException("Warning: LFN > 500 characters")
|
79 |
|
|
else:
|
80 |
|
|
if (len(ProcessedDataset) > (400 - len_user_name - len(forced_path)) / 2):
|
81 |
|
|
raise CrabException("Warning: publication name too long. USER.publish_data_name has to be < " + str((400 - len_user_name - len(forced_path)) / 2) + " characters")
|
82 |
|
|
else:
|
83 |
|
|
raise CrabException("Warning: LFN > 500 characters")
|
84 |
|
|
|
85 |
afanfani |
1.4 |
|
86 |
afanfani |
1.2 |
if __name__ == '__main__' :
|
87 |
|
|
"""
|
88 |
|
|
"""
|
89 |
spiga |
1.22 |
import logging
|
90 |
|
|
common.logger = logging
|
91 |
afanfani |
1.2 |
|
92 |
ewv |
1.9 |
print "xx %s xx"%getUserName()
|
93 |
afanfani |
1.2 |
baselfn = LFNBase("datasetstring")
|
94 |
ewv |
1.9 |
print baselfn
|
95 |
afanfani |
1.2 |
|
96 |
|
|
unmergedlfn = LFNBase("datasetstring",merged=False)
|
97 |
ewv |
1.9 |
print unmergedlfn
|
98 |
afanfani |
1.2 |
print PFNportion("datasetstring")
|