def test_duplicate(self): from netprintbox.utils import normalize_name # no way to fix this mangle result gracefully. # self.failIfEqual(normalize_name(u'/A4/foo_.doc'), # normalize_name(u'/A4/foo「」.doc')) self.failIfEqual(normalize_name(u'/A4/foo_.doc'), normalize_name(u'/A4/foo「.doc'))
def list(): return [ create_netprint_item( id='uncontrolled', name='uncontrolled'), create_netprint_item( id='latest', name=normalize_name('/latest.data')), ]
def put(self, file_obj, paper_size): file_name = normalize_name(file_obj.name, ext=True) logging.debug(u"Putting file to Netprint: %s as %s", file_obj.name, file_name) if paper_size == PaperSize.L: color = Color.color else: color = Color.choice_at_printing return self.client.send(file_obj, file_name=file_name, color=color, paper_size=paper_size)
def test_do_not_make_report_if_no_change(self): import hashlib from google.appengine.api import memcache from netprintbox.data import FileState from netprintbox.utils import ( normalize_name, get_namespace) NETPRINT_ID = 'latest' ORIGINAL_PATH = '/latest.data' NETPRINT_NAME = normalize_name(ORIGINAL_PATH) user = create_user() create_file_info(user, path=ORIGINAL_PATH, netprint_id=NETPRINT_ID, netprint_name=NETPRINT_NAME, state=FileState.LATEST) class netprint(object): @staticmethod def list(): return [ create_netprint_item( id=NETPRINT_ID, name=NETPRINT_NAME) ] md5 = hashlib.new('md5') md5.update(NETPRINT_ID) memcache.set(str(user.key()), md5.hexdigest(), namespace=get_namespace()) service = self._getOUT(user) service.netprint = netprint (need_report, _result) = service._make_report() self.assertFalse(need_report) # check no exception is occurred. service.make_report()
def test_modify_name_on_put(self): from netprint import PaperSize from netprintbox.utils import normalize_name result = [] class client(object): @staticmethod def send(file_obj, file_name=None, color=None, paper_size=None): result.append((file_obj, file_name, color, paper_size)) fake = StringIO('fake') fake.name = '/A4/foo.doc' service = self._getOUT(None, None) service.client = client service.put(fake, PaperSize.A4) file_obj = result[0][0] file_name = result[0][1] self.assertEqual(file_obj.read(), 'fake') self.assertEqual(file_name, normalize_name(fake.name, ext=True))
def as_netprint_name(self, with_extension=False): return normalize_name(self.path, ext=with_extension)
def test_replace(self): from netprintbox.utils import normalize_name for target_char in u'/(「<>&”’」)': self.assertEqual(u'A4_foo_', normalize_name(u'/A4/foo' + target_char + '.doc'))
def test_ext(self): from netprintbox.utils import normalize_name self.assertEqual(u'A4_foo_.doc', normalize_name(u'/A4/foo「.doc', ext=True))
def test_make_report(self): from google.appengine.api import memcache from netprintbox.settings import DATETIME_FORMAT, REPORT_PATH from netprintbox.data import FileState from netprintbox.utils import normalize_name user = create_user() f1_path = '/need_netprint_id.data' f1 = create_file_info(user, path=f1_path, netprint_name=normalize_name(f1_path), state=FileState.NEED_NETPRINT_ID) f2_path = '/lost_by_something.data' f2 = create_file_info(user, path=f2_path, netprint_name=normalize_name(f2_path), state=FileState.LATEST) f3_path = '/latest.data' f3 = create_file_info(user, path=f3_path, netprint_id='latest', netprint_name=normalize_name(f3_path), state=FileState.LATEST) request = testing.DummyRequest() self.setUpPyramid(request=request) class netprint(object): @staticmethod def list(): return [ create_netprint_item( id='uncontrolled', name='uncontrolled'), create_netprint_item( id='latest', name=normalize_name('/latest.data')), ] put_result = [] class dropbox(object): @staticmethod def put(path, file_obj): put_result.append((path, file_obj)) service = self._getOUT(user) service.netprint = netprint service.dropbox = dropbox (need_report, result) = service._make_report() self.assertTrue(need_report) self.assertItemsEqual( [(item['id'], item['name'], item.get('controlled', False), item['last_modified']) for item in result], [('FAKE:WAIT', f1.as_netprint_name(), True, f1.local_last_modified.strftime(DATETIME_FORMAT)), ('FAKE:ERROR', f2.as_netprint_name(), True, f2.local_last_modified.strftime(DATETIME_FORMAT)), ('uncontrolled', 'uncontrolled', False, None), ('latest', f3.as_netprint_name(), True, f3.local_last_modified.strftime(DATETIME_FORMAT)), ]) # flush side-effect of above. memcache.flush_all() service.make_report() self.assertEqual(len(put_result), 1) self.assertEqual(put_result[0][0], REPORT_PATH) report_data = put_result[0][1].read() if False: with open('report.html', 'wb') as f: f.write(report_data) self.assertRegexpMatches(report_data, 'latest') self.assertRegexpMatches(report_data, 'uncontrolled')
def __collect_entries(data): if not data['is_dir'] and not data.get('is_deleted', False): result[normalize_name(data['path'])] = data