Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,16 @@ pyvenv.cfg
/.pytest_cache/
lib64
tcl


__pycache__



# test files that should not be ignored
!/tests/typecode/data/contenttype/compiled/java/*
!/tests/typecode/data/contenttype/compiled/python/*
!/tests/typecode/data/contenttype/compiled/flash/*
!/tests/typecode/data/contenttype/compiled/linux/*
!/tests/typecode/data/contenttype/compiled/win/*
!/tests/typecode/data/contenttype/package/*
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ norecursedirs = [
"Scripts",
"thirdparty",
"tmp",
"tests/data",
"tests/typecode/data",
".eggs"
]

Expand Down
63 changes: 59 additions & 4 deletions src/typecode/contenttype.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
from __future__ import absolute_import
from __future__ import print_function

from collections import OrderedDict
import contextlib
import io
import os
Expand Down Expand Up @@ -57,7 +58,6 @@
from typecode.pygments_lexers import get_lexer_for_filename
from typecode.pygments_lexers import guess_lexer


"""
Utilities to detect and report the type of a file or path based on its name,
extension and mostly its content.
Expand All @@ -82,15 +82,13 @@ def logger_debug(*args):
def logger_debug(*args):
return logger.debug(' '.join(isinstance(a, string_types) and a or repr(a) for a in args))


data_dir = os.path.join(os.path.dirname(__file__), 'data')

# Python mimetypes path setup using Apache mimetypes DB
os.environ['XDG_DATA_DIRS'] = os.path.join(data_dir, 'apache')
os.environ['XDG_DATA_HOME'] = os.environ['XDG_DATA_DIRS']
APACHE_MIME_TYPES = os.path.join(data_dir, 'apache', 'mime.types')


# Ensure that all dates are UTC, especially for fine free file.
os.environ['TZ'] = 'UTC'

Expand All @@ -108,7 +106,6 @@ def as_bytes(items):
ELF_UNKNOWN = 'unknown'
elf_types = (ELF_EXE, ELF_SHARED, ELF_RELOC,)


# TODO:
# http://svn.zope.org/z3c.mimetype/trunk/?pathrev=103648
# http://svn.zope.org/z3c.sharedmimeinfo/trunk/TODO.txt?revision=103668&view=markup
Expand Down Expand Up @@ -172,6 +169,55 @@ class Type(object):
'_contains_text',
)

# FIXME: we should use an introspectable attrs class instead
# ATTENTION: keep this in sync with sloats and properties
text_attributes = [
'filetype_file',
'mimetype_file',
'mimetype_python',
'filetype_pygment',
'elf_type',
'programming_language',
]

exportable_attributes = text_attributes + [
'is_file',
'is_dir',
'is_regular',
'is_special',
'date',
'is_link',
'is_broken_link',
'link_target',
'size',
'is_pdf_with_text',
'is_text',
'is_text_with_long_lines',
'is_compact_js',
'is_js_map',
'is_binary',
'is_data',
'is_archive',
'contains_text',
'is_compressed',
'is_c_source',
'is_c_source',
'is_elf',
'is_elf',
'is_filesystem',
'is_java_class',
'is_java_source',
'is_media',
'is_media_with_meta',
'is_office_doc',
'is_package',
'is_pdf',
'is_script',
'is_source',
'is_stripped_elf',
'is_winexe',
]

def __init__(self, location):
if (not location
or (not os.path.exists(location)
Expand Down Expand Up @@ -215,6 +261,15 @@ def __repr__(self):
% (self.filetype_file, self.mimetype_file,
self.filetype_pygment, self.mimetype_python))

def to_dict(self, include_date=True):
"""
Return a mapping of attributes.
"""
nv = ((n, getattr(self, n)) for n in self.exportable_attributes)
if not include_date:
nv = ((n,v) for n,v in nv if n != 'date')
return OrderedDict(nv)

@property
def size(self):
"""
Expand Down
Binary file added tests/typecode/data/extractible/crashing-squashfs
Binary file not shown.
Binary file added tests/typecode/data/extractible/sqfs-gz.sqs
Binary file not shown.
Binary file added tests/typecode/data/extractible/sqfs-lzo.sqs
Binary file not shown.
Binary file added tests/typecode/data/extractible/sqfs-xz.sqs
Binary file not shown.
Binary file added tests/typecode/data/filetest/archive/a.tar.gz
Binary file not shown.
10 changes: 10 additions & 0 deletions tests/typecode/data/filetest/archive/a.tar.gz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
filetype_file: gzip compressed data
mimetype_file: application/gzip
mimetype_python: application/x-tar
is_file: yes
is_regular: yes
size: 225
is_binary: yes
is_archive: yes
is_compressed: yes
is_media_with_meta: yes
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/dbase.fdt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 183
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Binary file added tests/typecode/data/filetest/archive/e.tar
Binary file not shown.
Binary file added tests/typecode/data/filetest/archive/e.tar.bz2
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/e.tar.bz2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: bzip2 compressed data, block size = 900k
mimetype_file: application/x-bzip2
is_file: yes
is_regular: yes
size: 216
is_binary: yes
is_archive: yes
is_compressed: yes
is_media_with_meta: yes
Binary file added tests/typecode/data/filetest/archive/e.tar.gz
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/e.tar.gz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: gzip compressed data
mimetype_file: application/gzip
is_file: yes
is_regular: yes
size: 217
is_binary: yes
is_archive: yes
is_compressed: yes
is_media_with_meta: yes
10 changes: 10 additions & 0 deletions tests/typecode/data/filetest/archive/e.tar.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
filetype_file: POSIX tar archive (GNU)
mimetype_file: application/x-tar
is_file: yes
is_regular: yes
size: 10240
is_binary: yes
is_data: yes
is_archive: yes
contains_text: yes
is_media_with_meta: yes
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/file_4.26-1.diff.gz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: gzip compressed data
mimetype_file: application/gzip
is_file: yes
is_regular: yes
size: 42754
is_binary: yes
is_archive: yes
is_compressed: yes
is_media_with_meta: yes
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/posixnotgnu.tar.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: POSIX tar archive
mimetype_file: application/x-tar
is_file: yes
is_regular: yes
size: 35328
is_binary: yes
is_archive: yes
contains_text: yes
is_media_with_meta: yes
Binary file added tests/typecode/data/filetest/archive/test.tar.lzma
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/test.tar.lzma.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: LZMA compressed data, streamed
mimetype_file: application/x-lzma
is_file: yes
is_regular: yes
size: '198'
is_binary: yes
is_archive: yes
is_compressed: yes
is_media_with_meta: yes
Binary file added tests/typecode/data/filetest/archive/test.tar.xz
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/test.tar.xz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: XZ compressed data
mimetype_file: application/x-xz
is_file: yes
is_regular: yes
size: 2916
is_binary: yes
is_archive: yes
is_compressed: yes
is_media_with_meta: yes
Binary file added tests/typecode/data/filetest/archive/test.zip
Binary file not shown.
10 changes: 10 additions & 0 deletions tests/typecode/data/filetest/archive/test.zip.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
filetype_file: Zip archive data, at least v1.0 to extract
mimetype_file: application/zip
is_file: yes
is_regular: yes
size: 177
is_binary: yes
is_archive: yes
is_compressed: yes
is_media_with_meta: yes
is_package: yes
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/archive/win-archive.lib.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: current ar archive
mimetype_file: application/x-archive
is_file: yes
is_regular: yes
size: 8845
is_binary: yes
is_archive: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 1000
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/binary/data.fdt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 183
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Binary file added tests/typecode/data/filetest/binary/dbase.fdt
Binary file not shown.
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/binary/dbase.fdt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 183
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
filetype_file: Java serialization data, version 5
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 299
is_binary: yes
contains_text: yes
is_media_with_meta: yes
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/binary/pixelstream.rgb.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: data
mimetype_file: application/octet-stream
is_file: yes
is_regular: yes
size: 129600
is_binary: yes
is_data: yes
contains_text: yes
is_media_with_meta: yes
9 changes: 9 additions & 0 deletions tests/typecode/data/filetest/binary/windows.dll.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
filetype_file: PE32+ executable (DLL) x86-64, for MS Windows
mimetype_file: application/x-dosexec
is_file: yes
is_regular: yes
size: 3394
is_binary: yes
contains_text: yes
is_media_with_meta: yes
is_winexe: yes
8 changes: 8 additions & 0 deletions tests/typecode/data/filetest/build/Makefile.inc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
filetype_file: makefile script, ASCII text, with CRLF line terminators
mimetype_file: text/x-makefile
is_file: yes
is_regular: yes
size: 2888
is_text: yes
contains_text: yes
is_media_with_meta: yes
Loading